windows etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
windows etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

25.07.2025

Windows Update takibi

Yerel bilgisayarda Windows Update hizmeti hangi güncellemeleri yüklüyor bulmak kolay. Bunu uzaktaki bir bilgisayar için nasıl yapabiliriz? Windows Update session nesnesinin henüz indirmediği ve gizli olmayan güncellemeleri sorgulayarak olabilir:

Invoke-Command -ComputerName UZAKPC -ScriptBlock {
    $Session = New-Object -ComObject Microsoft.Update.Session
    $Searcher = $Session.CreateUpdateSearcher()
    $Searcher.Online = $true
    $Results = $Searcher.Search("IsInstalled=0 and IsHidden=0")

    $Results.Updates | ForEach-Object {
        [PSCustomObject]@{
            Title       = $_.Title
            Downloaded  = $_.IsDownloaded
            Installed   = $_.IsInstalled
            EULAAccepted= $_.EulaAccepted
        }
    }
} | Format-Table Title, Downloaded, Installed, EULAAccepted -AutoSize -Wrap

Ya da PSWindowsUpdate modülünü kurup, powershell'i yönetici olarak açtıktan sonra

Get-WUList -Computername UZAKPC

diyerek de yapabiliriz. Ama uzaktaki bir bilgisayar için her seferinde yönetici hakları ile yeni bir pencere açmamak için ilk yöntem daha iyi sanki. Sonrasında yeniden başlatmaya gerek olup olmadığını öğrenmek için şu yöntem kullanılabilir.


17.06.2025

MRT - malicious software removal tool

Windows sunuculara güncelleştirme gelmiş. Aralarında MRT güncellemesi de var.

Bu, gözüktüğü gibi 5.134 sürüme ait bir güncelleştirme. Peki mevcut sürümümüz kaç? Bunu görmek için farklı yöntemler var. Birincisi sysinternals aracı olan sigcheck ile mrt.exe dosyasının sürüm bilgisine bakmak.

sigcheck64 C:\Windows\system32\mrt.exe

Bunun sonucunda da mevcut sürümümün 5.132 olduğunu gördüm.

Buna alternatif Get-Item ile dosya sürümü sorgulanabilir.

(Get-Item C:\Windows\System32\mrt.exe).VersionInfo.ProductVersion

Daha farklı bir yöntem ile Windows\debug klasörü altındaki mrt.log dosyasına bakılabilir.

cat C:\Windows\debug\mrt.log | sls "Removal Tool v" -Context 0,1 | select -last 1 

Nihai yöntem de mrt.exe doyasını çalıştırarak pencere başlığındaki sürüm numarasına bakmak.

Bunu sadece İngilizce yerelleştirmesi olan sistemlerde mi yapabiliyoruz, yoksa sadece sunucularda mı bilemiyorum ama Windows 11 Türkçe yerelleştirmeye sahip bilgisayarımda bu şekilde sürüm numarası gelmedi.

Her türlü sürüm eski. Hemen güncelleştirmek lazım.

Windows güvenliği ile ilgili bir de Güvenlik Zekası Güncelleştirme (Security Intelligence) sürümü önemli. Onu sorgulamak için de

(Get-MpComputerStatus).AntivirusSignatureVersion

kullanılabilir. 

20.04.2025

Windows 11 için tarifeli bağlantı

Bilgisayarımı kısıtlama olmadan bir kablosuz ağa bağlamak güzel bir şey. Ama bazı durumlarda kısıtlı paketi olan cep telefonu veya başka mobil bağlantılar üzerinden internete bağlanmam gerektiğinde Windows'un bütün güncellemelerini başlatıp kotayı doldurmasını istemiyorum. Bunun için Ayarlar > Ağ ve İnternet > Wi-Fi bölümünden istediğim kablosuz ağı seçip özelliklerinden "Tarifeli bağlantı" ayarını "Açık" konuma getirdim.


 Ya da bunun eşdeğerini komut satırından yapmak için önce mevcut kablosuz ağları bir sorgulayayım.
netsh wlan show profiles

Bu komutun çıktısında en alta doğru "Cost settings" bölümünde Cost kısmında "Unrestricted" yazıyorsa tarifeli değildir. Burada "Fixed" görmek gerek. Onun için aşağıdaki komutla bunu yapabilirim.

netsh wlan set profileparameter name="POCO X3 Pro" cost=Fixed

Bu şekilde Windows'un arka planda güncellemeler, OneDrive dosya yükleme ve indirmeleri gibi yüklerden kurtulabiliriz. Ama bazı üçüncü parti uygulamalar bu kurallara uymayabilir, kontrol etmekte fayda var.

10.04.2025

Powershell ile symbolic ve hard link oluşturma ve sorgulama

C: sürücümüzün kökünde büyük bir dosya oluşturalım.

fsutil file createnew buyuk-dosya.txt (5GB)

Şimdi de profil klasörümüze gelip bu dosyaya bir sembolik link oluşturalım. mklink komutu ile ve Powershell ile bunu aşağıdaki gibi yapabiliriz.

mklink sembolik-link.txt C:\buyuk-dosya.txt

New-Item -ItemType SymbolicLink -Name sembolik-link.txt -Target C:\buyuk-dosya.txt

Sembolik link yaratılacak nesne bir dosya değil de bir klasör olsaydı

mklink /D sembolik-klasor C:\hedefklasor

New-Item -ItemType SymbolicLink -Name sembolik-klasor -Target C:\hedefklasor 

Bir dosyaya hard link oluşturmak için ise

mklink /H sembolik-link2.txt C:\buyuk-dosya.txt

New-Item -ItemType HardLink -Name sembolik-dosya2.txt -Target C:\buyuk-dosya.txt

Hedefimiz bir klasör olsaydı hardlink yerine junction kullanmamız gerekecekti.

mklink /J junction-klasor C:\hedefklasor

New-Item -ItemType Junction -Name junction-klasor -Target C:\hedefklasor

Sembolik link durumunda orijinal dosyayı sildiğimizde sembolik link öksüz kalır, veriler gitmiş olur. Hardlink durumunda ise orijinal dosya silinse bile veriler silinmez, hardlink aracılığıyla erişilebilir.

