背景:我以JSON格式获取数据,并且必须使用Set-QADUser
(来自Quest ActiveRoles Management Shell)来更新Active Directory中的用户。
只是将从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 jdoe@testdomain.com
但Set-QADUser期望数据采用关联数组格式(或Hashtable)。帮助中的示例:
C:\PS>Set-QADUser 'mycompany.com/usersOU/User1' -objectAttributes @{otherTelephone=@('555-34-67','555-34-68')}
我希望能够如上所述循环它并访问Key和Value参数,如下所示:
PS C:\scripts> $data.params | ForEach-Object { $_.Key }
但这只是什么都没有。
$data.params.keys
显示所有键,与值相同,但我无法通过附加[0]
来获取特定的键,而且我找不到任何get方法。
那么,如何将这样的对象转换为关联数组呢?
答案 0 :(得分:1)
可能就像使用convertfrom-json一样简单?
答案 1 :(得分:1)
我找到了它:
# Create empty hashtable
$params = @{}
# iterate over every key and add it to the hashtable
$data.params.keys | foreach { $params[$_] = $data.params[$_] }