PowerShell

12) Tek Tıklamayla "n" kadar, (istediğiniz kadar) klasör oluşturun:
Klasörleri oluşturmak istediğin dizine gidin. Örnek "C:\users\myo\Klasörlerim" içindeyken kodu çalıştırılmasıyla, Klasörlerim dizininde, yazılan değer kadar klasör oluşur. 

Aşağıdaki kodda "1..5" son değere ne yazarsak o kadar klasör oluşur. 100 yazarsak oluşan klasör adeti 100 tanedir. Koddaki ifade ne olursa, klasör ismi o şekilde oluşmaktadır. %{"Klasor$_"}) koddaki "Klasor" yerine "Abc" yazılsa, Abc1 den-Abc100'e kadar isimlendirilerek 100 adet klasör oluşur.
mkdir $(1..5 | %{"Klasor$_"})


11) "Windows kurulum tarihi, Windows Sürümü, Windows versiyonu" Öğren:
# Windows kurulum tarihi
$InstallDate = (Get-WmiObject Win32_OperatingSystem).InstallDate
$FormattedInstallDate = [System.Management.ManagementDateTimeConverter]::ToDateTime($InstallDate)
Write-Output "Windows'un kurulum tarihi: $FormattedInstallDate"

# Windows Sürümü
$WindowsVersion = (Get-WmiObject Win32_OperatingSystem).Caption
Write-Output "Windows Sürümü: $WindowsVersion"

# Windows versiyonu
$WindowsVersionNumber = (Get-WmiObject Win32_OperatingSystem).Version
Write-Output "Windows Versiyonu: $WindowsVersionNumber"


10) Bugün, PC de Oturum açma saati:
Kod içerisinde yer alan, Tarih saat aralığına göre, administrator oturumu ile işlem gerçekleşmekte. Bilgisayarın kapalı iken açılması, net sonuç döndürmekte. (Devamlı açık olan bilgisayarın diğer saatlerdeki senkronizasyon durumu, sonucu olumsuz etkileyebilmekte olduğu görüldü.)
$firstLogonEvent = Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624) and TimeCreated[@SystemTime>='2024-03-14T00:00:00.000Z' and @SystemTime<='2024-03-14T23:59:59.999Z']]]" | 
    Where-Object {$_.Properties[6].Value -ne 'NT AUTHORITY'} | 
    Sort-Object TimeCreated | 
    Select-Object -First 1 TimeCreated, Id, @{Name="TaskCategory";Expression={$_.Properties[6].Value}}
$firstLogonEvent


9) Toplu olarak, hostname sonucu alma:
Öncesinde "C:\Path\" klasörü oluşturulmalı. "C:\Path" klasörüne, "ping.csv" ismiyle, hostname listesini barındıran dosyayı bu alana kaydet. "ping2.csv" olarak dosya oluşacaktır. (Erişilen makinalarda "erişim var" olmayanlarda "erişim yok" yazacaktır. Pingleyip yazması biraz sürecektir. ara ara dosya yenilenerek kontrol edilmelidir. Listedeki adete göre süre uzayıp kısalmaktadır.
# Giriş ve çıkış dosya yollarını tanımlayın
$girisDosyasi = "C:\Path\ping.csv"
$cikisDosyasi = "C:\Path\ping2.csv"

# Giriş dosyasındaki her bir satırı oku
Get-Content $girisDosyasi | ForEach-Object {
    # Satırı her bir alanı ayırmak için virgülle böl
    $alanlar = $_ -split ','

    # IP adresi veya host adını al
    $hedef = $alanlar[0]

    # Ping gönder
    if (Test-Connection -ComputerName $hedef -Count 1 -Quiet) {
        # Erişim sağlananları bul ve "erişim var" olarak etiketle
        $alanlar += "erişim var"
    } else {
        $alanlar += "erişim yok"
    }

    # Yeni satırı CSV dosyasına ekle
    Add-Content -Path $cikisDosyasi -Value ($alanlar -join ",")
}