Peki bu yöntemlerin herhangi biriyle oluşturulan linkler diskte ayrıca her kaplar mı? Cevap hayır. Gerek Sembolik gerekse hardlink diskte orijinal dosyadan başka yer kaplamaz. Linkler üzerinden dosya içeriği değiştiği zaman hardlink'lerin LastWriteTime özniteliği değişir, ama symbolik link'in değişmez.

Bu işlemlerin hepsi için yönetici yetkileri gerekir.

Ama aşağıdaki gibi var olan dosyaların özelliklerini sorgulamak için yönetici yetkileri gerekmez.

dir | select Name, LinkType, Target, Attributes


11.02.2025

Powershell, WMI, CIM ve wmic

Windows Instrumentation Model (WMI) yerine artık Common Information Model (CIM) kullanılıyor. WMI'ın yapabildiği (sanıyorum) herşeyi CIM ile de yapabiliyoruz. Daha hızlı ve daha güvenli. Bunun için Powershell'de gwmi (Get-WmiObject) yerine gcim (Get-CimInstance) kullanmak gerek.

Bir kurulumda hangi sınıflar (class) var nasıl görürüz? Harici araçlar var ama kurmak istemiyorum.

Get-CimClass -Namespace 'root/cimv2'

Burada root/cimv2 varsayılan namespace'imiz. Bu şekilde varsayılan namespace'imiz içindeki bütün sınıfları listeleyebiliyoruz. Eski cmdlet gwmi (Get-WmiObject) ile -List parametresi de mümkün:

gwmi -list

wmic komut satırı aracıyla powershell cmdlet'i arasında bir benzerik var. Powershell'de uzun uzadıya yazdığımı sınıf isimleri (Win32_OperatingSystem) gibi yerine wmic'te kısa parametreler var. Örneğin Powershell'de işletim sistemimizi sorgulamak için

gcim win32_operatingsystem | select name

yazarken wmic ile

wmic os get name

yazabiliyoruz.

Alt bilgi isimleri (name gibi) belirtmeden bir sınıftaki bütün verileri görmek için Powershell'de

gcim win32_operatingsystem | fl *

yazarken wmic eşdeğeri şöyle

wmic os get * /format:list

Uzak bilgisayarda bir sorgu çalıştırmak için (örneğin schedule hizmetine ait süreç kimliğini alalım)

wmic /node:UZAKPC service where "name='schedule'" get processid
gcim -cn UZAKPC | where name -eq schedule | select processid

wmic /filter parametresi aracılığıyla list, table, csv, xml, hform, htable gibi biçimlerde çıkıtı üretebilir. Bu bir dosyaya aktarılabildiği gibi

wmic computersystem get ChassisSKUNumber,Description,DNSHostName,Domain,Manufacturer,Model,PartOfDomain,PrimaryOwnerName /format:csv > computerinfo.csv

powershell ile birleştirilip tablo da yapılabilir

wmic computersystem get ChassisSKUNumber,Description,DNSHostName,Domain,Manufacturer,Model,PartOfDomain,PrimaryOwnerName /format:csv | ConvertFrom-Csv | Out-GridView

Windows 10 21H1 güncellemesinden sonra wmic artık aramızda değil. Kurmak için

DISM /Online /Add-Capability /CapabilityName:WMIC.Client~~~~0.0.1.0

yapılabilir.

---

https://www.pearsonitcertification.com/articles/article.aspx?p=1700427&seqNum=4
https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic

10.02.2025

Powershell'de komut satırı komutlarını kullanmak

Komut satırı ilginç bir terim. İngilizcesi de command prompt, bu da çok mantıklı değil. Ama ne kastedildiği anlaşılıyordur, umarım.

Powershell kullanırken iki dosyayı karşılaştırmak istiyorum.

Compare-Object -ReferrenceObject D:\klasor1\dosya1.txt -DifferenceObject D:\klasor2\dosya2.txt

gibi yazınca doğrudan dosya içeriğini karşılaştırmıyor. İçeriği karşılaştırmak için en basit yöntem her bir dosyanın ayrı ayrı hash'lerini hesaplatmak

Compare-Object -ReferrenceObject (Get-FileHash D:\klasor1\dosya1.txt) -DifferenceObject (Get-FileHash D:\klasor2\dosya2.txt)

 ya da düz metin dosyasıylsa içeriklerini okuyup 

Compare-Object -ReferrenceObject (Get-Content D:\klasor1\dosya1.txt) -DifferenceObject (Get-Content D:\klasor2\dosya2.txt)

karşılaştırmak gerek. Böyle uzun uzadıya yazmak yerine eski güzel günlerdeki basit fc komutunu kullanmak istiyorum.

fc D:\klasor1\dosya1.txt D:\klasor2\dosya2.txt

yazınca maalesef fc komutunu Format-Custom cmdlet'inin alias'ı olarak algılıyor. Ne yapmak gerek? Powershell'i bırakıp yeni bir komut satırı penceresi/sekmesi açıp komutu tekrar yazmak bir seçenek. Ama onun yerine cmd.exe'nin /C anahtarı daha kolay. Mevcut pencerenin komut geçmişinden dosya adlarını da bir daha yazmaya gerek kalmaz. Kısaca powershell'in içinden

cmd /c fc D:\klasor1\dosya1.txt D:\klasor2\dosya2.txt

yazınca sonuca ulaşabiliryorum.

2.02.2025

Dizüstü bilgisayarın bataryasının durumunu kontrol etme

Dizüstü bilgisayarların bataryaları zamanla ilk günkü kapasitelerini kaybederler. Bataryamızın fabrika çıkışındaki kapasitesi ile bugünkü kapasitesini karşılaştırmak istersek Windows'da powercfg komutunu kullanabiliriz.

powercfg /batteryreport

Bu bir htm formatında rapor dosyası üretecek, bulunduğumuz klasörde.  Tarayıcımızla açıp inceleyebiliriz. Bu dosyada "DESIGN CAPACITY" bölümünde gözüken bataryamızın fabrika çıkışındaki kapasitesi. "FULL CHARGE CAPACITY" bölümünde gözüken ise bugünkü kapasitesi.

