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