Ответы:
Может быть, Start-Transcript
будет работать для вас. Сначала остановите его, если он уже запущен, затем запустите его и остановите, когда закончите.
$ ErrorActionPreference = "SilentlyContinue" Стоп-Транскрипт | из-нуль $ ErrorActionPreference = "Продолжить" Start-Transcript -path C: \ output.txt -append # Сделать что-нибудь Стоп-Transcript
Вы также можете запустить его во время работы над материалом и сохранить его в сеансах командной строки для дальнейшего использования.
Если вы хотите полностью устранить ошибку при попытке остановить транскрипцию, которая не транскрибирует, вы можете сделать это:
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
Microsoft объявила на веб-сайте Powershell Connections (2012-02-15 в 16:40), что в версии 3.0 они расширили перенаправление в качестве решения этой проблемы.
In PowerShell 3.0, we've extended output redirection to include the following streams:
Pipeline (1)
Error (2)
Warning (3)
Verbose (4)
Debug (5)
All (*)
We still use the same operators
> Redirect to a file and replace contents
>> Redirect to a file and append to existing content
>&1 Merge with pipeline output
Обратитесь к справочной статье about_Redirection за подробностями и примерами.
help about_Redirection
Использование:
Write "Stuff to write" | Out-File Outputfile.txt -Append
Я так понимаю, вы можете изменить MyScript.ps1
. Затем попробуйте изменить это так:
$(
Here is your current script
) *>&1 > output.txt
Я только что попробовал это с PowerShell 3. Вы можете использовать все параметры перенаправления, как в ответе Натана Хартли .
*>&1 | Out-File $log -Encoding ascii -Append -Width 132
но Powershell действительно безобразен, если вам нужно точно контролировать вывод.
powershell ".\MyScript.ps1" > test.log
Возможно, вы захотите взглянуть на командлет Tee-Object . Вы можете передать вывод в Tee, и он будет записывать в конвейер, а также в файл
Если вы хотите прямое перенаправление всего вывода в файл, попробуйте использовать *>>
:
# You'll receive standard output for the first command, and an error from the second command.
mkdir c:\temp -force *>> c:\my.log ;
mkdir c:\temp *>> c:\my.log ;
Поскольку это прямое перенаправление в файл, оно не будет выводиться на консоль (часто полезно). Если вы хотите получить консольный вывод, объедините весь вывод с *&>1
, а затем передайте с Tee-Object
:
mkdir c:\temp -force *>&1 | Tee-Object -Append -FilePath c:\my.log ;
mkdir c:\temp *>&1 | Tee-Object -Append -FilePath c:\my.log ;
# Shorter aliased version
mkdir c:\temp *>&1 | tee -Append c:\my.log ;
Я считаю, что эти методы поддерживаются в PowerShell 3.0 или более поздней версии; Я тестирую на PowerShell 5.0.
Если вы хотите сделать это из командной строки, а не встроить в сам скрипт, используйте:
.\myscript.ps1 | Out-File c:\output.csv
Чтобы встроить это в ваш скрипт, вы можете сделать это так:
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append
Это должно делать свое дело.