从 Powershell 中的输出中删除文本

Posted

技术标签:

【中文标题】从 Powershell 中的输出中删除文本【英文标题】:Removing text from output in Powershell 【发布时间】:2014-11-05 04:07:28 【问题描述】:

我正在尝试删除从get-wmiobject 返回的部分文本,我要删除的文本是@ShareName=PRT47,我只想要返回的打印机名称,如果你愿意,可以加上后缀。

我尝试了不同的方法,尝试获取字符数并删除它们,但我发现你也可以使用前面的 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 来查找和替换带有空白条目的字符串。使用您的 @ShareName=PRT47

示例
$text = $text -replace '(.*)=(.*)' $2
echo $text //Prints PRT47

另一种方法是使用拆分。下面的示例将在每个等号上拆分。

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

【讨论】:

【参考方案2】:

在 ForEach 中,像这样指定 shareName 属性。

ForEach ($shareName in $text)  

 $shareName.sharename


【讨论】:

【参考方案3】:

如果您拥有 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*"

【讨论】:

以上是关于从 Powershell 中的输出中删除文本的主要内容,如果未能解决你的问题,请参考以下文章

如何从PowerShell中的格式化文本创建对象

Powershell & Lotus Notes - 将 While 循环的输出从文本更改为 XML 输出

递归查找文件中的文本 (PowerShell)

将输入变量从PowerShell表单传递到cmdlet参数会导致空白数据

用于删除 Microsoft Team 的 Powershell 脚本

从文件夹中的所有文本文件中提取与模式匹配的行到单个输出文件