Active-Directory

Powershell 腳本:Set-ADUser -clear,變數中有多個屬性

  • May 13, 2022

我想通過在 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) -清除 $emptyParams + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (S-1-5-21-414636…1575523350-2106:ADUser)

$$ Set-ADUser $$, ArgumentException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser

你能解釋一下為什麼嗎?

最好的祝福,

要直接回答您關於為什麼第三種方法不起作用的問題:

名稱沒有屬性,Initials,Info這就是 cmdlet 失敗的原因。您的輸入(帶逗號的字元串)與字元串數組不同。

cmdlet Set-AdUser 的文件表明 -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(',')

引用自:https://serverfault.com/questions/1010236