10.02.2026

Youtube arama sonuçlarını tarihe göre sıralamak

Youtube'da bir süredir arama sonuçları yüklenme tarihine göre sıralanamıyor. Bunu önemseyenler için Automation Avenue kanalındaki şu videoda bunu yapmanın "gizli" yolu anlatılmış.

Arama kutusunda bir kelime yazıp enter'a bastığımızda arama sonuçlarını sıralamak için sağ üst köşedeki  "filtreler" butonu aracılığıyla sadece "Popülerlik" veya "Alaka Düzeyi"ne göre sıralayabiliyoruz.


Popülerliğe göre sıraladığımda adres satırının en sonuna

&sp=CAM%253D

gibi bir parametre ekleniyor, alaka düzeyine göre sıraladığımda ise

&sp=CAASAA%253D%253D

gibi bir ifade. Bahsettiğim video, tarihe göre sıralamak için burayı elle düzelterek sadece

&sp=CAI

yapmayı öneriyor. Sondaki %253D  Base64 olarak encode edilmiş eşittir '=' karakteri. Bunu yazmayabilirim. Ama enter'a bastıktan sonra Youtube bunu otomatik ekleyecek.

9.02.2026

ipinfo.io ve request headers

Daha önce şurada ve öteki şurada yazdığım gibi IP adresindek konum bilgisine ulaşmak kolay. Bir de ipinfo.io hizmetini öğrendim. Yedek hizmetlerin olması güzel bişey.

ipinfo.io'nun dökümanlarında (elbette ücretsiz bir hesap oluşturup bir api-key edindikten sonra - örneğin 12345678)

curl -H "Authorization: Bearer 12345678" https://ipinfo.io/8.8.8.8

gibi bir komut ile sorgu yapılabileceğinden bahsetmiş. Powershell'de bunun eşdeğeri

irm -uri https://ipinfo.io/8.8.8.8 -headers @{Authorization: "Bearer 12345678"} -useb

olabilir. api-key header içinde gidiyor, ilk bağlantıda verdiğim ipstack.com için bu adres satırından GET ile (request string içinde) gidiyordu. ipinfo POST istemiş.

Ücretsiz bir hesap oluşturmadan da sorgu yapılabiliyor, ama sorguların sonunda dönen JSON verisinde

readme   : https://ipinfo.io/missingauth

gibi bir ilave alan da oluyor ve tıklandığında açılan sayfada hesap açılması öneriliyor. Hesap açılmadan (without authorization) yapılan sorguların artık "eski yöntem" (legacy) olduğu söylenmiş ve hesap açılması salık verilmiş.

3.02.2026

İki klasörün içindeki tekrarlayan dosyaları bulmak

D:\dizin1 ve D:\dizin2 gibi iki klasörüm ve içinde bazı dosyalarım var. Acaba Dizin1'de olan dosyaların herhangi biri Dizin2'de de olabilir mi? Görmek için önce iki dizinin de dosyalarını birer array değişkene aktardım.

$ar1 = dir -path D:\dizin1 -File
$ar2 = dir -path D:\dizin2 -File

Sonra da dizin1'deki her dosyanın dizin2'de olup olmadığını görmek için bir döngü oluşturdum. 

$ar1 | % {if ($_ -in $ar2) {$_}}

Bu şekilde olmadı. Neden? Çünkü $ar1'in elemanlarından her birini temsil eden $_ nesnesi tam olarak $ar2'nin  elemanlarından biri ile tamamen aynı değildir. Çünkü içinde FullName gibi sadece dizin2'ye ait bazı alanlar da vardır ve tamamen aynı olamaz. Karşılaştırmayı nesnenin bütün özellikleri ile değil de sadece dosya adları (.Name) ile kısıtlayarak aşabilirim.

$ar1.Name | % {if ($_ -in $ar2.Name) { $_ }}

Elbette bu şekilde sadece D:\dizin1 ve D:\dizin2'nin doğrudan içindeki dosyaları karşılaştırabilirim. Eğer alt klasörlerini de dahil etmek istersem biraz daha işleme ihtiyacım var. Şimdilik fikir olarak bununla kalayım.

Bu yöntem D:\dizin1\resim1.jpg ile D:\dizin2\resim1.jpg dosyalarının aynı olduğunu, sadece dosya ismine bakarak teşhis eder. Dosyanın oluşturma tarihi, değiştirme tarihi, boyutu ve içeriğini kontrol etmez. Basit bir karşılaştırma.

Tüm içeriğe girmeden sadece dosya adı ve boyutu da hesaba katarak bir karşılaştırma yapmak da mümkün. Bunun için karşılaştırmayı Compare-Object ile yapmak gerekecek.

compare $ar1 $ar2 -Property Name, Length -IncludeEqual -ExcludeDifferent

Eğer son değiştirilme tarihleri birebir aynıysa -Property'den sonra LastWriteTime da eklenebilir.

2.02.2026

CSR dosyasının içeriğini görüntülemek

Sertifika talebinde bulunurken oluşan CSR dosyasını, Windows'da bulunan cerutil aracı ile görüntüleyebiliriz.

certutil -dump csr_file.txt

 

28.01.2026

Statik DNS kaydı ne zaman oluşturulmuş

Active Directory DNS sunucusu içinde bir statik kayıt acaba ne zaman oluşturulmuş diye merak ettim. Grafik arayüz gelişmiş seçeneklerle bile bunu göstermedi. Yaptığım bir aramada bu ve şu adreslere denk geldim.

RSAT yüklü olduğu (veya Powershell ActiveDirectory modülü olan) bir bilgisayar/sunucudan önce bu modülü import ederek (Bu modül, aslında Get-ADUser gibi bir komut kullanıldığında otomatik olarak import edilir. Ama modülü import etmeden Get-PSDrive cmdlet'i çalıştırılırsam aradığım şeyi görüntülemez) Get-PSDrive'ı çalıştırdığımda şunu gördüm:

Import-Module ActiveDirectory
Get-PSDrive
Name   Used (GB)   Free (GB) Provider      Root         CurrentLocation
----   ---------   --------- --------      ----         ---------------
AD                           ActiveDire... //RootDSE/

Evet, bir AD sürücüsü belirdi. Şu alt konteynere girdim:

Set-Location "AD:DC=bosb.lc,CN=MicrosoftDNS,DC=DomainDnsZones,DC=bosb,DC=lc"

Verdiğim bağlantılarda bu şekilde verildiği için ben de AD: şeklinde girdim ama aslında AD'nin bir sürücü olduğunu düşünürsek şu şekilde bir yol daha doğru:

"AD:\DC=bosb.lc,CN=MicrosoftDNS,DC=DomainDnsZones,DC=bosb,DC=lc"

Bu şekilde de cd yapılabilir. Bu adımdan sonra bulunduğum konumda bütün DNS kayıtları var. İstediğim DNS kaydının, örneğin cuma adındaki bir DNS kaydının oluşturulma ve değiştirilme tarihlerini görebilmek için yazmam gereken powershell komutları şöyle:

dir | ? Name -eq "cuma" | Get-ADObject -Properties Created,Modified | select Name, Created, Modified
Name  Created            Modified
----  -------            --------
metin 2.11.2020 09:13:44 19.12.2025 17:35:00

 

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