我要提取一个文件夹及其子文件夹的权限详细信息。
我的服务器是Windows 2008,我使用Windows PowerShell脚本,但出现以下错误。
Get-ChildItem : A parameter cannot be found that matches parameter name 'Directory'. At line:1 char:5 + dir -Directory -Path "H:\RMSRE7\RMS1" -Recurse -Force + ~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
PowerShell脚本:
$FolderPath = dir -Directory -Path "\\H:\RMSRE7" -Recurse -Force
$Report = @()
foreach ($Folder in $FolderPath) {
$Acl = Get-Acl -Path $Folder.FullName
foreach ($Access in $acl.Access) {
$Properties = [ordered]@{
'FolderName' = $Folder.FullName;
'AD Group or User' = $Access.IdentityReference;
'Permissions' = $Access.FileSystemRights;
'Inherited' = $Access.IsInherited
}
$Report += New-Object -TypeName PSObject -Property $Properties
}
}
$Report | Export-Csv -Path "D:\Public\RE7_FolderPermissions.csv"
答案 0 :(得分:1)
在PowerShell v2(您似乎正在使用的版本)中,Get-ChildItem
cmdlet没有参数-Directory
。这是在PowerShell v3中引入的。
如果要将Get-ChildItem
的结果限制为目录,则需要在PowerShell v3之前使用Where-Object
过滤器,例如:
$FolderPath = Get-ChildItem -Path "\\H:\RMSRE7" -Recurse -Force |
Where-Object { $_.PSIsContainer }
在PowerShell v3之前,[ordered]
类型的加速器也不可用,因此您需要从代码中将其删除。
$Properties = [ordered]@{
'FolderName' = $Folder.FullName;
'AD Group or User' = $Access.IdentityReference;
'Permissions' = $Access.FileSystemRights;
'Inherited' = $Access.IsInherited
}
如果要确保输出CSV中字段的特定顺序,可以在导出之前通过Select-Object
传递数据。而且,您可能希望将参数-NoType
添加到Export-Csv
以避免在输出文件的开头添加对象类型注释。
$Report |
Select-Object FolderName, 'AD Group or User', Permissions, Inherited |
Export-Csv -Path "D:\Public\RE7_FolderPermissions.csv" -NoType