6

PowerShellスクリプト内にforeachループがあり、各反復中にシェルに$outputを出力します。出力は非常に多く、シェルが表示できるエントリの数は限られています。出力をテキストファイルにエクスポートしようとしています。私はコマンドラインでそれを行う方法を知っています。しかし、PowerShellでそれはどのように可能ですか?

参考までに、コマンドラインからバッチスクリプトを使用して、PowerShellスクリプトを次のように実行しています。

powershell c:\test.ps1 c:\log.log 
4

2 に答える 2

14

(cmd.exeからでも)次のようなファイルに出力をいつでもリダイレクトできます。

powershell c:\test.ps1 > c:\test.log

PowerShell内で、個々のコマンドをファイルにリダイレクトすることもできますが、そのような場合は、ログファイルを上書きするのではなく、追加する必要があります。例:

$logFile = 'c:\temp\test.log'
"Executing script $($MyInvocation.MyCommand.Path)" > $logFile
foreach ($proc in Get-Process) {
    $proc.Name >> $logFile
}
"Another log message here" >> $logFile

ご覧のとおり、ファイルへのリダイレクトをたくさん行う必要があるため、スクリプト内でリダイレクトを行うのは少し面倒です。OTOH、出力の一部のみをファイルにリダイレクトしたい場合は、この方法でより詳細に制御できます。もう1つのオプションはWrite-Host、スクリプト実行の結果を観察する人向けの情報をコンソールに出力するために使用することです。Write-Host出力をファイルにリダイレクトできないことに注意してください。

これはCMD.exeから実行された例です

C:\Temp>type test.ps1
$OFS = ', '
"Output from $($MyInvocation.MyCommand.Path). Args are: $args"

C:\Temp>powershell.exe -file test.ps1 1 2 a b > test.log

C:\Temp>type test.log
Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools.
Output from C:\Temp\test.ps1. Args are: 1, 2, a, b
于 2012-04-26T19:41:44.390 に答える
5

'tee'コマンドの使用はどうですか

C:\ipconfig | tee C:\log.txt
于 2013-08-21T23:56:40.777 に答える