我想通过在 Powershell 脚本(版本 5.1.17763.1007)中使用变量清除多个属性
是工作 :
Set-ADUser -Identity $($user.SID) -Clear Initials,info
这也是工作:
$emptyParams='Initials'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams
这不起作用:
$emptyParams='Initials,info'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams
并显示:
Set-ADUser:指定的目录服务属性或值不存在参数名称:Initials,info 在 Set-ADUserDesc.ps1:32 char:9 + Set-ADUser -Identity $($user.SID) -Clear $emptyParams + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(S-1-5-21-414636 ... 1575523350-2106:ADUser)[Set-ADUser],ArgumentException + FullyQualifiedErrorId:ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser
你能解释一下为什么吗?
此致,
答案1
直接回答为什么第三种方法不起作用的问题:
名称中没有属性,Initials,Info
这就是 cmdlet 失败的原因。您的输入(带逗号的字符串)是不是与字符串数组相同。
该 cmdlet 的文档设置广告用户表示 -Clear 属性接受字符串数组(或单个字符串,它只是一个包含单个元素的数组)作为有效输入:
Set-ADUser
...
[-Clear <String[]>]
...
让我们回顾一下你问题中涉及的每个场景。
Set-ADUser -Identity $($user.SID) -Clear Initials,info
第一种方法向 -Clear 参数提供两个以逗号分隔的字符串(这被解释为字符串数组)。很好。
$emptyParams='Initials'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams
第二种方法是向 -Clear 参数提供单个字符串(或单个元素的数组)。很好。
$emptyParams='Initials,info'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams
最后一种方法实际上是提供属性“Initials,Info”。如上所述,这是一个带有逗号的单个字符串,cmdlet 将其解释为单个参数。
为了实现我的目标思考您需要构建并提供一组有效的属性名称。这应该有效:
$emptyParams = @()
$emptyParams += "Initials"
$emptyParams += "Info"
Set-ADUser -Identity $($user.SID) -Clear $emptyParams
事实上,这也应该可行:
$emptyParams='Initials,info'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams.Split(',')
答案2
相反,使用 -Clear 参数,我使用解决方法并将值设置为“$null”,例如:
Set-ADUser -Identity $($user.SID) -Initials $null
目前,我无法使用此方法更新注释字段。
答案3
您可以通过创建 PowerShell 数组来实现此目的:
$emptyParams=@('Initials','info')
Set-ADUser -Identity $($user.SID) -Clear $emptyParams
或 1 行格式
Set-ADUser -Identity $($user.SID) -Clear @('Initials','info')