2014-10-01 75 views
0

背景:我以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。

那麼,如何將這樣的對象轉換爲關聯數組呢?

回答

0

我發現:

# Create empty hashtable 
$params = @{} 
# iterate over every key and add it to the hashtable 
$data.params.keys | foreach { $params[$_] = $data.params[$_] } 
+0

您在代碼中的評論可能會引起誤解。你正在創建一個空的HashTable,我相信這是你的目的,所以很好。通常引用的'數組'是'$ params = @()'來創建一個空數組。 – TheMadTechnician 2014-10-01 18:14:39

+0

你說得對,這就是任務工具的文檔所稱的。我編輯了問題和答案,以更好地反映術語。 – 2014-10-01 19:51:05

1

也許就像使用convertfrom-json一樣簡單?

+0

它不回答這個問題。僅僅包括一個小例子可能會更好。它對大多數人而言都很直觀,但並非全部。 – Matt 2015-01-03 12:57:21

相關問題