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

neekobn8  于 2023-10-18  发布在  Shell
关注(0)|答案(2)|浏览(142)

我试图得到所有smb共享我的windows服务器上的所有用户权限对他们的库存检查。
这就是我所拥有的:

$Shares = Get-SmbShare

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

它能让我找到所有的域用户及其共享和访问权限。
但它只显示文件夹的名称。我想它会在服务器上显示完整的路径(不显示)
它将以CSV格式导出。
当我这样做的时候:

$Shares = Get-SmbShare

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

它只导出最后一个用户。

0sgqnhkj

0sgqnhkj1#

当你传递给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
qlzsbp2j

qlzsbp2j2#

我对单个服务器的方法:

$daBears = "SERVERNAMEHERE"
$smbShares = Get-SMBShare -CimSession $daBears 
foreach($Share in $smbShares)
{
    Get-SmbShareAccess -Name $Share.Name -CimSession $daBears 
}

相关问题