Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Programlama ve Script dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15150
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2505 kez
Teşekkür edildi: 5301 kez

Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Mesaj gönderen TRWE_2012 »

Merhaba

KOD İÇERİĞİ :

Kod: Tümünü seç

# netfx35_kur.ps1
# .NET Framework 3.5'i Windows 10/11 üzerinde etkinleştirir.
# Yöntem 1 : Windows Update üzerinden (internet bağlantısı gerekir)
# Yöntem 2 : Harici kaynak (ISO veya USB) üzerinden
# Kullanım  : Sağ tıkla > "PowerShell ile Çalıştır"

#Requires -Version 5.1
Set-StrictMode -Version Latest
$ErrorActionPreference = "SilentlyContinue"

# --- Yönetici hakkı kontrolü ve otomatik yükseltme ---
function YoneticiHakkiKontrol {
    $mevcutKullanici = [Security.Principal.WindowsIdentity]::GetCurrent()
    $yetkiKontrol    = New-Object Security.Principal.WindowsPrincipal($mevcutKullanici)
    if (-not $yetkiKontrol.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
        Write-Host "Yönetici yetkisi gerekiyor, yeniden başlatılıyor..." -ForegroundColor Yellow
        Start-Process -FilePath "powershell.exe" `
                      -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" `
                      -Verb RunAs
        exit
    }
}

# --- .NET Framework 3.5 kurulu mu kontrol et ---
function NetFxDurumKontrol {
    $durum = Get-WindowsOptionalFeature -Online -FeatureName "NetFx3"
    return $durum.State
}

# --- İlerleme çubuğu göster ---
function IlerlemeGoster {
    param([string]$Mesaj, [int]$Yuzde)
    Write-Progress -Activity ".NET Framework 3.5 Kurulumu" `
                   -Status $Mesaj `
                   -PercentComplete $Yuzde
}

# --- Yöntem 1: Windows Update üzerinden kur ---
function WindowsUpdateIleKur {
    Write-Host "`nWindows Update üzerinden kurulum başlatılıyor..." -ForegroundColor Yellow
    Write-Host "İnternet bağlantısı gereklidir, lütfen bekleyin...`n" -ForegroundColor Gray

    IlerlemeGoster -Mesaj "Paket indiriliyor ve kuruluyor..." -Yuzde 10

    try {
        $sonuc = Enable-WindowsOptionalFeature `
                    -Online `
                    -FeatureName "NetFx3" `
                    -All `
                    -NoRestart `
                    -ErrorAction Stop

        IlerlemeGoster -Mesaj "Tamamlandı." -Yuzde 100
        Write-Progress -Activity ".NET Framework 3.5 Kurulumu" -Completed

        Write-Host ".NET Framework 3.5 başarıyla etkinleştirildi." -ForegroundColor Green

        if ($sonuc.RestartNeeded) {
            Write-Host "Değişikliklerin geçerli olması için sistemi yeniden başlatmanız gerekiyor." -ForegroundColor Yellow
            $yanit = Read-Host "Şimdi yeniden başlatılsın mı? (E/H)"
            if ($yanit -match "^[Ee]$") {
                Restart-Computer -Force
            }
        }
    } catch {
        Write-Progress -Activity ".NET Framework 3.5 Kurulumu" -Completed
        Write-Host "`nHata oluştu: $_" -ForegroundColor Red
        Write-Host "Windows Update erişimi başarısız olabilir." -ForegroundColor Red
        Write-Host "Harici kaynak yöntemini deneyin (seçenek 2)." -ForegroundColor Yellow
    }
}

