Get-ADuser -server xxyy -filter {} не работает в цикле For - PullRequest
0 голосов
/ 01 марта 2020

Прошло некоторое время с тех пор, как я написал, но я столкнулся с проблемой, которая раздражает:

У меня есть необходимость просканировать все домены компаний на наличие учетных записей пользователей на основе полного имени, как есть. ПЕРВАЯ ПОСЛЕДНЯЯ

Тот же код отлично работает при запуске get-aduser -identity -server domain.name, но использование

Get-aduser -filter -server не работает внутри For l oop, и я не уверен почему!

Вот код:

$AllDomains = (Get-ADForest).domains

Function Check-ADUser {
    Param(
    $FullName,    
    $ADList
    )

    $ADUserArray = @()

    ForEach ($SubDomain in $ADList) {

        write-host "Checking for $FullName on $SubDomain ..."

        $UserADDomain = Get-ADUser -Server $SubDomain -Filter {(Name -eq $Fullname)} -properties *  -ErrorAction SilentlyContinue | Select @{n="DomainName"; e={($_.CanonicalName -split '/')[0]}} `
        | Select-Object DomainName -ExpandProperty DomainName        

    } #ForEach $Domain

Результаты возвращают черный

Вот код, который отлично работает:

$AllDomains = (Get-ADForest).domains

Function Check-ADUser {
    Param(
    $FullName,    
    $ADList
    )

    $ADUserArray = @()

    ForEach ($SubDomain in $ADList) {

        write-host "Checking for $FullName on $SubDomain ..."

        $UserADDomain = Get-ADUser -Server $SubDomain -Identity $userName -properties *  -ErrorAction SilentlyContinue | Select @{n="DomainName"; e={($_.CanonicalName -split '/')[0]}} `
        | Select-Object DomainName -ExpandProperty DomainName        

    } #ForEach $Domain

Функция вызывается через a для l oop для каждого пользователя как такового.

$Users = @"
Rocky Balboa
Bruce Willis
Gene Simmons
Liz Phair
Steven Segal
"@ | ForEach {$_.Split([String[]]"`r`n",[StringSplitOPtions]::None)}

$outarray = @()

ForEach ($user in $Users) {        

    $aa = Check-ADUser -FullName $User -ADList $AllDomains

}

Единственная реальная разница в коде внутри функции - использование вместо этого -filter of -identity в командлете get-aduser

Что странно, если я запускаю код за пределами для l oop, это работает! Я думаю, что это Гатча Powershell! любая помощь приветствуется: -)

Оуэн

1 Ответ

1 голос
/ 01 марта 2020

Используйте оператор фильтра следующим образом:

Если вы заинтересованы в производительности, ограничьте свойства canonicalName вместо *.

После прочтения последней части документов, я думаю, что удаление () в фигурных скобках также должна решить вашу проблему.

$UserADDomain = Get-ADUser -Server $SubDomain -Filter "Name -eq '$Fullname'" -properties *  -ErrorAction SilentlyContinue | Select @{n="DomainName"; e={($_.CanonicalName -split '/')[0]}}

if ($null -ne $UserADDomain) {
  return $UserADDomain
}

См. документы Microsoft по фильтру

Выдержка:

Примечание. Для параметра типа String PowerShell будет преобразовывать запрос фильтра в строку во время обработки команды. При использовании строковой переменной в качестве значения в компоненте фильтра убедитесь, что он соответствует правилам цитирования PowerShell. Например, если выражение фильтра заключено в двойные кавычки, переменная должна быть заключена в одинарные кавычки: Get-ADUser -Filter "Name-like '$ UserName'". Напротив, если для включения фильтра используются фигурные скобки, переменная вообще не должна заключаться в кавычки: Get-ADUser -Filter "Name-like '$ UserName'".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...