1. sayfa (Toplam 1 sayfa)

Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 16:57
gönderen TRWE_2012
Merhabalar

NOT:

Valla böyle bir forum konusu açma niyetim yoktu....Ama @mehoaga 'ın ısrarlı isteği (dedim ki @Tarkan_dost'a da danışabilirsin kendisi böyle konularda mahir-usta, yok dinletemedim, illa ben...!!! :-D ) ile bu forum konusunu açtım.Umarım kendisi ve forum için yararlı olur.

PowerShell ile Sürücü Kurulumunu Otomatikleştirme (GUI Destekli) (Bu konu beni aşacak ama inşallah forum ahalisine rezil olmam...!)

Bu konuda sizlere, .cmd, .bat ve .inf uzantılı dosyalarla sürücü yükleme işini tam otomatik hale getiren, basit bir PowerShell arayüzü nasıl hazırlanır, adım adım anlatacağım.

Amaç

Elinizde bir sürücü klasörü varsa (örneğin 1 GB'lık)
İçindeki .cmd, .bat veya .inf dosyalarıyla sürücü yüklemesi yapıyorsanız
Bunları tek tıkla, sırayla çalıştıracak bir ara yüz (GUI) istiyorsanız

Gerekli Olanlar

Windows 10 veya 11
PowerShell (varsayılan olarak var)
Not Defteri
Yönetici yetkisi

Betiği Oluşturma

Masaüstünde şu adımları takip edin:

DriverInstallerGUI.ps1 adında bir dosya oluşturun.

İçine şunu yapıştırın:

Kod: Tümünü seç

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = "Sürücü Kurucu"
$form.Width = 600
$form.Height = 400

$btnSelect = New-Object System.Windows.Forms.Button
$btnSelect.Text = "Sürücü Dizinini Seç"
$btnSelect.Top = 20
$btnSelect.Left = 20
$btnSelect.Width = 200
$form.Controls.Add($btnSelect)

$logBox = New-Object System.Windows.Forms.TextBox
$logBox.Multiline = $true
$logBox.ScrollBars = "Vertical"
$logBox.Top = 60
$logBox.Left = 20
$logBox.Width = 540
$logBox.Height = 280
$logBox.Font = 'Consolas,10'
$form.Controls.Add($logBox)

$btnSelect.Add_Click({
    $folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
    if ($folderBrowser.ShowDialog() -eq "OK") {
        $path = $folderBrowser.SelectedPath
        $logBox.AppendText("Dizin seçildi: $path`r`n")
        Get-ChildItem -Path $path -Recurse -Include *.cmd, *.bat | ForEach-Object {
            $logBox.AppendText("Çalıştırılıyor: $($_.FullName)`r`n")
            Start-Process -FilePath $_.FullName -Wait -NoNewWindow
        }
        Get-ChildItem -Path $path -Recurse -Include *.inf | ForEach-Object {
            $logBox.AppendText("Yükleniyor: $($_.FullName)`r`n")
            Start-Process -FilePath "pnputil.exe" -ArgumentList "/add-driver `"$($_.FullName)`" /install" -NoNewWindow -Wait
        }
        $logBox.AppendText(" Tüm işlemler tamamlandı.`r`n")
    }
})

$form.Topmost = $true
$form.ShowDialog()
Betiği Çalıştırmak (Çift Tıklama Yetmez!)

Betiği çift tıklamak çalıştırmaz, bu nedenle şu adımları izleyin:

PowerShell’i Yönetici Olarak Açın:

Başlat menüsüne “powershell” yazın
Sağ tıklayıp “Yönetici olarak çalıştır” seçin

Aşağıdaki komutları yazın:

Kod: Tümünü seç

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Bu komut geçici olarak PowerShell güvenliğini devre dışı bırakır.

Ardından, masaüstüne geçip betiği çalıştırın:

Kod: Tümünü seç

cd "$env:USERPROFILE\Desktop" && .\DriverInstallerGUI.ps1
GUI arayüzü açılacak ve sürücü klasörünüzü seçerek işlemleri başlatabileceksiniz.

İLAVE EK NOTLARIM :

Kısayolla Tek Tıkla Çalıştırmak

Masaüstüne sağ tıklayın > Yeni > Kısayol oluşturun.

Komut satırına şunu yazın:

Kod: Tümünü seç

powershell.exe -ExecutionPolicy Bypass -File "C:\Klasör\DriverInstallerGUI.ps1"
"C:\Klasör\DriverInstallerGUI.ps1" kısmını siz kendinize göre değiştirin bu sadece örnek olsun diye yazıldı/gösterildi.

SONUÇ OLARAK :

Bu yöntem sayesinde:

Sürücü klasörlerini el ile kurmak zorunda kalmazsınız
.inf, .cmd ve .bat dosyaları sırayla ve sessizce çalışır
Her şey tek pencerede, loglarla birlikte görünür
Ve hiçbir ek program yüklemeden bunu yaparsınız!

.inf dosyaları pnputil komutu ile yüklenir. Windows 10/11’de dahili olarak vardır.
.cmd / .bat dosyaları varsa, sırayla çalıştırılır (örneğin özel kurulum scriptleri).

Yani hiçbir ek yazılım yüklemeden "yaptığımız şey sadece Windows’un kendi içinde gelen PowerShell ve .NET bileşenlerini kullanmamızdır"

@mehoaga inşallah yaparsın ....

KAYNAKLAR :

1. PowerShell Documentation
(Bu kaynak, PowerShell komutlarını, betik yazma, hata ayıklama ve GUI oluşturma hakkında kapsamlı bilgi sunuyor.)
https://docs.microsoft.com/en-us/powershell/

2. System.Windows.Forms
(Bu sayfa, Windows Forms ile GUI oluşturma hakkında bilgi sağlar. Burada kullanılan nesneler (örneğin Form, Button, TextBox vb.) hakkında detaylı bilgi bulabilirsiniz.)
https://docs.microsoft.com/en-us/dotnet ... ew=net-5.0

3. pnputil - Driver Installation
(pnputil komutunun kullanımı ve sürücü yükleme işlemleri hakkında açıklamalar yer alır. Bu araç, sürücüleri Windows'a yüklemek ve kaldırmak için kullanılır.)
https://docs.microsoft.com/en-us/window ... st/pnputil

4. Execution Policy in PowerShell
(PowerShell betiklerinin çalıştırılmasını engelleyen Execution Policy hakkında bilgi alabilirsiniz.)
https://docs.microsoft.com/en-us/powers ... tionpolicy

5. PowerShell Script to EXE (PowerShell to EXE)
(Yukarıdaki anlatımda .exe dosyası oluşturma adımını es geçtim çünkü defender çıkmazı var)
(PowerShell betiklerini .exe dosyasına dönüştürmek için kullanabileceğiniz popüler bir araç. Bu sayede .ps1 dosyasını tek tıkla çalıştırılabilir hale getirebilirsiniz.)
https://github.com/MScholtes/PS2EXE

6. PowerShell ISE (Integrated Scripting Environment)
(PowerShell betiklerinizi yazabileceğiniz ve hata ayıklayabileceğiniz yerleşik geliştirme ortamı olan PowerShell ISE hakkında bilgi sağlar.)
https://docs.microsoft.com/en-us/powers ... rshell-ise

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 17:11
gönderen TRWE_2012
Sonuç olarak ne yapıyor bu .PS1 betiği ?

Sürücü dizinini seçiyorsunuz (klasör seçme penceresi açılıyor)

İçindeki (dizinin) :

.cmd / .bat dosyaları sırayla çalıştırılıyor
.inf dosyaları pnputil ile yükleniyor

Yükleme günlükleri ekrana yazılıyor (GUI içinde)

NOT:

Sordum.net 'e ekmek (konu) çıktı....


NOT-2:

Yukarıda verdiğim kaynakların web bağlantıları zamanla değişebilir.(Özellikle Microsoft. zır-pırt bağlantıları değiştirip duruyorlar bu hintliler sinir oluyorum bunlara)

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 17:27
gönderen Kayserilifatih
PowerShell'den genel olarak nefret ederim onun yerine ben sordum scripti ile yedek alıp driver backup programı ile kolayca geri yüklüyorum ya da Windows'ların iso dosyalarına driverleri entegre ediyorum bu şekilde kurduğumda driverler otomatik kurulu geliyor sistem ilk kurulduğu anda kafam rahat oluyor.

Konudaki önerilen yol da denenebilir. Şahsi kanaatimce Powershell çok vasattır ve oldum olası perişan olduğum bir programdır yani sürekli çalışan scriptlerin arasında sürekli bir kırmızı yazı göstermesi yok mu bana çok illallah ettirmiştir.

https://www.sordum.net/30598/bir-komutl ... edeklemek/

https://www.sordum.net/18118/surucu-driver-yedekleme/

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 17:40
gönderen TRWE_2012
DÜZENLENMİŞ SON SÜRÜM: DriverInstallerGUI.ps1

Kod: Tümünü seç

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = "Sürücü Yükleyici"
$form.Size = New-Object System.Drawing.Size(600,400)
$form.StartPosition = "CenterScreen"

$btnSelect = New-Object System.Windows.Forms.Button
$btnSelect.Location = New-Object System.Drawing.Point(20,20)
$btnSelect.Size = New-Object System.Drawing.Size(150,30)
$btnSelect.Text = "Klasör Seç"
$form.Controls.Add($btnSelect)

$btnInstall = New-Object System.Windows.Forms.Button
$btnInstall.Location = New-Object System.Drawing.Point(200,20)
$btnInstall.Size = New-Object System.Drawing.Size(150,30)
$btnInstall.Text = "Yüklemeyi Başlat"
$btnInstall.Enabled = $false
$form.Controls.Add($btnInstall)

$btnExit = New-Object System.Windows.Forms.Button
$btnExit.Location = New-Object System.Drawing.Point(380,20)
$btnExit.Size = New-Object System.Drawing.Size(150,30)
$btnExit.Text = "Çıkış"
$form.Controls.Add($btnExit)

$logBox = New-Object System.Windows.Forms.TextBox
$logBox.Multiline = $true
$logBox.ScrollBars = "Vertical"
$logBox.Location = New-Object System.Drawing.Point(20,70)
$logBox.Size = New-Object System.Drawing.Size(540,270)
$logBox.ReadOnly = $true
$form.Controls.Add($logBox)

$folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$global:SelectedFolder = ""

$btnSelect.Add_Click({
    if ($folderBrowser.ShowDialog() -eq "OK") {
        $global:SelectedFolder = $folderBrowser.SelectedPath
        $logBox.AppendText("✓ Klasör seçildi: $($global:SelectedFolder)`r`n")
        $btnInstall.Enabled = $true
    }
})

$btnInstall.Add_Click({
    $logBox.AppendText("Sürücü yükleme işlemi başladı...`r`n")

    $infFiles = Get-ChildItem -Path $global:SelectedFolder -Recurse -Filter *.inf

    foreach ($inf in $infFiles) {
        $logBox.AppendText("Yükleniyor: $($inf.FullName)`r`n")
        $result = pnputil /add-driver "`"$($inf.FullName)`"" /install
        $logBox.AppendText("$result`r`n")
    }

    $logBox.AppendText("✓ Tüm işlemler tamamlandı.`r`n")
})

$btnExit.Add_Click({
    $form.Close()
})

[void]$form.ShowDialog()
NOTLAR :

Dosyayı kayıt ederken : UTF-8 with BOM şeklinde kayıt edin.

Ekran Görüntüsü :
Resim
NOT:

Bu samimi bir itiraftır.

Ben, bir @Tarkan_dost değilim, ancak kendisini takip eden bir pc kullanıcısıyım.Benden fazla bilgi istemeyin çünkü uzman değilim...

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 17:48
gönderen velociraptor
Bende uzman değilim , Forumda bir uzman olduğunu düşünmüyorum hepimiz araştırarak birşeyler öğreniyoruz , ortak noktamız meraklı olmamız :arrow:

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 17:56
gönderen TRWE_2012
İsteyen olursa bu betiğin nasıl .exe dosyasına dönüştürülebileceğini anlatan bir kısa notum'da var ama baş belası Windows Defendar işin içine girince, olay çıkmaza giriyor.İsteyen olursa buraya notu eklerim.

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 18:28
gönderen mehoaga
Değerli TRWE_2012 kardeşim;
Ellerine kollarına ve emeklerine sağlık çok teşekkürler. :arrow: Dediğin gibi inş yapabilirim benim için zor gibi ama biraz uğraşacağız gibi görünüyor. İYİKİ VARSINIZ. :arrow: Hepinize şükran borçluyum.

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 18:29
gönderen mehoaga
TRWE_2012 yazdı: 04 May 2025, 17:56 İsteyen olursa bu betiğin nasıl .exe dosyasına dönüştürülebileceğini anlatan bir kısa notum'da var ama baş belası Windows Defendar işin içine girince, olay çıkmaza giriyor.İsteyen olursa buraya notu eklerim.
Ekleyebilirsen ben ve ihtiyacı olan herkes kullanabilir kardeşim. :arrow:

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 18:31
gönderen TRWE_2012
SORU :

Seçilen sürücü ana dizininin içinde her sürücünün kendi dizini varsa betik gene çalışır değilmi?

CEVAP:

Evet, betik bu şekilde yapılandırılmıştır alt klasörlerdeki .inf dosyalarını da tarayıp yükler. Çünkü şu satırdaki -Recurse parametresi tam olarak bunu yapar:

Kod: Tümünü seç

$infFiles = Get-ChildItem -Path $global:SelectedFolder -Recurse -Filter *.inf
Yukarıdaki komut satırının sözel açılımı :

Kullanıcı, bir ana sürücü klasörü (örneğin D:\TümSürücüler) seçtiğinde,

Bu klasörün içinde her sürücü kendi alt klasöründe dursa bile
(örneğin: D:\TümSürücüler\WiFi, D:\TümSürücüler\Ses, D:\TümSürücüler\Ekran),

Betik, bu alt klasörlerin her birinde .inf uzantılı dosyaları bulur ve yükler.

Betik mekanizması, şu şekildeyse sorunsuz çalışır:

Kod: Tümünü seç

TümSürücüler\
├── WiFi\
│   └── xyz.inf
├── Ses\
│   └── abc.inf
├── Ekran\
│   └── def.inf
Betik hepsini görüp yükler.

NOT:

Windows PC Kullanıcı hayatım'da ilk ve ciddi oluşturduğum betik olduğu için biraz heyecanlıyım.(dönüp dönüp bir daha inceliyorum kodları sakın bir hata olmasın, forum'a da rezil olmayım diye)

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 18:38
gönderen mehoaga
TRWE_2012 yazdı: 04 May 2025, 18:31 SORU :

Seçilen sürücü ana dizininin içinde her sürücünün kendi dizini varsa betik gene çalışır değilmi?

CEVAP:

Evet, betik bu şekilde yapılandırılmıştır alt klasörlerdeki .inf dosyalarını da tarayıp yükler. Çünkü şu satırdaki -Recurse parametresi tam olarak bunu yapar:

Kod: Tümünü seç

$infFiles = Get-ChildItem -Path $global:SelectedFolder -Recurse -Filter *.inf
Yukarıdaki komut satırının sözel açılımı :

Kullanıcı, bir ana sürücü klasörü (örneğin D:\TümSürücüler) seçtiğinde,

Bu klasörün içinde her sürücü kendi alt klasöründe dursa bile
(örneğin: D:\TümSürücüler\WiFi, D:\TümSürücüler\Ses, D:\TümSürücüler\Ekran),

Betik, bu alt klasörlerin her birinde .inf uzantılı dosyaları bulur ve yükler.

Betik mekanizması, şu şekildeyse sorunsuz çalışır:

Kod: Tümünü seç

TümSürücüler\
├── WiFi\
│   └── xyz.inf
├── Ses\
│   └── abc.inf
├── Ekran\
│   └── def.inf
Betik hepsini görüp yükler.

NOT:

Windows PC Kullanıcı hayatım'da ilk ve ciddi oluşturduğum betik olduğu için biraz heyecanlıyım.(dönüp dönüp bir daha inceliyorum kodları sakın bir hata olmasın, forum'a da rezil olmayım diye)
Yok artık daha neler. :?: sen yapacaksında olmayacak ben zannetmiyorum. :arrow:

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 04 May 2025, 18:43
gönderen TRWE_2012
mehoaga yazdı: 04 May 2025, 18:29
TRWE_2012 yazdı: 04 May 2025, 17:56 İsteyen olursa bu betiğin nasıl .exe dosyasına dönüştürülebileceğini anlatan bir kısa notum'da var ama baş belası Windows Defendar işin içine girince, olay çıkmaza giriyor.İsteyen olursa buraya notu eklerim.
Ekleyebilirsen ben ve ihtiyacı olan herkes kullanabilir kardeşim. :arrow:
PowerShell Betiğini .exe’ye Dönüştürme (Adım Adım)
Gerekli Araç: PS2EXE

