PS - 获取所有具有权限的 SMB 共享
PS - Get All SMB shares with permissions
我正在尝试获取我的 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
}
它只导出最后一个用户。
当您将散列数组传递给 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
我正在尝试获取我的 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
}
它只导出最后一个用户。
当您将散列数组传递给 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