Windows Server sertifika pki izleme 45 gün içinde süresi dolacak sertifikalar Yenileme takvimi kimsenin ajandasında değilse makinenin kendisine sorun.
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.NotAfter -lt (Get-Date).AddDays(45) } |
Select-Object Subject, NotAfter, Thumbprint | Sort-Object NotAfter
Kopyala
+ Çantaya ekle Yalnızca makine deposuna bakar. IIS bağlamaları, uygulama havuzları ve hizmet hesaplarının kişisel depoları ayrı yerlerdedir.
PowerShell active-directory raporlama 90 gündür giriş yapmayan etkin hesaplar Pasif kullanıcı hesaplarını bulup CSV'ye döker; yeni açılmış hesapları listeye almaz.
$sinir = (Get-Date).AddDays(-90)
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |
Get-ADUser -Properties LastLogonDate, whenCreated, Enabled |
Where-Object { $_.Enabled -and $_.whenCreated -lt $sinir } |
Export-Csv '.\pasif-hesaplar.csv' -NoTypeInformation -Encoding UTF8
Kopyala
+ Çantaya ekle LastLogonDate 9–14 gün gecikmeyle eşitlenir; sınırı 30 günün altına indirmeyin.
Ayrıntılı rehberi oku →
Güvenlik & Entra ID dns eposta kimlik-avi Alan adının SPF, DKIM ve DMARC kayıtları E-posta sahteciliğine karşı üç kaydın da olması gerekir; biri eksikse diğer ikisi tek başına yetmez.
$alan = 'ornek.com'
Resolve-DnsName $alan -Type TXT | Where-Object Strings -match 'v=spf1' | Select-Object -Expand Strings
Resolve-DnsName "_dmarc.$alan" -Type TXT | Select-Object -Expand Strings
Resolve-DnsName "selector1._domainkey.$alan" -Type CNAME, TXT -ErrorAction SilentlyContinue
Kopyala
+ Çantaya ekle DMARC'ta p=none yalnızca rapor toplar, hiçbir mesajı durdurmaz. Kurumların çoğu yıllarca p=none'da kalır ve korunduğunu sanır.
Altyapı Otomasyonu ansible iac Ansible: hangi sunucular hedeften sapmış? Kuru çalıştırma ile değişecek makineleri listeler; uygulamadan önce kapsamı gösterir.
ansible-playbook site.yml --check --diff |
awk '/^changed:/ {print $2}' | tr -d '[]' | sort -u
Kopyala
+ Çantaya ekle Kuru çalıştırma bazı modüllerde yanlış "değişecek" der (özellikle command/shell). `changed_when` tanımlayın.
Microsoft 365 m365 teams yonetisim Aylardır kullanılmayan Teams ekipleri Son etkinliğe göre sıralar; yönetişim temizliğinin başlangıç noktası.
Connect-MgGraph -Scopes Reports.Read.All
Get-MgReportTeamActivityDetail -Period D90 -OutFile teams-90.csv
Import-Csv teams-90.csv |
Where-Object { [int]$_.'Active Users' -eq 0 } |
Select-Object 'Team Name', 'Last Activity Date' |
Sort-Object 'Last Activity Date'
Kopyala
+ Çantaya ekle Rapor verisi anonimleştirilmiş olabilir: Microsoft 365 yönetim merkezinde "gizlilik" ayarını kapatmadan ad sütunu boş gelir.
ITSM itsm raporlama Aynı kullanıcıdan tekrar eden çağrılar Otuz günde üçten fazla çağrı açan kullanıcıları sayar — çözülmemiş kök neden işareti.
Import-Csv .\cagrilar.csv |
Where-Object { [datetime]$_.Tarih -gt (Get-Date).AddDays(-30) } |
Group-Object Kullanici |
Where-Object Count -gt 3 |
Sort-Object Count -Descending |
Select-Object Count, Name
Kopyala
+ Çantaya ekle CSV sütun adlarını kendi sisteminize göre düzeltin; tarih biçimi yerel ayara duyarlıdır.
Linux Sunucu linux systemd Başarısız systemd servisleri ve son hataları Hangi servisin düştüğünü ve düşerken ne yazdığını tek çıktıda verir.
systemctl --failed --no-legend | awk '{print $1}' | while read -r s; do
echo "=== $s"
journalctl -u "$s" -n 5 --no-pager -p err
done
Kopyala
+ Çantaya ekle journalctl kalıcı değilse yeniden başlatma sonrası geçmiş kaybolur: `Storage=persistent`.
Linux Sunucu linux performans Belleği en çok tüketen on süreç RSS değerine göre sıralar; OOM killer devreye girmeden önce bakılacak yer.
ps -eo pid,user,rss,pmem,comm --sort=-rss | head -11
Kopyala
+ Çantaya ekle RSS paylaşılan belleği çift sayar; birden çok süreç aynı kütüphaneyi kullanıyorsa toplam abartılı görünür.
AWS maliyet yedekleme ebs Bir yıldan eski EBS anlık görüntüleri Yedek politikası yazılırken kimse eski anlık görüntüleri silmeyi yazmaz; depolama faturası onları hatırlatır.
aws ec2 describe-snapshots --owner-ids self \
--query "Snapshots[?StartTime<='2025-08-01'].{Id:SnapshotId, GB:VolumeSize, Tarih:StartTime, Not:Description}" \
--output table
Kopyala
+ Çantaya ekle AMI'lerin dayandığı anlık görüntüleri silmeyin; önce describe-images ile hangi görüntünün hangi anlık görüntüye bağlı olduğunu çıkarın.
Veritabanı postgresql tanilama Birbirini bekleyen PostgreSQL sorguları Kilit zincirini, engelleyen ve engellenen sorguyla birlikte gösterir.
SELECT bekleyen.pid AS bekleyen_pid, bekleyen.query AS bekleyen_sorgu,
engelleyen.pid AS engelleyen_pid, engelleyen.query AS engelleyen_sorgu
FROM pg_stat_activity bekleyen
JOIN pg_stat_activity engelleyen
ON engelleyen.pid = ANY(pg_blocking_pids(bekleyen.pid))
WHERE cardinality(pg_blocking_pids(bekleyen.pid)) > 0;
Kopyala
+ Çantaya ekle Engelleyeni sonlandırmadan önce ne yaptığına bakın; uzun süren bir bakım işi olabilir.
Windows İstemci bitlocker sifreleme kurtarma BitLocker açık ama kurtarma anahtarı yedeklendi mi? Şifreleme durumu ile anahtarın yedeği ayrı sorulardır. İkincisi olmadan disk şifreli ve kurtarılamaz.
Get-BitLockerVolume | Select-Object MountPoint, VolumeStatus, ProtectionStatus,
@{n='KurtarmaAnahtari'; e={ ($_.KeyProtector | Where-Object KeyProtectorType -eq 'RecoveryPassword').Count }}
Kopyala
+ Çantaya ekle Sayı 0 ise anahtar yalnızca TPM'de: anakart değişiminde veya ürün yazılımı güncellemesinde veri gider. Anahtarı Entra ID'ye ya da AD'ye yedekleyin.
Microsoft Copilot copilot lisans maliyet Boşta duran Copilot lisansları Pahalı lisans kaleminde atanmamış koltuk aramanın en kısa yolu.
Get-MgSubscribedSku | Where-Object SkuPartNumber -like '*COPILOT*' |
Select-Object SkuPartNumber, ConsumedUnits,
@{n='Bos'; e={$_.PrepaidUnits.Enabled - $_.ConsumedUnits}}
Kopyala
+ Çantaya ekle Atanmış olması kullanıldığı anlamına gelmez. Gerçek kullanım için Microsoft 365 yönetim merkezindeki kullanım raporlarına bakın; lisans sayısı yalnızca üst sınırdır.
Windows İstemci windows-11 gocurme envanter Bu makine Windows 11'e çıkabilir mi? TPM, Secure Boot ve bellek — üç engelin üçünü tek çıktıda gösterir.
$tpm = Get-Tpm
$sb = try { Confirm-SecureBootUEFI } catch { 'BIOS/Legacy' }
[pscustomobject]@{
TPM_Var = $tpm.TpmPresent
TPM_Etkin = $tpm.TpmReady
TPM_Surum = (Get-CimInstance -Namespace root\cimv2\security\microsofttpm -ClassName Win32_Tpm).SpecVersion
SecureBoot = $sb
RAM_GB = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB)
}
Kopyala
+ Çantaya ekle SpecVersion 1.2 ile başlıyorsa yükseltme desteklenmez. Confirm-SecureBootUEFI eski BIOS makinelerinde hata fırlatır; bu yüzden karma tablonun dışında kendi değişkeninde yakalanıyor — try/catch bir ifade olmadığı için tablo içine yazılamaz.
Windows Server gpo active-directory tanilama Bu makinede hangi grup ilkeleri gerçekten uygulandı? 'İlke uygulanmadı' şikâyetinin cevabı tahminle değil, sonuç raporuyla verilir.
gpresult /h "$env:TEMP\gpo-rapor.html" /f
Invoke-Item "$env:TEMP\gpo-rapor.html"
Kopyala
+ Çantaya ekle Kullanıcı ilkeleri için o kullanıcının oturumunda çalıştırın; yönetici olarak açılan konsolda kullanıcı bölümü sizin hesabınızı gösterir.
Windows Server port tanilama hizmet Bu portu hangi süreç dinliyor? Yeni kurulan bir hizmet ayağa kalkmıyorsa portu tutan başka bir şey vardır.
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort,
@{n='Surec'; e={ (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName }},
OwningProcess | Sort-Object LocalPort
Kopyala
+ Çantaya ekle 0.0.0.0 tüm arayüzleri dinliyor demektir; yönetim arayüzlerinin yalnızca iç ağ adresine bağlanması gerekir.
Uç Nokta Yönetimi mdm entra windows Cihaz gerçekten yönetimde mi? Cihazın buluta katılma ve yönetim kaydı durumunu, kiracı bilgisini ve son eşitleme zamanını tek çıktıda gösterir.
dsregcmd /status | Select-String 'AzureAdJoined|DomainJoined|WorkplaceJoined|TenantName|MdmUrl'
# Kayıtlı yönetim sunucusu ve son eşitleme
Get-ScheduledTask -TaskPath '\Microsoft\Windows\EnterpriseMgmt\*' -EA 0 |
Get-ScheduledTaskInfo | Select-Object TaskName, LastRunTime, LastTaskResult
Kopyala
+ Çantaya ekle AzureAdJoined YES ama MdmUrl boşsa cihaz kimliğe katılmış fakat yönetime alınmamıştır.
Ayrıntılı rehberi oku →
Kablosuz Ağ wifi kanal planlama Çevredeki ağları kanal kanal say Menzildeki tüm erişim noktalarını kanallarına göre gruplar; hangi kanalın kalabalık olduğunu tek bakışta gösterir.
(netsh wlan show networks mode=bssid) -match 'Kanal|Channel' |
ForEach-Object { ($_ -split ':')[1].Trim() } |
Group-Object |
Sort-Object Count -Descending |
Format-Table Name, Count -AutoSize
Kopyala
+ Çantaya ekle Yalnızca kartın gördüğü ağları sayar; kendi erişim noktanız da listededir. Ölçümü şikâyetin yaşandığı yerde yapın.
Ayrıntılı rehberi oku →
Güvenlik & Entra ID defender kotu-amacli-yazilim olay-mudahale Defender bu makinede en son ne yakaladı? Kullanıcı 'virüs uyarısı çıktı' diyor ama ne olduğunu hatırlamıyor. Kayıt makinenin kendisinde duruyor.
Get-MpThreatDetection |
Sort-Object InitialDetectionTime -Descending |
Select-Object -First 20 InitialDetectionTime, ThreatID, Resources
Kopyala
+ Çantaya ekle Boş dönmesi 'temiz' demek değildir: geçmiş temizlenmiş ya da tarama hiç çalışmamış olabilir. Get-MpComputerStatus ile son tarama tarihine de bakın.
Ağ dhcp ip-plani izleme DHCP kapsamları dolmak üzere mi? Misafir ağında 'IP alamıyorum' şikâyetleri başlamadan önce görülebilecek tek sayı.
Get-DhcpServerv4ScopeStatistics -ComputerName dhcp01 |
Select-Object ScopeId, AddressesFree, AddressesInUse, PercentageInUse |
Sort-Object PercentageInUse -Descending
Kopyala
+ Çantaya ekle Kiralama süresi uzunsa doluluk gerçek cihaz sayısından yüksek görünür. Misafir ağında kirayı 2–4 saate indirmek çoğu zaman kapsamı büyütmekten iyidir.
Microsoft 365 m365 guvenlik exchange Dışarı posta yönlendiren kutular Kurum dışına yönlendirme, ele geçirilmiş hesabın ilk işaretidir.
Get-Mailbox -ResultSize Unlimited |
Where-Object { $_.ForwardingSmtpAddress -or $_.ForwardingAddress } |
Select-Object DisplayName, PrimarySmtpAddress, ForwardingSmtpAddress,
DeliverToMailboxAndForward
Kopyala
+ Çantaya ekle Gelen kutusu kuralıyla yapılan yönlendirme burada görünmez; `Get-InboxRule` ile ayrıca tarayın.
Linux Sunucu linux ag guvenlik Dinleyen portlar ve sahibi süreç Hangi portu hangi sürecin tuttuğunu kullanıcı bilgisiyle listeler.
ss -tulpnH | awk '{print $1, $5, $7}' | sort -u
Kopyala
+ Çantaya ekle Süreç adını görmek için root gerekir; aksi hâlde sütun boş gelir.
Linux Sunucu linux disk tanilama Diski dolduran dizini bul Kökten başlayıp en büyük on dizini tek geçişte listeler.
du -xh --max-depth=3 / 2>/dev/null | sort -rh | head -10
Kopyala
+ Çantaya ekle `-x` bayrağı dosya sistemi sınırında durur; ağ bağlarını taramaz. Kaldırılmış ama açık tutulan dosyalar burada görünmez, onlar için `lsof +L1`.
Donanım ssd depolama izleme Disklerin sağlık ve aşınma durumu Fiziksel disklerin sağlık durumunu, aşınma yüzdesini ve sıcaklığını listeler; SSD'nin sessiz yaşlanmasını görünür kılar.
Get-PhysicalDisk | ForEach-Object {
$r = $_ | Get-StorageReliabilityCounter -EA 0
[pscustomobject]@{
Disk = $_.FriendlyName; Saglik = $_.HealthStatus
AsinmaYuzde = $r.Wear; Sicaklik = $r.Temperature
OkunamayanHata = $r.ReadErrorsUncorrected
}
} | Format-Table -AutoSize
Kopyala
+ Çantaya ekle Aşınma değeri her sürücüde raporlanmaz. Boş dönerse üreticinin aracıyla ya da smartctl ile okuyun.
Ayrıntılı rehberi oku →
Donanım pil dizustu windows Dizüstü pil sağlığı raporu Tasarım kapasitesi ile bugünkü tam şarj kapasitesini karşılaştıran ayrıntılı raporu üretir; filo genelinde değişim planının girdisidir.
powercfg /batteryreport /output "$env:TEMP\pil.html"
# Yalnızca iki sayı gerekiyorsa
Get-CimInstance -Namespace root/WMI -Class BatteryStaticData |
Select-Object DeviceName, DesignedCapacity
Get-CimInstance -Namespace root/WMI -Class BatteryFullChargedCapacity |
Select-Object FullChargedCapacity
Kopyala
+ Çantaya ekle Oran yüzde 80'in altındaysa pil değişim eşiğindedir. Masaüstü ve sanal makinelerde bu sınıflar boş döner.
Ayrıntılı rehberi oku →
Ağ dns performans DNS sunucularının yanıt süresi Yapılandırılmış her çözümleyiciyi aynı sorguyla ölçer; yavaş olanı ortaya çıkarır.
Get-DnsClientServerAddress -AddressFamily IPv4 |
Select-Object -ExpandProperty ServerAddresses -Unique | ForEach-Object {
$s = Measure-Command { Resolve-DnsName microsoft.com -Server $_ -EA 0 }
[pscustomobject]@{ Sunucu = $_; MS = [int]$s.TotalMilliseconds }
} | Sort-Object MS
Kopyala
+ Çantaya ekle Önbelleğe alınmış yanıt hızlı görünür; ölçümü farklı alan adlarıyla tekrarlayın.
Gözlemlenebilirlik izleme alarm En çok tetiklenen alarmlar Otuz günde en çok çalan alarmları sayar; alarm yorgunluğunun kaynağı ilk üç satırdadır.
curl -s "$PROM/api/v1/query?query=sort_desc(
count_over_time(ALERTS{alertstate=\"firing\"}[30d])
)" | jq -r '.data.result[] | "\(.value[1])\t\(.metric.alertname)"' | head -15
Kopyala
+ Çantaya ekle $PROM Prometheus adresiniz. 30 günlük sorgu büyük kümelerde yavaş çalışır, saatte bir çalıştırmayın.
Depolama depolama kapasite En hızlı büyüyen paylaşımlar İki ölçüm arasındaki farkı alarak büyüme hızını bulur.
$dosya = "$env:TEMP\paylasim-olcum.csv"
$simdi = Get-SmbShare | Where-Object Special -eq $false | ForEach-Object {
[pscustomobject]@{
Ad = $_.Name
GB = [math]::Round((Get-ChildItem $_.Path -Recurse -File -EA 0 |
Measure-Object Length -Sum).Sum / 1GB, 2)
}
}
if (Test-Path $dosya) {
$onceki = Import-Csv $dosya
$simdi | ForEach-Object {
$e = $onceki | Where-Object Ad -eq $_.Ad
if ($e) { "{0}: +{1} GB" -f $_.Ad, [math]::Round($_.GB - [double]$e.GB, 2) }
}
}
$simdi | Export-Csv $dosya -NoTypeInformation
Kopyala
+ Çantaya ekle İlk çalıştırma yalnızca ölçüm alır, fark ikinci çalıştırmada çıkar.
Web Sunucu nginx performans gunluk En yavaş uç noktaları bul Yanıt süresi alanı eklenmiş bir erişim günlüğünde, ortalama süreye göre en yavaş adresleri listeler.
# Son alanın $request_time olduğu varsayılır
awk '{ t[$7] += $NF; n[$7]++ }
END { for (u in t) printf "%8.3f %6d %s\n", t[u]/n[u], n[u], u }' \
/var/log/nginx/access.log |
sort -rn | head -20
Kopyala
+ Çantaya ekle Az sayıda çağrılan bir adres tepeye çıkabilir; çağrı sayısı sütununu da okuyun.
Ayrıntılı rehberi oku →
Web Sunucu nginx gunluk sorun-giderme Erişim günlüğünde durum kodu dağılımı Hangi kodun ne sıklıkta döndüğünü ve 5xx üretmiş adresleri sıralar; olay anında ilk bakılacak iki tablodur.
# Kod dağılımı
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
# 5xx üreten adresler, çoktan aza
awk '$9 ~ /^5/ {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
Kopyala
+ Çantaya ekle Alan numaraları günlük biçimine göre değişir. Öndeki vekil varsa $1 gerçek istemci değil vekilin adresidir.
Ayrıntılı rehberi oku →
Google Cloud envanter maliyet gce Google Cloud'da o an çalışan sanal makineler Hangi projede ne çalışıyor sorusunun konsol açmadan cevabı.
gcloud compute instances list --filter="status=RUNNING" \
--format="table(name, zone.basename(), machineType.basename(), status)"
Kopyala
+ Çantaya ekle Varsayılan olarak yalnızca etkin projeyi listeler. Tüm projeler için gcloud projects list çıktısında döngü kurun.
Web Sunucu web-sunucu guvenlik sertlestirme Güvenlik başlıkları gerçekten gönderiliyor mu? Yanıt başlıklarını okuyup beklenen güvenlik başlıklarının varlığını ve sürüm bilgisinin sızıp sızmadığını gösterir.
curl -sSI https://ornek.com |
grep -iE 'strict-transport|content-security|x-content-type|x-frame|referrer-policy|server|x-powered-by'
# Dizin listesi açık mı
curl -s -o /dev/null -w '%{http_code}\n' https://ornek.com/assets/
Kopyala
+ Çantaya ekle server ve x-powered-by satırları görünüyorsa sürüm bilgisi sızıyor demektir; öndeki vekilde temizlenmeli.
Ayrıntılı rehberi oku →
PowerShell active-directory olay-gunlugu Hesabı kim kilitliyor? PDC emulator üzerindeki son kilitlenme olaylarını hesap ve kaynak bilgisayarla listeler.
Get-WinEvent -ComputerName (netdom query fsmo) -FilterHashtable @{
LogName = 'Security'; Id = 4740
} -MaxEvents 10 |
Select-Object TimeCreated,
@{ n = 'Hesap'; e = { $_.Properties[0].Value } },
@{ n = 'Kaynak'; e = { $_.Properties[1].Value } }
Kopyala
+ Çantaya ekle Yalnızca PDC emulator rolündeki DC'de güvenilir sonuç verir.
Ayrıntılı rehberi oku →
Microsoft Azure maliyet depolama temizlik Hiçbir sanal makineye bağlı olmayan Azure diskleri Silinen makinelerin diskleri arkada kalır ve her ay tam ücret öder. Fatura kaleminin adı yoktur, sahibi de.
az disk list --query "[?diskState=='Unattached'].{Ad:name, Grup:resourceGroup, GB:diskSizeGb, Katman:sku.name}" -o table
Kopyala
+ Çantaya ekle Silmeden önce anlık görüntü alın ve bir hafta bekleyin. 'Bağlı değil' bazen 'yarın taşınacak' demektir.
Sanallaştırma hyper-v felaket-kurtarma replikasyon Hyper-V replikasyonu gerçekten çalışıyor mu? Durum 'Replicating' görünürken sağlık 'Warning' olabilir ve son kopya dünden kalma olabilir.
Get-VMReplication |
Select-Object VMName, State, Health, LastReplicationTime |
Sort-Object Health, LastReplicationTime
Kopyala
+ Çantaya ekle LastReplicationTime bugüne ait değilse hedefteki kopya sizi kurtarmaz. Sağlık 'Normal' olsa bile bu sütuna bakın.
Kablosuz Ağ wifi roaming sorun-giderme Kablosuz bağlantı geçmişi raporu Son üç güne ait bağlanma, kopma ve erişim noktası geçişlerini zaman çizelgesi hâlinde HTML rapora döker.
netsh wlan show wlanreport
# Rapor buraya yazılır:
# C:\ProgramData\Microsoft\Windows\WlanReport\wlan-report-latest.html
Kopyala
+ Çantaya ekle Yönetici hakkı ister. Rapor kullanıcı adı ve ağ adlarını içerir; paylaşmadan önce içeriğine bakın.
Ayrıntılı rehberi oku →
Kablosuz Ağ wifi sorun-giderme windows Kablosuz bağlantının gerçek durumu Bağlı olunan erişim noktasını, bandı, kanalı, sinyal yüzdesini ve anlaşma hızını gösterir; 'yavaş' şikâyetinde ilk bakılacak çıktıdır.
netsh wlan show interfaces
# Yalnızca karar veren satırlar
netsh wlan show interfaces |
Select-String 'SSID|BSSID|Radyo|Radio|Kanal|Channel|Sinyal|Signal|Alma|Receive|İletim|Transmit'
Kopyala
+ Çantaya ekle Sinyal yüzdesi doluyken hız düşükse sorun kapsama değil ortam doluluğudur; kanal taraması gerekir.
Ayrıntılı rehberi oku →
Kubernetes kubernetes kapasite Kaynak isteği tanımlanmamış podlar requests/limits verilmemiş podlar zamanlayıcıyı yanıltır ve gece yarısı tahliyeye yol açar.
kubectl get pods -A -o json |
jq -r '.items[] | select(.spec.containers[].resources.requests == null) |
"\(.metadata.namespace)/\(.metadata.name)"'
Kopyala
+ Çantaya ekle jq gerekir. Sistem ad alanlarında normal olabilir; önce kendi ad alanlarınıza bakın.
Microsoft Azure entra kimlik denetim Koşullu erişim politikaları ve gerçekten açık olanlar Politikaların hangisi zorluyor, hangisi yalnızca rapor topluyor — Entra panelinde tek tek tıklamadan görün.
Get-MgIdentityConditionalAccessPolicy |
Select-Object DisplayName, State, ModifiedDateTime |
Sort-Object State, DisplayName
Kopyala
+ Çantaya ekle enabledForReportingButNotEnforced = rapor modu: oturumları sayar ama hiçbir şeyi engellemez. Denetimde 'MFA politikamız var' derken çoğu kurumun kastettiği budur.
Microsoft 365 m365 lisans maliyet Kullanılmayan Microsoft 365 lisansları Atanmış ama 90 gündür oturum açmamış hesapları listeler — doğrudan bütçe kalemi.
Connect-MgGraph -Scopes AuditLog.Read.All, User.Read.All
$sinir = (Get-Date).AddDays(-90)
Get-MgUser -All -Property DisplayName,UserPrincipalName,SignInActivity,AssignedLicenses |
Where-Object { $_.AssignedLicenses.Count -gt 0 -and
$_.SignInActivity.LastSignInDateTime -lt $sinir } |
Select-Object DisplayName, UserPrincipalName,
@{ n = 'SonGiris'; e = { $_.SignInActivity.LastSignInDateTime } }
Kopyala
+ Çantaya ekle SignInActivity için Entra ID P1 gerekir. Hizmet hesapları hiç oturum açmaz; silmeden önce ayırın.
Uç Nokta Yönetimi yazici envanter windows Kurulu yazıcıları sürücü ve portuyla listele Hangi yazıcının hangi sürücüyle ve hangi porttan çalıştığını gösterir; üreticiye özgü sürücüde kalanları ayırır.
Get-Printer |
Select-Object Name, DriverName, PortName, Shared, Published |
Sort-Object DriverName | Format-Table -AutoSize
# Sürücüye göre kaç yazıcı var
Get-Printer | Group-Object DriverName | Sort-Object Count -Descending |
Select-Object Count, Name
Kopyala
+ Çantaya ekle Sunucudan çalıştırıldığında yalnızca o sunucudaki tanımları görür; istemcilerdeki doğrudan tanımlar listede çıkmaz.
Ayrıntılı rehberi oku →
Kablosuz Ağ wifi linux roaming Linux'ta sinyal ve bağlantı hızını izle Bağlı erişim noktasını, sinyal seviyesini ve anlaşma hızını saniyede bir yazdırır; yürürken dolaşım davranışını görmeye yarar.
watch -n1 'iw dev wlan0 link | grep -E "Connected to|SSID|signal|tx bitrate"'
# Tek seferlik özet
nmcli -f IN-USE,SSID,BSSID,CHAN,SIGNAL,RATE dev wifi list
Kopyala
+ Çantaya ekle Arayüz adı wlan0 olmayabilir; önce 'iw dev' ile doğrulayın. Tarama sırasında bağlantı kısa süre duraklayabilir.
Ayrıntılı rehberi oku →
Donanım ssd linux smart Linux'ta SMART değerlerini oku Diskin kalan ömrünü, toplam yazılan veriyi ve ayrılmış blok kullanımını gösterir; NVMe ve SATA için ayrı çıktı verir.
# NVMe
sudo nvme smart-log /dev/nvme0n1 | grep -E 'percentage_used|data_units_written|media_errors'
# SATA / SAS
sudo smartctl -A /dev/sda |
grep -E 'Reallocated|Wear_Leveling|Total_LBAs_Written|Media_Wearout|Temperature'
Kopyala
+ Çantaya ekle smartmontools kurulu olmalı. RAID denetleyicisi arkasındaki disklerde -d seçeneğiyle denetleyici türü belirtilmelidir.
Ayrıntılı rehberi oku →
macOS mdm intune envanter Mac gerçekten MDM'e kayıtlı mı? Envanterde görünmesi kayıtlı olduğu anlamına gelmez; cihaza sorun.
sudo profiles status -type enrollment
Kopyala
+ Çantaya ekle 'Enrolled via DEP: No' çıkıyorsa cihaz elle kaydedilmiş demektir: silinip yeniden kurulduğunda yönetimden düşer. Otomatik cihaz kaydına almadan filoya saymayın.
Ağ wifi netsh kurtarma Makinede kayıtlı Wi-Fi parolasını göster Kullanıcı parolayı unuttu, ağ profili makinede duruyor. Parola orada, düz metin.
netsh wlan show profile name="AgAdi" key=clear | Select-String 'Key Content|Anahtar İçeriği'
Kopyala
+ Çantaya ekle Yönetici hakkı ister ve parolayı ekrana düz metin basar. Ekran paylaşımı ya da kayıt açıkken çalıştırmayın; sonrasında konsol geçmişini de temizleyin.
Güvenlik & Entra ID entra-id mfa MFA'ya kaydolmamış kullanıcılar Koşullu erişimi zorlamadan önce kimlerin henüz yöntem kaydetmediğini gösterir.
Connect-MgGraph -Scopes 'UserAuthenticationMethod.Read.All'
Get-MgReportAuthenticationMethodUserRegistrationDetail -All |
Where-Object { -not $_.IsMfaRegistered } |
Select-Object UserPrincipalName, UserDisplayName |
Sort-Object UserPrincipalName
Kopyala
+ Çantaya ekle Yayımdan önce bu listeyi sıfırlayın; kayıtsız kullanıcı politika açıldığında dışarıda kalır.
Ayrıntılı rehberi oku →
Microsoft Azure m365 lisans maliyet Microsoft 365 lisanslarının kaçı kullanılıyor? Yenileme görüşmesine girmeden önce alınan ve tüketilen lisans sayısını yan yana koyun.
Get-MgSubscribedSku | Select-Object SkuPartNumber,
@{n='Alinan'; e={$_.PrepaidUnits.Enabled}}, ConsumedUnits,
@{n='Bos'; e={$_.PrepaidUnits.Enabled - $_.ConsumedUnits}} | Sort-Object Bos -Descending
Kopyala
+ Çantaya ekle Ayrılmış çalışanların lisansı hâlâ atanmış görünüyorsa 'tüketilen' sayısı gerçek kullanımı değil, temizlenmemiş hesapları gösterir.
E-posta mx dns eposta MX kayıtlarını önceliğe göre listele Alan adına gelen postanın hangi sunucuya, hangi sırayla teslim edileceğini gösterir; yedek MX olup olmadığını da açığa çıkarır.
Resolve-DnsName ornek.com -Type MX |
Sort-Object Preference |
Select-Object Preference, NameExchange |
Format-Table -AutoSize
# Adların gerçekten çözülüp çözülmediğini de doğrulayın
(Resolve-DnsName ornek.com -Type MX).NameExchange |
ForEach-Object { Resolve-DnsName $_ -Type A -EA 0 | Select-Object Name, IPAddress }
Kopyala
+ Çantaya ekle MX bir IP değil ad göstermelidir. Çözülemeyen bir ad, postanın hiç ulaşmaması demektir.
Ayrıntılı rehberi oku →
Güvenlik & Entra ID ntlm kerberos sertlestirme NTLM ile açılan oturumları bul NTLM'i kapatmadan önce kimin kullandığını bilmek gerekir; kapatıp beklemek kesinti üretir.
Get-WinEvent -LogName Security -MaxEvents 200 -FilterXPath @"
*[System[EventID=4624] and EventData[Data[@Name='AuthenticationPackageName']='NTLM']]
"@ | ForEach-Object {
$x = [xml]$_.ToXml()
[pscustomobject]@{
Zaman = $_.TimeCreated
Hesap = ($x.Event.EventData.Data | Where-Object Name -eq 'TargetUserName').'#text'
Kaynak = ($x.Event.EventData.Data | Where-Object Name -eq 'WorkstationName').'#text'
}
} | Group-Object Hesap | Sort-Object Count -Descending
Kopyala
+ Çantaya ekle Etki alanı denetleyicisinde çalıştırın. Tek makinede yalnızca o makineye gelen oturumları görürsünüz; asıl resim denetleyicilerdedir.
Güvenlik & Entra ID active-directory guvenlik parola Parolası hiç değişmeyen hesaplar Bir yıldan uzun süredir aynı parolayı taşıyan etkin hesapları listeler.
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan 0 |
Out-Null # önbelleği tazeler
Get-ADUser -Filter { Enabled -eq $true } -Properties PasswordLastSet |
Where-Object { $_.PasswordLastSet -lt (Get-Date).AddDays(-365) } |
Select-Object Name, SamAccountName, PasswordLastSet |
Sort-Object PasswordLastSet
Kopyala
+ Çantaya ekle Hizmet hesapları bilerek uzun ömürlü olabilir; silmeden önce sahibini bulun. PasswordNeverExpires ayrı bir tarama ister.
Ağ tanilama Port açık mı? telnet istemcisi kurmadan TCP bağlantısını, DNS çözümlemesini ve yönlendirmeyi tek komutta gösterir.
Test-NetConnection sunucu01 -Port 443 -InformationLevel Detailed
Kopyala
+ Çantaya ekle PingSucceeded False olsa bile TcpTestSucceeded True ise port açıktır — çoğu güvenlik duvarı ICMP'yi kapatır.
E-posta smtp tls eposta Posta sunucusu STARTTLS destekliyor mu? Alıcı sunucuya bağlanıp şifreli taşımanın kurulup kurulmadığını ve sertifikanın geçerliliğini sınar.
# Erişilebilirlik
Test-NetConnection posta.ornek.com -Port 25
# STARTTLS ve sertifika (openssl gerekir)
openssl s_client -starttls smtp -connect posta.ornek.com:25 -servername posta.ornek.com < /dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates
Kopyala
+ Çantaya ekle Birçok internet servis sağlayıcısı 25 numaralı portu dışarıya kapatır; test kurumsal hattan yapılmalıdır.
Ayrıntılı rehberi oku →
Veritabanı postgresql bakim PostgreSQL tablo şişmesi Ölü satır oranı yüksek tabloları bulur; autovacuum yetişemiyorsa buradan anlaşılır.
SELECT schemaname, relname, n_live_tup, n_dead_tup,
round(n_dead_tup * 100.0 / NULLIF(n_live_tup + n_dead_tup, 0), 1) AS olu_yuzde,
last_autovacuum
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY olu_yuzde DESC NULLS LAST
LIMIT 20;
Kopyala
+ Çantaya ekle Sayaçlar istatistik toplayıcıdan gelir; `pg_stat_reset()` sonrası sıfırlanır.
Uzak Erişim rdp guvenlik windows RDP hangi portu dinliyor, NLA açık mı? Kayıt defterindeki gerçek dinleme portunu, ağ düzeyinde kimlik doğrulama ayarını ve servisin durumunu tek çıktıda gösterir.
$rdp = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server'
$sid = (Get-CimInstance Win32_Service -Filter "Name='TermService'").ProcessId
[pscustomobject]@{
Port = (Get-ItemProperty "$rdp\WinStations\RDP-Tcp").PortNumber
RdpKapali = [bool](Get-ItemProperty $rdp).fDenyTSConnections
NLA = [bool](Get-ItemProperty "$rdp\WinStations\RDP-Tcp").UserAuthentication
Dinleniyor = (Get-NetTCPConnection -State Listen -EA 0 |
Where-Object OwningProcess -eq $sid).LocalPort
}
Kopyala
+ Çantaya ekle NLA değeri 0 ise doğrulanmamış bağlantılar oturum ayağa kaldırabilir; 1 olmalı.
Ayrıntılı rehberi oku →
Windows Server robocopy dosya-sunucusu Silmeden önce robocopy /MIR provası Aynalamanın ne sileceğini gerçekten silmeden gösterir. /MIR'i her zaman önce böyle çalıştırın.
robocopy "D:\Kaynak" "\\yedek01\Hedef" /MIR /L /NJH /NJS /NDL /XD "System Volume Information"
Kopyala
+ Çantaya ekle /L parametresi 'yalnızca listele' demektir. Çıktıyı okumadan /L'i kaldırmayın — /MIR hedefteki fazlalıkları siler.
Güvenlik & Entra ID smb sertlestirme dosya-sunucusu SMB imzalama ve SMB1 durumu Dosya sunucusu sertleştirmesinde ilk bakılacak üç ayar tek satırda.
Get-SmbServerConfiguration | Select-Object RequireSecuritySignature, EnableSMB1Protocol, EncryptData
Kopyala
+ Çantaya ekle EnableSMB1Protocol True ise diğer maddeleri tartışmayı bırakın, önce onu kapatın. İmzalama zorunlu değilse ortadaki adam saldırısı dosya trafiğini değiştirebilir.
Kubernetes kubernetes olay-gunlugu Son 1 saatin uyarı olayları Küme olaylarını yalnızca Warning türüyle ve zamana göre sıralı verir.
kubectl get events -A --field-selector type=Warning \
--sort-by='.lastTimestamp' | tail -30
Kopyala
+ Çantaya ekle Olaylar varsayılan olarak 1 saat sonra silinir; sorun eskiyse günlük toplayıcıya bakın.
Veritabanı sql-server yedekleme Son yedek ne zaman alındı? Her veritabanının son tam ve günlük yedeğini tek tabloda verir.
SELECT d.name AS veritabani,
MAX(CASE WHEN b.type = 'D' THEN b.backup_finish_date END) AS son_tam,
MAX(CASE WHEN b.type = 'L' THEN b.backup_finish_date END) AS son_gunluk
FROM sys.databases d
LEFT JOIN msdb.dbo.backupset b ON b.database_name = d.name
WHERE d.database_id > 4
GROUP BY d.name
ORDER BY son_tam;
Kopyala
+ Çantaya ekle msdb geçmişi budanmışsa boş görünür — yedek alınmadığı anlamına gelmez. Yedek dosyalarını da doğrulayın.
Yedekleme & kurtarma yedekleme izleme windows-server-backup Son yedek ne zaman ve başarılı mıydı? İki ayrı soru: en son ne zaman çalıştı ve en son ne zaman başarılı oldu.
Get-WBSummary | Select-Object LastSuccessfulBackupTime, LastBackupResultHR, NextBackupTime
Kopyala
+ Çantaya ekle LastBackupResultHR 0 değilse son iş başarısızdır ve 'son başarılı' tarihi eskide kalır. İzlemeniz bu iki alanı ayrı ayrı kontrol etmiyorsa aylarca yedeksiz kalabilirsiniz.
E-posta spf dns eposta SPF kaydı on sorgu sınırını aşıyor mu? Kayıttaki include ve redirect zincirini açarak toplam DNS sorgu sayısını sayar; on sınırı aşıldığında SPF sessizce başarısız olur.
function Say-Spf($alan, $derinlik = 0) {
if ($derinlik -gt 10) { return 99 }
$kayit = ((Resolve-DnsName $alan -Type TXT -EA 0).Strings -match '^v=spf1')
if (-not $kayit) { return 0 }
$sayi = 0
foreach ($p in ($kayit -split ' ')) {
if ($p -match '^(include:|redirect=)(.+)$') { $sayi += 1 + (Say-Spf $Matches[2] ($derinlik+1)) }
elseif ($p -match '^(a|mx|ptr|exists)') { $sayi += 1 }
}
$sayi
}
Say-Spf 'ornek.com'
Kopyala
+ Çantaya ekle Sonuç 10'a yakınsa yeni bir sağlayıcı eklendiğinde sınır aşılır. Kullanılmayan include satırlarını temizleyin.
Ayrıntılı rehberi oku →
E-posta spf dkim dmarc dns SPF, DKIM ve DMARC kayıtlarını tek seferde oku Bir alan adının üç kimlik doğrulama kaydını da sorgular; eksik olan hemen görünür.
$alan = 'ornek.com'
$secici = 'selector1' # DKIM seçicisi sağlayıcıya göre değişir
'SPF : ' + ((Resolve-DnsName $alan -Type TXT).Strings -match '^v=spf1')
'DMARC : ' + ((Resolve-DnsName "_dmarc.$alan" -Type TXT -EA 0).Strings -match '^v=DMARC1')
'DKIM : ' + ((Resolve-DnsName "$secici._domainkey.$alan" -Type TXT,CNAME -EA 0).Strings -join '')
Kopyala
+ Çantaya ekle DKIM seçicisini bilmeden sorgulanamaz. Giden bir postanın başlığındaki imza satırında yazar.
Ayrıntılı rehberi oku →
Güvenlik & Entra ID tls sertifika sertlestirme Sunucu hangi TLS sürümlerini kabul ediyor? Tarayıcı açılıyor diye TLS 1.2 kapalı sanmayın; el sıkışmayı sürüm sürüm deneyin.
$h = 'www.ornek.com'
foreach ($p in 'Tls12', 'Tls13') {
$c = [Net.Sockets.TcpClient]::new($h, 443)
$s = [Net.Security.SslStream]::new($c.GetStream())
try { $s.AuthenticateAsClient($h, $null, [Net.SecurityProtocolType]::$p, $false); "$p : kabul" }
catch { "$p : ret" }
finally { $s.Dispose(); $c.Dispose() }
}
Kopyala
+ Çantaya ekle Windows Server 2019 ve öncesi Tls13'ü hiç bilmez; 'ret' cevabı sunucunun değil istemcinin sınırı olabilir.
Uzak Erişim ssh tunel linux Sunucuda açılmış SSH tünellerini gör sshd süreçlerinin açtığı dinleme portlarını listeler; yerel arayüz dışına bağlanmış olanlar ters tünel adayıdır.
sudo ss -tlnp | awk '/sshd/ {print $4, $6}'
# Tüm arayüzlere açılmış olanlar (0.0.0.0 veya [::]) incelenmeli
sudo ss -tlnp | awk '/sshd/ && ($4 ~ /^0\.0\.0\.0:/ || $4 ~ /^\[::\]:/) {print}'
Kopyala
+ Çantaya ekle 22 portu normaldir. Diğer portlarda sshd dinliyorsa bir port yönlendirme kurulmuş demektir.
Ayrıntılı rehberi oku →
Windows Server rdp oturum uzaktan-erisim Sunucuda kim oturum açmış, kimin oturumu asılı kalmış? Kapatılmamış uzak masaüstü oturumları bellek tutar ve lisans yer.
quser /server:sunucu01
Kopyala
+ Çantaya ekle Disc (disconnected) durumundaki oturumlar uygulamaları çalışır hâlde tutar. Oturum zaman aşımını grup ilkesinden vermezseniz bu liste hiç kısalmaz.
Windows Server izleme depolama Sunuculardaki disk doluluğunu tek tabloda gör Birden çok sunucunun boş alanını yüzdeyle listeler; %15'in altındakileri işaretler.
'sunucu01','sunucu02','sunucu03' | ForEach-Object {
Get-CimInstance Win32_LogicalDisk -ComputerName $_ -Filter "DriveType=3" |
Select-Object @{ n='Sunucu'; e={ $_.SystemName } }, DeviceID,
@{ n='BosGB'; e={ [math]::Round($_.FreeSpace/1GB,1) } },
@{ n='Bos%'; e={ [math]::Round($_.FreeSpace/$_.Size*100,1) } }
} | Sort-Object 'Bos%' | Format-Table -AutoSize
Kopyala
+ Çantaya ekle Uzak sunucularda WinRM açık olmalı; kapalıysa Get-CimInstance -Protocol Dcom deneyin.
Web Sunucu tls sertifika izleme Sunucunun sunduğu sertifikada kaç gün kaldı? Diskteki dosyaya değil, sunucunun gerçekten sunduğu sertifikaya bakar; yenilenmiş ama yüklenmemiş sertifikayı yakalar.
'ornek.com', 'panel.ornek.com' | ForEach-Object {
$t = [Net.Sockets.TcpClient]::new($_, 443)
$s = [Net.Security.SslStream]::new($t.GetStream(), $false, { $true })
$s.AuthenticateAsClient($_)
$b = [Security.Cryptography.X509Certificates.X509Certificate2]$s.RemoteCertificate
[pscustomobject]@{ Alan = $_; Bitis = $b.NotAfter; KalanGun = ($b.NotAfter - (Get-Date)).Days }
$s.Dispose(); $t.Close()
}
Kopyala
+ Çantaya ekle Sertifika doğrulaması bilerek atlanır — amaç geçerliliği değil kalan süreyi ölçmektir.
Ayrıntılı rehberi oku →
Kubernetes kubernetes tanilama pod Sürekli yeniden başlayan podları bul Küme genelinde restart sayısına göre sıralar; gürültünün kaynağını ilk bakışta gösterir.
kubectl get pods -A --sort-by='.status.containerStatuses[0].restartCount' \
-o custom-columns='AD:.metadata.name,AD ALANI:.metadata.namespace,RESTART:.status.containerStatuses[0].restartCount,DURUM:.status.phase' \
| tail -20
Kopyala
+ Çantaya ekle Çok konteynerli podlarda yalnızca ilk konteynerin sayacını gösterir; şüpheli podu ayrıca `kubectl describe` ile açın.
Uç Nokta Yönetimi yazici windows sorun-giderme Takılmış yazdırma kuyruğunu sıfırla Bekletici hizmetini durdurup kuyruktaki artık işleri temizler ve hizmeti geri başlatır; en sık gelen yazdırma çağrısını kapatır.
Stop-Service Spooler -Force
Remove-Item "$env:SystemRoot\System32\spool\PRINTERS\*" -Force -EA 0
Start-Service Spooler
# Önce neyin takıldığına bakmak isterseniz
Get-Printer | Get-PrintJob -EA 0 | Select-Object PrinterName, Id, DocumentName, JobStatus
Kopyala
+ Çantaya ekle Kuyruktaki tüm bekleyen işleri siler — yalnızca sizin işiniz değil. Paylaşımlı yazıcı sunucusunda mesai saatinde çalıştırmayın.
Ayrıntılı rehberi oku →
Uzak Erişim rdp oturum windows Terk edilmiş RDP oturumlarını bul ve kapat Kopmuş ama sunucuda bellek tutmaya devam eden oturumları listeler; belirtilen süreden eskileri kapatır.
# Tüm oturumlar: Disc durumundakiler kopmuş ama hâlâ açık
quser /server:SUNUCU
# Yalnızca kopmuş olanlar
(quser /server:SUNUCU) -match 'Disc'
# Kimliği gözle doğruladıktan sonra tek tek kapatın
logoff 3 /server:SUNUCU
Kopyala
+ Çantaya ekle logoff kaydedilmemiş işi yok eder ve geri alınamaz. Oturum kimliğini quser çıktısından gözle doğrulamadan çalıştırmayın; sütun ayrıştırmaya dayanan toplu betikler yanlış oturumu kapatabilir.
Ayrıntılı rehberi oku →
Altyapı Otomasyonu terraform iac Koddan sapmış kaynakları değişiklik uygulamadan gösterir.
terraform plan -refresh-only -detailed-exitcode -no-color |
grep -E '^\s+[~+-]' | head -40
Kopyala
+ Çantaya ekle `-detailed-exitcode` fark varsa 2 döner; CI adımınız 0 dışındaki her çıkışı hata sayıyorsa bunu ayrıca ele alın.
Donanım tpm uefi windows TPM ve Secure Boot durumu Çipin var olup olmadığını, etkin olup olmadığını, sürümünü ve Secure Boot ile açılış kipini tek çıktıda verir.
$t = Get-Tpm
$sb = try { Confirm-SecureBootUEFI } catch { 'UEFI degil' }
[pscustomobject]@{
TpmVar = $t.TpmPresent
TpmEtkin = $t.TpmReady
Surum = (Get-CimInstance -Namespace root/CIMV2/Security/MicrosoftTpm -Class Win32_Tpm).SpecVersion
SecureBoot = $sb
AcilisKipi = $env:firmware_type
}
Kopyala
+ Çantaya ekle AcilisKipi 'Legacy' dönüyorsa makine uyumluluk kipinde kurulmuştur; Secure Boot ve GPT devre dışıdır.
Ayrıntılı rehberi oku →
Windows Server gpo yedekleme Tüm GPO'ları tarihli klasöre yedekle Görev Zamanlayıcı ile haftalık çalıştırmak için tasarlanmış, sürümlenmiş GPO yedeği.
$hedef = "\\yedek01\gpo\$(Get-Date -Format 'yyyy-MM-dd')"
New-Item -ItemType Directory -Path $hedef -Force | Out-Null
Backup-GPO -All -Path $hedef -Comment "Haftalık otomatik yedek"
Kopyala
+ Çantaya ekle Görevi kendi hesabınızla değil hizmet hesabıyla kurun; parolanız değişince görev sessizce durur.
Ayrıntılı rehberi oku →
Depolama depolama maliyet sanallastirma Unutulmuş anlık görüntüler Otuz günden eski anlık görüntüleri boyutuyla listeler — sessiz maliyet kalemi.
Get-VM | Get-VMSnapshot |
Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-30) } |
Select-Object VMName, Name, CreationTime,
@{ n = 'BoyutGB'; e = { [math]::Round((Get-Item $_.Path).Length / 1GB, 2) } } |
Sort-Object CreationTime
Kopyala
+ Çantaya ekle Uzun yaşayan anlık görüntü zinciri birleştirme sırasında uzun kesinti üretir; iş saatleri dışında silin.
Sanallaştırma hyper-v depolama Unutulmuş checkpoint'leri bul Tüm sanal makinelerdeki checkpoint'leri oluşturma tarihine göre sıralar — en eskisi en tehlikelisidir.
Get-VM | Get-VMSnapshot |
Select-Object VMName, Name, CreationTime, ParentSnapshotName |
Sort-Object CreationTime
Kopyala
+ Çantaya ekle Silmeye en eski checkpoint'ten başlayın; ters sırada silmek zinciri yeniden yazdırır.
Ayrıntılı rehberi oku →
Veritabanı sql-server performans Uzun süren SQL Server sorguları Beş saniyeden uzun çalışan oturumları, beklediği kaynakla birlikte gösterir.
SELECT r.session_id, r.status, r.wait_type, r.total_elapsed_time / 1000 AS saniye,
DB_NAME(r.database_id) AS veritabani, t.text AS sorgu
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.session_id > 50 AND r.total_elapsed_time > 5000
ORDER BY r.total_elapsed_time DESC;
Kopyala
+ Çantaya ekle VIEW SERVER STATE izni ister. Sorguyu öldürmeden önce beklediği kaynağı not edin.
Windows İstemci winget yama otomasyon Üçüncü parti uygulamaları tek komutla güncelle Chrome, 7-Zip, Notepad++ ve benzerleri Windows Update'e uğramaz. winget uğrar.
winget upgrade --all --include-unknown --accept-source-agreements --accept-package-agreements
Kopyala
+ Çantaya ekle Önce --all olmadan çalıştırıp listeyi görün. --include-unknown sürümü okunamayan paketleri de günceller; sunucuda bu, çalışan bir uygulamayı yeniden başlatabilir.
Gözlemlenebilirlik izleme prometheus Veri göndermeyi bırakan hedefler Beş dakikadır örnek gelmeyen hedefleri listeler — sessizce ölen izleme budur.
curl -s "$PROM/api/v1/query?query=up==0" |
jq -r '.data.result[] | "\(.metric.job)\t\(.metric.instance)"'
Kopyala
+ Çantaya ekle up==0 yalnızca kayıtlı hedefleri kapsar; hiç eklenmemiş bir sunucu burada da görünmez.
Yedekleme & kurtarma yedekleme dogrulama Yedek işlerinin son durumu Windows Server Backup günlüğünden son yedek sonuçlarını çıkarır.
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Backup'; Id = 4, 5, 8, 9, 17, 22, 49
} -MaxEvents 20 |
Select-Object TimeCreated, Id,
@{ n = 'Sonuc'; e = { if ($_.Id -in 4, 5) { 'Başarılı' } else { 'Hata' } } },
@{ n = 'Mesaj'; e = { $_.Message.Split("`n")[0] } }
Kopyala
+ Çantaya ekle Yalnızca yerleşik yedekleme aracını kapsar. Üçüncü taraf çözümler kendi günlüklerini yazar; "başarılı" görmek geri dönüş testinin yerini tutmaz.
Windows Server windows-server guncelleme Yeniden başlatma bekleyen sunucular Güncellemesi bitmiş ama yeniden başlatılmadığı için yarım kalan makineleri bulur.
$sunucular = Get-ADComputer -Filter { OperatingSystem -like '*Server*' } |
Select-Object -ExpandProperty Name
Invoke-Command -ComputerName $sunucular -ErrorAction SilentlyContinue -ScriptBlock {
$b = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
if ($b) { $env:COMPUTERNAME }
}
Kopyala
+ Çantaya ekle WinRM kapalı sunucular sessizce atlanır; listeyi AD sayısıyla karşılaştırıp farkı ayrıca inceleyin.
Uç Nokta Yönetimi guvenlik yetki windows Yerel yönetici grubunda kim var? Uç noktadaki yerel yönetici üyelerini kaynağıyla birlikte listeler; zamanla biriken yetkileri açığa çıkarır.
Get-LocalGroupMember -Group 'Administrators' |
Select-Object Name, ObjectClass, PrincipalSource |
Format-Table -AutoSize
# Filo genelinde
'PC01','PC02' | ForEach-Object {
Invoke-Command -ComputerName $_ -ScriptBlock { Get-LocalGroupMember Administrators } -EA 0 |
Select-Object PSComputerName, Name, PrincipalSource
}
Kopyala
+ Çantaya ekle Grup adı yerelleştirilmiş sistemlerde farklıdır; hata alırsanız 'Yöneticiler' deneyin.
Ayrıntılı rehberi oku →
Güvenlik & Entra ID yetki denetim laps Yerel yöneticiler grubunda kimler var? Yıllar içinde eklenen kullanıcılar, eski servis hesapları ve unutulmuş etki alanı grupları burada birikir.
Get-LocalGroupMember -Group 'Administrators' |
Select-Object Name, PrincipalSource, ObjectClass
Kopyala
+ Çantaya ekle Yerel yönetici parolası her makinede aynıysa bir makinenin ele geçirilmesi hepsinin ele geçirilmesi demektir. Windows LAPS bunu çözer.
Ağ mtu vpn tanilama Yoldaki gerçek MTU değerini bul VPN üstünde bazı siteler açılıyor bazıları takılıyorsa, sorun çoğu zaman parçalanmayan büyük paketlerdir.
ping -f -l 1472 8.8.8.8
Kopyala
+ Çantaya ekle 'Paketin parçalanması gerekiyor' hatası alana kadar 1472'den aşağı inin. Geçen en büyük değere 28 ekleyin: yolun MTU'su odur. VPN'de 1500 beklemeyin, 1400 civarı normaldir.
Uzak Erişim guvenlik tarama port Yönetim portları dışarıya açık mı? Kurumun genel adresine dışarıdan bakarak RDP, SSH ve yönetim portlarının erişilebilir olup olmadığını sınar.
$hedef = (Invoke-RestMethod https://api.ipify.org)
3389, 22, 5985, 5986, 445, 623 | ForEach-Object {
$s = Test-NetConnection $hedef -Port $_ -WarningAction SilentlyContinue
[pscustomobject]@{ Port = $_; Acik = $s.TcpTestSucceeded }
} | Format-Table -AutoSize
Kopyala
+ Çantaya ekle İç ağdan çalıştırıldığında güvenlik duvarını atlayabilir; sonucu kurum dışı bir bağlantıdan da doğrulayın.
Ayrıntılı rehberi oku →
Bu süzgeçle eşleşen komut yok. Süzgeci temizle