Powershell Get-Acl在带有空格的UNC路径上

时间:2017-12-14 23:27:37

标签: powershell acl unc

我正在尝试通过update cmdlet检查UNC路径上的ACL。

以下在浏览本地文件系统或没有空格的UNC路径时工作正常。

Get-Acl

在带有空格的UNC路径上,我得到一个" FileNotFoundException":

  

Get-Acl:\ local501 \ dfsroot \ docs \ Accounting \ Bankruptcy Files \ NOTICE TO MEMBERSHIP RE-CHAPTER 11.pdf
     在C:\ Users \ administrator.LOCAL501 \ Documents \ IT支持人员 - (855)4 IT GUYS \ Files \ find_paths_by_principle.ps1:11 char:18
     +($ path | Get-Acl).Access.IdentityReference | %{if($ _。Valu ...
     + ~~~~~~~
         + CategoryInfo:未指定:(:) [Get-Acl],FileNotFoundException
         + FullyQualifiedErrorId:System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.GetAclCommand

有人可以帮我理解这里发生了什么吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

所以你的代码有点不必要的复杂。这是一个更容易理解流程的脚本,不应该在空格上出错:

If (-not (Test-Path -Path DFS:\))
{ New-PSDrive -Name DFS -PSProvider FileSystem -Root \\mydomain\dfsroot }

$OU         = 'OU=Security Groups,DC=mydomain,DC=local'
$Filter     = '*501*'
$Principles = (Get-ADGroup -SearchBase $OU -Filter {Name -like $Filter}).samAccountName
$Collection = @()

ForEach ($Path in (Get-ChildItem -Path DFS:\ -Recurse -ErrorVariable +CustomERR))
{
    ## Using an array literal so items don't end up appended to one giant hashtable
    $Collection += @(
        @{ Path = $Path.FullName
           Acl  = (Get-Acl -Path $Path.FullName).Access.IdentityReference.Value
         }
    )
}

ForEach ($Principle in $Principles)
{
    ForEach ($Item in $Collection)
    {
        If ($Item.Acl -contains $Principle)
        {
            Write-Host "'$Principle' has rights to '$($Item.Path)'"
        }
    }
}

编辑:做了一些优化

答案 1 :(得分:0)

忽略这个! 我的DFS分享充满腐败! 文件名恰好是带空格的文件名。 好消息!