8) Belli bir gruba ait bilgisayarları liste olarak dışarı ver. (Local Admin Disable Computer):
Öncesinde "C:\Path\" klasörü oluşturulmalı. Çıktı dosyası "admin.csv"
Get-ADGroupMember -Identity "Local Admin Disable Computer" | Select-Object Name,SamAccountName | Export-Csv -Path "C:\path\admin.csv" -NoTypeInformation


7) Ağda ve yakında olmayan bilgisayarın, AD Hostname isminden PC Serino toplu olarak öğrenme:
Domain OU yapısında, klasör bazlı rapor elde edilmesi için yapılan çalışmadır.

İşlem iki adımda oluşmaktadır. (1.adımda Folder bazlı hostname ve kullanıcı listesi alma, ikinci adım bu hostname listesi referans alınarak, Seri No bilgilerinin elde edilmesi)

1. Adım:
Aşağıdaki kodların, Powershell admin olarak çalıştırdıktan sonra kullanılması gerekmektedir.
Öncesinde, "C:\Host_Seri" klasörü oluşturun. aşağıdaki kod çalışınca, bu klasörün içine "liste.csv" oluşacaktır. (Hostname adı, 00 ile başlayıp 83 ile biten bilgisayarlar)
# Active Directory modülünü yükle
Import-Module ActiveDirectory

# 00 ile başlayıp 83 ile biten bilgisayarların listesini al
$computers = Get-ADComputer -Filter {(Name -like "00*83") -and (Enabled -eq $true)} -Property Name, Description

# Bilgileri CSV dosyasına yaz
$computers | Select-Object Name, Description | Export-Csv -Path "C:\Host_Seri\liste.csv" -NoTypeInformation


2. Adım:
Aşağıdaki kodu, uzantısı "ps1" uzantılı olarak, "C:\Host_Seri" klasörüne kaydedin. Not defteri açın, kodu yapıştırın. Ör: "Host_Seri.ps1" sonrasında, admin olarak açılan Powershell sayfasına aşağıdaki kodu yapıştırıp Enter tuşuna basın.

"C:\Host_Seri\liste2.csv" klasöründe liste2.csv dosyası oluşacaktır. Aralıklarla, sayfayı her açtığınızda satır satır hostname ve seri no eklendiğini görebileceksiniz. Kod taraması bitince "liste2.csv" içeriği, aktif makinalara göre dolacaktır. Kod taraması tamamlanınca, "İşlem tamamlandı. Sonuçlar C:\Host_Seri\liste2.csv dosyasına kaydedildi." mesajı yansıyacaktır.
# Active Directory modülünü yükle
Import-Module ActiveDirectory

# "00" ile başlayıp "83" ile biten bilgisayarları filtrele
$computers = Get-ADComputer -Filter {(Name -like "00*") -and (Name -like "*83")}

# Boş bir CSV dosyası oluştur
$outputFile = "C:\Host_Seri\liste2.csv"
@() | Export-Csv -Path $outputFile -NoTypeInformation

# Her bir bilgisayar için hostname ve seri numarasını alıp CSV dosyasına ekle
foreach ($computer in $computers) {
    $hostname = $computer.Name
    $serialNumber = (Get-WmiObject -Class Win32_BIOS -ComputerName $computer.Name).SerialNumber

    # CSV dosyasına ekle
    $data = [PSCustomObject]@{
        Hostname = $hostname
        SerialNumber = $serialNumber
    }
    $data | Export-Csv -Path $outputFile -Append -NoTypeInformation
}

Write-Host "İşlem tamamlandı. Sonuçlar $outputFile dosyasına kaydedildi."


6) Ağda ve yakında olmayan bilgisayarın, Hostname isminden PC Serino öğrenme:
Bilgisayar adını girmenizi isteyecek, ardından Enter tuşuna basmanız ile, Serino sonucu dönecektir.
Kod üzerinde değişiklik yapmadan, kopyala ve yapıştırın. Çalıştığında PC hostname tam adı girip Enter tuşuna basın.
$computerName = Read-Host "Lütfen bilgisayar adını girin"
Get-WmiObject -Class Win32_BIOS -ComputerName $computerName | Select-Object SerialNumber