Linux'ta ise bunu upower komutu ile yapabiliriz. Linux'ta bu iki aşamada oluyor. Önce upower ile mevcut cihazları listelemek gerek.

upower -e

Burada muhtemelen battery_BAT0 gibi bir şekilde isimlendirilen kaynağı kopyalayıp bir sonraki adımda upower'a -i parametresi ile birlikte yapıştırmak gerek:

upower -i /org/freedesktop/UPower/devices/battery_BAT0

Bu komutun çıktısında da energy-full-design bataryanın tasarlanan kapasitesini, energy-full ile bugünkü kapasitesini gösteriyor.

bugünkü kapasite / tasarlanan kapasite 'nin 0,8'den küçük olması bataryanın kapasitesinin ciddi düştüğü anlamına geliyor.

10.01.2025

Security Identifer (SID) ve kullanıcı adı ilişkilendirme

Bir kullanıcı hesabından SID'yi bulmak için yerel hesaplarda

Get-LocalUser -Name metin | Format-List Name, SID

ya da tam tersi yönde SID'den sorgualama yapmak için ise

Get-LocalUser -SID "S-1-5..." | Format-List Name, SID

Active Directory ortamında ise (dikkat, buradaki Identity aslında kullanıcı adı)

Get-ADUser -Identity "metin" | Format-List SamAccountName, SID

veya tam tersi yönde SID'den kullanıcı isim sorgu için

Get-ADUser -Identity "S-1-5-..." | Format-List SamAccountName, SID

5.12.2024

Bazı ilginç olay günlüğü kayıtlarına erişmek

Uzak masaüstü olay kayıtlarını görmek için

Get-WinEvent -FilterHashtable @{Logname="Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational";Id=1149}

En son kapanma ve açılma olaylarını görmek için (son 4 tanesi için, 12 başlama, 13 kapanma)

Get-WinEvent -FilterHashtable @{Logname="System";ProviderName="Microsoft-windows-Kernel-General";Id=12,13} -Max 4

En son beklenmedik şekilde sonlanan uygulamaları görmek için

Get-WinEvent -FilterHashtable @{Logname="Application";Id=1000,1002;ProviderName="Application*"} -Max 5

En son yapılan ağ bağlantılarına dair olayları görüntülemek için

Get-WinEvent -FilterHashtable @{Logname="Microsoft-Windows-NetworkProfile/Operational";Id=10000} -max 5

En son çalışan görev zamanlayıcısı olay kayıtlarına erişmek için

Get-WinEvent -FilterHashtable @{Logname="Microsoft-Windows-TaskScheduler/Operational"} -Max 4

hatta görev isimleri ile başlama olaylarını görmek için 100,129 veya 200 ID'leri süzebiliriz:

Get-WinEvent -FilterHashtable @{Logname="Microsoft-Windows-TaskScheduler/Operational";Id=100} -Max 4 |
     Format-Table TimeCreated, @{N="GorevAdi";E={$_.properties[0].Value}} -Autosize

Güç durumundaki değişiklikleri (güç adapteörünü takmak veya çıkarmak) görmek için

Get-WinEvent -FilterhashTable @{Logname="System";Id=105} -Max 6 

Arka planda başlayan ve duran hizmet olaylarına ait kayıtları görmek için

Get-WinEvent -FilterHashtable @{Logname="System";ProviderName="Service Control Manager";StartTime=(Get-Date).AddHours(-1)}

11.11.2024

Çoklu masaüstünü yönetmek

Windows'da çoklu masaüstü ortamı kısayolları:

Alt + Tab: Mevcut masaüstünde açık pencereler arasında geçiş yapmak

Win + Tab: Mevcut masaüstündeki pencerelerin yanı sıra diğer açık masaüstlerini de gösteren bir görünüm. Buna "Görev Görünümü" deniyor, hatta görev çubuğunda bu görünüme ait bir öğe (buton/düğme ya da her ne dersek) var. Buradan diğer masaüstlerine geçiş yapabilir, yeni masaüstü açabilir veya açık olanları kapatabilir, hatta pencereleri masaüstleri arasında taşıyabiliriz. Masaüstlerini isimlendirebilir, arka planlarını da değiştirebiliriz.

Win + D : Masaüstünü göster (bütün pencereleri küçült).

Win + Tab : Görev görünümü (tüm pencereleri ve masaüstlerini görmek)

Win + Ctrl + D: Yeni masaüstü oluşturmak

Win + Ctrl + F4: Masaüstlerinden birini kapatmak (uygulamalar kapanmaz)

Win + Ctrl + < / > (sağ ve sol ok tuşları): Bir önceki/sonraki masaüstüne geçiş.

Win + Alt + < / > : Seçili pencereyi dikey olarak 3 bölüme ayrılmış bölümler arasında taşı.

Win + Alt + v / ^ (alt ve üst ok tuşları): Seçili pencereyi yatay olarak 2 bölüme ayrılmış bölümler arasında taşı.

Ve KDE'deki kısayollar:

Ctrl + F10: Bütün masaüstlerindeki bütün pencereleri küçük resimler halinde listele.

Ctrl + F9: Mevcut masaüstündeki pencereleri küçük resimler halinde listele.

Ctrl + F7: Mevcut uygulamaya ait bütün pencereleri küçük resimler halinde listele.

Ctrl + F12: Masaüstünü göster (bütün pencereleri küçült).

Win + Q: Etkinlikleri yönet

Ctrl + F1: İlk masaüstüne git

Ctrl + F2: İkinci masaüstüne git

Win + W: Genel görünüm (*)

Win + G: Izgara görünümü (*)

21.10.2024

Windows Recall

Bir Microsoft başağrısından kurtulma kılavuzu. 22631'de yok. 26100'de var. Bakmak için

winver

ya da

gcim win32_operatingsystem | select Version

Mevcut image'da ne özellikler var bakmak istersek

dism /online /Get-Features

Recall'u kontrol etmek istersek

dism /online /Get-FeatureInfo /FeatureName:Recall
veya
Get-WindowsOptionalFeature -Online -Featurename Recall 

Recall'dan kurtulmak için

dism /online /Disable-Feature /FeatureName:Recall

veya

Disable-WindowsOptionalFeature -Online -Featurename Recall  

