Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 gibiOut-File
parametrelerini kullanmanız gerektiğinde kullanırsınızEncoding
.Force
Width
NoClobber
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önlendirmeyeOut-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_Streams.
Yeniden yönlendirilebilir çıkış akışları
PowerShell aşağıdaki çıkış akışlarının yeniden yönlendirilmesini destekler.
Dere # | 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 2>&1
ve sonuç Olarak Elde Edilen Başarı akışını adlı bir dosyaya göndermek için kullanır >
dir.log
Örnek 2: Tüm Başarı akışı verilerini bir dosyaya gönderme
Bu örnek, tüm Başarı akışı verilerini adlı script.log
bir 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>&1
Uyarı akışını Başarı 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ı script.ps1
bir betikten alınan tüm akış çıkışlarını adlı script.log
bir 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 $ErrorActionPreference
istenirInquire
.
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 curl
sı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-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 çı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 -Width 2000
her yere eklemek Out-File
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 >>
etkin bir şekilde diğer adlar olduğundan, betiğin tamamı için parametresini Out-File
ayarlamak, yeniden yönlendirme işleçlerinin biçimlendirme Out-File:Width
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 $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 (36, 42'den büyük olmadığından).
PS> if (36 > 42) { "true" } else { "false" }
false
Ancak, yerel dosya sisteminin denetlenerek içeriğiyle 42
birlikte adlı 36
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.
PowerShell