如何解决在Windows 7环境中,Get-Content返回System.Object []而不是System.String
我有一个脚本,该脚本是我在Windows 10环境中编写的,安装了.Net 4.7.03056,可以正常工作。但是,如果改为在单独的Windows 7环境中运行(不确定是否安装了.Net版本),则脚本会遇到MethodNotFound异常:
方法调用失败,因为[System.Object []]不包含名为'IndexOf'的方法
以下是导致问题的代码:
$Result = Get-Content $LogDirectory\java_output.txt
$MCPindex = $Result.IndexOf('MCP devices:')
java_output.txt的内容应为:
Serial number [Description] [ID]
FTDI devices:
MCP devices:
0001234567 [MCP2200 USB Serial Port Emulator Microchip Technology Inc.] [id=0]
在Windows 10中运行并将$ Result传递给get-member时,数据类型为System.String,它确实包含IndexOf方法,因此没有问题。
在Windows 7环境中运行时,抛出的异常消息表示$ Result是System.Object []。我目前无法直接访问该环境进行故障排除,因此对于这种行为的可能嫌疑人,我目前不知所措。任何见识将不胜感激!
解决方法
PowerShell v2 (Windows 7最初附带的)未在阵列上(例如在.IndexOf()
上公开[object[]]
方法从变量中用System.Object[]
读取的文件中捕获多行时获得的(Get-Content
个数组。
原因是 .IndexOf()
不是数组的 direct 方法,而是通过System.Collections.IList
接口的实现提供的 ,并且只有在PSv3 +中,接口方法也会在PowerShell中出现。
最简洁但不明显的解决方法是在PSv2中使用 reflection :
$MCPIndex = [Collections.IList].GetMethod('IndexOf').Invoke($Result,'MCP devices:')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。