Yazar: admin

  • Windows Servislerinizi Telegram Bildirimiyle İzleyin

    Merhaba,

    Bu makalede, belirlediğim Windows servislerinin durumlarını her beş dakikada bir kontrol ederek, herhangi bir servis durduğunda Telegram üzerinden bildirim almayı nasıl sağlayabileceğinizi anlatacağım.

    Bu makalede, örnek senaryo olarak Exchange servisleri üzerinden anlatım yapılacaktır.

    Adım 1: Telegram Bot Oluşturma

    Telegram’da @BotFather ile konuşma başlatın.

    Görüldüğü üzere /newbot ile bir isim belirleyin.

    Size verilen API Token değerini kaydedin. (Örn: 123456789:ABC-DEF1234ghIkl...)

    Botu kendi hesabınıza veya bir gruba ekleyin.

    Chat ID öğrenmek için:

    Telegram grubunu tarayıcıda açtığınızda, ekranda görünen ve – işareti ile başlayan Chat ID’yi not edin.

    Aşağıda verilen PowerShell scriptinde yer alan Bot Token ve Chat ID alanlarını, kendi Telegram botunuzun bilgilerine göre düzenleyiniz.

    # Telegram bot bilgileri
    $token  = "BOT_TOKENINI_YAZ"
    $chatId = "CHAT_IDINI_YAZ"
    
    # İzlenecek Exchange servisleri
    $services = @(
        "Microsoft Exchange Transport Log Search",
        "Microsoft Exchange Transport",
        "Microsoft Exchange Throttling",
        "Microsoft Exchange Mailbox Transport Submission",
        "Microsoft Exchange Service Host",
        "Microsoft Exchange RPC Client Access",
        "Microsoft Exchange Replication",
        "Microsoft Exchange Emergency Mitigation Service",
        "Microsoft Exchange Mailbox Replication",
        "Microsoft Exchange Mailbox Assistants",
        "Microsoft Exchange Information Store",
        "Microsoft Exchange Health Manager Recovery",
        "Microsoft Exchange Health Manager",
        "Microsoft Exchange Frontend Transport",
        "Microsoft Exchange Flighting Service",
        "Microsoft Exchange Search",
        "Microsoft Exchange EdgeSync",
        "Microsoft Exchange Mailbox Transport Delivery",
        "Microsoft Exchange DAG Management",
        "Microsoft Exchange Compliance Service",
        "Microsoft Exchange Anti-spam Update",
        "Microsoft Exchange Active Directory Topology",
        "Microsoft Exchange Compliance Audit"
    )
    
    foreach ($service in $services) {
        try {
            $s = Get-Service -DisplayName $service -ErrorAction Stop
            if ($s.Status -ne "Running") {
                $msg = "UYARI 🚨: '$service' servisi $(Get-Date) tarihinde $($s.Status) durumda!"
            } else {
                continue
            }
        }
        catch {
            $msg = "UYARI ⚠️: '$service' servisi bulunamadı! (Makine: $env:COMPUTERNAME)"
        }
    
        # Telegram bildirimi gönder
        $url  = "https://api.telegram.org/bot$token/sendMessage"
        $body = @{ chat_id = $chatId; text = $msg }
        Invoke-RestMethod -Uri $url -Method Post -Body $body
    }
    

    Test amacıyla Exchange servislerinin bulunmadığı bir makine üzerinde PowerShell scriptini çalıştırdım. Görüldüğü üzere script sorunsuz şekilde çalışmaktadır.

    Şimdi, Telegram üzerinde gelen bildirimleri kontrol edelim.

    Tüm konfigürasyon tamamlandı. Scripti C:\Scripts\ExchangeAllServicesCheck.ps1 dizini altında kaydettim. Kolaylık sağlaması için zamanlanmış görevi hazırladığım XML dosyası üzerinden oluşturacağım. Bu sayede PowerShell scripti her 5 dakikada bir belirlediğim servisleri kontrol edecek ve herhangi bir problem durumunda Telegram üzerinden bildirim gönderecektir.

    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2025-09-25T20:00:00</Date>
        <Author>Administrator</Author>
        <Description>Exchange servislerini izler, durduğunda veya bulunamadığında Telegram bildirimi yollar.</Description>
      </RegistrationInfo>
      <Triggers>
        <CalendarTrigger>
          <Repetition>
            <Interval>PT5M</Interval>
            <StopAtDurationEnd>false</StopAtDurationEnd>
          </Repetition>
          <StartBoundary>2025-09-25T20:00:00</StartBoundary>
          <Enabled>true</Enabled>
          <ScheduleByDay>
            <DaysInterval>1</DaysInterval>
          </ScheduleByDay>
        </CalendarTrigger>
      </Triggers>
      <Principals>
        <Principal id="Author">
          <UserId>S-1-5-18</UserId>
          <RunLevel>HighestAvailable</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
        <AllowHardTerminate>true</AllowHardTerminate>
        <StartWhenAvailable>true</StartWhenAvailable>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <IdleSettings>
          <StopOnIdleEnd>false</StopOnIdleEnd>
          <RestartOnIdle>false</RestartOnIdle>
        </IdleSettings>
        <Enabled>true</Enabled>
        <Hidden>false</Hidden>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <WakeToRun>false</WakeToRun>
        <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
        <Priority>7</Priority>
      </Settings>
      <Actions Context="Author">
        <Exec>
          <Command>powershell.exe</Command>
          <Arguments>-ExecutionPolicy Bypass -File "C:\Scripts\ExchangeServiceCheck.ps1"</Arguments>
        </Exec>
      </Actions>
    </Task>
    

    Görev Zamanlayıcı üzerinden, aşağıda görüldüğü gibi hazırlanmış görevi içe aktarıyorum.

    Artık bu zamanlanmış görev, her beş dakikada bir hazırlamış olduğumuz PowerShell scriptini çalıştıracaktır. Bir sorun oluştuğunda Telegram botu devreye girerek bildirim gönderecektir. Botun düzgün çalışabilmesi için, ilgili sunucunun api.telegram.org adresini DNS üzerinden çözebilmesi ve HTTPS (443) bağlantısı kurabilmesi gerekmektedir.

  • Veeam ve StoreOnce ile Immutable Yedeklerinizi Güçlendirin

    Veeam V12 ile beraber StroreOnce üzerine aldığınız yedekler artık değiştirilemez ve silinemez şekilde saklanıyor. Bu makalede Veeam ile StoreOnce üzerinde değiştirilemez ve silinemez yedekleri nasıl oluşturabileceğinizi göstereceğim.

    Öncelikle StoreOnce arayüzümüzü açalım.

    İlk olarak, Dual Authorization’ı aktif etmemiz gerekiyor. Bu seçenek, belirli görevlerin ikinci bir kişi tarafından onaylanmasını sağlar. Örneğin, bir Immutable özelliğinin kapatılması durumunda, bu işlemin ikinci bir kullanıcının onayına sunulması gerekir. Bu özelliğin amacı, tek bir admin kullanıcısının silme veya belirli güvenlik özelliklerini kapatma gibi işlemleri tek başına gerçekleştirmesini engellemektir.

    Dual Authorization menüsünden “Configure Dual Authorization” seçeneğine tıklayalım.

    Burada sadece “Enable Dual Authorization” seçeneğini açmamız yeterli.

    Özelliği aktif ettikten sonra kullanıcı oluşturmamız gerekiyor. “Settings” menüsü altındaki “Users” bölümünden securityuser isimli bir hesap oluşturuyorum. Bu hesaba, gösterildiği şekilde “SecurityOfficer” rolünü ekliyorum.

    Buraya kadar ilgili özelliği aktif ettik. Şimdi sıra, Catalyst Store üzerindeki “Maximum ISV Controlled Data Retention” kısmını 365000 olarak ayarlamaya geldi.

    HPE StoreOnce üzerinde tüm işlemleri tamamladık. Şimdi Veeam konsoluna geçelim. “Backup Repositories” kısmında, ilgili StoreOnce cihazımın “Properties” menüsüne giriyorum.

    “Repository” kısmında, “Make recent backups immutable for” seçeneğini etkinleştiriyorum.

    Immutable olmasını istediğimiz ilgili yedekleme görevini düzenleyelim. “Keep certain full backups longer for archival purposes” seçeneğini aktif edelim.

    “Keep certain full backups longer for archival purposes” kısmında “Configure” seçeneğine tıklayalım. Burada, yedekleme planınıza göre değiştirilemez ve silinemez olmasını istediğiniz yedekleme ayarlarını yapabilirsiniz. Haftalık yedeklerimin saklanmasını istediğim için aşağıdaki şekilde konfigüre ettim.

    Tüm bu ayarları yaptığınızda, haftalık, aylık veya yıllık yedekleriniz StoreOnce üzerinde silinemez ve değiştirilemez olarak işaretlenecektir. Veri tutma politikanıza göre günceleri ve zamanlamayı değiştirebilirsiniz.

    Bu şekilde alınan bir yedeklemeden örnek bakalım.

    Görüldüğü üzere, yedeklemeler artık Immutable olarak saklanıyor.

    HPE StoreOnce ve Veeam v12 ile birlikte, silinemez ve değiştirilemez yedekleme bu kadar basit.

    Son bir uyarı olarak, SecurityUser şifresini olabildiğince karmaşık tutmaya özen gösterin. Bu şifreye sahip birisi, Catalyst Store’u tamamen silebilir. Bu yüzden şifreleri güncel bir yerde saklamalısınız. Ayrıca, StoreOnce cihazınızın ILO bağlantısını da oldukça korumalısınız. Saldırgan, ILO bağlantısı sayesinde cihazın disklerini sıfırlayabilir.

    Eğer sorularınız olursa, yorumlara yazabilirsiniz.

  • PowerShell ve Home Assistant ile Bildirim Gönderimi

    Merhabalar,

    Uzun bir süredir akıllı ev ekosistemine entegre olabilmek amacıyla Home Assistant ile çalışmalar yapıyorum. Başlıktan da anlayabileceğiniz üzere, bu makalede PowerShell ile Home Assistant Webhook kullanarak mobil cihazıma Home Assistant uygulaması üzerinden nasıl bildirim gönderebileceğini anlatacağım.

    Özellikle müşterilerimizin public servislerini belirli aralıklarla ping yoluyla izleyerek, uptime durumlarını kontrol ettiğimiz senaryolar oldukça yaygın. Şu ana kadar bu işlemi üçüncü parti uygulamalarla yapıyordum. Ancak, Home Assistant’ın sunduğu esneklik ve özelleştirilebilirlik sayesinde bu işlemi kendi altyapımda nasıl yapabileceğimi görmek istedim.

    Bu makalede, belirli bir public IP adresine her 1 dakikada bir ping gönderip, eğer ping başarısız olursa Home Assistant üzerinden mobil cihazıma push bildirim göndermeyi ele alacağım. Böylece, dış kaynaklı bir hizmete bağımlı olmadan, kendi sistemlerim üzerinde izleme yapabileceğim.

    İlk olarak kullanacağım powershell scripti aşağıdaki gibidir.

    #$website = "hakankaplanoglu.com.tr"
    $interval = 60 # saniye
    
    while ($true) {
        $ping = Test-Connection -ComputerName $website -Count 1 -Quiet
        
        if (-not $ping) {
           Invoke-RestMethod -Uri "http://192.168.2.36:8123/api/webhook/ping" -Method POST
        }
        
        Start-Sleep -Seconds  $interval
    }
    

    Bu PowerShell scripti ile her 60 saniyede bir belirli bir web sitesine ping atılacak. Eğer ping erişimi başarısız olursa (timeout’a düşerse), Home Assistant’a belirttiğimiz URL üzerinden bir bağlantı sağlanacak. Bu işlem için PowerShell scriptinde “/webhook/ping” yolunu kullanacağız. Bu webhook’u Home Assistant üzerinde oluşturacağız ve script bu webhook’u tetikleyecek.

    Görsel düzenleyicede problem yaşayanlar için kod halini kullanabilirsiniz.

    description: ""
    mode: single
    trigger:
      - platform: webhook
        allowed_methods:
          - POST
          - PUT
        local_only: true
        webhook_id: ping
    condition: []
    action:
      - action: notify.mobile_app_hakankaplanoglu_com_tr
        metadata: {}
        data:
          title: Ping Erişimi Kayboldu
          message: hakankaplanoglu.com.tr Web Sitesine Erişim Sorunu
    

    Bütün operasyon bu kadar. Telefonumuza gelen bildirime bakalım.

    Bu şekilde powershell ile bildirim gönderimini farklı farklı senaryolarda çeşitlendirebilirsiniz. Ayrıca Home Asistant sunucunuzu internete açarak, WebHook url adreslerini kullanabilirsiniz.

  • vCenter üzerinde Migrate tuşu pasif görünüyor

    Merhaba,

    Bugün danışmanlığını yaptığımız bir müşteride, bakım çalışmaları sırasında ESXi sunucularının firmware ve ESXi güncellemeleri yapılırken bazı sanal makinelerin ESXi hostları arasında taşınamadığını ve migrate butonunun pasif olduğunu gözlemledik. Kısıtlı bir zamanımız olduğu ve ilgili sanal makineleri kapatmamız mümkün olmadığı için, aşağıda sunacağım çözüm önerisi işimize yaradı.

    Bu sorun genellikle bir sanal makine yedeği alındıktan sonra yedekleme yazılımının vCenter veritabanında gerekli etiketi kaldırmamasından kaynaklanmakta.

    Sorun çözümü için vCenter’a giriş yapın ve ardından ilgili sanal makineye tıklayın.

    Tarayıcınızdaki url adresini kopyalayın. Örnek,

    https://vcenter.hakan.local/ui/#?extensionId=vsphere.core.vm.summary&objectId=urn:vmomi:VirtualMachine:vm-244:321d44-b617-4b32-be19-3445123c5ba&navigator=vsphere.core.viTree.hostsAndClustersView

    Yukarıda görülen örnekten yola çıkarak kalın olarak belirtilen kısmı not alın.

    https://vcenter.hakan.local/mob/?moid=AuthorizationManager&method=enableMethods

    Yukarıdaki adresi kendi vcenter adresinize göre düzenleyin ve administrator@vsphere.local kullanıcısı ile oturum açın.

    Karşınıza yukarıdaki ekran gelecektir.

    İlk bölümde entity alanında MOID yazan kısmı not aldığımız vm-xxx olarak değiştirin.

    İkinci dolduracağımız alana geçelim. Method ksımına “<method>RelocateVM_Task</method>” olacak şekilde dolduralım.

    Invoke Method ile işlemi onaylayın.

    Artık sanal sunucu üzerinde migrate butonu aktif olacak ve istediğiniz gibi vmotion yapabiliyor durumda olacaksınız. Bu makaleye rağmen migrate seçeneği düzelmedi ise, vCenter sunucusunun servislerini restart edebilirsiniz.

    *Bu gibi durumlarda çoğu zaman ilgili makine kapatılmak süratiyle envanterden çıkarılıp, tekrar #VMware sunucuya ekleniyor. Çoğu zaman çözüm oluyor fakat envanterden remove edilmesi durumunda ilgili sanal sunucunun geçmiş task ve performans geçmişi silinmekte. Mümkün olduğunca bu tarz durumlarda sanal makineleri envanterden çıkarmadan çözüm yoluna gitmek daha sağlıklı olacaktır.

  • VMware Sanal Sunucu EVC Seçeneği

    Merhaba,

    vCenter cluster’ımda sanal makine başına EVC modunu etkinleştirmeye çalışırken, EVC modunun olmadığını gördüm.

    Eğer sizde yukarıdaki gibi configure sekmesinin altında EVC seçeneğini göremiyor durumda iseniz, ilgili sanal makinenin hardware seviyesini 14 veya daha üstüne yükselmeniz gerekir.

    İlgili sanal sunucuya sağ tıklayın ve ardından Compatibilty menüsü altından Upgrade VM Compatibility seçeneği ile hardware level yükseltme işlemini yapın.

    Bütün işlem bu kadar. Artık sanal makinenizde EVC modunu ayarlayabilirsiniz.

    Teşekkürler.

    HAKAN

  • Varsayılan olarak Putty aktif oturumu loglasın

    Bugün birçok cihaza SSH bağlantısı yaparken, çıktıları kaydetmek istedim. Ancak her seferinde Putty özelliklerinden loglamayı manuel olarak etkinleştirmem gerekiyordu. Bu yazıda, birlikte Putty’in varsayılan ayarlarını değiştirerek oturum loglama işlemini nasıl standart hale getirebileceğimizi inceleyeceğiz.

    Putty’i açın ve Session – Logging tabına gelin.

    Her Putty oturumunda Log dosya adını bağlandığınız adres ve zaman bilgisi ile kaydetmek için, log file name kısmını “C:\log\&H&Y&M&D-&T.log” olacak şekilde kendi dizin yolunuza göre değiştirin.

    Son olarak Session kısmına geri gelin.

    Default Settings tıkladıktan sonra Save edin. Bundan böyle Putty her açıldığında belirtiğiniz şekilde log dosyasını kaydedecektir.

  • Dell Sunucularda SupportAssist Çıktısına Göre Doğru VMware Compatibility Driver Bulma

    Vmware ESXi kurulumlarında veya upgrade çalışmalarında bizler en çok driver ve firmware uyumluluğuna dikkat etmekteyiz.

    Driver ve Firmware uyumluluklarını kontrol ederken VMware Compatibility sitesi üzerinden en doğru driver’ı görmekteyiz. Fakat Qlogic HBA kartını örnek verecek olursak, birden fazla modeli bulunmakta bu kartın. Bu modeller arasında driver’lar değişebilmekte.

    Doğru driverı bulmak için ilgili PCI kartın PCI ID bilgileri ile VMware üzerinde arama yapmalıyız.

    PCI kartların ID’leri ESXi clie ile rahatça bulunmakta. Fakat bu makalede Dell SupportAssist çıktısı üzerinde nasıl PCI ID bulabileceğimizi göstereceğim.

    Hemen sol menüden PCI Devices sekmesine geliyorum ve ilgili PCI kartımı seçiyorum. Alt kısımda görüleceği üzere PCI ID mevcut. Bu PCI ID “VID:DID:SVID:MAXSSID” den oluşmakta.

    Bu değerler üzerinden VMware Compatibility IO Devices kısmında arama gerçekleştiriyorum.

    Update and View Results ile doğru kart driverını buluyorum.

    Görüldüğü üzere PCI kartımızı ve uyumlu sürümleri nokta atışı tespit ettik.

    Bir başka makale’de görüşmek üzere.

  • vCenter Upgrade Sırasında Exception occurred while unzipping patch script Hatası

    VMware vCenter 7.x sürümünde uğgrade sırasında “Error in method invocation Exception occurred while unzipping patch script, please retry after sometime” hatasına denk gelebilirsiniz.

    Bu hata mesajı genellikle vCenter’a ip adresi ile login olunduğunu oluşmakta. Tarayıcınız üzerinde vCenter’ı FQDN ile oturum açtığınızda çözülecektir. Örnek. vCenter01.sirket.local

  • ESXi Cli SSH üzerinden memory bilgisi alma

    Merhaba,

    Esxi üzerinden memory seri numarası, model vs bilgilerini görmek için aşağıdaki kodu doğrudan kullanabilirsiniz.

    smbiosDump 

    Bu komut doğrudan hardware ile ilgili bilgi verecektir. Sadece memory bilgisini görmek için aşağıdaki grep komutuyla filtrelemek mümkün.

    smbiosDump | grep -C 5 "Memory Device"
  • Bluetooth Hoparlörün Ses Açma ve Kısma Kontrolünün Çalışmaması

    Windows 10 yüklü kişisel bilgisayarımda kullanmak için bir bluetooth hoparlör satın aldım. Oldukça güzel çalışıyorlar. Fakat sesi yükseltmek veye kısmak istediğimde, Windows’un ses ile ilgili bir ayar yapmadığını gördüm. Ses 0 konumunda sessize alıyordu. Fakat sesi yükseltmek istediğimde her ne seviyede olursa olsun ses en yüksekte veriliyordu.

    Örnek verecek olursam, ses seviyesi “2” veya “88” olsa bile en yüksekte çalıyordu.

    Bu sorunu çözümek için bir araştırma yaptım ve kayıt defteri üzerinden “DisableAbsoluteVolume” değerini 1 yaparak çözüldüğünü gördüm. Bu değişiklikten sonra bilgisayarımı yeniden başlattım ve sorun çözüldü.

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AVRCP\CT