Причина вашей ошибки в том, что $user
не имеет назначения. Вы пытаетесь присвоить $user
значение свойства, которое не существует. Заголовок user
, очевидно, не существует в вашем файле CSV. Ниже описано, как преобразовать CSV в объекты PowerShell и получить доступ к их свойствам.
# Sample CSV TitleTest.csv
UserPrincipalName,Title
covid19@domain.com,Usurper
jsmith@domain.com,CEO
bossman@domain.com,CFO
Import-Csv -Path c:\scripts\TitleTest.csv | Foreach-Object {
$user = $_.UserPrincipalName
$title = $_.Title
Get-ADUser -Filter 'UserPrincipalName -eq $user' | Set-ADUser -Title $title
}
Объяснение:
При использовании Import-Csv в соответствующем CSV-файле, первая строка данных с разделителями будет преобразована в свойства всех входных объектов. Все последующие строки будут преобразованы в отдельные объекты со свойствами заголовка и выведены в виде коллекции (массива) этих объектов. Если используется параметр -Header
, то значения, переданные в параметр, станут свойствами объектов. Важно иметь одинаковое количество элементов с разделителями в каждой строке, чтобы обеспечить правильное сопоставление.
Когда вы имеете дело с объектами, вы можете получить доступ к значениям их свойств с помощью оператора доступа к элементу .
. Синтаксис object.property
. Так как у вас есть заголовки UserPrincipalName
и Title
, вам нужно будет использовать $_.UserPrincipalName
и $_.Title
для доступа к связанным значениям.
$_
- текущий объект конвейера в вашем Foreach-Object {}
блок сценария.
Обратите внимание, что вам технически не нужно определять $user
и $title
здесь. Вы можете просто получить доступ к свойствам непосредственно из текущего объекта:
Import-Csv -Path c:\scripts\TitleTest.csv | Foreach-Object {
Get-ADUser -Filter "UserPrincipalName -eq '$($_.UserPrincipalName)'" |
Set-ADUser -Title $_.Title
}