Powershell 脚本:Set-ADUser -clear 变量中有多个属性

Powershell 脚本:Set-ADUser -clear 变量中有多个属性

我想通过在 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')

相关内容