# --- Yöntem 2: Harici kaynak üzerinden kur (ISO/USB) ---
function HariciKaynaktanKur {
    Write-Host "`nHarici kaynak yöntemi seçildi." -ForegroundColor Yellow
    Write-Host "Windows 10/11 ISO dosyasının bağlı olması veya kurulum USB'sinin takılı olması gerekir.`n" -ForegroundColor Gray

    # Kaynak dizin otomatik arama
    $olasiYollar = @()
    Get-PSDrive -PSProvider FileSystem | ForEach-Object {
        $aday = "$($_.Root)sources\sxs"
        if (Test-Path $aday) {
            $olasiYollar += $aday
        }
    }

    if ($olasiYollar.Count -gt 0) {
        Write-Host "Olası kaynak dizin(ler) bulundu:" -ForegroundColor Cyan
        for ($i = 0; $i -lt $olasiYollar.Count; $i++) {
            Write-Host "  $($i + 1). $($olasiYollar[$i])"
        }
        Write-Host "  M. Manuel giriş"
        $secim = Read-Host "`nSeçiminiz"

        if ($secim -match "^\d+$" -and [int]$secim -ge 1 -and [int]$secim -le $olasiYollar.Count) {
            $kaynakYol = $olasiYollar[[int]$secim - 1]
        } else {
            $kaynakYol = Read-Host "Kaynak dizin yolunu girin (örnek: D:\sources\sxs)"
        }
    } else {
        Write-Host "Otomatik kaynak dizin bulunamadı." -ForegroundColor DarkYellow
        $kaynakYol = Read-Host "Kaynak dizin yolunu manuel girin (örnek: D:\sources\sxs)"
    }

    # Yol doğrulama
    if ([string]::IsNullOrWhiteSpace($kaynakYol)) {
        Write-Host "Kaynak yol boş bırakılamaz." -ForegroundColor Red
        return
    }

    if (-not (Test-Path $kaynakYol)) {
        Write-Host "Kaynak dizin bulunamadı: $kaynakYol" -ForegroundColor Red
        return
    }

    # Kaynak içinde gerekli dosyayı ara
    $netfxDosya = Join-Path $kaynakYol "microsoft-windows-netfx3-ondemand-package~31bf3856ad364e35~amd64~~.cab"
    if (-not (Test-Path $netfxDosya)) {
        Write-Host "Kaynak dizinde .NET Framework 3.5 paketi bulunamadı." -ForegroundColor Red
        Write-Host "Dizin geçerli bir Windows kurulum kaynağı olmayabilir." -ForegroundColor Red
        return
    }

    Write-Host "`nKaynak doğrulandı: $kaynakYol" -ForegroundColor Green
    Write-Host "Kurulum başlatılıyor, lütfen bekleyin...`n" -ForegroundColor Yellow

    IlerlemeGoster -Mesaj "Harici kaynaktan kuruluyor..." -Yuzde 10

    try {
        $sonuc = Enable-WindowsOptionalFeature `
                    -Online `
                    -FeatureName "NetFx3" `
                    -Source $kaynakYol `
                    -All `
                    -NoRestart `
                    -ErrorAction Stop

        IlerlemeGoster -Mesaj "Tamamlandı." -Yuzde 100
        Write-Progress -Activity ".NET Framework 3.5 Kurulumu" -Completed

        Write-Host ".NET Framework 3.5 başarıyla etkinleştirildi." -ForegroundColor Green

        if ($sonuc.RestartNeeded) {
            Write-Host "Değişikliklerin geçerli olması için sistemi yeniden başlatmanız gerekiyor." -ForegroundColor Yellow
            $yanit = Read-Host "Şimdi yeniden başlatılsın mı? (E/H)"
            if ($yanit -match "^[Ee]$") {
                Restart-Computer -Force
            }
        }
    } catch {
        Write-Progress -Activity ".NET Framework 3.5 Kurulumu" -Completed
        Write-Host "`nHata oluştu: $_" -ForegroundColor Red
    }
}

