12.03.2025

Uzun powershell komutları tamamlanınca sesli uyarı versin

Powershell'de bazı komutların tamamlanması uzun sürebiliyor. Uzun sürsün, sorun değil. Ama bitince haberim olsa keşke diye düşünürken aklıma bir yöntem geldi.

Zaten profil dosyamın içinde en son komutun ne kadar sürdüğünü hesapladığım bir bölüm vardı.

    if ((Get-History).Length -gt 0)
    {
        $LastExecutionTime = [long]((Get-History)[-1].EndExecutionTime - (Get-History)[-1].StartExecutionTime).TotalMilliSeconds
    }

Her komut tamamlandığında bir sesli uyarı almak da istemiyorum. Ne zaman almak isterim diye kendime sordum, aldığım cevap 5 saniye oldu. Bana da mantıklı geldi. Bu if bloğunu şöyle güncelledim:

    if ((Get-History).Length -gt 0)
    {
        $LastExecutionTime = [long]((Get-History)[-1].EndExecutionTime - (Get-History)[-1].StartExecutionTime).TotalMilliSeconds
        if ($LastExecutionTime -gt 5000) {
            Play-Sound -Play "C:\Windows\Media\Windows Proximity Notification.wav"
        }
    }

Zaten Play-Sound diye bir fonksiyonum vardı. Yoksa onu da şu şekilde oluşturabilirdim:

function Play-Sound
{
    param
    (
        [string]$Play = "C:\Windows\Media\Alarm01.wav"
    
    $sound = New-Object System.Media.SoundPlayer;
    $sound.SoundLocation="$Play";
    $sound.Play()
}

Tabi bunların hepsi $profile dosyamın içindeki

  function profile {
  ...
  }

fonksiyonu içinde oluyor.