about_Redirection
Kısa açıklama
PowerShell çıkışını metin dosyalarına yeniden yönlendirmeyi açıklar.
Uzun açıklama
Varsayılan olarak, PowerShell çıkışı PowerShell konağına gönderir. Bu genellikle konsol uygulamasıdır. Ancak, çıkışı bir metin dosyasına yeniden yönlendirebilir ve hata çıkışını normal çıkış akışına yönlendirebilirsiniz.
Çıkışı yeniden yönlendirmek için aşağıdaki yöntemleri kullanabilirsiniz:
Komut çıkışını
Out-File
bir metin dosyasına gönderen cmdlet'ini kullanın. Genellikle cmdlet'ini , , veya parametreleri gibiEncoding
parametrelerini kullanmanız gerektiğinde kullanırsınızOut-File
.NoClobber
Width
Force
Komut çıkışını
Tee-Object
bir metin dosyasına gönderen ve ardından işlem hattına gönderen cmdlet'ini kullanın.PowerShell yeniden yönlendirme işleçlerini kullanın. Yeniden yönlendirme işlecini dosya hedefiyle kullanmak, fazladan parametre olmadan yönlendirmeye
Out-File
işlevsel olarak eşdeğerdir.
Akışlar hakkında daha fazla bilgi için bkz. about_Output_Streams.
Yeniden yönlendirilebilir çıkış akışları
PowerShell aşağıdaki çıkış akışlarının yeniden yönlendirilmesini destekler.
Stream # | Description | Tanıtılan: | Yazma Cmdlet'i |
---|---|---|---|
1 | Başarı Stream | PowerShell 2.0 | Write-Output |
2 | Hata Stream | PowerShell 2.0 | Write-Error |
3 | Uyarı Stream | PowerShell 3.0 | Write-Warning |
4 | Ayrıntılı Stream | PowerShell 3.0 | Write-Verbose |
5 | Hata ayıklama Stream | PowerShell 3.0 | Write-Debug |
6 | Bilgi Stream | PowerShell 5.0 | Write-Information |
* | Tüm Akışlar | PowerShell 3.0 |
PowerShell'de bir İlerleme akışı da vardır, ancak yeniden yönlendirmeyi desteklemez.
Önemli
Success ve Error akışları, diğer kabukların stdout ve stderr akışlarına benzer. Ancak stdin, giriş için PowerShell işlem hattına bağlı değildir.
PowerShell yeniden yönlendirme işleçleri
PowerShell yeniden yönlendirme işleçleri aşağıdaki gibidir ve burada n
akış numarasını temsil eder. Hiçbir akış belirtilmezse Success akışı ( 1
) varsayılan değerdir.
İşleç | Açıklama | Syntax |
---|---|---|
> |
Belirtilen akışı bir dosyaya gönderin. | n> |
>> |
Belirtilen akışı bir dosyaya ekleyin. | n>> |
>&1 |
Belirtilen akışı Başarılı akışına yönlendirir. | n>&1 |
Not
Bazı Unix kabuklarından farklı olarak, diğer akışları yalnızca Success akışına yeniden yönlendirebilirsiniz.
Örnekler
Örnek 1: Hataları ve çıkışı bir dosyaya yeniden yönlendirme
Bu örnek, başarılı olacak bir öğede ve hata verecek bir öğede çalışır dir
.
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Hata akışını Success akışına yeniden yönlendirmek ve >
sonuçta elde edilen Başarı akışını adlı bir dosyaya göndermek için kullanır 2>&1
dir.log
Örnek 2: Tüm Başarılı akış verilerini bir dosyaya gönderme
Bu örnek, tüm Başarılı akış verilerini adlı script.log
bir dosyaya gönderir.
.\script.ps1 > script.log
Örnek 3: Bir dosyaya Başarılı, Uyarı ve Hata akışları gönderme
Bu örnek, istenen sonucu elde etmek için yeniden yönlendirme işleçlerini nasıl birleştirebileceğinizi gösterir.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > C:\Temp\redirection.log
3>&1
Uyarı akışını Success akışına yeniden yönlendirir.2>&1
Hata akışını Başarı akışına yeniden yönlendirir (artık tüm Uyarı akışı verilerini de içerir)>
Success akışını (artık Hem Uyarı hem de Hata akışlarını içerir) adlıC:\temp\redirection.log
bir dosyaya yeniden yönlendirir.
Örnek 4: Tüm akışları bir dosyaya yeniden yönlendirme
Bu örnek, adlı bir betikten alınan tüm akış çıkışlarını adlı script.ps1
bir dosyaya gönderir script.log
.\script.ps1 *> script.log
Örnek 5: Tüm Write-Host ve Bilgi akışı verilerini gösterme
Bu örnek tüm bilgi akışı verilerini gizler. Bilgi akışı cmdlet'leri hakkında daha fazla bilgi edinmek için bkz. Write-Host ve Write-Information
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
Örnek 6: Eylem Tercihlerinin etkisini gösterme
Eylem Tercihi değişkenleri ve parametreleri belirli bir akışa yazılanları değiştirebilir. Bu örnekteki betik, değerinin $ErrorActionPreference
Hata akışına yazılanları nasıl etkilediğini gösterir.
$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'
Bu betiği çalıştırdığımızda olarak ayarlandığında Inquire
istenir$ErrorActionPreference
.
PS C:\temp> .\test.ps1
Confirm
Cannot find path 'C:\not-here' because it does not 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.
Günlük dosyasını incelediğimizde aşağıdakileri görürüz:
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
Notlar
Verileri (>
ve n>
) eklemeyen yeniden yönlendirme işleçleri, uyarı olmadan belirtilen dosyanın geçerli içeriğinin üzerine yazar.
Ancak, dosya salt okunur, gizli veya sistem dosyasıysa yeniden yönlendirme başarısız olur. Ekleme yeniden yönlendirme işleçleri (>>
ve n>>
) salt okunur bir dosyaya yazmaz, ancak içeriği bir sisteme veya gizli dosyaya ekler.
İçeriğin salt okunur, gizli veya sistem dosyasına yeniden yönlendirilmesini zorlamak için cmdlet'ini Out-File
Force
parametresiyle birlikte kullanın.
Dosyalara yazarken, yeniden yönlendirme işleçleri kodlama kullanır UTF8NoBOM
. Dosya farklı bir kodlamaya sahipse çıkış doğru biçimlendirilmeyebilir. Farklı kodlamaya sahip dosyalara yazmak için cmdlet'ini Out-File
Encoding
parametresiyle birlikte kullanın.
Dosyaya yazarken çıkışın genişliği
Veya yeniden yönlendirme işleçlerini kullanarak Out-File
bir dosyaya yazarken, PowerShell tablo çıkışını içinde çalıştığı konsolun genişliğine göre dosyaya biçimlendiriyor. Örneğin, konsol genişliğinin 80 sütuna ayarlandığı bir sistemde olduğu gibi Get-ChildItem Env:\Path > path.log
bir komut kullanarak tablo çıkışını dosyaya günlüğe kaydederken, dosyadaki çıkış 80 karaktere yuvarlanır:
Name Value
---- -----
Path C:\Program Files\PowerShell\7-preview;C:\WINDOWS…
Konsol genişliğinin, betiğinizin çalıştırıldığı sistemlerde rastgele olarak ayarlanabileceğini göz önünde bulundurarak, bunun yerine belirttiğiniz genişliğe göre dosyalara PowerShell biçimli tablo çıkışını tercih edebilirsiniz.
cmdlet'i Out-File
, tablo çıkışı için istediğiniz genişliği ayarlamanıza olanak tanıyan bir Width parametresi sağlar. komutunu çağırdığınız Out-File
her yere eklemek -Width 2000
zorunda kalmak yerine değişkenini kullanarak bir betikteki $PSDefaultParameterValues
cmdlet'in Out-File
tüm kullanımları için bu değeri ayarlayabilirsiniz. Yeniden yönlendirme işleçleri (>
ve ) için Out-File
diğer adlar olduğundan, betiğin Out-File:Width
tamamının parametresini ayarlamak, yeniden yönlendirme işleçlerinin biçimlendirme >>
genişliğini de etkiler. Betiğin tamamı için ayarlamak Out-File:Width
üzere aşağıdaki komutu betiğinizin üst kısmına yerleştirin:
$PSDefaultParameterValues['out-file:width'] = 2000
Tablo biçimlendirilmiş çıkışı günlüğe kaydederken çıkış genişliğini artırmak bellek tüketimini artırır. Dosyaya çok fazla tablosal veri kaydediyorsanız ve daha küçük bir genişlikle geçinebileceğinizi biliyorsanız, daha küçük genişliği kullanın.
Çıktı gibi Get-Service
bazı durumlarda, ek genişliği kullanmak için dosyaya çıkış yapmadan önce çıkışı yönlendirmeniz Format-Table -AutoSize
gerekir.
$PSDefaultParameterValues['out-file:width'] = 2000
Get-Service | Format-Table -AutoSize > services.log
hakkında $PSDefaultParameterValues
daha fazla bilgi için bkz. about_Preference_Variables.
Karşılaştırma işleçleriyle olası karışıklık
>
işleci, Büyüktür karşılaştırma işleciyle karıştırılmamalıdır (genellikle diğer programlama dillerinde olduğu gibi >
belirtilir).
Karşılaştırılan nesnelere bağlı olarak, kullanan >
çıkış doğru görünebilir (çünkü 36 42'den büyük değildir).
PS> if (36 > 42) { "true" } else { "false" }
false
Bununla birlikte, yerel dosya sisteminin denetiminde içeriğiyle 36
birlikte adlı 42
bir dosyanın yazıldığını görebilirsiniz.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Ters karşılaştırmayı <
(küçüktür) kullanmaya çalışmak bir sistem hatası verir:
PS> if (36 < 42) { "true" } else { "false" }
ParserError:
Line |
1 | if (36 < 42) { "true" } else { "false" }
| ~
| The '<' operator is reserved for future use.
Sayısal karşılaştırma gerekli işlemse -lt
ve -gt
kullanılması gerekiyorsa. Daha fazla bilgi için about_Comparison_Operators işlecine -gt
bakın.