在powershell中铸造?奇怪的语法?

在powershell中铸造?奇怪的语法?,powershell,casting,powershell-2.0,Powershell,Casting,Powershell 2.0,将XML从文件读入变量可以这样做: [xml]$x=get-content myxml.xml 但为什么不: $x=[xml]get-content myxml.xml 其中: Unexpected token 'get-content' in expression or statement. At line:1 char:20 + $x=[xml]get-content <<<< myxml.xml + CategoryInfo : Pa

将XML从文件读入变量可以这样做:

[xml]$x=get-content myxml.xml
但为什么不:

$x=[xml]get-content myxml.xml
其中:

Unexpected token 'get-content' in expression or statement.
At line:1 char:20
+ $x=[xml]get-content <<<<  myxml.xml
    + CategoryInfo          : ParserError: (get-content:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

在PowerShell中,一切都是对象。这包括cmdlet。转换是将一种对象类型转换为另一种对象类型的过程


这对演员来说意味着,就像在数学中一样,你可以添加不必要的括号来帮助自己弄清楚到底发生了什么。在数学中,
1+2+3
可以变成
((1+2)+3)
,而不改变其含义。对于PowerShell,将对下一个对象(右侧)执行强制转换,因此
$x=[xml]获取内容myxml.xml
将变成
$x=([xml](获取内容))myxml.xml
。这表明您正试图将cmdlet强制转换为xml对象,这是不允许的。很明显,这不是您试图执行的操作,因此您必须首先执行cmdlet,然后强制转换,即
$x=[xml](get content myxml.xml)
。另一种方法是,
[xml]$x=get content myxml.xml
,将变量声明为xml类型,以便将分配给它的任何内容(即等号的整个右侧)转换为xml。

谢谢!有人知道为什么需要这些括号吗?因为
getcontentmyxml.xml
是一个表达式
(获取内容myxml.xml)
是一个对象。您需要先有一个对象才能将其投射到其他对象!此外,cmdlet周围的括号强制解析表达式。然后,解析表达式(现在是一个对象)被传递到cast操作符中。
a=(String)myobject;
$x=[xml](get-content myxml.xml)