为何Select-String与Get-ComputerInfo结合无结果?如何正确搭配?
问题解决:Get-ComputerInfo 与 Select-String 配合无结果的原因及方案
为什么systeminfo能用而Get-ComputerInfo不行?
systeminfo是传统命令行工具,输出的是纯文本流,每一行都是字符串,Select-String可以直接逐行匹配文本内容。Get-ComputerInfo是PowerShell cmdlet,输出的是结构化的自定义对象(不是纯文本)。Select-String默认会对对象调用ToString()方法,而这些对象的ToString()返回的是类型名称(比如Microsoft.PowerShell.Commands.ComputerInfo),不是对象的属性内容,自然搜不到包含"boot"的内容。
正确的组合方式
方法1:转成纯文本后匹配(模拟systeminfo的用法)
把对象转换成逐行的文本流,再用Select-String匹配:
Get-ComputerInfo | Out-String -Stream | Select-String boot
Out-String -Stream会把对象的格式化输出拆分成单独的字符串行,和systeminfo的输出格式一致,这样Select-String就能正常匹配了。
方法2:直接操作结构化对象(更符合PowerShell的用法)
既然Get-ComputerInfo返回的是对象,没必要转成文本,直接筛选属性:
筛选属性名包含Boot的信息
Get-ComputerInfo | Select-Object *Boot*
这会直接返回所有属性名里带Boot的属性及其值,比如WindowsBootDevice、BootTime等。
筛选属性值包含Boot的信息
如果要找属性值里包含Boot的内容,可以遍历对象的属性:
Get-ComputerInfo | ForEach-Object { $_.PSObject.Properties | Where-Object { $_.Value -match 'boot' } | Select-Object Name, Value }
内容的提问来源于stack exchange,提问作者scribe
相关产品推荐
相关产品推荐

