sample.ps1
function Invoke-SccmOfflineUpgradeWorkflow { param( [string]$SiteCode = 'TST', [string]$SiteServer = 'srvtst.domain.com', [string]$ModuleUNC = '\\srvtst\offline\Module', [string]$RootUNC = '\\srvtst\offline', [string]$SvcToolPathOffline = 'X:\ConfigMgr\cd.latest\SMSSETUP\TOOLS\ServiceConnectionTool' ) # Yollar $ExportDir = Join-Path $RootUNC 'Export' $DownloadDir = Join-Path $RootUNC 'Download' $ImportDir = Join-Path $RootUNC 'Import' $LogsDir = Join-Path $RootUNC 'Logs' $ExportZip = Join-Path $ExportDir 'TST-UsageData-And-Tool.zip' $ExportLog = Join-Path $LogsDir 'Export-TST.log' $PackageZip = Join-Path $ImportDir 'TST-UpdatePacks.zip' $OnlineLog = Join-Path $LogsDir 'OnlineDownload-TST.log' $ErrorLog = Join-Path $LogsDir 'OnlineDownloadErrors-TST.log' $ImportLog = Join-Path $LogsDir 'Import-TST.log' # Klasörleri hazırla foreach ($p in @($ExportDir,$DownloadDir,$ImportDir,$LogsDir)) { if (-not (Test-Path $p)) { New-Item -ItemType Directory -Path $p -Force | Out-Null } } # DLL import $dllPath = Join-Path $ModuleUNC 'SccmOfflineUpgrade.dll' if (-not (Test-Path $dllPath)) { throw "DLL not found: $dllPath" } Import-Module $dllPath -Force # Versiyon bilgisi function Show-CurrentVersion { try { $ns = "root\SMS\site_$SiteCode" $site = Get-CimInstance -Namespace $ns -ClassName SMS_Site -ComputerName $SiteServer -ErrorAction Stop if ($site.Version) { Write-Host ("Current SCCM Version: {0} (Build {1})" -f $site.Version,$site.BuildNumber) -ForegroundColor Cyan return } } catch {} try { $full = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\SMS\Setup' -Name 'Full Version' -ErrorAction Stop).'Full Version' if ($full) { Write-Host "Current SCCM Version (registry): $full" -ForegroundColor Cyan } } catch {} } function Show-LatestUpdateHint { try { $ns = "root\SMS\site_$SiteCode" $upd = Get-CimInstance -Namespace $ns -ClassName SMS_CM_UpdatePackages -ComputerName $SiteServer | Sort-Object CreationDate -Descending | Select-Object -First 1 Name,State if ($upd) { Write-Host "Latest Available Update: $($upd.Name) [State: $($upd.State)]" -ForegroundColor Yellow } } catch { Write-Host "Could not query latest update via WMI: $($_.Exception.Message)" -ForegroundColor DarkYellow } } # Fazlar function Phase-1-Prepare { Show-CurrentVersion Write-Host "=== PHASE 1: OFFLINE PREPARE ===" -ForegroundColor Green Export-SccmOfflinePackage ` -OutputZip $ExportZip ` -LogPath $ExportLog ` -ServiceConnectionToolPath $SvcToolPathOffline ` -StagingRoot $ExportDir ` -UsageDataCabName 'UsageData.cab' ` -EnsureOdbc18 ` -OdbcInstallerPath (Join-Path $ModuleUNC 'Prereqs\ODBC18\msodbcsql18.msi') ` -Verbose Write-Host "PREPARE complete." -ForegroundColor Green } function Phase-2-Download { Write-Host "=== PHASE 2: ONLINE DOWNLOAD ===" -ForegroundColor Green Invoke-SccmOnlineDownload ` -InputZip $ExportZip ` -DownloadOutput $DownloadDir ` -OutputZip $PackageZip ` -LogPath $OnlineLog ` -ErrorLogPath $ErrorLog ` -IncludeOdbc18 ` -EnsureOdbc18 ` -Verbose Write-Host "DOWNLOAD complete." -ForegroundColor Green } function Phase-3-Import { Show-CurrentVersion Write-Host "=== PHASE 3: OFFLINE IMPORT ===" -ForegroundColor Green Import-SccmOfflineUpdates ` -InputZip $PackageZip ` -LogPath $ImportLog ` -ServiceConnectionToolPath $SvcToolPathOffline ` -StagingRoot $ImportDir ` -RunPrereqCheck ` -TriggerUpgrade ` -SiteCode $SiteCode ` -SiteServer $SiteServer ` -Verbose Show-LatestUpdateHint Write-Host "IMPORT complete." -ForegroundColor Green } # Menü Write-Host "" Write-Host "SCCM Offline Upgrade Workflow" -ForegroundColor White Write-Host "1) Phase 1 - OFFLINE PREPARE" Write-Host "2) Phase 2 - ONLINE DOWNLOAD" Write-Host "3) Phase 3 - OFFLINE IMPORT" $choice = Read-Host "Select phase (1/2/3)" switch ($choice) { '1' { Phase-1-Prepare } '2' { Phase-2-Download } '3' { Phase-3-Import } default { Write-Host "Invalid choice" -ForegroundColor Red } } } |