Відповіді:
Можливо Start-Transcript
, спрацювало б для вас. Спочатку зупиніть його, якщо він вже запущений, а потім запустіть його та припиніть, коли будете готові.
$ ErrorActionPreference = "SilentlyContinue" Стоп-стенограма | поза нуля $ ErrorActionPreference = "Продовжити" Пуск-стенограма-шлях С: \ вихід.txt -додаток # Робіть якісь речі Стоп-стенограма
Ви також можете виконати цю роботу під час роботи над матеріалами та зберегти її сеанси командного рядка для подальшого ознайомлення.
Якщо ви хочете повністю придушити помилку під час спроби зупинити стенограму, яка не транскрибує, ви можете зробити це:
$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
Це повинно зробити трюк.