Bu işlem için açık kaynaklı PS2EXE aracını kullanacağız.

1. ADIM: PS2EXE’yi Yükle (İnternet bağlantısı şart)

PowerShell’i Yönetici olarak aç.
Aşağıdaki komutu yaz:

Kod: Tümünü seç

Install-Module -Name ps2exe -Scope CurrentUser -Force
Gerekirse "Yes" (Y) sorularına onay ver.

2. ADIM: Betiğini EXE'ye Dönüştürme

Aşağıdaki komutu çalıştırarak .ps1 dosyanı .exe dosyasına dönüştürebilirsiniz ;

Kod: Tümünü seç

Invoke-ps2exe "C:\Users\Administrator\Masaüstü\DriverInstallerGUI.ps1" "C:\Users\Administrator\Masaüstü\DriverInstallerGUI.exe"
Buradaki ; C:\Users\Administrator kısmını kendi kullanıcı_hesap_adınız olacak şekilde değiştirin.

3. ADIM: EXE’yi Çalıştırma

Artık masaüstünüz de DriverInstallerGUI.exe adlı bir dosyanız olacak.
Çift tıklayınca tıpkı bir normal program gibi açılacak.

Şimdi .exe dosyasını biraz da süslü-püslü yapalım.(bana göre görsellikte önemlidir bir yazılım'da)

Kod: Tümünü seç

Invoke-ps2exe "DriverInstallerGUI.ps1" "DriverInstallerGUI.exe" -noConsole -title "Sürücü Yükleyici"
Yukarıdaki en gelişik komut yapısının sözel açıklaması :

-iconFile "C:\yol\simge.ico":Simge eklemek
-noConsole:Konsolsuz çalıştırma
-title "Sürücü Yükleyici":-title "Sürücü Yükleyici"

Re: Yedeklenmiş Sürücü Dizininden Sürücü Yükleme

Gönderilme zamanı: 05 May 2025, 00:50
gönderen burak35
Eline sağlık. Alternatif iyidir.