我需要在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"
答案 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)"
这样你:
&
或.
)来调用它。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'"