有人知道Powershell在以下代码段中没有显示de'tee'd'变量的奇怪原因?
# a.txt contains any text
cat a.txt | tee -variable foovar | % { 'value of foovar: ' + $foovar }
在实践中,我只想在一行中搜索一些文本,然后根据结果处理文本,例如用它发送邮件:
get-content [somefile] | select-string [somePattern] | tee [var] | ..[more processing] | .\sendmail.ps1 [var]
答案 0 :(得分:2)
由于传递到Tee-Object
的所有输出必须在变量中可用,因此cmdlet会缓存其输入并将其写入末尾的变量。
但你也可以这样做:
$var = gc a.txt
$var | your_processing_stuff
答案 1 :(得分:1)
您也可以使用-OutVariable
cat c:\dev\NamingConventions.txt -OutVariable test1 | % { write-host 'value: ' $_ }
$test1
cat c:\dev\NamingConventions.txt | select-string -patt panel -OutVariable test2
$test2
答案 2 :(得分:0)
看起来tee适用于您的脚本,但不是您期望的方式。它确实将整个数组发送到$ foovar,但是在下一行之前你不能使用它。看起来这就是发球台的本质。你可以通过连续两次运行脚本来看到它的工作方式。在第二次运行中,$ foovar具有a.txt的全部内容。
看起来你想要将文件集的每一行设置为foovar,而不是整个数组(除非我弄错了)。如果您将所有内容发送到foreach循环时就是这种情况,那么无论如何都要将它设置为特殊的$ _ var ...即
cat a.txt |%{'value of line: ' $_}
以上内容也适用于select-string。