需要用于检查AD用户是否在String中

时间:2017-03-21 10:54:25

标签: powershell active-directory

我有一个包含域名所有用户的字符串,另一个包含文件夹权限(组/用户)。

我需要帮助我的代码中的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

如果我没弄错的话,他们都应该是名单。

1 个答案:

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