正在从Powershell中的输出中删除文本

正在从Powershell中的输出中删除文本,powershell,printers,Powershell,Printers,我正在尝试删除从get wmiobject返回的部分文本,我正在尝试删除的文本是@{ShareName=PRT47},我只需要返回的打印机名称,因此如果愿意,请使用后缀 我尝试通过获取字符数并删除它们来尝试不同的方法,但后来我发现您也可以使用正在进行的cmdlet中的内容 您应该能够使用-replace查找字符串并将其替换为空条目。使用您的@{ShareName=PRT47}示例 $text = $text -replace '(.*)=(.*)' ${2} echo $text //Prin

我正在尝试删除从
get wmiobject
返回的部分文本,我正在尝试删除的文本是
@{ShareName=PRT47}
,我只需要返回的打印机名称,因此如果愿意,请使用后缀

我尝试通过获取字符数并删除它们来尝试不同的方法,但后来我发现您也可以使用正在进行的cmdlet中的内容


您应该能够使用-replace查找字符串并将其替换为空条目。使用您的@{ShareName=PRT47}示例

$text = $text -replace '(.*)=(.*)' ${2}
echo $text //Prints PRT47}
另一种方法是使用split。下面的示例将在每个等号上拆分

$text = $text -split '='
echo $text[0] //prints @{ShareName
echo $text[1] //prints PRT47}

在ForEach内部,像这样指定shareName属性

ForEach ($shareName in $text) { 

 $shareName.sharename

}

如果您使用的是Powershell 3.0或更高版本,以下是另一种方法:

$text  =  (Get-WmiObject -Class $class -Filter Network=True).ShareName | Where-Object {$_ -like "*PRT*"}
或者,如果您只有Powershell 2.0,则更接近Hysh_00的建议:

$text  =  Get-WmiObject -Class $class -Filter Network=True | foreach {$_.ShareName | Where-Object {$_ -like "*PRT*"}}
$text  =  Get-WmiObject -Class $class -Filter Network=True | foreach {$_.ShareName | Where-Object {$_ -like "*PRT*"}}