about_Redirection
Deskripsi singkat
Menjelaskan cara mengalihkan output dari PowerShell ke file teks.
Deskripsi panjang
Secara default, PowerShell mengirim output ke host PowerShell. Biasanya ini adalah aplikasi konsol. Namun, Anda dapat mengalihkan output ke file teks dan Anda dapat mengalihkan output kesalahan ke aliran output reguler.
Anda dapat menggunakan metode berikut untuk mengalihkan output:
Out-File
Gunakan cmdlet, yang mengirim output perintah ke file teks. Biasanya, Anda menggunakanOut-File
cmdlet ketika Anda perlu menggunakan parameternya, sepertiEncoding
parameter , ,Force
Width
, atauNoClobber
.Tee-Object
Gunakan cmdlet, yang mengirim output perintah ke file teks lalu mengirimkannya ke alur.Gunakan operator pengalihan PowerShell. Menggunakan operator pengalihan dengan target file secara fungsional setara dengan pipa dengan
Out-File
tanpa parameter tambahan.
Untuk informasi selengkapnya tentang aliran, lihat about_Output_Aliran.
Aliran output yang dapat dialihkan
PowerShell mendukung pengalihan aliran output berikut.
Stream # | Deskripsi | Diperkenalkan di | Tulis Cmdlet |
---|---|---|---|
1 | Aliran Keberhasilan | PowerShell 2.0 | Write-Output |
2 | Aliran Kesalahan | PowerShell 2.0 | Write-Error |
3 | Aliran Peringatan | PowerShell 3.0 | Write-Warning |
4 | Aliran Verbose | PowerShell 3.0 | Write-Verbose |
5 | Aliran Debug | PowerShell 3.0 | Write-Debug |
6 | Aliran Informasi | PowerShell 5.0 | Write-Information , Write-Host |
* | Semua Aliran | PowerShell 3.0 |
Ada juga aliran Kemajuan di PowerShell, tetapi tidak mendukung pengalihan.
Penting
Aliran Keberhasilan dan Kesalahan mirip dengan aliran stdout dan stderr dari shell lain. Namun, stdin tidak tersambung ke alur PowerShell untuk input.
Operator pengalihan PowerShell
Operator pengalihan PowerShell adalah sebagai berikut, di mana n
mewakili nomor aliran. Aliran Berhasil ( 1
) adalah default jika tidak ada aliran yang ditentukan.
Operator | Deskripsi | Sintaks |
---|---|---|
> |
Kirim aliran yang ditentukan ke file. | n> |
>> |
Tambahkan aliran yang ditentukan ke file. | n>> |
>&1 |
Mengalihkan aliran yang ditentukan ke aliran Berhasil . | n>&1 |
Catatan
Tidak seperti beberapa shell Unix, Anda hanya dapat mengalihkan aliran lain ke aliran Berhasil .
Contoh
Contoh 1: Mengalihkan kesalahan dan output ke file
Contoh ini berjalan dir
pada satu item yang berhasil, dan yang gagal.
dir C:\, fakepath 2>&1 > .\dir.log
Ini menggunakan 2>&1
untuk mengalihkan aliran Kesalahan ke aliran Keberhasilan, dan >
untuk mengirim aliran Keberhasilan yang dihasilkan ke file yang disebutdir.log
Contoh 2: Mengirim semua data aliran Keberhasilan ke file
Contoh ini mengirimkan semua data stream Keberhasilan ke file yang disebut script.log
.
.\script.ps1 > script.log
Contoh 3: Mengirim aliran Berhasil, Peringatan, dan Kesalahan ke file
Contoh ini menunjukkan bagaimana Anda dapat menggabungkan operator pengalihan untuk mencapai hasil yang diinginkan.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > C:\Temp\redirection.log
3>&1
mengalihkan aliran Peringatan ke aliran Berhasil .2>&1
mengalihkan aliran Kesalahan ke aliran Keberhasilan (yang juga sekarang menyertakan semua data aliran Peringatan )>
mengalihkan aliran Berhasil (yang sekarang berisi aliran Peringatan dan Kesalahan ) ke file yang disebutC:\temp\redirection.log
.
Contoh 4: Mengalihkan semua aliran ke file
Contoh ini mengirimkan semua output aliran dari skrip yang disebut script.ps1
ke file yang disebut script.log
.
.\script.ps1 *> script.log
Contoh 5: Menekan semua data aliran Write-Host dan Information
Contoh ini menekan semua data aliran informasi. Untuk membaca selengkapnya tentang cmdlet aliran Informasi , lihat Write-Host dan Write-Information
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
Contoh 6: Menampilkan efek Preferensi Tindakan
Variabel dan parameter Preferensi Tindakan dapat mengubah apa yang ditulis ke aliran tertentu. Skrip dalam contoh ini menunjukkan bagaimana nilai $ErrorActionPreference
memengaruhi apa yang ditulis ke aliran Kesalahan .
$ErrorActionPreference = 'Continue'
$ErrorActionPreference > log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'SilentlyContinue'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Stop'
$ErrorActionPreference >> log.txt
Try {
get-item /not-here 2>&1 >> log.txt
}
catch {
"`tError caught!" >> log.txt
}
$ErrorActionPreference = 'Ignore'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Inquire'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Continue'
Ketika kita menjalankan skrip ini, kita diminta ketika $ErrorActionPreference
diatur ke Inquire
.
PS C:\temp> .\test.ps1
Confirm
Can't find path 'C:\not-here' because it doesn't exist.
[Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): H
Get-Item: C:\temp\test.ps1:23
Line |
23 | get-item /not-here 2>&1 >> log.txt
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The running command stopped because the user selected the Stop option.
Ketika kita memeriksa file log, kita melihat yang berikut:
PS C:\temp> Get-Content .\log.txt
Continue
Get-Item: C:\temp\test.ps1:3
Line |
3 | get-item /not-here 2>&1 >> log.txt
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Cannot find path 'C:\not-here' because it does not exist.
SilentlyContinue
Stop
Error caught!
Ignore
Inquire
Catatan
Operator pengalihan yang tidak menambahkan data (>
dan n>
) menimpa konten file yang ditentukan saat ini tanpa peringatan.
Namun, jika file adalah file baca-saja, tersembunyi, atau sistem, pengalihan gagal. Operator pengalihan tambahan (>>
dan n>>
) tidak menulis ke file baca-saja, tetapi mereka menambahkan konten ke sistem atau file tersembunyi.
Untuk memaksa pengalihan konten ke file baca-saja, tersembunyi, atau sistem, gunakan Out-File
cmdlet dengan parameternya Force
.
Saat Anda menulis ke file, operator pengalihan menggunakan UTF8NoBOM
pengodean. Jika file memiliki pengodean yang berbeda, output mungkin tidak diformat dengan benar. Untuk menulis ke file dengan pengodean yang berbeda, gunakan Out-File
cmdlet dengan parameternya Encoding
.
Lebar output saat menulis ke file
Saat Anda menulis ke file menggunakan salah satu Out-File
atau operator pengalihan, PowerShell memformat output tabel ke file berdasarkan lebar konsol yang dijalankannya. Misalnya, saat mencatat output tabel ke file menggunakan perintah seperti Get-ChildItem Env:\Path > path.log
pada sistem di mana lebar konsol diatur ke 80 kolom, output dalam file dipotong menjadi 80 karakter:
Name Value
---- -----
Path C:\Program Files\PowerShell\7;C:\WINDOWS…
Mengingat bahwa lebar konsol dapat diatur sesegan-segan pada sistem tempat skrip Anda dijalankan, Anda mungkin lebih suka output tabel format PowerShell ke file berdasarkan lebar yang Anda tentukan sebagai gantinya.
Out-File
Cmdlet menyediakan parameter Lebar yang memungkinkan Anda mengatur lebar yang Anda inginkan untuk output tabel. Daripada harus menambahkan -Width 2000
di mana pun Anda memanggil Out-File
, Anda dapat menggunakan $PSDefaultParameterValues
variabel untuk mengatur nilai ini untuk semua penggunaan Out-File
cmdlet dalam skrip. Dan karena operator pengalihan (>
dan >>
) secara efektif alias untuk Out-File
, mengatur Out-File:Width
parameter untuk seluruh skrip berdampak pada lebar pemformatan untuk operator pengalihan juga. Letakkan perintah berikut di dekat bagian atas skrip Anda untuk diatur Out-File:Width
untuk seluruh skrip:
$PSDefaultParameterValues['out-file:width'] = 2000
Meningkatkan lebar output akan meningkatkan konsumsi memori saat tabel pengelogan diformat output. Jika Anda mencatat banyak data tabular untuk file dan Anda tahu Anda bisa mendapatkan dengan lebar yang lebih kecil, gunakan lebar yang lebih kecil.
Dalam beberapa kasus, seperti Get-Service
output, untuk menggunakan lebar tambahan, Anda harus menyalurkan output sebelum Format-Table -AutoSize
menghasilkan ke file.
$PSDefaultParameterValues['out-file:width'] = 2000
Get-Service | Format-Table -AutoSize > services.log
Untuk informasi selengkapnya tentang $PSDefaultParameterValues
, lihat about_Preference_Variables.
Mengalihkan data biner
PowerShell tidak mendukung pengalihan data biner. Jika Anda mengalihkan data byte-stream, PowerShell memperlakukan data sebagai string. Pengalihan ini menghasilkan data yang rusak.
Potensi kebingungan dengan operator perbandingan
Operator >
tidak akan bingung dengan operator Perbandingan yang lebih besar ( sering ditandai seperti >
dalam bahasa pemrograman lainnya).
Tergantung pada objek yang dibandingkan, output yang menggunakan >
dapat tampak benar (karena 36 tidak lebih besar dari 42).
PS> if (36 > 42) { "true" } else { "false" }
false
Namun, pemeriksaan sistem file lokal dapat melihat bahwa file yang disebut 42
ditulis, dengan konten 36
.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Mencoba menggunakan perbandingan <
terbalik (kurang dari), menghasilkan kesalahan sistem:
PS> if (36 < 42) { "true" } else { "false" }
ParserError:
Line |
1 | if (36 < 42) { "true" } else { "false" }
| ~
| The '<' operator is reserved for future use.
Jika perbandingan numerik adalah operasi yang diperlukan, -lt
dan -gt
harus digunakan. Untuk informasi selengkapnya, lihat -gt
operator di about_Comparison_Operators.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk