Dosyaya PowerShell Yazma Ana Bilgisayarı [Örneklerle]
Son zamanlarda Write-Host'un çıktısını PowerShell'deki bir dosyaya yazmam gerekiyordu. Farklı yaklaşımlar ve en iyi uygulamaları bulmak için kapsamlı araştırmalar yaptım. Bu eğitimde PowerShell Write-Host to file ile ilgili her şeyi örneklerle tartışacağız.
Write-Host çıktısını PowerShell'deki bir dosyaya yazmak için Start-Transcript ve Stop-Transcript cmdlet'lerini kullanabilirsiniz tüm konsol çıkışını yakalamak veya PowerShell 5,0 ve sonraki sürümlerde bilgi akışını 5>&1 ile yeniden yönlendirmek için. Diğer bir yaklaşım da, çıktıyı hem konsola hem de belirli bir dosyaya gönderecek bir Out-File cmdlet'i içerecek şekilde Write-Host işlevini geçersiz kılmaktır.
PowerShell'de Write-Host'u Anlamak
Write-Host'un PowerShell'de ne yaptığını anlayalım. Write-Host cmdlet'i metin, değişkenler ve biçimlendirilmiş verilerin konsol pencerenize çıktısını almak için kullanılır. Bu, betiğin yürütülmesi sırasında değerli geri bildirim sağlar, ancak varsayılan olarak çıktıyı PowerShell ardışık düzenine veya bir dosyaya göndermez.
Yazma Ana Bilgisayarı Çıktısını Bir Dosyaya Yönlendir
Write-Host çıktıyı konsola göndermek üzere tasarlanmış olsa da, bu çıktıyı bir dosyaya yakalamak için geçici çözümler vardır. Bazı yöntemleri ve bunların nasıl uygulanacağını tartışalım.
1. Transkript Başlat ve Transkript Durdurma'yı Kullanma
PowerShell'deki Write-Host çıkışı da dahil olmak üzere konsolda görünen her şeyi bir dosyaya yakalamanın bir yolu, Start-Transcript ve Stop-Transcript cmdlet'lerini kullanmaktır. Bu cmdlet'ler PowerShell konsoluyla tüm etkileşimlerin yazılmasını başlatır ve durdurur.
Start-Transcript -Path "C:\MyFolder\Transcript.txt"
Write-Host "This is a message for the console and transcript file."
Stop-Transcript
Bu komut dosyası, Write-Host ifadeleri de dahil olmak üzere tüm konsol çıktısının bir metnini oluşturacak ve bunu Transcript.txt dosyasına kaydedecektir.
PowerShell betiğini VS kodunu kullanarak çalıştırdıktan sonra çıktıyı aşağıdaki ekran görüntüsünde görebilirsiniz.
2. Out-File'ı Tee-Object ile Kullanmak
Başka bir yöntem de Out-File cmdlet'ini Tee-Object ile birlikte kullanmaktır. PowerShell'deki Tee-Object cmdlet'i, çıktıyı aynı anda konsola ve bir dosyaya göndermenize olanak tanır.
"Output from Write-Host" | Tee-Object -FilePath "C:\MyFolder\Output.txt"
Write-Host "This message will appear in the console, but not in the file."Bu örnekte, Write-Host ardışık düzene veri göndermediğinden, Output.txt dosyasına yalnızca ilk satır yazılacaktır.
3. Bilgi Akışını Yönlendirmek İçin 5>&1 Kullanımı
Windows PowerShell 5.0'dan itibaren Write-Host, Write-Information için bir sarmalayıcıdır ve bilgi akışını (5) başarı çıkış akışına (1) yönlendirmenize olanak tanır. ve sonra bir dosyaya.
Write-Host "This will go to the file." 5>&1 | Out-File "C:\MyFolder\HostOutput.txt"Bu komut Write-Host çıktısını HostOutput.txt dosyasına yönlendirecektir.
4. Yazma Ana Bilgisayarını Yakalamak İçin Bir İşlev Kullanma
PowerShell'de, çıktısını yakalamak ve onu bir dosyaya yönlendirmek için Write-Host'u geçersiz kılan özel bir işlev de oluşturabilirsiniz.
function Write-Host {
param([string]$message)
$message | Out-File "C:\MyFolder\HostOutputOverride.txt" -Append
Microsoft.PowerShell.Utility\Write-Host $message
}
Write-Host "This message will go to both the console and the file."Bu işlev, her Write-Host mesajını HostOutputOverride.txt dosyasına eklerken aynı zamanda konsolda görüntülemeye devam eder.
5. Özel Bir Ana Bilgisayar Kullanmak
Daha gelişmiş bir çözüm için Write-Host çağrılarını yakalayan ve bunları bir dosyaya yönlendiren özel bir ana bilgisayar uygulayabilirsiniz.
class CustomHost : System.Management.Automation.Host.PSHost
{
# Implement required members...
}
$host = New-Object CustomHost
$host.ui.WriteLine("Redirected to file") | Out-File "C:\Output\CustomHostOutput.txt"
Bu basitleştirilmiş bir örnektir ve tam özel ana bilgisayar uygulaması, PSHost sınıfı üyelerini tam olarak tanımlamak için daha fazla kod gerektirir.
En İyi Uygulamalar ve Hususlar
Write-Host çıktısını bir dosyaya yönlendirirken aşağıdaki en iyi uygulamaları göz önünde bulundurun:
Write-Host'u dikkatli kullanın, çünkü veri depolama için değil konsol çıkışı için tasarlanmıştır.- İşlem hattına veya bir dosyaya veri göndermek istediğinizde
Yazma-ÇıktıveyaBilgi Yazma'yı tercih edin. - Erişim sorunlarını önlemek için dosya yollarının ve izinlerin doğru ayarlandığından emin olun.
- Çıkış akışları yeniden yönlendirilirken
Write-Hostçıkışının varsayılan olarak yakalanmadığını unutmayın.
Çözüm
Write-Host öncelikli olarak PowerShell'deki konsoldaki mesajları görüntülemek için kullanılırken; çeşitli yöntemler çıktısını PowerShell'deki bir dosyaya yönlendirir.
Bu PowerShell eğitiminde, Write-Host çıktısını PowerShell'deki bir dosyaya yazmak için 5 farklı yöntemi anlattım.
