我想通过在 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 At 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。设置AD用户
你能解释一下为什么吗?
此致,
要直接回答您关于为什么第三种方法不起作用的问题:
名称没有属性,
Initials,Info
这就是 cmdlet 失败的原因。您的输入(带逗号的字符串)与字符串数组不同。cmdlet Set-AdUser 的文档表明 -Clear 属性接受字符串数组(或单个字符串,它只是具有单个元素的数组)作为有效输入:
让我们回顾一下您在问题中涉及的每个场景。
第一种方法将两个用逗号分隔的字符串(这被解释为字符串数组)提供给 -Clear 参数。好的。
第二种方法是向 -Clear 参数提供单个字符串(或单个元素的数组)。好的。
最后一种方法实际上是提供属性“Initials,Info”。如上所述,这是一个带有逗号的字符串,cmdlet 将其解释为单个参数。
为了实现我认为您要实现的目标,您需要构建并提供一组有效的属性名称。这应该有效:
实际上,这也应该有效:
您可以通过创建 PowerShell 数组来简单地做到这一点:
或 1 行格式
而是使用 -Clear 参数,我使用解决方法并将值设置为“$null”,例如:
目前,我无法使用此方法更新注释字段。