Microsoft System Center Yönetim Ailesi

MECM/SCCM ile İşletim Sistemi Dağıtımında Bilgisayar Adının Otomatik Olarak Belirlenmesi

Sistem yöneticileri için büyük ölçekli işletim sistemi dağıtımları sırasında karşılaşılan en yaygın sorunlardan biri, her bir cihaza manuel olarak bilgisayar adı atama zorunluluğudur. Bu işlem, hem zaman kaybına yol açar hem de insan hatasına açıktır. Microsoft Endpoint Configuration Manager, işletim sistemi dağıtım sürecini otomatikleştirmenin yanı sıra, bilgisayar adlarının da önceden belirlenmiş kurallara göre dinamik olarak atanmasına olanak tanır.

Bu makalede, SCCM ortamında işletim sistemi dağıtımı sırasında bilgisayar adlarının otomatik olarak verilmesini nasıl sağlayabileceğinizi inceleyeceğiz. Ayrıca bu yöntemin IT operasyonlarına sağlayacağı avantajlar da ele alınacaktır.

Otomatik bilgisayar adı belirlemenin başlıca faydaları:

  • 🔄 Tutarlı isimlendirme politikası sağlama
  • ⏱️ Manuel müdahaleyi azaltarak zaman tasarrufu elde etme
  • 🚫 İnsan hatalarını minimize etme (örneğin; aynı adın iki kez verilmesi gibi)
  • 📊 Varlık yönetimi (asset management) ve envanter süreçlerini kolaylaştırma
  • ⚙️ Tamamen otomatik ve müdahalesiz kurulum senaryolarının önünü açma

SCCM OSD sürecinde bilgisayar adlarının otomatik olarak atanabilmesi için genellikle Microsoft Deployment Toolkit (MDT) aracı kullanılır. Ancak MDT, özellikle küçük veya orta ölçekli ortamlarda yapılandırma karmaşıklığı ve bakım yükü nedeniyle tercih edilmeyebilir. Bu nedenle, daha sade ve esnek bir yaklaşım olarak REST API tabanlı bir çözüm üzerinden adlandırma işlemini gerçekleştireceğiz.

Ben bu örnekte, manuel isim girilmesini engellemek için OSDComputerName ortam değişkenini koleksiyon üzerinden kaldırdım. Bu sayede Task Sequence başlatıldığında kullanıcıdan bilgisayar adı girmesi istenmez. Bunun yerine, yükleme işlemi doğrudan başlar ve bilgisayar adı arka planda çalışan REST API’den otomatik olarak alınarak atanır.

Yapılandırma İçin Temel Gereksinimler

Bu yöntemi uygulayabilmek için bazı ön hazırlıkların yapılması gerekmektedir. Özellikle SCCM tarafından kullanılan WinPE (Windows Preinstallation Environment) ortamı, varsayılan olarak PowerShell desteği ile gelmez. REST API çağrısı yapabilmek ve script çalıştırabilmek için bu desteğin WinPE imajına eklenmiş olması gerekir. PowerShell desteğini eklemek için SCCM konsolunda aşağıdaki adımları takip etmelisiniz:

Software Library → Operating Systems → Boot Images bölümüne gidin. Kullandığınız Boot Image sağ tıklayın ve Properties seçin. Açılan pencerede Optional Components sekmesine geçin ve Windows PowerShell (WinPE-Powershell) bileşenini ekleyin.

OK butonuna bastıktan sonra gelen ekranda YES butonuna basarak boot imajı DP sunucularına yeniden dağıtın.

Açılan pencerede Reload this boot image with the current Windows PE version from the Windows ADK işaretlenerek Windows ADK ve Windows PE’nin mevcut sürüme güncelleştirilmesi sağlanır.

Bu işlem tamamlandıktan sonra, PowerShell komutlarını çalıştırabilecek bir WinPE ortamına sahip olacaksınız.

