PS-获取具有权限的所有SMB共享

我试图让我的 Windows 服务器上的所有 SMB 共享与他们的所有用户权限进行库存检查。

我试图让我的 Windows 服务器上的所有 SMB 共享与他们的所有用户权限进行库存检查。

这是我有什么:

$Shares = Get-SmbShare
foreach($Share in $Shares)
{
    Get-SmbShareAccess -Name $Share.Name | Where-Object {$_.AccountName -Match "DOMAINNAME"} 
}

这让我所有的域用户与他们的份额和他们的访问权限。

但它只显示文件夹的名称。我想它会显示服务器上的完整路径(不是 UNC)

它将以 csv 格式导出。

当我做:

$Shares = Get-SmbShare
foreach($Share in $Shares)
{
    Get-SmbShareAccess -Name $Share.Name | Where-Object {$_.AccountName -Match "PRAGUELOFTS"} | Export-Csv -Path C:\perms.csv
}

它只导出最后一个用户。

1

当您向Select-Object传递以下格式的哈希数组时,您可以非常精确地定义输出列:@{name="xyz"; expr={ calculated value }}

这样,您可以将来自多个源(如“共享”和“共享访问”)的值以及手动计算的值统一为一个自定义结果。

Get-SmbShare | Where-Object Special -eq $false | ForEach-Object {
    $share = $_
    $share | Get-SmbShareAccess | Where-Object AccountName -Match "DOMAINNAME" | Select-Object @(
        @{name="UncPath";   expr={ "\\" + $env:COMPUTERNAME + "\" + $share.Name }}
        @{name="LocalPath"; expr={ $share.Path }}
        @{name="Account";   expr={ $_.AccountName }}
        @{name="Type";      expr={ $_.AccessControlType }}
        @{name="Right";     expr={ $_.AccessRight }}
    )
}

然后,您可以继续将其传递到Export-Csv -Path C:\perms.csv中。

至于你的第二个问题-这个

foreach ($Share in $Shares)
{
    Get-SmbShareAccess -Name $Share.Name | Export-Csv -Path C:\perms.csv
}

只给你 CSV 文件中的最后一个结果,因为它字面上说“对于每个共享,写一个 CSV 文件”。

首先将所有结果收集到一个变量中

$results = foreach ($Share in $Shares) {
    # ...
}

然后创建输出文件

$results | Export-Csv -Path C:\perms.csv

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(516)
替代Firefox的Firebug
上一篇
MSVisio是否支持序列图
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(63条)