我正在尝试编写一个脚本,该脚本将导入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";}
答案 0 :(得分:0)
首先,您要查找的媒体资源不是dnsname
,而是dnshostname
或name
。 (如果只使用名称,则跳过使用过滤器并将其作为identity
)
其次,AD cmdlet上的过滤器不是直接的。如果使用花括号,则不能使用表达式。双引号然后单引号似乎工作正常。
Get-ADComputer -filter "dnshostname -eq '$($user.ComputerName)'"
或者,将表达式定义为变量。
$ComputerName = $user.ComputerName
Get-ADComputer -filter {dnshostname -eq $Computername}