135 lines
4.6 KiB
PowerShell
135 lines
4.6 KiB
PowerShell
#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"
|