# --- Yöntem 3: DISM komutu ile kur (alternatif yöntem) ---
function DismIleKur {
    Write-Host "`nDISM yöntemi seçildi." -ForegroundColor Yellow
    Write-Host "Bu yöntem Windows Update bağlantısını kullanır.`n" -ForegroundColor Gray

    IlerlemeGoster -Mesaj "DISM üzerinden kuruluyor..." -Yuzde 10

    try {
        $dismCikti = & dism.exe /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /NoRestart 2>&1

        IlerlemeGoster -Mesaj "DISM tamamlandı." -Yuzde 100
        Write-Progress -Activity ".NET Framework 3.5 Kurulumu" -Completed

        if ($LASTEXITCODE -eq 0 -or $LASTEXITCODE -eq 3010) {
            Write-Host ".NET Framework 3.5 DISM ile başarıyla kuruldu." -ForegroundColor Green
            if ($LASTEXITCODE -eq 3010) {
                Write-Host "Değişikliklerin geçerli olması için sistemi yeniden başlatmanız gerekiyor." -ForegroundColor Yellow
                $yanit = Read-Host "Şimdi yeniden başlatılsın mı? (E/H)"
                if ($yanit -match "^[Ee]$") {
                    Restart-Computer -Force
                }
            }
        } else {
            Write-Host "DISM kurulumu başarısız oldu. Çıkış kodu: $LASTEXITCODE" -ForegroundColor Red
            Write-Host "DISM çıktısı:`n$dismCikti" -ForegroundColor DarkRed
        }
    } catch {
        Write-Progress -Activity ".NET Framework 3.5 Kurulumu" -Completed
        Write-Host "Hata oluştu: $_" -ForegroundColor Red
    }
}

# --- Ana menü ---
function AnaMenu {
    while ($true) {
        # Mevcut durum
        $mevcutDurum = NetFxDurumKontrol
        $durumMetin  = if ($mevcutDurum -eq "Enabled") { "Etkin" } else { "Devre Disi" }
        $durumRenk   = if ($mevcutDurum -eq "Enabled") { "Green" }  else { "Red" }

        Write-Host "`n========================================" -ForegroundColor Cyan
        Write-Host "   .NET Framework 3.5 Kurulum Araci"     -ForegroundColor Cyan
        Write-Host "   Windows 10 / 11"                       -ForegroundColor Cyan
        Write-Host "========================================" -ForegroundColor Cyan
        Write-Host " Mevcut Durum: " -NoNewline
        Write-Host $durumMetin -ForegroundColor $durumRenk
        Write-Host "----------------------------------------" -ForegroundColor Cyan

        if ($mevcutDurum -eq "Enabled") {
            Write-Host " .NET Framework 3.5 zaten etkin durumda." -ForegroundColor Green
            Write-Host " Ek bir islem yapmaniza gerek yok."        -ForegroundColor Green
            Write-Host "`n 0. Cikis"
            $secim = Read-Host "`nSeciminiz"
            if ($secim -eq "0") { exit }
            continue
        }

        Write-Host " 1. Windows Update uzerinden kur (internet gerekir)"
        Write-Host " 2. Harici kaynak uzerinden kur (ISO/USB)"
        Write-Host " 3. DISM ile kur (alternatif)"
        Write-Host " 0. Cikis"
        Write-Host "========================================" -ForegroundColor Cyan

        $secim = Read-Host "`nSeciminiz"

        switch ($secim) {
            "1" { WindowsUpdateIleKur }
            "2" { HariciKaynaktanKur }
            "3" { DismIleKur }
            "0" { Write-Host "Cikiliyor..." -ForegroundColor Gray; exit }
            default { Write-Host "Gecersiz secim, tekrar deneyin." -ForegroundColor Red }
        }

        Write-Host "`nDevam etmek icin bir tusa basin..."
        $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    }
}

# ============================================================
# BASLANGIC
# ============================================================
YoneticiHakkiKontrol
AnaMenu
KOD İÇERİK ANLATIMI :

Betik açılışta .NET 3.5 zaten etkinse sizi doğrudan bilgilendirip kurulum menüsünü göstermiyor. Harici kaynak seçildiğinde bağlı sürücüleri otomatik tarayıp sources\sxs dizinini buluyor, elle yazmanıza gerek kalmıyor.

1. Windows Update üzerinden kurulum

İnternet bağlantısı gerekir. Enable-WindowsOptionalFeature komutu Microsoft sunucularına bağlanarak paketi indirir ve kurar. Normal şartlarda önerilen yöntem budur.

2. Harici kaynak üzerinden kurulum (ISO/USB)

İnternet bağlantısı gerekmez. Windows 10/11 kurulum ISO dosyası bağlıysa veya kurulum USB'si takılıysa sources\sxs dizinini otomatik tarar, bulamazsa manuel yol girişi ister. Kurumsal ortamlarda veya internet erişimi kısıtlı sistemlerde tercih edilir.