Hani olurda birgün biri etkinleştirmek isterse

dism /online /Enable-Feature /FeatureName:Recall

veya

Enable-WindowsOptionalFeature -Online -Featurename Recall  

Windows Recall ile yakalanan snapshot'lar ve diğer dosyalar profil klasörümün altında şöyle bir konumda:

%LOCALAPPDATA%\CoreAIPlatform.00\UKP

2025-06-07 Ek: Linus Sebastian'ın videosunda belirtilene göre Recall etkinleştirilmiş bir bilgisayarda sistem çekmecesinde aşağıdaki gibi bir simge gözükür.

Aslında 2024 yılında ilk piyasaya sürüldükten sonra oluşan büyük tepki sonrasında daha güvenli olduğu belirtilen yeni sürümü ile piyasaya sürülen recall sadece Copilot+ destekli bilgisayarlarda çalışacak. Copilot+ destekli bilgisayarlar da şu an için 40 TOPS (tera operations per second) işlem gücüne sahip NPU (neural processing unit) birimine sahip bilgisayarlar olarak kategorize edilmiş. Haziran 2025 itibarı ile Intel ve AMD'nin 40 TOPS NPU'ya sahip işlemcileri yok. Sadece Snapdragon X Elite işlemciler. Evet, sadece ARM işlemciler. Bu bilgisayarlarda da varsayılan olarak recall kurulu gelmeyecek, sadece açık bir izinle kullanmak istediğini belirten kullanıcıların bilgisayarında çalışacak.

16.10.2024

WSL ile bash veya python betiklerini çalıştırmak

WSL (Windows Subsystem for Linux) kurulu olduğunu varsayıyorum. Windows'un içinde aslında bash hatta python betikleri çalıştırmak mümkün. WSL tarafında bir linux'umuz varsa ve orada /home/metin gibi bir klasör yapısının altında betik1.sh gibi bash betik dosyamızın olduğunu varsayalım. Bu dosyanın çalıştırma yetkilerinin de olması gerek. Yani

chmod +x betik.sh

gibi. Bunu WSL Linux'a girmeden, Windows terminalden nasıl çalıştırırız?

C:\Windows\System32\wsl.exe /home/metin/betik1.sh

yeterli. Peki bir python betiğimiz varsa nasıl olur? Bunun da yine çalıştırma yetkilerinin olduğunu varsayarsak

C:\Windows\System32\wsl.exe "python3" "/home/metin/betik2.py"

şeklinde çalıştırabiliriz. Alternatif olarak hashbang (shebang) yöntemi olarak python betiklerinin ilk satırına

#!/usr/bin/env python

ve aynı şekilde bash betiklerinin ilk satırı olarak da

#!/usr/bin/sh

eklemek mümkün.

WSL'in linux ortamına ait sanal disk dosyasının konumu da

C:\Users\metin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState

gibi bir yerde, ext4.vhdx gibi bir dosyada.

15.10.2024

Sysinternals handle

Birçok Sysinternals aracının içinde en az kullandığım olabilir, handle. Çünkü daha çok process explorer içinden aynı işi yapıyordum. Son zamanlarda daha fazla handle kullanmaya başladım.

