2017-01-26 2 views
0

Я пытаюсь написать сценарий, который будет импортировать файл csv и обновить набор пользовательских атрибутов, которые были встроены в нашу схему AD.Обновление пользовательских атрибутов в Powershell

Вот основной код:

Import-Module ActiveDirectory 

$USERS = Import-Csv c:\temp\test2.csv 

foreach ($user in $users) { 
    Get-ADComputer -filter {dnsname -eq $user.ComputerName} | 
    Set-ADComputer -replace @{bSBPrimaryUser = $user.bSBPrimaryUser} 
} 

Вот мое сообщение об ошибке:

Set-ADComputer : Cannot bind parameter 'Replace' to the target. Exception setting "Replace": "Object reference not set to an instance of an object." At C:\Users\nwatson\Documents\Update Computers.ps1:7 char:24

  • Set-ADComputer -replace <<<< @{bSBPrimaryUser = $user.bSBPrimaryUser}}

    • CategoryInfo : WriteError: (:) [Set-ADComputer], ParameterBindingException

    • FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.ActiveDirectory.Management.Commands.SetADComputer

По какой-то причине, если я пишу основную команду, как показано ниже это работает, но не в массиве.

Set-ADComputer as-001 -replace @{ bSBPrimaryUser = "Joe Smith";} 

ответ

0

Во-первых, свойство вы ищете не dnsname но dnshostname или name. (Если просто использовать имя, то пропустите с помощью фильтра и передайте его как identity)

Во-вторых, фильтры на AD-сообщениях не являются прямыми. Если вы используете фигурные скобки, вы не можете использовать выражение. Двойные кавычки, тогда одинарные кавычки, похоже, работают нормально.

Get-ADComputer -filter "dnshostname -eq '$($user.ComputerName)'" 

В качестве альтернативы, определите выражение как переменную.

$ComputerName = $user.ComputerName 
Get-ADComputer -filter {dnshostname -eq $Computername} 
+0

Итак, я внесла свои изменения вместе с настройкой основного пользователя как переменной. Наряду с некоторыми тестированиями и выводами моих прав, чтобы убедиться, что я получил то, что я хотел видеть, это сработало. Большое вам спасибо, экономит мне часы ручного редактирования! –

+0

Итак, я также немного тестировал, если имя компьютера ошибочно, оно пропускает его. Это хорошая вещь. Но как я могу создать журнал для документирования имен компьютеров, которые он не пропустил? –

+0

Вместо того, чтобы прокладывать трубы, чтобы установить. Сохраните вывод get в переменной. Затем вы можете сделать что-то вроде 'if ($ null -ne $ get) {set} else {ошибка записи-хозяина на $ computername}' – BenH

 Смежные вопросы

  • Нет связанных вопросов^_^