Powershell Where-Object和DN排除

时间:2016-04-18 15:43:00

标签: powershell

我尝试在排除特定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

1 个答案:

答案 0 :(得分:0)

我对你的分裂的正则表达部分有些错误。我仍然是正确的,因为字符串支持正则表达式。该查询将拆分为CN =,OU =和DN =。

但是,您已将calculated property syntax放入where-object子句中。它没有错误,因为它是有效的散列表和哈希表支持likenotlike。计算属性用于Format-TableSelect-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}