2016-04-18 3 views
0

Я пытаюсь запросить список пользователей, исключая конкретное подразделение. Это также использует оснастку AD Quest для Get-QADUser. У меня есть следующее:Powershell Where-Object and DN exclusions

$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 } 

Цель состоит в том, чтобы исключить всех пользователей, где родительское подразделение - это «Учетные записи службы». ParentContainerDN выглядит как OU=Service Accounts,OU=Our Users,DC=DOMAINNAME,DC=ORG

Этот запрос не является ошибкой, но это также не исключает. Это часть, на которой я не могу правильно синтаксис?

@{n="ParentContainerDN";e={($_.ParentContainerDN -split ",*..=")[0]}} -notlike $ExcludedOU 
+0

Weird @ Matt, это синтаксис принято решение здесь: https://social.technet.microsoft.com/Forums/windowsserver/en-US/2b0251a7-30cf-4bc5-a3fe-7a1e8605bed0/export-users -from-ad-specific-parameters? forum = winserverDS – Zeno

+0

Возможно, это правда, но оно используется, как я сказал в этом вопросе как часть выбора ... не в самом месте. В том месте, где вы, по-видимому, определяете хеш-таблицу и не используете вычисляемое свойство. Вернитесь назад, чтобы помочь больше. – Matt

+0

Если я правильно прочитал ссылку, вы должны были взять элемент [1] из массива, где объект [0] пуст. –

ответ

0

Я частично ошибался в отношении регулярного выражения вашего раскола. Я все еще верю, что строка поддерживает регулярные выражения. Этот запрос будет разделен на CN =, OU = и DN =.

Однако вы поместили calculated property syntax в статью where-object. Он не выходил из строя, так как он является допустимым hashtable и hashtables support 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

Я не могу сделать это возвращение ложным для жизни меня. Это будет оцениваться как истина, которая может быть причиной того, что ваш запрос работал не так, как ожидалось. Это верно, что 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} 
Смежные вопросы