我已经在$Response
变量中存储了RavenDB服务器中的附件列表。
[{"Size":3040,"Key":"attachments/deployments-7928/output-log","Metadata":{"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0D0"},{"Size":2524,"Key":"attachments/deployments-7927/output-log","Metadata":{
"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0CF"},{"Size":530,"Key":"attachments/tasks-7842/output-log","Metadata":{"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0AA"}]
我想获取Key值,以便我可以获取附件。
为什么我不能像这样选择Key值?
$Response | ConvertFrom-Json | Select Key
当我这样做时,所有的键看起来都是空的。
奇怪的是,当我使用Foreach时它会起作用。
$Response | ConvertFrom-Json | Foreach { $_.Key }
我明白这一点:
attachments/deployments-7928/output-log
attachments/deployments-7927/output-log
attachments/tasks-7842/output-log
有什么区别?
为什么不在这里选择工作?
答案 0 :(得分:1)
如果您首先将结果分配给变量,然后将其传递给Select-Object
,则它会起作用。
$response = @'
[{"Size":3040,"Key":"attachments/deployments-7928/output-log","Metadata":{"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0D0"},{"Size":2524,"Key":"attachments/deployments-7927/output-log","Metadata":{
"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0CF"},{"Size":530,"Key":"attachments/tasks-7842/output-log","Metadata":{"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0AA"}]
'@
$ObjectList = $response | ConvertFrom-Json;
$ObjectList | Select-Object -Property Key;
答案 1 :(得分:1)
因为convertfrom-json不返回PSObjects数组,所以它返回一个数组system.object []。该数组没有'Key'成员。
Write-Output '[{"Size":3040,"Key":"attachments/deployments-7928/output-log","Metadata":{"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0D0"},{"Size":2524,"Key":"attachments/deployments-7927/output-log","Metadata":{
"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0CF"},{"Size":530,"Key":"attachments/tasks-7842/output-log","Metadata":{"ContentType":"text/xml"},"Etag":"02000000-0000-0014-0000-00000000A0AA"}]' `
| convertfrom-json | get-member
输出
TypeName: System.Object[]
...
请参阅,它只有以下成员:
计数
添加
地址
清除
克隆
的CompareTo
包含
CopyTo从
等于
获取
GetEnumerator的
GetHashCode的
对GetLength
GetLongLength
GetLowerBound
的GetType
GetUpperBound
的GetValue
的IndexOf
初始化
插入
删除
RemoveAt移除
设置
的SetValue
的ToString
项目
IsFixedSize
IsReadOnly
IsSynchronized
长
LongLength
排名
SyncRoot
分配给变量会转换为TypeName:System.Management.Automation.PSCustomObject
这有一个“关键”成员。 Powershell的内置枚举意识正确地扩展了这一点。
答案 2 :(得分:0)
如果要避免中间变量赋值:
{$response | ConvertFrom-Json}.invokereturnasis() | select key