文件夹\子文件夹的文件夹权限详细信息

时间:2018-10-17 11:53:36

标签: windows powershell permissions directory

我要提取一个文件夹及其子文件夹的权限详细信息。

我的服务器是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"

1 个答案:

答案 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