# REST API Entegrasyonu: PowerShell ile Dış Sistemlere (Envanter, Biletleme vb.) Veri Gönderme/Çekme

- Bağlantı: https://musti.org/powershell/powershell-rest-api-entegrasyonu/
- Yayımlanma: 2026-09-21T21:38:37+03:00
- Yazar: mmutlu

Bir kullanıcının hesabı devre dışı bırakıldığında bunu ilgili ekibe manuel olarak
haber vermek, unutulmaya en açık adımlardan biri. Modern BT altyapısında sistemler
artık birbirinden izole çalışmıyor ve PowerShell’in `Invoke-RestMethod` komutu, 
AD, envanter sistemleri ve Jira gibi biletleme araçları arasında tam da bu tür köprüleri
otomatik kurmanızı sağlıyor.

## Temel REST API Çağrısı

    ```
    $header = @{
        "Authorization" = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("kullanici:api-token"))
        "Content-Type" = "application/json"
    }

    $sonuc = Invoke-RestMethod -Uri "https://sirket.atlassian.net/rest/api/2/issue/PROJ-123" -Method Get -Headers $header
    $sonuc.fields.summary
    ```

## Örnek Senaryo: AD’den Jira’ya Otomatik Bilet Açma

Bir kullanıcının hesabı devre dışı bırakıldığında ilgili BT ekibine otomatik bir
Jira bileti açan bir entegrasyon kurmuştum:

    ```
    function New-JiraBileti {
        param($ozet, $aciklama)

        $body = @{
            fields = @{
                project = @{ key = "ITOPS" }
                summary = $ozet
                description = $aciklama
                issuetype = @{ name = "Task" }
            }
        } | ConvertTo-Json -Depth 5

        Invoke-RestMethod -Uri "https://sirket.atlassian.net/rest/api/2/issue" `
            -Method Post -Headers $header -Body $body
    }

    # Kullanım: bir AD hesabı devre dışı bırakıldığında
    New-JiraBileti -ozet "Hesap devre dışı bırakıldı: jsmith" `
        -aciklama "jsmith hesabı 90 gün inaktiflik nedeniyle otomatik devre dışı bırakıldı. Ekipman iadesi kontrol edilmeli."
    ```

## Envanter Sistemine Veri Gönderme Örneği

PowerShell ile toplanan donanım envanterini merkezi bir envanter API’sine göndermek
de aynı mantıkla çalışıyor:

    ```
    $envanter = Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer, Model
    $disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

    $payload = @{
        hostname = $env:COMPUTERNAME
        manufacturer = $envanter.Manufacturer
        model = $envanter.Model
        diskTotalGB = [math]::Round($disk.Size / 1GB, 2)
        diskFreeGB = [math]::Round($disk.FreeSpace / 1GB, 2)
        lastUpdated = (Get-Date -Format "o")
    } | ConvertTo-Json

    Invoke-RestMethod -Uri "https://envanter.sirket.com/api/cihazlar" -Method Post -Body $payload -ContentType "application/json"
    ```

## Hata Yönetiminden Kaçış Yok

API çağrıları gerçek dünyada her zaman başarılı dönmüyor — yetkilendirme süresi 
dolar, servis geçici olarak yanıt vermez, rate limit aşılır. Bunları ayırt eden 
bir hata yönetimi olmadan yazılan bir script, ilk üretim hatasında sessizce çöküyor:

    ```
    try {
        $sonuc = Invoke-RestMethod -Uri $apiUrl -Method Get -Headers $header -TimeoutSec 30
    } catch {
        if ($_.Exception.Response.StatusCode.value__ -eq 401) {
            Write-Host "Kimlik doğrulama hatası - API token geçersiz olabilir" -ForegroundColor Red
        } elseif ($_.Exception.Response.StatusCode.value__ -eq 429) {
            Write-Host "Rate limit aşıldı - biraz bekleyip tekrar deneyin" -ForegroundColor Yellow
        } else {
            Write-Host "API hatası: $($_.Exception.Message)" -ForegroundColor Red
        }
    }
    ```

## Son Not

PowerShell’in REST API yetenekleri, AD’yi tek başına izole bir sistem olmaktan çıkarıp
biletleme, envanter ve daha fazlasıyla konuşan entegre bir BT ekosisteminin parçası
haline getiriyor. Bu tür entegrasyonların en somut faydası, manuel bilgi aktarımından
kaynaklanan gecikmeleri ve unutulan adımları ortadan kaldırması.
