2016-05-16 56 views
0

我不确定我的逻辑关闭的位置?这个脚本背后的想法是查找与禁用的用户帐户关联的所有管理员帐户。我们使用SamAccountName的代码,但管理员帐户以我们的IT管理员的-a,-d,-e结尾。我想,如果我查看了所有禁用的用户并创建了阵列,然后抓取了所有启用的管理员帐户,然后执行了前9个数字匹配的查找,我将列出具有启用的管理员帐户的禁用用户列表。相反,我在两个帐户都禁用了匹配项,只有通过Excel才能看到具有关联的已启用管理员帐户的匹配项。为什么我的方法不按我的意图工作? THXPowershell包含键逻辑失败Get-ADUser

$Users1 = Get-ADUser -Filter {enabled -eq $False} -Properties SamAccountName, name, title, enabled,lastlogondate,accountexpirationdate | select SamAccountName, name, title,enabled,lastlogondate, accountexpirationdate 
$Users2 = Get-ADUser -Filter {samaccountname -like "*-a" -or samaccountname -like "*-d" -or samaccountname -like "*-e" -and enabled -eq $True} -Properties SamAccountName, name, title,enabled, lastlogondate,accountexpirationdate | select SamAccountName, name,enabled, title,lastlogondate, accountexpirationdate 
$output = "C:\scripts\adcleanup\Admin-Accounts-Need-Term_$((Get-Date).ToString('MM-dd-yyyy')).csv" 
$SIDTable = @{} 

$Users1 | ForEach-Object { 

    $SIDTable[$_.SamAccountName] = $_ 
} 

$matching = ForEach ($User in $Users2) { 

    $SID = $User.SamAccountName.Substring(0,8) 

    If ($SIDTable.containskey($SID)) { 

    $SIDTable[$SID] | Select @{Name="SID";Expression={$user.SamAccountName}},SamAccountName,@{Name="Admin Enabled";Expression={$user.enabled}},"Enabled","Name", "Title", "LastLogonDate", "AccountExpirationDate" 

    }} 
    $matching | Export-csv $output -NoTypeInformation 
+0

'$字符串=子串(0,8)'会给你'$的第一** ** 8个字符string'。除非您确定samaccountname是* always * 8或9个字符,否则您宁愿删除最后一个'-a'(或'-d' /'-e'):'$ string.Remove($ string.IndexOf(' - '))' –

+0

我想这就是为什么我很困惑。我知道SamAccountNames的长度总是9个字符,所以我想我会得到正确的列表。就像你说的那样,即使使用indexOf,当一个数组只能禁用而另一个数组仅禁用时,如何在禁用的帐户上获得包含密钥? – MarcGel

回答

1

确保您组中的Filter正确的条款:

-Filter {(samaccountname -like "*-a" -or samaccountname -like "*-d" -or samaccountname -like "*-e") -and enabled -eq $True} 
+0

感谢Mathias。现在它正在工作。 – MarcGel