7.01.2026

PSWindowsUpdate SendReport parametresi

Bir süredir PSWindowsUpdate modülünü kullanıyordum, ama SendReport parametresini kullanmayı bilmiyordum. Şu adresteki açıklamalara göre:

Install-WindowsUpdate -ComputerName MG-PC -MicrosoftUpdate -AcceptAll -AutoReboot -SendReport
-PSWUSettings @{SmtpServer="your.smtp.server";From="sender@email.address";To="recipient@email.address";Port=25} -Verbose

gibi bir kullanım mümkün. SenReport parametresi ile birlikte bir de PSWUSettings parametresi sonrasında verilen bir değişkende eposta sunucu adı, port numarası, kimden ve kime bilgileri de verilmiş. Ya da alternatif olarak PSWindowsUpdate modülünün kurulu olduğu

C:\Program Files\WindowsPowershell\Modules\PSWindowsUpdate

klasörününn altında PSWUSettings.xml adında bir dosya oluşturularak içine XML formatında bu bilgilerin kaydedebileceği ve sonradan kullanılabileceği belirtilmiş.

$setpath = "C:\Program Files\WindowsPowerShell\Modules\PSWindowsUpdate\PSWUSettings.xml"
@{SmtpServer="your.smtp.server";From="sender@email.address";To="recipient@email.address";Port=25} |
Export-Clixml -Path $setpath
Install-WindowsUpdate -ComputerName MG-PC -MicrosoftUpdate -AcceptAll -AutoReboot -SendReport -Verbose


6.01.2026

Sysmon - ek bilgiler

Sysmon konusunda yeni bazı şeyler öğrendim. Eski bazı kullanımları tekrar vurgulayayım.

sysmon64 -i        # Sysmon64.exe dosyasını C:\Windows klasörünün altına taşı ve hizmet olarak kur
sysmon64 -c # Mevcut yapılandırmayı göster
sysmon64 -s # Yapılandırma şemasını göster
sysmon64 -u # Kurulumu kaldır

Varsayılan olarak bir xml dosyası gösterilmeksizin sadece -i ile (veya sonradan -c -- ile sıfırlanarak) yapılandırıldığında sysmon aşağıdaki gibi bir durumda oluyor.

Sysmon64 -c
Current configuration:
- Service name:      Sysmon
- Driver name:      SysmonDrv
- Config file:     
   C:\Users\administrator\Defaults

- HashingAlgorithms: SHA256
- Network connection: disabled
- Archive Directory: -
- Image loading:     disabled
- DNS lookup:     
    enabled
No rules installed

Yapılandırma şemasını (configuration schema) ekrana bastırınca <option> bölümü çıkıyor.

    <options>
      <!-- Command-line only options -->
      <option switch="i" name="Install" argument="optional" noconfig="true" exclusive="true" />
      <option switch="c" name="Configuration" argument="optional" noconfig="true" exclusive="true" />
      <option switch="u" name="UnInstall" argument="optional" noconfig="true" exclusive="true" />
      <option switch="m" name="Manifest" argument="none" noconfig="true" exclusive="true" />
      <option switch="z" name="ClipboardInstance" argument="required" noconfig="true" exclusive="true" />
      <option switch="t" name="DebugMode" argument="optional" noconfig="true" />
      <option switch="btf" name="BTF" argument="optional" noconfig="true" />
      <option switch="service" name="Service" argument="none" noconfig="true" />
      <option switch="s" name="PrintSchema" argument="optional" noconfig="true" exclusive="true" />
      <option switch="nologo" name="NoLogo" argument="none" noconfig="true" />
      <option switch="accepteula" name="AcceptEula" argument="none" noconfig="true" />
      <option switch="-" name="ConfigDefault" argument="none" noconfig="true" />
      <!-- Configuration file -->
      <option switch="a" name="ArchiveDirectory" argument="required" />
      <option name="CaptureClipboard" argument="none" />
      <option switch="d" name="DriverName" argument="required" />
      <option switch="dns" name="DnsQuery" argument="optional" rule="true" />
      <option switch="g" name="PipeMonitoring" argument="required" rule="true" forceconfig="true" />
      <option switch="h" name="HashAlgorithms" argument="required" />
      <option name="DnsLookup" argument="required" />
      <option switch="k" name="ProcessAccess" argument="required" rule="true" forceconfig="true" />
      <option switch="l" name="ImageLoad" argument="optional" rule="true" />
      <option switch="n" name="NetworkConnect" argument="optional" rule="true" />
      <option switch="r" name="CheckRevocation" argument="optional" />
      <option name="FieldSizes" argument="required" />
    </options>

Burada option bölümünün altındaki switch'leri kullanarak yapılandırmayı değiştirmek mümkün. Örneğin varsayılan SHA256 hash'i yerine tüm hash'leri hesaplatmak için -h switch'ini aşağıdaki gibi kullanmak mümkün.

Sysmon64 -c -h *

Bunun sonucunda yapılanmamız aşağıdaki gibi olur.

Sysmon64 -c
Current configuration:
- Service name:      Sysmon
- Driver name:      SysmonDrv
- Config file:     
   "C:\Windows\Sysmon64.exe" -c -h *

