PowerShell - Günlük Dosyasına Yazma [4 Yol]


Transkriptin Kullanılması

Transkript'i kullanarak bir günlük dosyasına yazmak için:

  • Günlük dosyasına yazmaya başlamak için Start-Transcript cmdlet'ini kullanın.
  • Dosyaya hiçbir şey yazmadan işlemleri normal şekilde gerçekleştirin.
  • Transkripti durdurmak için Stop-Transkript'i kullanın.

Transkript'i kullanın:

Start-Transcript "D:\Logs\output.log" -Append
2+2
Write-Output "Logging..."
Stop-Transcript
Get-Content "D:\Logs\output.log"

ÇIKTI:

Transcript started, output file is D:\Logs\output.log
4
Logging...
Transcript stopped, output file is D:\Logs\output.log
**********************
Windows PowerShell transcript start
Start time: 20230105232520
Username: DESKTOP-N506T20\user
RunAs User: DESKTOP-N506T20\user
Configuration Name:
Machine: DESKTOP-NAME (Microsoft Windows NT 10.0.19045.0)
Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Process ID: 22800
PSVersion: 5.1.19041.2364
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.19041.2364
BuildVersion: 10.0.19041.2364
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Transcript started, output file is D:\Logs\output.log
PS C:> 2+2
4
PS C> Write-Output "Logging..."
Logging...
PS C> Stop-Transcript
**********************
Windows PowerShell transcript end
End time: 20230105232537
**********************

Transkript, bir PowerShell oturumunun oluşturduğu tüm komutların ve çıktıların kayıtlı bir kaydıdır. Aşağıdakiler gibi birçok amaç için yararlı olabilir:

  • PowerShell oturumunuzun kaydını oluşturma.
  • Çalışmanızı başkalarıyla paylaşmak.
  • Daha sonra çalıştırılabilecek otomatik komut dosyaları oluşturarak görevleri otomatikleştirme.
  • PowerShell oturumlarının etkinliğini günlüğe kaydedin.

PowerShell'de transkriptleri kullanmak için dosyayı belirterek Start-Transcript cmdlet'ini kullanarak bir transkript başlatıyoruz, transkripte dahil etmek istediğimiz komutları çalıştırıyoruz ve ardından Stop-Transcript cmdlet'ini kullanarak transkripti durduruyoruz. Transkript belirttiğimiz bir dosyaya kaydedilir.

Örneğin, günlükleri dosyaya yazmaya başlamak için Start-Transcript cmdlet'ini kullandık. Daha sonra transkriptin bunları dosyaya yazıp yazmadığını kontrol etmek için bazı sahte komutlar yürüttük. Transkripti başlattıktan sonra herhangi bir komutu, betiği veya cmdlet'i kullanabiliriz. Transkripti durdurmak için Stop-Transcript cmdlet'ini kullandık.

İçerik Ekle Cmdlet'ini Kullanma

İçerik Ekle cmdlet'ini kullanarak bir günlük dosyasına yazmak için:

  • Günlük dosyasının adını ve içeriğini parametre olarak alan bir write_logFile işlevi tanımlayın.
  • Geçerli tarih ve saati almak için Get-Date'i ve bunu bir dizeye dönüştürmek için to-String() sınıfını kullanın.
  • Günlük mesajını dosyaya yazmak için İçerik Ekle cmdlet'ini kullanın.
  • Günlük dosyasının günlük mesajını içerip içermediğini kontrol etmek için Get-Content cmdlet'ini kullanın.

İçerik Ekleme Cmdlet'ini kullanın:

function write_logFile{
    Param ([string]$log_file, $log_message)
    $time_stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
    $log_message += $time_stamp
    Add-content $log_file -value $log_message
}
write_logFile -log_file "D:\Logs\output.log" -log_message "Writing to the log file at "
Get-Content "D:\Logs\output.log"

ÇIKTI:

Writing to log the file at 2023/01/05 21:44:58

log_file ve log_message'ı parametre olarak kabul eden bir write_logFile işlevi oluşturduk. Fonksiyonun içinde, parametrelere ve formatlama seçeneklerine bağlı olarak geçerli tarih ve saati birçok formatta alan Get-Date cmdlet'ini kullandık.

