Aracılığıyla paylaş


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 gibi Encodingparametrelerini kullanmanız gerektiğinde kullanırsınızOut-File.NoClobberWidthForce

  • 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>&1dir.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.logbir 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>&1Uyarı akışını Success akışına yeniden yönlendirir.
  • 2>&1Hata 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.logbir 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 $ErrorActionPreferenceHata 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 Inquireistenir$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-FileForce 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-FileEncoding 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-Fileher 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-Filediğ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 $PSDefaultParameterValuesdaha 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 36birlikte 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.

Ayrıca bkz.