我有一个包含域名所有用户的字符串,另一个包含文件夹权限(组/用户)。
我需要帮助我的代码中的if语句,它需要知道域的任何用户是否在有权访问该文件夹的Groups / Users的字符串中。
if ($allusers -like "DOMAIN\*") {
$ws.Cells.Item($row, 3).Interior.ColorIndex = 3
Write-Host "true"
} else {
$ws.Cells.Item($row, 3).Interior.ColorIndex = 0
write-Host "false"
}
字符串示例:
文件夹权限:
DOMAIN\User1 Allow -- Modify, Synchronize DOMAIN\---- Allow -- ReadAndExecute, Synchronize DOMAIN\---- Allow -- Modify, Synchronize DOMAIN\---- Allow -- Modify, Synchronize
用户列表:
User1 User2 User3
用户来自:
$allusers = Get-ADUser -Filter * -SearchBase "dc=DOMAIN,dc=de" | select Samaccountname
权限来自:
$OrdnerAccess = $Folder | Get-Acl | select AccessToString
如果我没弄错的话,他们都应该是名单。
答案 0 :(得分:0)
首先,您需要确保源数据实际上是字符串列表,而不是自定义对象列表:
$allusers = Get-ADUser -Filter * -SearchBase "dc=example,dc=org" |
Select-Object -Expand SamAccountName
$OrdnerAccess = Get-Acl $Folder |
Select-Object -Expand AccessToString
然后你可以从$allusers
构建正则表达式,如下所示:
$re = $allusers -join '|'
或者像这样,如果帐户名称中有特殊字符(我不推荐):
$re = ($allusers | ForEach-Object { [regex]::Escape($_) }) -join '|'
然后你可以像这样检查$OrdnerAccess
:
if ($OrdnerAccess -match $re) {
...
} else {
...
}
请注意,AccessToString
属性将为您提供文件夹的所有访问权限的字符串表示形式作为单个字符串。如果您需要单独评估权限,则需要拆分该字符串:
$OrdnerAccess.Split("`n")