![当方法存在时,PowerShell 会报告缺少方法](https://linux22.com/image/1392520/%E5%BD%93%E6%96%B9%E6%B3%95%E5%AD%98%E5%9C%A8%E6%97%B6%EF%BC%8CPowerShell%20%E4%BC%9A%E6%8A%A5%E5%91%8A%E7%BC%BA%E5%B0%91%E6%96%B9%E6%B3%95.png)
我最近遇到了一个问题,PowerShell 报告某个对象上不存在某个方法,而Get-Member
报告却显示该方法存在。并非所有方法都会发生这种情况,但我遇到过不止一次这种情况。
这是 ISE 中的一个示例的屏幕截图。
答案1
你的$x
变量保存一个数组。当你将数组导入函数时,管道不会传递该数组实例进入函数;它传递数组的元素进入函数process
块,一次一个。
Get-Member
实际上显示的是字符串的成员'c'
(数组中的最后一个元素),而不是数组本身的成员。(请注意,屏幕截图中的输出以TypeName: System.String
. 开头)
如果想要查看$x
(数组)本身的成员,请Get-Member
使用-InputObject
参数将其传递,而不是通过管道传入。
$X='a','b','c'; gm -InputObject $x
然后你会看到你的$x
是类型System.Object[]
并且不包含Remove
方法。(你不能删除项目,因为这会改变数组的长度,而.NET 中的数组是固定长度的。)