about_Redirection

Kısa açıklama

PowerShell çıktısını metin dosyalarına yeniden yönlendirmeyi açıklar.

Uzun açıklama

Varsayılan olarak, PowerShell çıktıyı 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.

Çıktıyı 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 () kullanarak bir PowerShell komutunun (cmdlet, işlev, betik) çıkışını yeniden> yönlendirmek, fazladan parametre olmadan 'a yönlendirmeye Out-File işlevsel olarak eşdeğerdir. PowerShell 7.4, yerel bir komutun stdout akışını yeniden yönlendirmek için kullanıldığında yeniden yönlendirme işlecinin davranışını değiştirdi.

Akışlar hakkında daha fazla bilgi için bkz. about_Output_Akışlar.

Yeniden yönlendirilebilir çıkış akışları

PowerShell aşağıdaki çıkış akışlarının yeniden yönlendirilmesini destekler.

Akışı # Açıklama Tanıtılan: Cmdlet Yazma
1 Başarı Akışı PowerShell 2.0 Write-Output
2 Hata Akışı PowerShell 2.0 Write-Error
3 Uyarı Akışı PowerShell 3.0 Write-Warning
4 Ayrıntılı Akış PowerShell 3.0 Write-Verbose
5 Akışta Hata Ayıklama PowerShell 3.0 Write-Debug
6 Bilgi Akışı PowerShell 5.0 Write-Information, Write-Host
* 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, Başarı akışı ( 1 ) varsayılan değerdir.

Operator Açıklama Sözdizimi
> Belirtilen akışı bir dosyaya gönderin. n>
>> Belirtilen akışı bir dosyaya ekleyin . n>>
>&1 Belirtilen akışı Başarı akışına yeniden yönlendirir. n>&1

Not

Bazı Unix kabuklarından farklı olarak, diğer akışları yalnızca Başarı akışına yönlendirebilirsiniz.

Yerel komutlardan çıktıyı yeniden yönlendirme

PowerShell 7.4, yerel bir komutun stdout akışını yeniden yönlendirmek için kullanıldığında yeniden yönlendirme işleçlerinin davranışını değiştirdi. Yeniden yönlendirme işleçleri artık yerel bir komuttan çıktıyı yeniden yönlendirirken bayt akışı verilerini korur. PowerShell, yeniden yönlendirilen verileri yorumlamaz veya ek biçimlendirme eklemez. Daha fazla bilgi için bkz . Örnek #7.

Örnekler

Örnek 1: Hataları ve çıkışı bir dosyaya yeniden yönlendirme

Bu örnek, başarılı olan bir öğede ve başarısız olan bir öğede çalışır dir .

dir C:\, fakepath 2>&1 > .\dir.log

Hata akışını Başarı akışına yeniden yönlendirmek ve > sonuç Olarak Elde Edilen Başarı akışını adlı bir dosyaya göndermek için kullanır 2>&1dir.log

Örnek 2: Tüm Başarı akışı verilerini bir dosyaya gönderme

Bu örnek, tüm Başarı akışı verilerini adlı script.logbir dosyaya gönderir.

.\script.ps1 > script.log

Örnek 3: Bir dosyaya Başarı, 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ı Başarı 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ı script.ps1 bir betikten alınan tüm akış çıkışlarını adlı script.logbir dosyaya gönderir.

.\script.ps1 *> script.log

Örnek 5: Tüm Write-Host ve Information akış verilerini gizleme

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 Inquireistenir$ErrorActionPreference.

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.

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

Örnek 7: yerel komuttan ikili verileri yeniden yönlendirme

PowerShell 7.4 sürümünden başlayarak PowerShell, yerel bir komutun stdout akışını bir dosyaya yeniden yönlendirirken veya bayt akışı verilerini yerel komutun stdin akışına yönlendirirken bayt akışı verilerini korur.

Örneğin, yerel komutu curl kullanarak bir ikili dosya indirebilir ve yeniden yönlendirmeyi kullanarak diske kaydedebilirsiniz.

$uri = 'https://github.com/PowerShell/PowerShell/releases/download/v7.3.7/powershell-7.3.7-linux-arm64.tar.gz'

# native command redirected to a file
curl -s -L $uri > powershell.tar.gz

Bayt akışı verilerini başka bir yerel komutun stdin akışına da aktarabilirsiniz. Aşağıdaki örnekte kullanarak curlsıkıştırılmış bir TAR dosyası indirilir. İndirilen dosya verileri, arşiv içeriğini ayıklamak için komutuna akışla aktarılır tar .

# native command output piped to a native command
curl -s -L $uri | tar -xzvf - -C .

Ayrıca, PowerShell komutunun bayt akışı çıkışını yerel komutun girişine de aktarabilirsiniz. Aşağıdaki örnekler, önceki örnekle aynı TAR dosyasını indirmek için kullanılır Invoke-WebRequest .

# byte stream piped to a native command
(Invoke-WebRequest $uri).Content | tar -xzvf - -C .

# bytes piped to a native command (all at once as byte[])
,(Invoke-WebRequest $uri).Content | tar -xzvf - -C .

Bu özellik, stderr çıkışını stdout'a yeniden yönlendirirken bayt akışı verilerini desteklemez. stderr ve stdout akışlarını birleştirdiğinizde, birleştirilmiş akışlar dize verileri olarak değerlendirilir.

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 çıktı genişliği

Bir dosyaya yeniden yönlendirme işleçlerini veya yeniden yönlendirme işleçlerini kullanarak Out-File yazarken, PowerShell tablo çıkışını içinde çalıştığı konsolun genişliğine göre dosyaya biçimlendirır. Ö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 çıktısını dosyaya günlüğe kaydederken, dosyadaki çıkış 80 karaktere yuvarlanır:

Name                         Value
----                         -----
Path                         C:\Program Files\PowerShell\7;C:\WINDOWS…

Konsol genişliğinin betiğinizin çalıştırıldığı sistemlerde rastgele 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, 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şkeni 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-Fileetkin bir şekilde diğer adlar olduğundan, betiğin tamamı için parametresini Out-File:Width 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

Çıkış genişliğini artırmak, tablo biçimlendirilmiş çıkışı günlüğe kaydederken bellek tüketimini artırır. Dosyaya çok fazla tablosal veri günlüğe kaydediyorsanız ve daha küçük bir genişlikle ulaşabileceğ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ış göndermeden ö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 (36, 42'den büyük olmadığından).

PS> if (36 > 42) { "true" } else { "false" }
false

Ancak, yerel dosya sisteminin denetlenerek 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.

Gerekli işlem -lt sayısal karşılaştırma ise ve -gt kullanılmalıdır. Daha fazla bilgi için bkz-gt. about_Comparison_Operators işleci.

Ayrıca bkz.