我有一个简单的问题,希望有人能帮忙...
如果我运行此命令;
\1\2\1
我以表格格式获得预期结果。它显示状态,类,FriendlyName和InstanceID。
接下来,我只想获取InstanceID,可以使用此命令进行操作;
get-pnpDevice -class display
但是我坚持的是,我只想获取结果的内部部分,而不是全部结果。换句话说,在我的系统上,如果运行上面的命令,则会得到以下结果;
PCI \ VEN_8086&DEV_5912&SUBSYS_872F1043&REV_04 \ 3&11583659&0&10
PCI \ VEN_10DE&DEV_1B81&SUBSYS_85971043&REV_A1 \ 4&35D4F288&0&0008
但是我要获得的结果是没有PCI \的结果,例如在&号之后的所有内容,例如,我不想看到&REV_04 \ 3&11583659&0&10或&REV_A1 \ 4&35D4F288&0&0008
有什么建议吗?
我尝试了建议的计算属性,但它返回的内容与我尝试执行的操作很接近,但不完全相同。我不了解计算所得的属性,因此请耐心等待。...结果如下;
InstanceID
VEN_8086
VEN_10DE
似乎截止了结果。我浏览了Microsoft Select-Object文档,它描述了一些有关计算属性的信息,但是它确实对-replace参数没有任何说明,因此我对如何使用它并对其进行修复感到迷茫。 。有没有更好的文档,您可以向我介绍有关的更多信息?
答案 0 :(得分:1)
您可能需要使用Select-Object来计算属性。
Get-PnpDevice -Class display |
Select-Object @{n='InstanceID';e={$_.InstanceId -replace '^PCI\\(.*?)&REV.*$','$1'}}
您可以添加其他属性(以逗号分隔)以及计算出的属性。
-replace
operator使用正则表达式匹配。此处的示例使用捕获组(.*?)
,该捕获组名为捕获组1
(以后用$1
引用)捕获PCI\
和第一个{{1}之间的所有字符}。 &REV
是字符串的开头。 ^
是字符串的结尾。 $
贪婪地匹配零个或多个字符。由于.*
是一个特殊的正则表达式字符,因此\
用于对其进行转义以产生\
。
计算属性的\\
或e
部分包含一个脚本块(expression
中的代码)。脚本块内容对每个{}
值(InstanceId
)进行字符串替换。