5) Ağda ve yakında olmayan bilgisayarın, Hostname isminden PC Serino öğrenme:
Kod içinde "Kırmızı alan" PC adını, aradığınız pc adı ile değiştirdikten sonra, Enter tuşuna basarak kodu çalıştırın. Serino sonucu dönecektir.
Get-WmiObject -Class Win32_BIOS -ComputerName 001234-LP-99 | Select-Object SerialNumber


4) Rol grubu bazlı kullanıcıları görme:
"C:\Path\" klasörü oluşturulmalı. Çıktı dosyası, "KullaniciGrup.csv"
Import-Module ActiveDirectory
$groupName = "Role-GMYPMY-Pers-FW"
$users = Get-ADGroupMember -Identity $groupName
$results = @()
foreach ($user in $users) {
    $result = @{
        "UserName"    = $user.SamAccountName
        "DisplayName" = $user.Name
        "DistinguishedName" = $user.DistinguishedName
    }
    $results += $result
}
$results | ConvertTo-Json | Out-File -FilePath "C:\Path\KullaniciGrup.csv"
Remove-Module ActiveDirectory


3) Tüm kullanıcıların Bağlı bulundukları grupları görme:
"C:\Path\" klasörü oluşturulmalı. Çıktı dosyası, "KullanicilerveGruplar.csv"
Import-Module ActiveDirectory
$users = Get-ADUser -Filter {Enabled -eq $true} -Properties MemberOf
$results = @()
foreach ($user in $users) {
    $userGroups = Get-ADUser $user | Get-ADUser -Properties MemberOf | Select-Object -ExpandProperty MemberOf
    $result = @{
        "UserName" = $user.SamAccountName
        "DisplayName" = $user.DisplayName
        "Groups" = $userGroups
    }
    $results += $result
}
$results | ConvertTo-Json | Out-File -FilePath "C:\Path\KullanicilerveGruplar.csv"
Remove-Module ActiveDirectory


2) Tüm kullanıcıların Parola süre sonlarını "PasswordExpiryDate" görme:
"C:\Path\" klasörü oluşturulmalı. Çıktı dosyası, "PasswordExpiryDate.csv"
Get-ADUser -Filter * -Properties "SamAccountName", "DisplayName", "msDS-UserPasswordExpiryTimeComputed" | Select-Object SamAccountName, DisplayName, @{Name="PasswordExpiryDate"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} | Export-Csv -Path "C:\Path\PasswordExpiryDate.csv" -NoTypeInformation


1) Oturum açılmayan PC ye şifre atayarak oturum açma:
"Administrator" kullanıcısına, şifre atama işlemi gerçekleşir.
Set-LocalUser -Name "administrator" -Password (ConvertTo-SecureString -AsPlainText "2wsx3edc*" -Force)


Test edilen diğer komutlar:

Active Directory ortamındaki disable olan kullanıcıları listeler:
Search-ADAccount -AccountDisabled | where {$_.ObjectClass -eq ‘user’} | FT Name,ObjectClass –A

Expire olmuş accountları listeler:
Search-ADAccount –AccountExpired

Passwordu expire olmuş userları listeler:
Search-ADAccount –PasswordExpired

Hesabı kilitlenmiş kullanıcıları listeler:
Search-ADAccount –LockedOut

Password never expires işaretlenmiş olan userları listeler:
Search-ADAccount –PasswordNeverExpires | ft name

Bilgisayarındaki tüm kullanıcı hesaplarını listeler:
Get-ChildItem C:\users

Domain, Marka, Model, Hostname, Total memory bilgisi:
Get-WmiObject –Class win32_computersystem

İşlemci Kullanımını Görüntüleme, ilk 20:
Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 20

IP adres bilgisi:
ipconfig

IP Konfigürasyonunu Görüntüleme:
Get-NetIPConfiguration

Duran servisleri listeler:
Get-Service | Where-Object {$_.Status -eq ‘Stopped’}

Çalışan servisleri listeler:
Get-Service | Where-Object {$_.Status -eq ‘Running’}

Servisi çalıştırır
Start-Service -Name ServisAdı

Servisi durdurur
Stop-Service -Name ServisAdı