背景:我以JSON格式獲取數據,並且必須與Set-QADUser
(來自Quest ActiveRoles Management Shell)一起使用它來更新Active Directory中的用戶。將對象轉換爲PowerShell中的關聯數組
只需提供解析從JSON到cmdlet結果在該錯誤消息中的數據:
無法索引類型System.Collections.Generic.Dictionary`2 + ValueCollection的目的[[System.String ,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Object,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]。
我可以遍歷這樣的對象:
PS C:\scripts> $data.params | ForEach-Object { $_ }
Key Value
--- -----
manager CN=smith,OU=Employees,OU=People,OU=Department,OU=...
department Department
company Company
homeDirectory \\\\win7x64gerald.testdomain.com\\jdoe
homeDrive U:
primaryGroupID 1501
userPrincipalName [email protected]
但SET-QADUser期望數據是在關聯數組格式(或哈希表)。從幫助示例:
C:\PS>Set-QADUser 'mycompany.com/usersOU/User1' -objectAttributes @{[email protected]('555-34-67','555-34-68')}
我希望能夠只是遍歷它上面的和訪問鍵和值的參數是這樣的:
PS C:\scripts> $data.params | ForEach-Object { $_.Key }
但這恰恰說明不了什麼。
$data.params.keys
顯示所有的鍵,與值相同,但我不能通過追加[0]
來獲取特定的鍵,並且沒有我能找到的get-method。
那麼,如何將這樣的對象轉換爲關聯數組呢?
您在代碼中的評論可能會引起誤解。你正在創建一個空的HashTable,我相信這是你的目的,所以很好。通常引用的'數組'是'$ params = @()'來創建一個空數組。 – TheMadTechnician 2014-10-01 18:14:39
你說得對,這就是任務工具的文檔所稱的。我編輯了問題和答案,以更好地反映術語。 – 2014-10-01 19:51:05