3

有人知道 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] 
4

3 回答 3

2

由于传入的所有输出Tee-Object都必须在变量中可用,因此 cmdlet 缓存其输入并在最后将其写入变量。

但您也可以执行以下操作:

$var = gc a.txt
$var | your_processing_stuff
于 2010-02-25T22:48:23.080 回答
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
于 2010-02-26T08:06:21.397 回答
0

看起来 tee 在您的脚本中有效,但不是您期望的方式。它确实将整个数组发送到 $foovar,但直到下一行才能使用它。看起来这就是tee的本质。通过连续两次运行脚本,您可以看到它以这种方式工作。在第二次运行时,$foovar 拥有 a.txt 的全部内容。

看起来您希望文件的每一行都设置为 foovar,而不是整个数组(除非我弄错了)。如果是这种情况,当您将所有内容发送到 foreach 循环时,您无论如何都将其设置为特殊的 $_ var ... 即

cat a.txt |%{'value of line: ' $_}

以上内容也适用于选择字符串。

于 2010-02-26T14:51:29.290 回答