3. DISM ile kurulum

İlk iki yöntem başarısız olduğunda devreye girer. Doğrudan dism.exe aracını çağırır, Windows Update bağlantısını kullanır. PowerShell katmanını atlayarak işletim sisteminin kendi dağıtım servisiyle kurulum yapar.

Güle güle kullanın...
Kullanıcı avatarı
Kayserilifatih
Petabyte4
Petabyte4
Mesajlar: 9450
Kayıt: 30 Ağu 2024, 20:48
cinsiyet: Erkek
Teşekkür etti: 928 kez
Teşekkür edildi: 6994 kez

Re: Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Mesaj gönderen Kayserilifatih »

Komut istemine şu komutu girerseniz Net 3.5 otomatik olarak kurulacaktır. Buradaki G harfi benim dosya gezginine açtığım iso'nun harfidir sizler kendi diskinize göre o harfi değiştirin.

Kod; Dism /online /enable-feature /featurename:NetFX3 /All /Source:G:\sources\sxs /LimitAccess
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15150
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2505 kez
Teşekkür edildi: 5301 kez

Re: Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Mesaj gönderen TRWE_2012 »

Alın size interaktif terminal arabirimi :

netfx35_ana_menu.html kod içeriği :

Kod: Tümünü seç

<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>.NET Framework 3.5 Kurulum Araci - Ana Menu</title>
<style>
  body { background:#121212; display:flex; justify-content:center; align-items:center; min-height:100vh; margin:0; padding:2rem; box-sizing:border-box; }
  .terminal { background:#1e1e1e; border-radius:8px; padding:1.5rem 2rem; font-family:'Courier New', Courier, monospace; font-size:14px; line-height:1.8; color:#d4d4d4; max-width:620px; width:100%; }
  @keyframes blink { 0%,100%{opacity:1} 50%{opacity:0} }
  .kursor { display:inline-block; width:10px; height:16px; background:#d4d4d4; animation:blink 1s step-end infinite; vertical-align:middle; }
  button { font-family:'Courier New', Courier, monospace; font-size:12px; background:#2d2d2d; color:#4ec9b0; border:1px solid #4ec9b0; padding:4px 12px; border-radius:4px; cursor:pointer; }
  button.normal { color:#d4d4d4; border-color:#555; }
  button:hover { opacity:0.8; }
  .ayrac { color:#4ec9b0; }
  .baslik { color:#4ec9b0; }
</style>
</head>
<body>
<div class="terminal">

  <div class="ayrac">========================================</div>
  <div class="baslik">   .NET Framework 3.5 Kurulum Araci</div>
  <div class="baslik">   Windows 10 / 11</div>
  <div class="ayrac">========================================</div>

  <div style="margin-top:4px;">
    <span> Mevcut Durum: </span>
    <span id="durum-yazi" style="color:#f44747;">Devre Disi</span>
  </div>

  <div class="ayrac">----------------------------------------</div>

  <div id="menu-satirlar">
    <div> 1. Windows Update uzerinden kur <span style="color:#888;">(internet gerekir)</span></div>
    <div> 2. Harici kaynak uzerinden kur <span style="color:#888;">(ISO/USB)</span></div>
    <div> 3. DISM ile kur <span style="color:#888;">(alternatif)</span></div>
    <div> 0. Cikis</div>
  </div>

  <div class="ayrac">========================================</div>

  <div style="margin-top:8px; display:flex; align-items:center; gap:8px;">
    <span>Seciminiz:</span>
    <span class="kursor"></span>
  </div>

  <div style="margin-top:1.5rem; border-top:1px solid #333; padding-top:1rem; display:flex; gap:8px; flex-wrap:wrap;">
    <button onclick="durumDegistir()">Durumu degistir</button>
    <button class="normal" onclick="secimGoster(1)">Secim: 1</button>
    <button class="normal" onclick="secimGoster(2)">Secim: 2</button>
    <button class="normal" onclick="secimGoster(3)">Secim: 3</button>
  </div>

  <div id="cikti" style="margin-top:1rem; min-height:24px; font-size:13px;"></div>

</div>

<script>
var etkin = false;

function durumDegistir() {
  etkin = !etkin;
  var d = document.getElementById('durum-yazi');
  var m = document.getElementById('menu-satirlar');
  if (etkin) {
    d.style.color = '#6a9955';
    d.textContent = 'Etkin';
    m.innerHTML = '<div style="color:#6a9955;"> .NET Framework 3.5 zaten etkin durumda.</div><div style="color:#6a9955;"> Ek bir islem yapmaniza gerek yok.</div><div style="margin-top:4px;"> 0. Cikis</div>';
    document.getElementById('cikti').innerHTML = '';
  } else {
    d.style.color = '#f44747';
    d.textContent = 'Devre Disi';
    m.innerHTML = '<div> 1. Windows Update uzerinden kur <span style="color:#888;">(internet gerekir)</span></div><div> 2. Harici kaynak uzerinden kur <span style="color:#888;">(ISO/USB)</span></div><div> 3. DISM ile kur <span style="color:#888;">(alternatif)</span></div><div> 0. Cikis</div>';
  }
}

function secimGoster(n) {
  var cikti = document.getElementById('cikti');
  var mesajlar = {
    1: '<span style="color:#dcdcaa;">Windows Update uzerinden kurulum baslatiliyor...</span><br><span style="color:#888;">Internet baglantisi gereklidir, lutfen bekleyin...</span>',
    2: '<span style="color:#dcdcaa;">Harici kaynak yontemi secildi.</span><br><span style="color:#888;">Suruculer taranıyor: D:\\sources\\sxs bulundu.</span>',
    3: '<span style="color:#dcdcaa;">DISM yontemi secildi.</span><br><span style="color:#888;">dism.exe /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /NoRestart</span>'
  };
  cikti.innerHTML = mesajlar[n] || '';
}
</script>
</body>
</html>
Bu kodlamayı boş bir metin belgesine aktarın.Menü>>Farklı Kaydet>> Açılan pencere'de dosya adı : netfx35_ana_menu.html , Dosya Türü : Tüm dosyalar yapın/kayıt edin.Şimdi oluşan .html dosyasını web tarayıcısında çalıştırın ve deneyimleyiniz.

SONUÇ :
Resim
Kullanıcı avatarı
Kayserilifatih
Petabyte4
Petabyte4
Mesajlar: 9450
Kayıt: 30 Ağu 2024, 20:48
cinsiyet: Erkek
Teşekkür etti: 928 kez
Teşekkür edildi: 6994 kez

Re: Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Mesaj gönderen Kayserilifatih »

Şahsen kendim karışık kod parçalamak yerine sade komutla yapmayı tercih ederim malum vaktim kısıtlıdır ve kendi yöntemim bana göre daha pratiktir fakat uzun kod hastasıyım diyenler kendi sorumluluklarında olmak kaydıyla deneyip yorum yazarlarsa bizleri de bilgilendirmiş olacaklardır.
Kullanıcı avatarı
burak35
Zettabyte3
Zettabyte3
Mesajlar: 17556
Kayıt: 07 Eki 2016, 13:06
cinsiyet: Erkek
Teşekkür etti: 10117 kez
Teşekkür edildi: 11777 kez

Re: Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Mesaj gönderen burak35 »

Powershell karmaşık. Hiç sarmıyo. inşallah yaygınlaşmaz.
Kullanıcı avatarı
Kayserilifatih
Petabyte4
Petabyte4
Mesajlar: 9450
Kayıt: 30 Ağu 2024, 20:48
cinsiyet: Erkek
Teşekkür etti: 928 kez
Teşekkür edildi: 6994 kez

Re: Netframework 3.5 Bileşeni Kurabilen Akıllı PS1 Betiği

Mesaj gönderen Kayserilifatih »

Katılıyorum benim yöntemim ulusal olduğu için hata verme riski yoktur ama Powershell fazla karmaşıktır şahsen bilerek yorumumda PowerShell kod yazmadım çünkü şunu yılların bana verdiği derin tecrübelere dayanarak çok iyi biliyorum "pire için yorgan yakılmaz"
Cevapla

“Programlama ve Script dilleri” sayfasına dön