首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象中的Powershell字符串

对象中的Powershell字符串
EN

Stack Overflow用户
提问于 2022-09-20 19:46:30
回答 1查看 43关注 0票数 1

尝试接受一个对象并将其作为字符串筛选为一个值。并将该字符串保存为变量,然后在另一个命令中使用该变量作为标志的值。

因此,这个命令将获得PNPDevice InstanceID

代码语言:javascript
运行
复制
$x = (Get-PnpDevice -PresentOnly -Class 'Net' | Where-Object {$_.FriendlyName -EQ 'Intel(R) Ethernet Connection I217-LM'} | Select-Object -ExpandProperty InstanceId | Format-Table -AutoSize | out-string )

在这里,我检查变量X及其内容和类型,因为下一个命令禁用-PNPDevice和标志instanceID必须是一个字符串。

代码语言:javascript
运行
复制
PS C:\Temp> $x.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                      
-------- -------- ----                                     --------                                                                                                                                                                      
True     True     String                                   System.Object                                                                                                                                                                 



PS C:\Temp> echo $x
PCI\VEN_1234&DEV_543A&SUBSYS_32A39857&REV_04\3&1234839&0&C8

当我尝试将$x用于-InstanceId时,我会得到以下错误

代码语言:javascript
运行
复制
PS C:\Temp> Disable-PnpDevice -InstanceId $x
Disable-PnpDevice : Invalid query 
At line:1 char:1
+ Disable-PnpDevice -InstanceId $x
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (Win32_PnPEntity:ROOT\cimv2\Win32_PnPEntity) [Disable-PnpDevice], CimException
    + FullyQualifiedErrorId : HRESULT 0x80041017,Disable-PnpDevice

但是,如果我用字符串手动创建变量,它就能正常工作。

代码语言:javascript
运行
复制
PS C:\Temp> $y = "PCI\VEN_1234&DEV_543A&SUBSYS_32A39857&REV_04\3&1234839&0&C8"

PS C:\Temp> Disable-PnpDevice -InstanceId $y

PS C:\Temp> $y.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                      
-------- -------- ----                                     --------                                                                                                                                                                      
True     True     String                                   System.Object  

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-20 19:55:44

从您的命令中省略| Format-Table -AutoSize | out-string,这不仅在您的示例中是多余的( .InstanceId属性已经是一个字符串),而且导致实例ID字符串有一个尾随的换行符,这很可能是造成问题的原因。

一般情况:

  • Format-* cmdlet发出输出对象,其唯一目的是向PowerShell的显示输出格式系统提供格式化指令。简而言之:只使用cmdlet来格式化显示的数据,而对于随后的编程处理E 217--有关更多信息,请参见这个答案
  • 顺便说一句:Out-String 在其输出字符串中盲目地追加一个尾随的换行符,这是意外的,也是不方便的:参见GitHub问题#14444
代码语言:javascript
运行
复制
- Note: With a _single_ input object (such as in your case), `-NoNewLine` can be used to suppress the trailing newline (but `Out-String` is never needed for an input object that already _is_ a string).
- The problem is that with _multiple_ input objects, `-NoNewLine` also suppresses newlines _between_ their representations; e.g., `'one', 2 | Out-String -NoNewLine` yields verbatim `one2`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73791905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档