在Powershell上打印变量

时间:2015-05-21 15:15:07

标签: variables powershell printing write-host

我需要在Powershell上打印一个变量的行命令,我叫$ em_result,例如,em_result = 20,谢谢。

$em_result = ´gc C:\Users\mtmachadost\Desktop\Test\logError.txt | ?{$_ -match 'cajica11'} | %{($_ -split "\s+")[3]} |  Measure -Sum | Select -Exp Sum'´
Write-Host"$em_result"

3 个答案:

答案 0 :(得分:2)

如果您想将命令行保存到变量,我建议将其保存为ScriptBlock而不是String

$em_result = {gc C:\Users\mtmachadost\Desktop\Test\logError.txt | ?{$_ -match 'cajica11'} | %{($_ -split "\s+")[3]} |  Measure -Sum | Select -Exp Sum'}
Write-Host "`$em_result = $(&$em_result)"

这样你:

  1. 不必逃避。
  2. 可以将其转换为字符串。
  3. 可以通过调用操作符(&.)来调用它。
  4. 在ISE中编辑语法时会突出显示语法。
  5. 解析时会捕获任何语法错误,而不是在执行时捕获。
  6. ScriptBlock链接到其文件和行,因此您可以在其中设置断点。

答案 1 :(得分:1)

虽然我不确定你想要完成什么的动机,但听起来你正试图保存命令$em_result,以便你可以在你想要的时候运行。这样,您就不会保存时间点结果,而是每次调用它时结果都是从那时起。

Tony Hinkle一样,你需要将命令保存为字符串。然而,除了报价之外,还有更多的东西可以逃脱。管道变量$_也将发挥作用。因为它只是一个简单的here-string,所以你不必担心逃避任何事情。

$em_result = @'
gc 'C:\Users\mtmachadost\Desktop\Test\logError.txt' | ?{$_ -match 'cajica11'} | %{($_ -split "\s+")[3]} |  Measure -Sum | Select -Exp Sum
'@

现在你可以调用这个字符串并获得结果

Write-Host "`$em_result = $(Invoke-Expression $em_result)"

我猜你是想尝试使用反对对,并且使用引号对,这让我觉得这就是你想要的。 Backtick只会逃脱后面的一个角色。 Invoke-Expression将执行我们将其作为代码传递的字符串。

答案 2 :(得分:0)

分配时,您需要指定它是一个字符串,否则Powershell会尝试执行它。您还需要使用双引号对其进行分隔,并使用反引号转义命令中的双引号和美元符号,以便它们被视为字符串的一部分,而不是结束字符串的分隔符。

$em_result = [string]"gc C:\Users\mtmachadost\Desktop\Test\logError.txt | ?{`$_ -match 'cajica11'} | %{(`$_ -split `"\s+`")[3]} |  Measure -Sum | Select -Exp Sum'"