在Powershell中更新自定义属性

时间:2017-01-26 22:26:24

标签: powershell csv replace syntax-error

我正在尝试编写一个脚本,该脚本将导入csv文件并更新一组内置于AD架构中的自定义属性。

以下是基本代码:

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:无法绑定参数'替换'到了目标。异常设置"替换":"对象引用未设置为对象的实例。"   在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";}

1 个答案:

答案 0 :(得分:0)

首先,您要查找的媒体资源不是dnsname,而是dnshostnamename。 (如果只使用名称,则跳过使用过滤器并将其作为identity

传递

其次,AD cmdlet上的过滤器不是直接的。如果使用花括号,则不能使用表达式。双引号然后单引号似乎工作正常。

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

或者,将表达式定义为变量。

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