set-aduser , одновременно обновить несколько переменных extensionattribute и другие атрибуты в сценарии powershell

Итак, у меня есть базовый скрипт, который работает, когда значения жестко закодированы. Мне нужна помощь, чтобы заставить его работать, когда значения являются динамическими из файла:

Вот основной скрипт:

 set-ADUser -Identity test.hsi -replace @{extensionAttribute4="LoadedFromInterface";extensionAttribute5="2";extensionAttribute6="2"} -Manager jim.james

Что я хочу сделать, так это прочитать из файла с помощью Import-CSV, загрузить важные столбцы в переменные, проверить нулевое/пустое условие, а затем переустановить переменные, если они были нулевыми. В конечном итоге делаем то же самое, что и выше, но с переменными, загруженными из файла. extensionAttribute5 и extensionAttribute6 будут значениями из файла (иногда нулевыми), а менеджер также будет переменной, назначенной из файла.

Import-CSV C:\Users\user1\Documents\WTKtoAD\WTKtoAD.csv | %{$SAM = $_.SamAccountName;If ($_.PhoneTypeMobile -eq $Null) {$PhoneMobile = "NotProvided"} Else {$PhoneMobile = $_.PhoneTypeMobile};If ($_.PhoneTypeHome -eq $Null) {$PhoneHome = "NotProvided"} Else {$PhoneHome = $_.PhoneTypeHome}} | set-ADUser -Identity $SAM -Add @{extensionAttribute4="LoadedFromKronos";extensionAttribute5=$PhoneHome;extensionAttribute6=$PhoneMobile} -Manager $_.Manager

Когда я запускаю сценарий, я получаю следующую ошибку в Powershell ISE (x86) «Запуск от имени администратора».

PS C:\Users\user1>     Import-CSV C:\Users\user1\Documents\WTKtoAD\WTKtoAD.csv | %{$SAM = $_.SamAccountName;If ($_.PhoneTypeMobile -eq $Null) {$PhoneMobile = "NotProvided"} Else {$PhoneMobile = $_.PhoneTypeMobile};If ($_.PhoneTypeHome -eq $Null) {$PhoneHome = "NotProvided"} Else {$PhoneHome = $_.PhoneTypeHome}} | set-ADUser -Identity $SAM -Add @{extensionAttribute4="LoadedFromKronos";extensionAttribute5=$PhoneHome;extensionAttribute6=$PhoneMobile} -Manager $_.Manager
Set-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the command again.
At line:1 char:318
+ ... User -Identity $SAM -Add @{extensionAttribute4="LoadedFromKronos";extensionAttri ...
+                    ~~~~
    + CategoryInfo          : InvalidData: (:) [Set-ADUser], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser

Файл выглядит так:

> SamAccountName,PhoneTypeMobile,PhoneTypeHome,Manager
> test.hsi,333-234-3433,'',bob.henst

person bmickey    schedule 15.08.2018    source источник


Ответы (1)


Причина ошибки в том, что вы поместили Set-ADUser в неправильное место (ПОСЛЕ ForEach-Object).

Вы вряд ли сможете сказать это по своему коду, потому что вы помещаете все в одну строку, что делает его очень трудным для чтения. Мой совет — дать ему немного проветривания. Таким образом, ошибки гораздо легче заметить.

Что касается кода. Я не проверял, потому что сейчас у меня нет AD, но я думаю, что это будет работать лучше:

# this is the content of the WTKtoAD.csv file

# SamAccountName,PhoneTypeMobile,PhoneTypeHome,Manager
# test.hsi,333-234-3433,'',bob.henst

Import-CSV C:\Users\user1\Documents\WTKtoAD\WTKtoAD.csv | 
    ForEach-Object { 
        $SAM = $_.SamAccountName
        if ([string]::IsNullOrEmpty($_.PhoneTypeMobile)) { $PhoneMobile = "NotProvided" } else { $PhoneMobile = $_.PhoneTypeMobile }
        if ([string]::IsNullOrEmpty($_.PhoneTypeHome))   { $PhoneHome = "NotProvided" } else { $PhoneHome = $_.PhoneTypeHome }
        if ([string]::IsNullOrEmpty($_.Manager))         { $Manager = $null } else { $Manager = $_.Manager }

        $props = @{
            extensionAttribute4 = "LoadedFromKronos"
            extensionAttribute5 = $PhoneHome
            extensionAttribute6 = $PhoneMobile
        }
        Set-ADUser -Identity $SAM -Replace $props -Manager $Manager
    } 

Как видите, я также провел небольшой тест для Manager. Если в CSV это пустая строка, теперь будет очищено свойство менеджера для пользователя.

person Theo    schedule 16.08.2018