Передача строки в параметре фильтра Get-ADUser вызывает ошибку – свойство не найдено в pscustomobject

Я пытаюсь создать нового пользователя Active Directory, но сначала я проверяю, что пользователь уже не существует с Get-ADUser . Я импортирую данные пользователя из нашего отдела HR и создаю пользовательские свойства:

 $newUsers = Import-Csv $csvFile | Select-Object -Property @{n='EmpNum';e={$_.'Employee Number'}}, @{n='UPN';e={$_.'Email Address'}}, @{n='Alias';e={$_.'Email Address'.Split("@")[0]}} #### etc 

Когда я просматриваю объекты из файла CSV, я использую свойство UPN для поиска пользователя в Active Directory:

 foreach ($newUser in $newUsers) { $exists = Get-ADUser -Filter {UserPrincipalName -eq $newUser.UPN} -Properties * -Server $adServer -Credential $adCred ... } 

Фильтр вызывает ошибку:

 Get-ADUser : Property: 'UPN' not found in object of type: 'System.Management.Automation.PSCustomObject'. At C:\Users\bphillips.NEWHOPEOFIN\Dropbox\Powershell\NewHire\AddNewDSP.ps1:50 char:15 + $exists = Get-ADUser -Filter {UserPrincipalName -eq $newUser.UPN} -Propertie ... 

Я пробовал сделать это: -Filter {UserPrincipalName -eq $ (“$ newUser.UPN”), но это не помогает; Я получаю еще одну ошибку

 Get-ADUser : Cannot process argument because the value of argument "path" is not valid. Change the value of the "path" argument and run the operation again. At C:\Users\bphillips.NEWHOPEOFIN\Dropbox\Powershell\NewHire\AddNewDSP.ps1:50 char:15 + $exists = Get-ADUser -Filter {UserPrincipalName -eq $("$newUser.UPN")} -Prop ... 

$newUser – это строка, поэтому я не понимаю, почему она вызывает проблему. Жесткое кодирование UserPrincipalName похоже, «[email protected]» работает, но $newUser.UPN не будет работать. **

 PS C:\> $newUser.UPN.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object 

а также

 PS C:\> $newUser.UPN | gm TypeName: System.String 

$newUser.UPN содержит допустимое строковое значение

 PS C:\> $newUser.UPN [email protected] 

Что мне нужно сделать, чтобы получить $newUser.UPN для распознавания в качестве строки для параметра фильтра? Что происходит, я не понимаю?

    BNF для строк запроса фильтра не позволяет выражениям как второму операнду в сравнении, только значения (акцент мой):

    Синтаксис:
    Следующий синтаксис использует форму Backus-Naur, чтобы показать, как использовать язык выражения PowerShell для этого параметра.

    :: = “{” “}”
    :: = | |
    :: = <значение> | “(” “)”
    :: = “-eq” | “-le” | “-ge” | “-ne” | “-lt” | “-gt” | “-approx” | “-bor” | “-band” | “-recursivematch” | “-подобный” | “-не как”
    :: = “-and” | “-или”
    :: = “-not”
    :: = |
    <значение> :: = <сравнить это значение с с помощью указанного >

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

     $upn = $newUser.UPN $exists = Get-ADUser -Filter "UserPrincipalName -eq '$upn'" ... 

    Выражения могут быть внутри блока фильтров Get-ADUser но они должны быть надлежащим образом завернуты кавычками.

     Get-ADUser -Filter "UserPrincipalName -eq '$($newUser.UPN)'" 
    • Никогда не используйте блок сценария ( { ... } ) в качестве аргумента -Filter-Filter параметра -Filter[string]создайте свой фильтр как строку .

      • Ответ BenH показывает, как это сделать.
    • Хотя, казалось бы, удобно, использование блока сценариев работает только в очень ограниченных сценариях и вызывает путаницу, когда оно не работает – например, при использовании доступа к ресурсам , как в этом случае.

    Для получения дополнительной информации см. Этот ответ .

    Interesting Posts

    font-face с неправильным типом MIME в Chrome

    Как получить подробную информацию о контакте в Android

    Изменение размера ImageView для соответствия формату

    Преобразование внешнего жесткого диска в NTFS

    Выполнение аутентификации пользователей в Java EE / JSF с помощью j_security_check

    Предупреждение как ошибка – как избавиться от этих

    Вызов pthread_cond_signal без блокировки мьютекса

    Safari / Chrome (Webkit) – Не удается скрыть вертикальную полосу прокрутки iframe

    Как преобразовать String в Date без знания формата?

    Виртуальная машина хранится почти полностью, но Windows C диск говорит 29 ГБ бесплатно

    Помогите мне создать строку соединения jTDS

    Какие браузеры включают расширенные настройки конфиденциальности?

    Настройка CNTLM для прокси-сервера, требующего базовой аутентификации

    Могу ли я хранить файлы изображений в firebase с помощью Java API

    Linux mint продолжает сбой с официальными драйверами nvidia

    Давайте будем гением компьютера.