2012-04-26 5 views
5

У меня есть цикл foreach внутри моего скрипта powershell с выводами $ output на оболочке во время каждой итерации. Существует много много выходов, и количество записей, отображаемых оболочкой, ограничено. Я хочу экспортировать вывод в текстовый файл. Я знаю, как это сделать в командной строке. Как это возможно в powershell?Экспорт вывода powershell в текстовый файл

FYI, я использую пакетный сценарий из командной строки, чтобы запустить сценарий Powershell, как

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

ответ

12

Вы всегда можете перенаправить вывод в ех в файл, как это (даже из 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, если вы хотите только перенаправить часть вывода в файл, тогда у вас есть больше контроля таким образом. Другой вариант - использовать 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 
+1

Так что, если я имею аргумент для сценария PowerShell, я могу просто do: powershell c: \ test.ps1 c: \ log.log> c: \ test.log где log.log - это аргумент? – ssn

+0

Да, но попробуйте использовать параметр '-File', например. 'powershell -file c: \ test.ps1 c: \ log.log> c: \ test.log' –

+0

, если я попытаюсь использовать параметр файла (или без файла) в пакетном файле, я получаю следующую строку, выполняемую в команде line: powershell -file c: \ test.ps1 c: \ log.log 1> c: \ test.log Я не понимаю, как это получается «1» ..... И я думаю, весь текст после того, как имя сценария принимается за имя входного файла, и, следовательно, результат не является ожидаемым. И это поведение одинаково, если я использую «-файл» или нет. – ssn

4

что об использовании команды «Tee»

C:\ipconfig | tee C:\log.txt 
+0

Это то, что я искал. Я хотел вывести на экран и в файл. Благодаря! – Hajjat