2014-11-05 61 views
0

我想从get-wmiobject中删除部分文本,我试图删除的文本是@{ShareName=PRT47},我只希望返回打印机名称,所以后缀如果您愿意。从Powershell中的输出中删除文本

我已经尝试了不同的尝试获取字符数并删除它们,但后来我发现您也可以使用正在处理的cmdlet中的内容。

Remove Text

$text = Get-WmiObject -Class $class -Filter Network=True | Select ShareName | Where-Object {$_ - like "*PRT*"} 
    ForEach ($shareName in $text) { 
    $newprinter = "\\$newserver\$shares" 
    rundll32 printui.dll,PrintUIEntry /in /n $newprinter 
    } 

回答

1

你应该能够使用-replace找到与空白项替换字符串。使用@的示例{共享名= PRT47}

$text = $text -replace '(.*)=(.*)' ${2} 
echo $text //Prints PRT47} 

一种替代方法是使用分裂。下面的例子将在每个等号上分割。

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

在ForEach中,指定shareName属性,如下所示。

ForEach ($shareName in $text) { 

$shareName.sharename 

} 
0

这里的另一种方式做到这一点,如果你有PowerShell的3.0或更高版本:

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

或者接近Hysh_00的建议,如果你只有PowerShell 2.0中:

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