从输出值中删除不需要的值

时间:2019-04-30 17:55:37

标签: powershell

我编写了以下脚本来列出特定应用程序的服务。它运行正常,但脚本中使用的命令除了实际值外还会写入一些不需要的输出。我需要去除这些不必要的值,并仅打印所需的数据。

$InfaPrm = Import-Csv 'D:\Tools\InfaRestart\infa_parm.csv'

ForEach ($Params in $InfaPrm){
    $DOM = $Params.Domain
    $AdmUser= $Params.User
    $AdmPwd = $Params.Password
    $Security=$Params.SecurityDomain
    Set-Location -Path D:\Informatica\PowerCenter\isp\bin
    Invoke-Command -ScriptBlock {& cmd.exe /c "infacmd.bat Listservices"  -dn "$DOM" -un "$AdmUser" -sdn "$Security" -st "IS"}

}

输出:

INT_SVC_TEST
Command ran successfully.
INT_SVC_FIN_TEST
Command ran successfully.
INT_SVC_MAN_TEST
INT_SVC_HR_TEST
INT_SVC_EM_TEST
Command ran successfully.

我想删除字符串“命令成功运行”。从上面的输出中,仅打印服务名称。

1 个答案:

答案 0 :(得分:0)

  • 重复设置相同的位置没有意义,
    将该命令移到foreach前面
  • Invoke-Command的结果存储在变量中,并抑制不需要的行的输出
    或直接将| Where-Object附加到Invoke-Cmmand

$InfaPrm = Import-Csv 'D:\Tools\InfaRestart\infa_parm.csv'
Set-Location -Path D:\Informatica\PowerCenter\isp\bin

ForEach ($Params in $InfaPrm){
    $DOM = $Params.Domain
    $AdmUser= $Params.User
    $AdmPwd = $Params.Password
    $Security=$Params.SecurityDomain
    $Output = Invoke-Command -ScriptBlock {& cmd.exe /c "infacmd.bat Listservices"  -dn "$DOM" -un "$AdmUser" -sdn "$Security" -st "IS"}
    $Output | Where-Object {$_ -ne 'Command ran successfully.'}
}

如果这不排除行,请尝试使用-notlike和通配符,或者使用-notmatch和正则表达式。