我注意到PowerShell中的一些奇怪行爲。我已經驗證了我認爲在PowerShell 2和PowerShell 4中的錯誤行爲。它確實是一個錯誤還是隻是我做錯了?這是PowerShell中的錯誤嗎?
請看下面的代碼片段。這個想法是簡單地通過Active Directory組名稱的列表(字符串數組)迭代,並且告訴我有多少個成員各組:
Foreach($ADGroupName In [String[]]'Domain Admins', `
'Enterprise Admins', `
'Administrators', `
'Account Operators', `
'Backup Operators')
{
$Group = Get-ADGroup -Filter { Name -EQ $ADGroupName } -Properties Members
If ($Group -EQ $Null -OR $Group.PropertyNames -NotContains 'Members')
{
# This only happens on the first iteration of the loop!
Write-Error "$ADGroupName was null or was missing the Members property!"
}
Else
{
Write-Host "$ADGroupName contains $($Group.Members.Count) members."
}
}
通過循環的第一次迭代,我得到的錯誤,因爲$組爲$ null,因此不包含正確的成員,但命令和組名都是有效的,並且該組具有成員。通過循環的後續迭代很好地工作。但是,列表中的第一組是什麼都沒有關係。我可以對組重新排序,但它總是在字符串數組的第一個元素上返回錯誤。
現在要解決它,我只是簡單地將'DummyGroup'作爲數組的第一個元素,並優雅地處理預期的異常,然後列表中的其他每個組都能正常工作。
有沒有更好的方法來處理看起來像是一個bug?
經驗教訓,謝謝。有時難以記住何時使用腳本塊以及何時使用字符串,特別是對於AD cmdlet。看起來像不同的cmdlet處理它們的方式不同,你只需要記住它們的特性。如果他們不希望我使用scritpblock,那麼他們應該將其標記爲語法錯誤。 > _ < –