在PowerShell中有时候当我们运行一个命令的时候,在控制台上都会直接输出他结果信息,当我们想要把输出信息保存到一个文件的时候我们一般都会直接用管道传递给另一个输出命令将信息保存进一个文本文件里。
比如下面的命令,我们将一个进程任务信息输出来,再通过管道将信息保存到一个文件里:
Get-Process -ProcessName "notepad" | Out-File -FilePath "C:\testfile2.txt"
但是,当你运行上面这行命令后,你根本不知道是否正确运行了,那么有一个折中的办法就是先把要运行的命令赋值给一个变量:
PS C:\> $ProcessInfo = Get-Process -ProcessName "notepad"
PS C:\> $ProcessInfo
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
87 7 1368 5920 ...50 0.11 1204 notepad
84 7 1364 5744 ...50 0.05 4888 notepad
97 9 1572 13508 ...63 0.13 4972 notepad
PS C:\> $ProcessInfo | Out-File -FilePath "C:\textfile2.txt"
这样多少你会感觉特别麻烦,在PowerShell 5.0中其实有一个更直接的命令可以即运行命令又将命令的结果赋值给一个变量或者导出到一个文件里,那就是Tee-Object命令,我们下面看看大致的使用例子:
PS C:\> Get-Process -ProcessName "notepad" | Tee-Object -Variable ProcessInfo
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
87 7 1368 5920 ...50 0.11 1204 notepad
84 7 1364 5744 ...50 0.05 4888 notepad
97 9 1572 13508 ...63 0.13 4972 notepad
PS C:\> $ProcessInfo
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
87 7 1368 5920 ...50 0.11 1204 notepad
84 7 1364 5744 ...50 0.05 4888 notepad
97 9 1572 13508 ...63 0.13 4972 notepad
你可以仔细发现,当我们把之前同样的命令传递给Tee-Object命令后,控制台输出了信息,但是当我们用$ProcessInfo变量时,这个变量同时也保存了之前命令所运行的结果。
你甚至还可以使用FilePath参数,将信息结果直接输出到一个文本文件中,像下面这样:
PS C:\> Get-Process -ProcessName "notepad" | Tee-Object -FilePath "C:\ProcessInfo.txt"
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
87 7 1368 5920 ...50 0.11 1204 notepad
84 7 1364 5744 ...50 0.05 4888 notepad
97 9 1572 13508 ...63 0.13 4972 notepad