我正在尝试通过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
有人可以帮我理解这里发生了什么吗?
谢谢!
答案 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分享充满腐败! 文件名恰好是带空格的文件名。 好消息!