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 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(',')