首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell: Select-String不解析此变量

Powershell: Select-String不解析此变量
EN

Stack Overflow用户
提问于 2012-07-05 17:08:27
回答 1查看 4.4K关注 0票数 3

PowerShell新手来了。我被困在试图让Select来解析下面的变量。

我正在调用一个外部程序,它将所有内容记录到标准输出。这是我正在使用的备份同步软件。输出是很多信息,如源、目的地、复制的文件、更改的文件等。我只关心标准输出中的几个项目。我采用标准输出,并试图将其解析为我所关心的少数项目,因此我只看到这些,而不是其他50行杂项信息。

下面是代码:

代码语言:javascript
复制
$procInfo = New-Object System.Diagnostics.ProcessStartInfo
$procInfo.FileName = "C:\Program Files\Siber Systems\GoodSync\gsync.exe"
$procInfo.RedirectStandardError = $true
$procInfo.RedirectStandardOutput = $true
$procInfo.UseShellExecute = $false
$procInfo.Arguments = "/progress=yes /exit sync DroboBackup"
$proc = New-Object System.Diagnostics.Process
$proc.StartInfo = $procInfo
$proc.Start() | Out-Null
(Get-Date -format T) + ": Backup Process Running. Please Stand By..."
$proc.WaitForExit()
if ($proc.ExitCode -eq 0) 
{ 
    "GoodSync Reported: Analyze or Sync Successfully Completed." 
} elseif ($proc.ExitCode -eq 1)
{
    "GoodSync Error: Analyze had Terminal Errors. Did gsync.exe close abruptly?"
} elseif ($proc.ExitCode -eq 2)
{
    "GoodSync Error: Sync had Terminal Errors. Did gsync.exe close abruptly?"
} else 
{ 
    "GoodSync Error: General Error. Typo in job name?"
}
$output = $proc.StandardOutput.ReadToEnd()
$output += $proc.StandardError.ReadToEnd()
#$output  | Out-File c:\output.txt -Append
$newOutput = $output | Select-String "Copy New","Copy Over","Delete File","Items Synced","Changes:"
$newOutput

运行之后,我得到的是所有来自标准输出的行。我不会得到我的好和干净的分析的回报。

因此,为了尝试并排除故障,我将$output发送到一个文本文件中,然后运行以下命令,这就是我得到的结果:

代码语言:javascript
复制
$x = Get-Content c:\output.txt | Select-String "Copy New","Copy Over","Delete File","Items Synced","Changes:"
$x
代码语言:javascript
复制
PS C:\> .\test.ps1

Changes: 0, Conflicts: 0, CopyTime: 0, CopyState: 0/0, Errors: 0

因此,正如您所看到的,它是针对文本文件工作的,而不是作为变量。

有洞察力吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-05 17:45:46

您正在使用StreamReaderReadToEnd()方法读取标准输出。这将返回一个包含内容的单个字符串,包括回车返回。因此,当您在管道上输出该字符串时,string只看到一个大字符串,而不是每一行。您可以做的是在回车上拆分字符串,然后再将它传递到管道上:

代码语言:javascript
复制
$output -split "`n" | Select-String "Copy New","Copy Over","Delete File","Items Synced","Changes:"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11349168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档