我试图使用Powershell引用父对象列表中的一些XML元素,但是当我到达变量声明中包含连字符('-')的那一点时,其余声明被读为论点。
我尝试将变量名转换为字符串,将其用单引号,双引号以及括号括起来。没有一个起作用。
$imessagelist = $xml.pnet_message_history_packet_response.IMessage
$formidlist = $imessage.formdata.form_id
$fieldlist = $imessage.formdata.im_field
$fieldcontent = $field.data.data_numeric-enhanced
所有引用(例如formidlist和fieldlist)都允许我将“ .formdata.im_field”附加到项目列表中并检索数据。唯一不起作用的是带有破折号的那个。收到的错误如下:
At C:\Temps-v0.1.ps1:36 char:69
+ ... $fieldcontent = $field.data.data_numeric-enhanced
+ ~~~~~~~~~
Unexpected token '-enhanced' in expression or statement.
我不知道如何转义破折号并获取名为data_numeric-enhanced的字段中的值。任何建议都将非常受欢迎!
答案 0 :(得分:2)
在版本3或4中(不记得了),.
成员表达式运算符已更改为接受 any 字符串表达式作为其右侧操作数,因此您可以限定成员带引号的名称:
$field.data.'data_numeric-enhanced'
或
$field.data.$(@('data_numeric'; Write-Host "anything resolving to the member name can go in here"; '-enhanced') -join '')
答案 1 :(得分:2)
您应该可以通过封装最后一个成员来访问属性。
这应该有效:
$field.data.'data_numeric-enhanced'