REST API üzerinden bilgisayar adlandırma işlemini gerçekleştirebilmek için yalnızca WinPE ortamına PowerShell desteği eklemek yeterli değildir. Ayrıca SCCM sunucusu üzerinde bazı ek bileşenlerin de kurulması gerekmektedir.

  • REST API ile daha gelişmiş script işlevselliği ve modern modül uyumluluğu sağlamak için PowerShell 7 kullanılması önerilir. Bunun için PowerShell Resmi Sürüm Sayfası üzerinden işletim sisteminize uygun .msi kurulum dosyasını indirin ve kurun.
  • Sürekli çalışan ve arka planda REST API’yi dinleyen bir PowerShell script’inin servis olarak çalıştırılması daha güvenli ve sürdürülebilir bir yöntemdir. Bu sayede, sistem yeniden başlatılsa bile arka planda otomatik olarak çalışmaya devam edecek ve talepleri karşılayacaktır. Bunu yapmak için NSSM aracını https://nssm.cc/download adresinden indirin.
  • Bilgisayar adlandırma sürecinde genellikle Active Directory üzerinde varlık kontrolü yapılması gerektiğinden, Active Directory için PowerShell modülünün sunucuya eklenmiş olması gerekir. Bununun için Server Manager üzerinde Add Roles and Features sihirbazını başlatın. Features adımına geldiğinizde “Active Directory Module for Windows PowerShell” seçeneğini işaretleyin ve kurulumu tamamlayın.

Bu ön gereksinimler tamamlandıktan sonra, sıradaki adım olarak PowerShell script’inin yapılandırılması ve SCCM Task Sequence içerisine nasıl entegre edileceğini ele alacağız.

İlk adım olarak, bilgisayar adlandırma sürecini yönetecek olan PowerShell script’ini kendi ihtiyaçlarınıza göre düzenlemelisiniz. Bu script, belirli bir formatta bilgisayar adları üretir ve Active Directory’de kullanılabilirliklerini kontrol ederek uygun olanı istemciye sunar.

Aşağıdaki parametreleri script içerisinde düzenleyerek isimlendirme şablonunuzu belirleyebilirsiniz. Düzenlemeyi yaptıktan sonra script’i ADComputerNameAPI.ps1 adıyla kaydedin.

  • $prefix = “onk-” #Bu kısım ise tüm bilgisayar adlarının başına eklenecek öneki tanımlar.
  • $start = 100  #Bu satır, bilgisayar adlandırmasının hangi numaradan başlayacağını belirler.
Import-Module ActiveDirectory

$prefix = "onk-"
$start = 100
$listener = [System.Net.HttpListener]::new()
$listener.Prefixes.Add("http://+:8080/")
$listener.Start()

Write-Host "API başlatıldı: http://localhost:8080/next-name"

while ($true) {
$context = $listener.GetContext()
$request = $context.Request
$response = $context.Response

if ($request.HttpMethod -eq "GET" -and $request.Url.AbsolutePath -eq "/next-name") {
    try {
        $existing = Get-ADComputer -Filter "Name -like '$prefix*'" | Select-Object -ExpandProperty Name

        $usedNumbers = $existing | ForEach-Object {
            if ($_ -match "$prefix(\d+)$") { [int]$matches[1] }
        }

        $nextNumber = if ($usedNumbers) {
            ($usedNumbers | Measure-Object -Maximum).Maximum + 1
        } else {
            $start
        }

        $nextName = "$prefix$nextNumber"

        $output = @{ name = $nextName } | ConvertTo-Json
        $buffer = [System.Text.Encoding]::UTF8.GetBytes($output)
        $response.ContentType = "application/json"
        $response.ContentLength64 = $buffer.Length
        $response.OutputStream.Write($buffer, 0, $buffer.Length)
        $response.OutputStream.Close()
    } catch {
        $errorMessage = @{ error = $_.Exception.Message } | ConvertTo-Json
        $buffer = [System.Text.Encoding]::UTF8.GetBytes($errorMessage)
        $response.StatusCode = 500
        $response.ContentType = "application/json"
        $response.OutputStream.Write($buffer, 0, $buffer.Length)
        $response.OutputStream.Close()
    }
} else {
    $response.StatusCode = 404
    $response.OutputStream.Close()
}

}

Hazırladığınız scripti ve servis oluşturmak için indirdiğiniz nssm.exe dosyasını bir klasörde toplayın.

Script’in arka planda sürekli çalışması ve gelen REST API taleplerini dinleyebilmesi için, bu script’i bir Windows servisine dönüştürmemiz gerekiyor. Bunun için NSSM (Non-Sucking Service Manager) adlı hafif ve etkili bir araç kullanacağız.

Başlat menüsünden PowerShell ISE uygulamasını bulun, sağ tıklayın ve Yönetici olarak çalıştır seçeneğini seçin. Aşağıdaki parametreleri script içerisinde düzenleyin ve çalıştırın.

  • $scriptPath #Hazırladığınız powershell script yolu.
  • $nssmPath #İndirdiğiniz nssm.exe dosya yolu.
