PowerShell Komut Dosyasında Günlük Dosyalarına Çıktı Yazma


Çalıştırmayı denetlemek ve PowerShell komut dosyalarınızdaki tüm etkinlikleri izlemek için basit metin günlük dosyalarını kullanabilirsiniz. Bu, hataları ayıklarken veya komut dosyası eylemlerini denetlerken kullanışlıdır. Bu makalede, çıktıyı metin günlük dosyalarına yazarak PowerShell betiklerinde günlüğe kaydetmeyi kullanmanın bazı yollarını göstereceğiz.

En basit durumda, bir bilgi mesajının veya PowerShell komut sonucunun çıktısını bir metin günlük dosyasına yazmak isterseniz, PS çıktısını bir metin dosyasına yönlendirmek için aşağıdaki biçimlerden birini kullanabilirsiniz:

Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt -Append

Her durumda, komutlar, belirttiğiniz metinle bir txt dosyasına yeni bir satır ekler.

Her seferinde günlük dosyası içeriğinin üzerine yazmak isterseniz,

Set-Content

cmdlet.

Bu yöntemin ana dezavantajı, günlüğe bir girişin ne zaman yazıldığını (bir olay meydana geldiğini) anlayamamanızdır. Geçerli zaman damgasını günlük dosyasına ekleyebilirsiniz. Komut dosyasının çalıştırıldığı ve belirli bir olayın meydana geldiği zamanı belirlemeye yardımcı olacaktır.

Daha kullanışlı hale getirmek için, PowerShell betiğinizde, aldığı verileri bir günlük dosyasına yazacak ve her olay için zaman damgasını ekleyecek ayrı bir işlev oluşturabilirsiniz.

Aşağıda gösterildiği gibi bir işlev oluşturabilirsiniz:

$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}

Ardından, bir şeyi günlüğe kaydetmek istiyorsanız WriteLog işlevini çağırın.

WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"

Artık günlük dosyasındaki her girişin zamanını görebilirsiniz.

değiştirebilirsin

Write-Host

ile aramalar

LogWrite

senaryonuzdakiler.

PowerShell, PS konsolunda gösterilen tüm komutları ve çıktıları bir metin günlük dosyasına kaydetmek için yerleşik bir döküm özelliğine sahiptir.

Geçerli PowerShell oturumunuzu günlüğe kaydetmek için Start-Transcript cmdlet'i kullanılır.

Komutu çalıştırdıktan sonra, tüm komutların çıktısının kaydedildiği dosyayı gösteren bir mesaj görünür. Günlük dosyası varsayılan olarak geçerli kullanıcı profilinde bulunur:

Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txt

Metin dosyasının yolunu aşağıdaki gibi belirtebilirsiniz:

Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt

-Append seçeneği, yeni oturumların dosyanın sonuna (üzerine yazmadan) kaydedileceğini belirtir.

Sonuçları konsola çıkaran bazı PowerShell komutlarını çalıştırın. Örneğin, çalışan işlemlerin, hizmetlerin ve AD çoğaltma durumunun bir listesini görüntüleyelim:

Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" -Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01

Mevcut PowerShell oturumu için günlüğe kaydetmeyi durdurun:

Stop-Transcript

Ardından transkript günlük dosyasını açın.

Gördüğünüz gibi günlük, konsolda çalıştırılan PowerShell komutlarının tüm geçmişini ve tüm çıktıları gösterir.

Tüm hatalar ve uyarılar da günlüğe kaydedilir ve karmaşık PowerShell betiklerinde hata ayıklarken son derece uygundur.

Kullanabilirsiniz

Start-Transcript

Ve

Stop-Transcript

Tüm eylemleri ve çıktıları yerel olarak günlüğe kaydetmek için PowerShell komut dosyalarınızdaki cmdlet'leri kullanın.

Grup İlkesi seçeneğini PowerShell Transkripsiyonunu Aç (Bilgisayar Yapılandırması -> Yönetim Şablonları -> Windows Bileşenleri -> Windows PowerShell) kullanarak, bir bilgisayarda çalışan tüm PowerShell komutlarının ve çıktılarının otomatik olarak günlüğe kaydedilmesini etkinleştirebilirsiniz. Bilgisayardaki GPO ayarlarını güncelledikten sonra, çalışan her powershell.exe işlemi için ayrı bir metin günlük dosyası oluşturulacak ve tüm PS komutları ve bunların çıktıları günlüğe kaydedilecektir.

İlgili makaleler