#Requires -Version 5.1 Set-StrictMode -Version Latest function wStep { param([string]$t); Write-Host " [>] $t" -ForegroundColor Yellow } function wOK { param([string]$t); Write-Host " [+] $t" -ForegroundColor Green } function wFail { param([string]$t); Write-Host " [-] $t" -ForegroundColor Red } function wInfo { param([string]$t); Write-Host " [i] $t" -ForegroundColor Gray } Clear-Host Write-Host " ================================================" -ForegroundColor Cyan Write-Host " NetworkSwitchDiscovery - Kurulum Sihirbazi" -ForegroundColor Cyan Write-Host " ================================================" -ForegroundColor Cyan Write-Host "" # 1. PowerShell versiyonu wStep "PowerShell versiyonu..." if ($PSVersionTable.PSVersion.Major -lt 5) { wFail "PowerShell 5.1+ gerekli. Mevcut: $($PSVersionTable.PSVersion)"; exit 1 } wOK "PowerShell $($PSVersionTable.PSVersion) - Uyumlu" # 2. ExecutionPolicy wStep "ExecutionPolicy kontrol..." $pol = Get-ExecutionPolicy -Scope CurrentUser if ($pol -in @("Restricted","AllSigned")) { wInfo "Policy $pol - RemoteSigned olarak degistiriliyor..." Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force wOK "ExecutionPolicy: RemoteSigned" } else { wOK "ExecutionPolicy: $pol (uygun)" } # 3. Klasor yapisi wStep "Klasor yapisi..." $libDir = Join-Path $PSScriptRoot "lib" if (-not (Test-Path $libDir)) { New-Item -ItemType Directory -Path $libDir | Out-Null wOK "lib\ olusturuldu" } else { wOK "lib\ mevcut" } # 4. NuGet wStep "NuGet provider..." $nuget = Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue if (-not $nuget -or $nuget.Version -lt [version]"2.8.5.201") { wInfo "NuGet kuruluyor..." Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Scope CurrentUser -Force | Out-Null wOK "NuGet kuruldu" } else { wOK "NuGet: $($nuget.Version)" } # 5. PSGallery wStep "PSGallery trust..." $gal = Get-PSRepository -Name PSGallery -ErrorAction SilentlyContinue if ($gal -and $gal.InstallationPolicy -ne "Trusted") { Set-PSRepository -Name PSGallery -InstallationPolicy Trusted wOK "PSGallery: Trusted" } else { wOK "PSGallery: Trusted (zaten)" } # 6. Posh-SSH wStep "Posh-SSH..." $posh = Get-Module -ListAvailable -Name Posh-SSH | Select-Object -First 1 if (-not $posh) { wInfo "Posh-SSH bulunamadi, kuruluyor..." try { Install-Module -Name Posh-SSH -Scope CurrentUser -Force -AllowClobber wOK "Posh-SSH kuruldu" } catch { wFail "Posh-SSH kurulamadi: $($_.Exception.Message)" wInfo "Manuel: Install-Module Posh-SSH -Scope CurrentUser -Force" } } else { wOK "Posh-SSH v$($posh.Version) mevcut" } # 7. ThreadJob (PS 5.1 icin) wStep "ThreadJob (PS 5.1 icin)..." if ($PSVersionTable.PSVersion.Major -ge 7) { wOK "PS 7+ - ThreadJob gereksiz, RunspacePool kullaniliyor" } else { $tj = Get-Module -ListAvailable -Name ThreadJob | Select-Object -First 1 if (-not $tj) { wInfo "ThreadJob bulunamadi, kuruluyor..." try { Install-Module -Name ThreadJob -Scope CurrentUser -Force wOK "ThreadJob kuruldu" } catch { wInfo "ThreadJob kurulamadi (opsiyonel): $($_.Exception.Message)" } } else { wOK "ThreadJob v$($tj.Version) mevcut" } } # 8. SharpSnmpLib (opsiyonel) wStep "SharpSnmpLib.dll (opsiyonel)..." $dll = Join-Path $PSScriptRoot "lib\SharpSnmpLib.dll" if (Test-Path $dll) { wOK "SharpSnmpLib.dll mevcut" } else { wInfo "SharpSnmpLib.dll yok - yerlesik UDP SNMP (v1/v2c) kullanilacak" wInfo "v3 icin: https://www.nuget.org/packages/SharpSnmpLib" wInfo "Indirip lib\ klasorune kopyalayin" } # 9. Script dosyalari wStep "Script dosyalari..." $ok = $true foreach ($f in @("Invoke-SwitchDiscovery.ps1","Start-SwitchDiscovery.ps1")) { $p = Join-Path $PSScriptRoot $f if (Test-Path $p) { wOK "$f mevcut" } else { wFail "$f EKSIK!"; $ok = $false } } Write-Host "" Write-Host " ================================================" -ForegroundColor Cyan if ($ok) { Write-Host " Kurulum TAMAMLANDI!" -ForegroundColor Green Write-Host "" Write-Host " Baslangic:" -ForegroundColor White Write-Host " .\Start-SwitchDiscovery.ps1" -ForegroundColor Cyan Write-Host "" Write-Host " Veya dogrudan:" -ForegroundColor White Write-Host " .\Invoke-SwitchDiscovery.ps1 -IPRange '192.168.1.0/24' -Username admin" -ForegroundColor Cyan } else { Write-Host " UYARI: Bazi dosyalar eksik!" -ForegroundColor Yellow } Write-Host " ================================================" -ForegroundColor Cyan Write-Host "" Read-Host " Cikmak icin Enter"