# 1. Servis adı ve script yolu
$svcName    = "ADComputerNameAPI"
$scriptPath = "C:\osdcomputername\ADComputerNameAPI.ps1"
$pwshPath   = "C:\Program Files\PowerShell\7\pwsh.exe"
$nssmPath   = "C:\osdcomputername\nssm.exe"

# 2. NSSM ile servis oluştur
& $nssmPath install $svcName $pwshPath "-File `"$scriptPath`""

# 3. (İsteğe bağlı) Servis oturum açma ayarı: Domain hesabı kullanın
#& $nssmPath set $svcName ObjectName "DOMAIN\svcaccount" "P@ssw0rd"

# 4. Servisi başlat
Start-Service $svcName

Tarayıcı üzerinden http://sccm_ip:8080 kontrol ettiğimiz zaman en yüksek değeri aldığını görebiliyorum.

Artık altyapımız hazır. PowerShell script’imiz bir servis olarak çalışıyor, REST API üzerinden istek kabul ediyor ve Active Directory’de uygun bilgisayar ismini kontrol ederek yanıtlıyor. Son adım olarak, bu servisi SCCM OSD Task Sequence süreciyle entegre etmemiz gerekiyor.

Bu sayede işletim sistemi kurulumu başlamadan önce bilgisayar ismi dinamik olarak alınacak ve kuruluma bu isimle devam edilecektir. Bunun için, SCCM Konsolu’nda Software Library > Operating Systems > Task Sequences bölümüne gidin. İlgili Task Sequence’a sağ tıklayın ve Edit seçeneğini seçin.

Açılan pencerede Apply Operating System adımının hemen öncesine, Run PowerShell Script ekleyin. Yeni eklediğiniz Run PowerShell Script adımında aşağıdaki ayarları yapılandırın:

  • Name: Tercihinize göre bir başlık
  • Execution Policy: Bypass
  • Script Type: Enter a PowerShell script
  • Script içeriğinde $Uri kısmındaki url adresini sccm sunucu ip adresini yazarak yapıştırın.
$computerName = Invoke-RestMethod -Uri "http://sccm_ip_addr:8080/next-name"
$tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment
$tsenv.Value("OSDComputerName") = $computerName.name

Yapılandırma tamamlandıktan sonra, değişikliklerin tam olarak uygulanabilmesi için Task Sequence’ın dağıtıldığı koleksiyonu güncellemeniz gerekmektedir. Bunun için, Mevcut Deployment’ı kaldırın ve Task Sequence’ı Yeniden Dağıtın.

Eğer her şey doğru yapılandırıldıysa:

  • Script çalışacak ve Active Directory’de uygun isim kontrol edilecek.
  • İlk boş isim bulunacak ve OSDComputerName değişkeni bu değerle güncellenecektir.
  • Ardından işletim sistemi kurulumu bu isimle devam edecektir.

Bu yöntemi kullanırken dikkat edilmesi gereken kritik bir nokta bulunmaktadır: Eğer bir bilgisayara işletim sistemi dağıtımı tamamlanmadan ve bu bilgisayar Active Directory domain’ine dahil edilmeden, aynı script ile başka bir cihaza daha kurulum başlatılırsa, bilgisayar adı çakışması meydana gelebilir. Çünkü REST API, henüz domain’e yazılmamış ismi tekrar kullanılabilir olarak görecektir. Bu nedenle kurulumların seri değil, sıralı şekilde ilerlemesi veya kullanılacak isimlerin geçici olarak rezerve edilmesini sağlayacak ek kontrollerin uygulanması önerilir.

Bu şekilde bir çok dağıtım gerçekleştirdim ve Active Directory ortamını kontrol ettiğimiz zaman işlemin başarılı olduğunu görebildim.

Bu makalede, SCCM OSD sürecinde bilgisayar adlarının otomatik ve standart bir şekilde atanmasını sağlayan pratik bir yöntem sunduk. PowerShell ile geliştirilen basit bir REST API ve NSSM servisi aracılığıyla, manuel müdahale olmadan, Active Directory uyumlu bilgisayar adları sistemli biçimde dağıtılabilir hale geliyor. Bu yöntem sayesinde hem kurulum süreci hızlanır hem de BT ekiplerinin iş yükü azalır. Ayrıca isimlendirme hatalarının ve çakışmalarının önüne geçilerek daha düzenli bir sistem altyapısı sağlanmış olur.

Bir sonraki makalede görüşmek üzere.

İlgili Makaleler

Bir yanıt yazın

Başa dön tuşu