ToString() yöntemi, tarih ve saatin dize gösterimi için bir format belirtmemize olanak tanır. ToString() yöntemi için mevcut olan çeşitli biçimlendirme seçeneklerini kullanabiliriz:

  • "yyyy" biçim belirleyicisi yılı dört haneli olarak içeriyordu.
  • "MM" biçim belirticisi ayı iki haneli olarak içeriyordu.
  • "dd" biçim belirticisi günü iki rakamla içeriyordu.
  • "HH" biçim belirleyicisi, saati 24 saat biçiminde iki basamaklı olarak içeriyordu.
  • "mm" biçim belirleyicisi dakikayı iki basamaklı olarak içeriyordu.
  • "ss" biçim belirticisi iki basamaklı ikinciyi içeriyordu.

Örneğin, toString() yöntemini yyyy/MM/dd SS:mm:ss formatıyla sağladık ve artı (+) ifadesini kullandık. ) operatörünü kullanarak time_stamp'ı log_message ile birleştirerek log_message'ı oluşturun.

İçerik Ekle cmdlet'i, bir dosyaya içerik ekleyen bir PowerShell cmdlet'idir. Bir dosyanın sonuna yeni içerik ekler veya yeni bir dosya oluşturup ona içerik ekler. Bir dosyaya metin, sayılar, nesneler veya bir cmdlet'in veya işlevin çıktısını eklemek için İçerik Ekle cmdlet'ini kullanabiliriz. Örneğin, bu cmdlet'i log_message'ı log_file'a yazmak için kullandık.

Yazma Çıkışı Cmdlet'ini kullanma

Bir günlük dosyasına yazmak için write_logFile işlevi içindeki İçerik Ekle yerine Write-Output cmdlet'ini kullanın.

Yazma Çıkış Cmdlet'ini kullanın:

function write_logFile{
    Param ([string]$log_file, $log_message)
    $time_stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
    $log_message += $time_stamp
    Write-Output $log_message >> $log_file
}
write_logFile -log_file "D:\Logs\output.log" -log_message "Writing to the log file at "
Get-Content "D:\Logs\output.log"

ÇIKTI:

Writing to the log file at 2023/01/05 22:41:49

`Add-Content cmdlet'ini kullanarak çıktıyı log dosyasına yazarken Get-Date cmdlet'ini ve toString() yöntemini tartıştık. Bu bölümde Write-Output cmdlet'ini >> operatörüyle kullandık.

Write-Output cmdlet'i, bir komutun veya betiğin sonuçlarını konsola veya başka bir cmdlet'e veya işleve gönderen bir PowerShell cmdlet'idir. Bir dize, bir sayı, bir Boolean değeri, bir dizi veya bir cmdlet'in veya işlevin çıktısı gibi herhangi bir nesnenin çıktısını alabilir. Örneğin, >> operatörünü kullanarak log_message dosyasını log_file dosyasına yazmak için Write-Output cmdlet'ini kullandık Bu, içeriğin üzerine yazmak yerine dosyaya ekler.

Out-File Cmdlet'ini kullanma

Bir günlük dosyasına yazmak için write_logFile işlevi içindeki İçerik Ekle yerine Out-File cmdlet'ini kullanın.

Yazma Çıkış Cmdlet'ini kullanın:

function write_logFile{
    Param ([string]$log_file, $log_message)
    $time_stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
    $log_message += $time_stamp
    $log_message | Out-File -FilePath $log_file -Append
}
write_logFile -log_file "D:\Logs\output.log" -log_message "Writing to the log file at "
Get-Content "D:\Logs\output.log"

ÇIKTI:

Writing to the log file at 2023/01/05 22:57:54

Bu bölümde Out-File cmdlet'ini dikey çizgi (|) operatörüyle birlikte kullandık. Out-File cmdlet'i herhangi bir işlemin, betiğin veya komutun çıktısını bir dosyaya gönderir veya yeni bir dosya oluşturur ve çıktıyı ona yazar. Ek olarak, işlem hattına çıktı oluşturan herhangi bir komutun veya ifadenin çıktısını kaydedebilir. Örneğin, bu cmdlet'i log_message parametresini -Append parametresini kullanarak log_file dosyasına eklemek için kullandık.

İlgili makaleler