İşletim sistemleri, uygulamaların dosya sistemi, portlar vs gibi kaynaklar üzerinde kullandıkları kaynakları bir kimlik numarası (buna handle denir, sanıyorum Türkçe'ye tutamaç/kulp gibi çevrilebilecek ama teknik olarak işleç olarak ifade edilen bir terim) ile takip eder. Bir dosya bir uygulama tarafından açıldığında, aynı anda bu dosyaya ihtiyaç duyabilecek başka programlarında dosyaya yazıp bozmaması için bu dosyayı kilitler ve ikinci gelene "bu dosya abc programı tarafından kullanılıyor" diye bir mesaj görüntüler. Çoğu zaman çok faydalı olan bu işleyiş bazen sorunlara yol açabilir. Dosyayı normal yollardan açan uygulama beklenmedik bir şekilde sonlanırsa ona ayrılan erişim yetkisi hiç sonlanmamış olabilir ve diğer uygulamaların (hatta tekrar başlatılan uygulamanın kendisinin) o dosyaya erişimi engellenebilir.

Böyle durumlarda bir "aracı"nın müdahale etmesi gerekebilir. İşte handle, bu amaçla açık kalan erişimleri sorgulamaya ve sonlandırmaya yarayan küçük ama faydalı bir uygulamadır. handle ve handle64 olarak 2 farklı mimari için sürümleri mevcuttur. 2024'ün sonlarına doğru artık 32-bitlik sistemler görmek pek mümkün değil, ama 32-bitlik sürüm olan handle.exe'yi, bütün 32-bitlik uygulamalar gibi 64-bitlik bir Windows'da çalıştırmak mümkün. Lakin bazı dezavantajları olur; sadece 32-bitlik süreçlerin açtığı dosyaları sorgulayabilmek, sadece 32-bitlik süreçlerin erişebileceği 4 GB bellek adres alanına erişebilmesi gibi. Bu sebeple sadece 64-bitlik sürümü kullanıyorum.

Genellikle yükseltilmiş ayrıcalıklar ile çalışmayı sever, bu arkadaş. Bu sebeple açtığım terminal penceresinin yükseltilmiş ayrıcalıklara sahip olduğunu varsayıyorum. Tek başına çalıştırınca her süreç için açık kaynakların işleçlerini tek tek listeler. Bu çoğu zaman yapmamamız gereken bir şey. Onun yerine hedefimiz hakkında biraz daha bilgi vermek gerek. Örneğin, işleci (handle) oluşturan uygulamanın adı, süreç numarası veya erişimde sorun yaşadığımız dosyanın adı veya yolu olabilir.

handle64 winword
handle64 -p 11483
handle64 C:\Users\metin\Documents\Liste.docx

Bunların sonucunda bir veya birkaç tane işleç listelenir. Bu işleçlerin bir veya daha fazlasını kapatmak için ise hem işleç numarasını (-c ile) hem de süreç numarasını (-p ile) kullanmak gerekir.

handle64 -c 22AC -p 11483

Bu gibi araçlar eski günlerde daha çok USB belleklerin "çıkarılamaması" gibi sorunların çözümü için işe yarardı.

Tabi henüz geçerliliğini kaybetmemiş bir sürece ait işlev(ler)i zorla kapatmak en azından sürecin artık ilgili kaynağa erişememesine, bazen veri kaybına hatta sistem süreçlerine ait işleçlerin kapatılması durumunda sistem kararsızlığına (mavi ekranlar, beklenmedik sonlanmalar vs) sebep olabilir.

1.10.2024

nslookup kullanımı

Bir FQDN'in isim çözümlemesi için

nslookup google.com

Bu isim çözümlemesini belli bir DNS sunucunun yapması için

nslookup google.com 1.1.1.1

Bu alan adına ait özel bir tip isim çözümlemesi için

nslookup -type=ns google.com
nslookup -type=txt google.com 1.1.1.1

Alan adlarını sorgunun sonuna eklememek için (varsayılan olarak içinde en az bir nokta geçen ama nokta ile bitmeyen bütün sorgulara DNS alan adı listesindeki alan adları eklenir)

nslookup -nosearch metin

Bunlar hem Windows'da hem Linux'ta geçerli.

27.09.2024

Düşük güç kipleri

ACPI güç kipleri şöyle [1]:

S0 : Enerji kablosu takılı çalışma.

S0 low-power idle (modern standby): Bilgisayar düşük güç kipinden yüksek güç kipine çık hızlı geçiş yapar. Bu kipi destekleyen sistemler S1-S3 kiplerini desteklemez. Bilgisayarlardaki bu kip, aslında akıllı telefonlardaki yapıdan esinlenir. Bilgisayar düşük enerji kipinde bile ağa bağlıdır, temel bazı arka plan işlevleri (ağa bağlı mesajlaşma gibi işlemler) hala çalışır durumdadır. İşlemciye ayrılan güç kısıtlanır, RAM daha yavaş güncellenir, diğer çevre birimleri de mümkün olduğunca yavaşlar veya kapanır. Yine de S1-S3 kiplerine göre daha fazla güç kullanır.

S1-S3: Bilgisayar kapalı gibi gözükür. Bu tüketimi S1'den S3'e gittikçe düşer. Ama her sistem bu kiplerden sadece birini destekler. S0'a göre daha az güç tüketir, S4'e göre daha fazla tüketir. Bu kipte RAM'deki veriler canlı tutulur. Ayrıca klavye ve fareden açılmanın mümkün olması için bu cihazlar da enerji harcar. Eskiden kullanılan Suspend-to-RAM S3 kipi için söyleniyordu. Buna ek olarak bir de melez uyku (hybrid sleep) kipinde ise sistem hibernation dosyası oluşturarak olası bir güç kaybında kaldığı yerden devam edebilir duruma gelir.

S4: En az güç tüketen kip. Burada RAM içeriği diske yazılır. Bilgisayarın güç düğmesi haricinde de açılabilmesi için bazı sistem bileşenleri (klavye, fare vs) güç kullanır. Bu kipin eski adı Suspend-to-Disk'ti. Şu anda kullanılan terim hibernation, yani kış uykusu. Ama Türkçe'de bu şekilde kullanılmıyor. Buna hazırda bekletme deniyor.

S5: Bilgisayarın kapalı ama güç bağlantısının olduğu durum.

S6: Bilgisayar kapalı, güç bağlantısı yok.

İngilizce ve Türkçe arasındaki geçiş de önemli:

S0 low-power idle
Sleep / Standby
Uyku (Modern bekleme [3])
S1-S3Sleep
Uyku
S4    
Hibernate    
Hazırda Beklet
S5    
Soft off
Kapalı amaç gücü bağlı
S6    
Mechanical off
Kapalı

Önemli, çünkü  standby'a uyku, hibernation'a da hazırda beklet demek benim için büyük bir kafa karışıklığı. Modern bekleme kipi (İngilcesi de Modern Standby, Türkçesi de Modern Bekleme) ve S1-S3'ü de kapsayan kiplere bazen bekleme kipi/modu (Standby) da denebiliyor. Bu kiplerde güç led'i yanıp söner, bazı sistem bileşenlerinin hala güç tükettiğini ve kullanıcı girişi ile sistemin kaldığı yerden devam ettirilebileceğini göstermek için [4].

Bilgisayarımızın desteklediği kipleri görmek için

powercfg /a

Modern bekleme kipini kapatmak için [2]'dek yöntemler uygulanabilir.

Devreden çıkarmak için:

New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power\ 
-Name PlatformAoAcOverride -Value 0 -PropertyType DWord

ya da

reg add HKLM\System\CurrentControlSet\Control\Power /v PlatformAoAcOverride /t REG_DWORD /d 0

tekrar devreye almak için

Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power\ 
-Name PlatformAoAcOverride

ya da

reg delete  "HKLM\System\CurrentControlSet\Control\Power" /v PlatformAoAcOverride /f

Bu geçişleri Windows olay görüntüleyicisinden takip etmek için aşağıdaki olayları süzebiliriz:

Günlük: System
Kaynak: Microsoft-Windows-Kernel-Power
Id: 506 (Modern Bekleme kipine giriş), 507 (Modern Bekleme kipinden çıkış)

Bu kapsamda takip edilebilecek olaylar:

Ekran kilitleme/kilidini açma:

Günlük: Security
Kaynak: Microsoft-Windows-Security-Auditing
Id: 4800 (kilitlendi), 4801 (kilit açıldı)

2024-12-26: Linux'ta S0'ya benzeyen s2idle kipi var. Desteklenen düşük güç kiplerini görmek için

cat /sys/power/state

Mevcut durumda hangi modun kullanıldığını görmek için

cat /sys/power/mem_sleep 

Bu dosya

echo s2idle | sudo tee /sys/power/mem_sleep 

ile değiştirilebilir. Burada 

s2idle -> s0
freeze -> s2idle'a göre daha fazla güç tüketen linux'a özgü bir kip.
mem -> S3 (suspend-to-RAM)
disk -> S4 (suspend-to-disk) 

2025-04-06 Ek: Bir linux sistemde cat /sys/power/state komutu bana şu çıkışı verdi:

freeze mem disk

mevcut durumu cat /sys/power/mem_sleep ile kontrol ettiğimdeyse çıkış şöyle oldu:

[s2idle] deep

Buradan şu sonucu çıkardım; s2idle ve deep "mem" kipinin çeşitleri. s2idle bir çeşit modern standby eşdeğeri ama uygulama ve sürücülerin desteği yoksa fazla güç tüketebilir.  Bu durumda deep'e geçmek istersek

echo deep | sudo tee /sys/power/mem_sleep

ile geçilebilir. Ama bazı uygulamaların bu modu da desteklemeyebileceği, bazı uygulamaların sistemi uyandırabileceği belki de benim yaşadığım gibi sistemin hiç uyanamayacağı durumlar olabiliyor.

journal kayıtlarını görmek için

journalctl -k -b | grep -i suspend

Türkçe Linux'lardaki "Askıya al" mem'e karşılık gelir. mem için varsayılanı da mem_sleep içindeki [s2idle] gibi köşeli parantezin içindeki varsayılan belirler.

Türkçe Linux sistemlerdeki "Hazırda beklet" seçeneği de disk'e karşılık gelir. Yani s4/hibernation gibi belleğin içeriğinin diske yazılarak düşük güç kipine geçildiği bir durum.

sistemin komut satırından bu kiplere geçirilmesi için

systemctl suspend
systemctl hibernate

komutları kullanılabilir.

---

[1] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-faqs

[2] https://www.elevenforum.com/t/disable-modern-standby-in-windows-10-and-windows-11.3929/

[3] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby

[4] https://binaryfork.com/sleep-vs-hybrid-sleep-vs-modern-standby-10050/

20.09.2024

Uzak bir sunucudaki oturumu kapatmak

Uzak bir sunucuda açılmış bir RDP oturumum var ama ulaşamıyorum. Bağlanmayı denediğimde boş bir ekran geliyor; görev çubuğu ve masaüstü simgeleri yok. Sanki bir oturumu kapatsam tekrar denediğimde sorun olmayacak.

Bunu yapmanın birkaç yolu var. Önce Sysinternals araçlarını deneyelim. Kimin sunucumuzda oturum açtığını görebilmek için

psloggedon \\sunucu

ve sonrasında oturumu kapatmak için

psshutdown -o -f \\sunucu
-o: oturumu kapat
-f: force, zorla kapat

bu iki komutun da sonuna 64 eklenmiş 64-bitlik sürümleri var, psloggedon64.exe ve psshutdown64.exe gibi.

Başka bir yöntem quser ve logoff komutları. 

quser /server:sunucu
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
user.name           console             2  Active    5+23:13  2024-09-16 09:06

Burada ID sütunundaki 2 değerini not alalım. Bunu kapatılacak oturum kimliği olarak kullanacağız, aşağıdaki gibi.

logoff 2 /server:sunucu

Bir de powershell yöntemi var, RemoteDesktop modülü ile gelen

Invoke-RDUserLogoff -HostServer sunucu -UnifiedSessionId 2 -Force

2, quser ile elde edilen oturum kimliği. Oturum kimliğini edinmenin başka bir yolu olarak

Get-RDUserSession

verilmiş.

17.08.2024

Windows 11 yalınlaştırıcı araçlar

Özellikle Windows'un son sürümleri (10 ve 11) gizlilik (privacy, mahremiyet) açısından çok eleştirilen bileşenlere sahip. Çalıştırılan her programın, ziyaret edilen her internet sayfasının, hatta basılan her tuşun bilgisayarımızın dışına aktarılması kullanıcıların onayladığı şeyler değil. Öte yandan Linux gibi seçeneklerin olmadığı durumlarımız var (iş hayatı). Bu amaçla geliştirilen bazı araçlar var. Bu araçların *yeteri kadar* (!) güvenli olup olmadığı, kurumsal veya yüksek güvenlikli (bankacılık işlemlerinin yapılması bile) durumlarda güvenilip güvenilmeyeceği konusu biraz hassas. Genel olarak hiçbir antivirüs tarafından engellenmediği, Reddit gibi çevrelerde kırmızı bayrak açılmadığı için şimdilik güvenli olarak görüyoruz, ama tetikte olmakta fayda var. Elbette doğru kaynaklardan indirilmesine dikkat etmek gerek.

O&O Shutup 10

https://www.oo-software.com/en/shutup10

Aslında ilk olarak Windows 10 sürümü için çıkmıştı, ama artık Windows 11 desteği de var. Geniş bir özelleştirme seçeneğine sahip. Yapılacak değişiklikler kesinlikle gerekli, biraz gerekli ve gerekli değil olarak sınıflandırılmış. Varsayılan olarak kesinlikle gerekli sınıfındakiler güvenli bir şekilde uygulanabilir, ama örneğin Windows Update gibi bileşenler kapatılması bilgisayarı daha az güvenli yapacağı için kullanıcının tercihine bırakılmış.

Powershell ile indirmek için  

$r=((iwr "https://www.oo-software.com/en/shutup10").Links.href | 
where {$_ -match "exe"})[0];iwr $r -Outfile (split-path -leaf $r)
iwr "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -Outfile "oosu10.exe"

Ultimate Windows Tweaker

https://www.thewindowsclub.com/ultimate-windows-tweaker-5-for-windows-11

Güvendiğim bir Youtube kanalı olan PC Security Channel'in şu videosundan öğrendiğim bir araç.

Powershell ile indirmek için

iwr "https://www.thewindowsclub.com/downloads/UWT5.zip" -OutFil UWT5.zip;Expand-Archive UTW5.zip 

Windows Utility

https://github.com/christitustech/winutil

Yine çok başarılı bir Youtube içerik üreticisi olan Chris Titus'un github sayfasında ve sitesinde paylaştığı ve örneğin şu videosunda anlattığı gibi bu da yetenkli bir araç. Bu aracın içinden O&O Shutup da çalıştırılabiliyor.

İndirmek ve çalıştırmak için

iwr https://christitus.com/win | iex

Win11Debloat

Başka bir yalınlaştırıcı aracı şu ve bu videoda gördüm. Çalıştırmak için

& ([scriptblock]::Create((irm "https://win11debloat.raphi.re/")))

Bu seçeneği henüz denemedim.

31.07.2024

Windows Defender'dan kurtulmak

Son dönemde Windows 11'in daha "hafif" sürümü olan 24H2 IoT LTSC sürümünü gördüm. Denemek istedim. Ancak alıştığımız Windows 11'den biraz farklı. Üzerinde Microsoft Store uygulaması gelmiyor. Sıradan bir Windows 11 bilgisayarda bulunan Virus ve Tehdit Koruması (Virus & Threat Protection) uygulaması yok (bu aslında sadece arka planda çalışan Windows Defender Antivirus'un durumunu görüntülemek ve ayarlarını değiştirmek için bir uygulama. Yoksa Defender Antivirus var ve çalışıyor). Bu ve bunun gibi yan uygulamaları kurmak istediğimde başarısız oldum. Denemek için Windows Defender'ı (antivirus) durdurmak istedim, onu da şu adımlarla yaptım.

Öncelikle bilgisayarı güvenli kipte açtım. Güvenli kipte açabilmek için msconfig'i çalıştırıp önyükleme sekmesinde önyükleme seçeneklerinden "güvenli önyüklemeyi" seçip alttaki ayarı en azda bıraktım.

Yeniden başlatıp C:\Programdata\Microsoft\Windows Defender klasörünün altındaki Platform klasörünün sahibini SYSTEM'den Administrators grubuna değiştirdim. Bağlantısını verdiğim LazyAdmin sayfasında bunu sadece Administrator kullanıcısı olarak göstermiş, ama benim sistemimde Administrator devre dışıydı. Administrators grubuna üye olan kendi kullanıcımla bunu yapabilmek için bu küçük değişikliği yaptım. Sonra bu klasörün yetkilerine SYSTEM ve TrustedInstaller kullanıcılarına ait satırları sildim, sadece Administrators grubuna ait bir tam yetki bıraktım.

Bu aşamadan sonra bazı Windows Defender hizmetlerini devre dışı bırakmak için kayıt defteri düzenleyicisini (regedit) açarak HKLM\SYSTEM\CurrentControlSet\Service anahtarı altında aşağıdaki hizmetlere ait Start değişkenlerinin değerini 4 (devre dışı) yapmak:

  • Sense
  • WdBoot
  • WdFilter
  • WdNisDrv
  • WdNisSvc
  • WinDefend

Benim yaptığım hatayı yaparak wd ile başlayan hizmetlerin tümünün (Wdf01000 gibi) başlamasını devreden çıkarmayın. Bu hatayı yaparsanız Wdf01000'ın varsayılan başlangıç değeri 0. Ve bunu değiştirmek için USB veya DVD'den açarak

reg load HKLM\Temp C:\Windows\System32\config\SYSTEM

ile SYSTEM hive'ını yüklemek ve Wdf01000'ın start'ını 0 yaparak 

reg unload HKLM\Temp

yaptıktan sonra yeniden başlatmak gerek. Bu hatayı yapmayanlar zaten bir sonraki açılışta Defender'i devre dışı bulacaklar.

PS> Get-Service  Sense, WdBoot, WdFilter, WdNisSvc, WdNisSvc, WinDefend
Status   Name               DisplayName
------   ----               -----------
Stopped  Sense              Windows Defender Gelişmiş Tehdit Ko...
Stopped  WdBoot             Microsoft Defender Virüsten Koruma ...
Stopped  WdFilter           Microsoft Defender Virüsten Koruma ...
Stopped  WdNisDrv           Microsoft Defender Virüsten Koruma ...
Stopped  WdNisSvc           Microsoft Defender Antivirus Networ...
Stopped  WinDefend          Microsoft Defender Antivirus Service

komutu ile hizmetlerin durduğu görülebilir. Tamamen deneme amaçlı yaptığım bu kurulumda elim değmişken Dosvc, wuausrv ve BITS hizmetlerini de durdurmayı tercih ettim.

20.07.2024

Crowdstrike strikes back

Dün, 19 Temmuz 2024, bir çok firma için bir siber felaket gibiydi. Havayolları, bankalar, hastaneler, büyük basın kuruluşları... Hepsi ya hizmet veremediler, ya da hizmetlerinde kesintiler yaşandı. Uçak seferleri durdu, ameliyatlar iptal edildi, TV yayınları durdu. Herkes dünya çapında mavi ekran yaşayan Windows'ları görünce Microsoft kaynaklı olduğunu düşündü. Ama bugünkü suçlumuz Crowdstrike.

Bütün internet bu konu ile ilgili haberlerle dolu [1],[2]. Önemli konu şu ki, bu ne ilk ne de son olacak. Daha önce bu olayın benzerini benim hatırladığım McAfee ve Avira ile de yaşamıştık. Bilişim dünyası bu gibi olaylara hazır değil mi acaba? Bu gibi olaylara hazır olunabilir mi? Güncellemelerin önce küçük bir grup üzerinde denenmesi ve sorun yaşanmaması sonrasında diğer sistemlere uygulanabilmesi yeni kavramlar değil, ama bunların bir uzman tarafından her gün yapılması çok pratik değil. Belki bunları önümüzdeki günlerde otomatik olarak yapan sistemler tasarlanabilir. Aynı şey işletim sistemi güncellemeleri (Windows, Linux, vs) için de gerekli. Ama güncellemeleri kapatmak hiç bir zaman çözüm olarak düşünülmemeli.

---

[1] https://www.bbc.com/news/articles/cp4wnrxqlewo
[2] https://edition.cnn.com/2024/07/19/tech/crowdstrike-update-global-outage-explainer/index.html

18.07.2024

WinSxS, sfc ve dism

Uzun dönem Windows kullanıcıları, sistem klasörlerinin (genellikle C:\Windows) altında WinSxS adında bir klasörün olduğunu görmüşlerdir. Bu klasör korunan ve içeriği administrator ile bile değiştirilemeyen bir yapıya sahiptir. Kurulumdaki bütün sistem dosyalarının asılları bu klasörün altındadır. Kullanımdaki kopyası ise aslında bir kopya değil, dosyanın aslına bir harlink'tir. Örnek olarak explorer.exe'ye bakalım.

C:\> dir C:\Windows\explorer.exe | fl FullName, LinkType, Target

FullName : C:\Windows\explorer.exe
LinkType : HardLink
Target   : {C:\Windows\WinSxS\amd64_microsoft-windows-explorer...

Bu klasördeki bütün dosyaları görmek için

dir * -file | ft Name, LinkType

kullanabiliriz. Evet, bu güvenlik önlemlerine karşı kötü niyetli yazılımların da karşı yöntemleri var. Herşeye rağmen hardlink bozulabilir, sistem dosyası kötü bir kopya ile değiştirilebilr. Hatta WinSxS klasörü altındaki dosya bile değiştirilebilir. Sistemimizde beklenmeyen bir durum olduğunda her kaynakta ilk yapılması gereken

sfc /scannow

olarak önerilmiş. Arka planda bu komut, sistem dosyalarını tarar, bütünlüğünü, denetler ve güvenilir bir katalogdaki özelliklere (imza, hash vs) sahip olup olmadığını kontrol eder. Ayrıca hardlink'inin doğru olup olmadığına da bakar. Sonra eğer burada bir sorun algılarsa WinSxS altındaki doğru dosyaya olan hardlink'i tekrar oluşturarak onarmaya çalışır. WinSxS altında bir dosyanın birden fazla sürümü olabilir. Bütün sürümler yinw WinSxS klasöründe saklanır. O yüzden en son güncelleme ile gelen sürüme hardlink oluşturulması önemli.

WinSxS klasöründe bir bozulma olmuşsa sfc bu aşamada yetersiz kalır. Bu bozulmayı onarmak için kullanılacak araç dism. Dism'in kafa karıştıran 3 farklı komutu var:

  • CheckHealth
  • ScanHealth
  • RestoreHealth

Bu 3 komutu, bir disk taramasındaki işlemlere benzeterek açıklamaya çalışacağım.

Diskimizde bir sorun olduğunu anlamak için bir tarama yapmak istiyoruz. Ama hızlı olmasını istiyoruz. Bütün diski taramak çok zaman ve enerji alan bir işlem. Aslında diskte işlem yaparken hata ile karşılaşan bir program var mı diye baksak olmaz mı? Bunun için önce evenlog'a bakıyoruz, herhangi bir program buraya disk ile ilgili hata olayı yazmış mı diye. Bu CheckHealth'a karşılık gelen bir işlem. Bütün WinSxS klasöründeki dosyaları taramak da çok zaman ve enerji alan bir işlem olduğu için kaydı düşülen bir sorun var mı, ona bakıyoruz. Bu işlemde bir düzeltme işlemi uygulanmıyor. Örnek kullanım:

DISM /Online /Cleanup-Image /CheckHealth

İkinci komut ScanHealth, daha çok diskte bir düzeltme işlemi yapmadan taramaya benziyor. Sistem açıkken diskte onarım yapmak istemiyorsak, sadece hata var mı yok mu bize onu söylesin diyorsak bu işlem uygulanabilir. Yine bu adımda da diskte bir düzeltme yapılmayacak. Örnek kullanım:

DISM /Online /Cleanup-Image /ScanHealth

Üçüncü komut RestoreHealth ise aktif olarak diskte hataları bul ve düzelt komutu gibi. Bütün WinSxS klasörü taranır, bulunan hatalar (ISO dosyasından veya internetten) bozulmamış kopyalar kullanılarak düzeltilir. Örnek kullanım:

DISM /Online /Cleanup-Image /RestoreHealth

Dism, bunun yanı sıra açık olan Windows kurulumu üzerinde de işlem yapabilir, DVD veya USB'den boot edilerek disklerden birindeki kurulum üzerinde de çalışabilir. /ONLINE anahtarı şu an çalışan sistem üzerinde işlem yapılmasını söylüyor.

Dism'in bunun dışında çok güzel kullanımları var. Örneğin WinSxS klasörümüzün boyutu çok büyüdüyse ve eski  sürümlere ait dosyaları silmek istersek (kesinlikle elle yapılmaması gereken bir işlem) aşağıdaki komut kullanılabilir.

Önce mevcut WinSxS (component store - Windows Side-by-side) boyutunu kontrol edelim:

C:\> dism /online /cleanup-image /analyzecomponentstore

Deployment Image Servicing and Management tool
Version: 10.0.22621.2792

Image Version: 10.0.22631.3880

[===========================99.6%========================= ]

Component Store (WinSxS) information:

Windows Explorer Reported Size of Component Store : 14.29 GB

Actual Size of Component Store : 13.35 GB

    Shared with Windows : 7.30 GB
    Backups and Disabled Features : 6.05 GB
    Cache and Temporary Data :  0 bytes

Date of Last Cleanup : 2024-07-15 12:24:43

Number of Reclaimable Packages : 3
Component Store Cleanup Recommended : Yes

The operation completed successfully.

Eski ve kullanılmayan (superseded) sürümleri silelim

Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase

Bu komut sonrasında da kurulmuş güncellemerin kaldırılması imkansız hale gelir. Görece daha "hafif" bir temizlik için /ResetBase olmadan kullanabiliriz.

Bir service pack ile eski duruma düşmüş dosyaları silmek için (service pack'in kaldırılmasını imkansız hale getirir)

Dism.exe /online /Cleanup-Image /SPSuperseded

dism'in kullanımına benzer olarak Powershell'in de Repair-WindowsImage cmdlet'i var, aşağıdaki gibi kullanımı mümkün:

Repair-WindowsImage -CheckHealth
Repair-WindowsImage -ScanHealth
Repair-WindowsImage -RestoreHealth

Bir sistemde kurulu olan güncellemeleri listelemek için

dism /online /Get-Packages /Format:Table

Şu an açık olan sistemde bunu elde etmenin başka yolları da var. Ama DVD veya USB'den açılmış sistem üzerinde aynısını yapabilmek için

dism /image:D:\ /Get-Packages /Format:Table

Burada /image:D:\ Windows'un bulunduğu sürücüyü göstermeli.

Karşılaşılan sorunlar ile ilgili şu videoya bakılabilir.