Jawaban:
Mungkin Start-Transcript
akan berhasil untuk Anda. Pertama hentikan jika sudah berjalan, kemudian mulai, dan hentikan setelah selesai.
$ ErrorActionPreference = "SilentlyContinue" Stop-Transkrip | keluar-nol $ ErrorActionPreference = "Lanjutkan" Start-Transcript -path C: \ output.txt -append # Lakukan beberapa hal Stop-Transkrip
Anda juga dapat menjalankan ini sambil mengerjakan hal-hal dan menyimpannya sesi sesi perintah Anda untuk referensi nanti.
Jika Anda ingin sepenuhnya menekan kesalahan ketika mencoba menghentikan transkrip yang tidak transkrip, Anda bisa melakukan ini:
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
Microsoft telah mengumumkan di situs web Powershell's Connections (2012-02-15 pada 16:40) bahwa dalam versi 3.0 mereka telah memperluas pengalihan sebagai solusi untuk masalah ini.
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
Lihat artikel bantuan "about_Redirection" untuk detail dan contoh.
help about_Redirection
Menggunakan:
Write "Stuff to write" | Out-File Outputfile.txt -Append
Saya kira Anda bisa memodifikasi MyScript.ps1
. Kemudian cobalah untuk mengubahnya seperti ini:
$(
Here is your current script
) *>&1 > output.txt
Saya baru saja mencoba ini dengan PowerShell 3. Anda dapat menggunakan semua opsi pengalihan seperti pada jawaban Nathan Hartley .
*>&1 | Out-File $log -Encoding ascii -Append -Width 132
tetapi Powershell benar-benar jelek jika Anda perlu mengontrol output dengan tepat.
powershell ".\MyScript.ps1" > test.log
Anda mungkin ingin melihat Tee-Object cmdlet . Anda dapat menyalurkan output ke Tee dan akan menulis ke pipeline dan juga ke file
Jika Anda ingin pengalihan langsung semua output ke file, coba gunakan *>>
:
# 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 ;
Karena ini adalah pengalihan langsung ke file, itu tidak akan ditampilkan ke konsol (sering membantu). Jika Anda menginginkan output konsol, gabungkan semua output dengan *&>1
, dan kemudian pipa dengan 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 ;
Saya percaya teknik ini didukung di PowerShell 3.0 atau yang lebih baru; Saya menguji pada PowerShell 5.0.
Jika Anda ingin melakukannya dari baris perintah dan tidak dibangun ke dalam skrip itu sendiri, gunakan:
.\myscript.ps1 | Out-File c:\output.csv
Untuk menanamkan ini dalam skrip Anda, Anda dapat melakukannya seperti ini:
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append
Itu harus melakukan trik.