我尝试在排除特定OU时查询用户列表。这也是使用Quest的AD-snap-in for Get-QADUser。我有这个:
$ExcludedOU = "Service Accounts"
$inactiveUsers = Get-QADUser -SizeLimit 3 -SearchRoot $sourceOu -NotLoggedOnFor $InactiveFor -Enabled | Where-Object {$_.description -notlike $DescriptionPrefix -and @{n="ParentContainerDN";e={($_.ParentContainerDN -split ",*..=")[0]}} -notlike $ExcludedOU }
目标是排除父OU为“服务帐户”的所有用户。 ParentContainerDN看起来像OU=Service Accounts,OU=Our Users,DC=DOMAINNAME,DC=ORG
此查询不会出错,但也不会排除。这是我可能没有正确语法的部分吗?
@{n="ParentContainerDN";e={($_.ParentContainerDN -split ",*..=")[0]}} -notlike $ExcludedOU
答案 0 :(得分:0)
我对你的分裂的正则表达部分有些错误。我仍然是正确的,因为字符串支持正则表达式。该查询将拆分为CN =,OU =和DN =。
但是,您已将calculated property syntax放入where-object
子句中。它没有错误,因为它是有效的散列表和哈希表支持like
和notlike
。计算属性用于Format-Table
和Select-Object
之类的东西,然后您可以在其他管道中引用这些“新”属性。
$inactiveUsers = Get-QADUser -SizeLimit 3 -SearchRoot $sourceOu -NotLoggedOnFor $InactiveFor -Enabled |
Select-Obejct Name,SamAccountName,Description,@{n="ParentContainerDN";e={($_.ParentContainerDN -split ",*..=")[0]}} |
Where-Object {$_.description -notlike $DescriptionPrefix -and $_.ParentContainerDN -notlike $ExcludedOU }
以上语法也是在code you linked to on Social Technet
中完成的我无法为我的生命做出这样的回报。这将评估为true,这可能是您的查询未按预期工作的原因。这是有效的PowerShell,使用起来不正确。
@{n="ParentContainerDN";e={$_.WhatEver}} -notlike "string"
然而,与Kai Zhao mentioned in comments类似,这并没有真正有效地使用,您可以在没有计算属性的情况下获得相同的结果。
$inactiveUsers = Get-QADUser -SizeLimit 3 -SearchRoot $sourceOu -NotLoggedOnFor $InactiveFor -Enabled |
Where-Object {$_.description -notlike $DescriptionPrefix -and ($_.ParentContainerDN -split ",*..=")[1] -notlike $ExcludedOU}