我正在尝试对某些文件夹进行审核。我需要获得输入文件中列出的每个文件夹的NTFS权限。我有一个带有文件夹路径的folderlist.txt。
这是我的脚本:
$InputFile = "C:\Folderlist.txt"
$OutputFile = "C:\FolderPermissions.csv"
$FolderList = Get-Content $InputFile
ForEach ($Folder in $FolderList)
{
$Permissions = (Get-ACL $Folder).access | ForEach-Object {$_ |
Add-Member -MemberType NoteProperty -Name Folder -Value $Folder}
$Report += $Permissions
}
$Report | Select-Object Folder,IdentityReference,FileSystemRights,IsInherited |
Where {$_.Folder -ne $Null -and $_.IdentityReference -like "HARRAHS*" -and $_.IsInherited -ne "TRUE"} |
Export-CSV $OutputFile -NoTypeInformation
但它没有给出任何输出。我是powershell noob,有人可以指导我并告诉我我做错了什么? 我需要的输出基本上是文件夹的名称,组和具有权限的用户。 E.g:
Folder Path IdentityReference AccessControlType
C:\Folder1\ DOMAIN\User1 Read
C:\Folder1\ DOMAIN\Group1 Write
C:\Folder2\ DOMAIN\User2 Modify
C:\Folder2\ DOMAIN\Group2 Full
非常感谢任何帮助。非常感谢。
答案 0 :(得分:1)
这是你的罪魁祸首:
$Permissions = (Get-ACL $Folder).access | ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name Folder -Value $Folder
}
将ACE管道传输到一个循环中,向每个循环添加一个属性。但是,| Add-Member
构造不会输出修改后的对象,因此没有任何内容可以分配给$Permissions
。
可以通过在; $_
语句后添加Add-Member
来修复此问题,以便将对象重新注入管道:
$Permissions = (Get-ACL $Folder).access | ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name Folder -Value $Folder; $_
}
然而,我会建议采用略有不同的方法。由于您以后无论如何都要过滤对象属性,因此您可以直接将ACE封装到Select-Object
cmdlet中,并使用calculated property添加路径:
Get-Content $InputFile | % {
$Folder = $_
(Get-Acl $Folder).Access |
Select-Object @{n='Folder';e={$Folder}}, IdentityReference,
FileSystemRights, IsInherited
} | ? {
$_.Folder -ne $null -and
$_.IdentityReference -like "HARRAHS*" -and
$_.IsInherited -ne 'True'
} | Export-CSV $OutputFile -NoTypeInformation