我已经使用 PowerShell 很多年了,我认为我已经掌握了它的一些更“古怪”的行为,但是我遇到了一个我无法做出头或尾的问题......
我一直使用“return”从函数返回值,但最近我想我应该看看 Write-Output 作为替代方案。但是,PowerShell 是 PowerShell,我发现了一些似乎没有意义的东西(至少对我来说):
function Invoke-X{ write-output @{ "aaa" = "bbb" } };
function Invoke-Y{ return @{ "aaa" = "bbb" } };
$x = Invoke-X;
$y = Invoke-Y;
write-host $x.GetType().FullName
write-host $y.GetType().FullName
write-host ($x -is [hashtable])
write-host ($y -is [hashtable])
write-host ($x -is [pscustomobject])
write-host ($y -is [pscustomobject])
输出:
System.Collections.Hashtable
System.Collections.Hashtable
True
True
True
False
$x 和 $y(或“写入输出”和“返回”)之间有什么区别,这意味着它们都是哈希表,但其中只有一个“-is”是 pscustomobject?除了明显检查变量中的每个哈希表是否也是 pscustomobject 之外,是否有一种通用的方法可以确定与代码的区别?
我的 $PSVersionTable 看起来像这样,以防此行为特定于特定版本的 PowerShell:
Name Value
---- -----
PSVersion 5.1.16299.492
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.16299.492
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
干杯,
米