- HashingAlgorithms:
SHA1,MD5,SHA256,IMPHASH
- Network connection: disabled
- Archive Directory: -
- Image loading:     disabled
- DNS lookup:     
    enabled
No rules installed

Ya da notepad.exe tarafından yapılan tüm NetworkConnect işlemlerini kayıt altına almak için "n" switch'i kullanılabilir.

Sysmon -c -n notepad.exe

Bunun sonucundaki yapılandırmamız da şu şekilde olur.

Sysmon64 -c
Current configuration:
- Service name:      Sysmon
- Driver name:      SysmonDrv
- Config file:     
   "C:\Windows\Sysmon64.exe" -c -n notepad.exe

- HashingAlgorithms: SHA256
- Network connection:
enabled
- Archive Directory: -
- Image loading:     disabled
- DNS lookup:     
    enabled
No rules installed

Görüldüğü gibi HashingAlgorithms alanı tekrar sadece SHA256'ya döndü, ama config file bölümünü en son kullandığımız komut satırını gösteriyor. Yani bu şekilde yapılan değişiklikler önceki değişikliklerin üzerine yazar, ekleme yapmaz.

Sysmon'un bir de -m komut satırı anahtarı var. Bu, aslında sysmon'u bir hizmet olarak kurmaz ve çalıştırmaz. Ama başka bir makinede toplanan olay kayıtları varsa bunları gerektiği şekilde yerel makinede görebilmemiz için tanımlamaları oluşturur. Elbette böyle bir senaryoda sysmon makinede ilk kez çalıştırılıyor olabilir, bu sebeple -accepteula anahtarı ile birlikte kullanılması gerekebilir.

sysmon64 -m -accepteula

Kurulumlar sırasında Sysmon kendini %systemroot% klasörünün içine kopyalar ve bir hizmet oluşturarak bu kopyanın çalışmasını sağlar. Varsayılan değerlerde sysmon aşağıdaki olaylara ait kayıtlar oluşturur:

  • ProcessCreate
  • ProcessTerminate
  • DriverLoad
  • FileCreateTime
  • SHA256 hash hesaplaması

Bir sunucuda çalışan sysmon hizmeti çok kolay olarak tespit edilebilir. Bu hizmetin ismini değiştirebilsek güzel olmaz mıydı. Olur, onu da sysmon64.exe'yi yeniden adlandırarak yapabiliriz.

ren .\sysmon64.exe .\abc123.exe
.\abc123.exe -i -accepteula


5.01.2026

Powershell betiklerine komut satırından parametre göndermek

Powershell betiklerine komut satırından bir bilgi (parametre, argument) göndermenin varsayılan yöntemi şöyle:

.\betik.ps1 -file D:\dosya.txt -ComputerName pc1

Burada -File parametresi küçük/büyük harf duyarlı değil. İçerde de şu şekilde işlenebilir:

param(
[string]$File,
[string]$Computername
)

Eğer -file ve -computername değerlerini parametre isimlerini/etiketlerini kullanmadan şu şekilde göndermek istersek

.\betik.ps1 D:\dosya.txt pc1

bu durumda işlerken şu şekilde bir konum belirleme mekanizması kullanmalıyız.

param(
[Parameter(Position=0)]
[string]$File,
[Parameter(Position=1)]
[string]$Computername
)

Ama eski tip DOS komutları bazen tire "-" karakteri yerine bölü "/" karekteri ile parametre göndermeyi tercih ederler.

Ya C argument dizisi benzeri şu yöntem kullanılabilir:

foreach ($arg in $Args) {
Write-Host "arg : $arg"
}

Öyle birşey istiyorum ki, betiğe -file ile, isimsiz ve hatta /f gibi bir parametre ile bile göndersek dosya.txt betik tarafından alınabilsin.

param(
    [int]$File
)

if (-not $Input -and $args.Count -ge 1) {
    if ($args[0] -match '^/f$') {
        $Name = $args[1]
    }
}

 Çoklu parametrelere girmedim.

4.01.2026

localsearch-3

Fedora'yı 43'e yükselttikten sonra durup dururken localsearch hakkında bilgi sahibi oldum. Sürekli çalışan bir süreç, localsearch-extractor-3 adında.

journalctl --user -u localsearch-3

ile bakınca çok sayıda "extractor subprocess died unexpectedly" hataları vermiş.

Hepsi localsearch adındaki bir paketin bileşenleri. Eski adı tracker/mine gibi birşey. 43 sürüm sonrası localsearch olmuş. /home klasörü altındaki dosya içeriklerini endekslemeyi amaçlıyor. Ama ben böyle otomatik arka plan işlerini sevmiyorum.

Bu işi devre dışı bırakmak için

systemctl --user stop localsearch-3.service
systemctl --user mask localsearch-3.service

komutları gerek.

Gnome aracılığıyla kapatmaktan bahsedilmiş ama galiba sürüm 43 sonrası bu ayarlar artık yok. Bunun yerine

gsettings set org.gnome.desktop.search-providers disable-external true

gibi bir yöntem var, ama sadece hizmeti devre dışı bırakmakla yetindim. 

Tamamen kaldırmak için ise

sudo dnf remove localsearch localsearch-extractors

önerilmiş. Ama ilk başta durumu izlemek için kaldırmadım, zaten sistemimde localsearch-extractors paketi de kurulu değildi.