【问题标题】:Removing text from output in Powershell从 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
    } 

【问题讨论】:

    标签: powershell printers


    【解决方案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*"}}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多