PoshWSUS.psm1
<#
To Do: 1. New-PSWSUSLocalPackage 2. Get-PSWSUSLocalPackage 3. Get-PSWSUSUpdateApproval 4. Set-PSWSUSConfiguration 5. New-PSWSUSClient #> # Set Script Path $ScriptPath = Split-Path $MyInvocation.MyCommand.Path # Ensure necessary Registry Settings if (-not (Test-Path "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup")) { # Push to registry node, so New-ItemProperty has the correct PropertyTypes Push-Location "HKLM:\" # Create Container New-Item "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup" -Force | Out-Null # Keys necessary for WSUS libraries to function New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup" -Name "ConfigurationSource" -PropertyType "DWORD" -Value 0 -ErrorAction 'Stop' | Out-Null New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup" -Name "EnableRemoting" -PropertyType "DWORD" -Value 1 -ErrorAction 'Stop' | Out-Null New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup" -Name "TargetDir" -PropertyType "String" -Value "$($env:ProgramFiles)\Update Services\" -ErrorAction 'Stop' | Out-Null # Pop back to where you were Pop-Location } # Load libraries (32bit) if ([System.IntPtr]::Size -eq 4) { try { # Try loading properly installed Assemblies first Add-Type -AssemblyName "Microsoft.UpdateServices.Administration" -ErrorAction Stop } catch { # Try loading brought along Assemblies second Add-Type -Path "$ScriptPath\Libraries\x86\Microsoft.UpdateServices.Administration.dll" -ErrorAction 'SilentlyContinue' } } # Load libraries (64bit) else { try { # Try loading properly installed Assemblies first Add-Type -AssemblyName "Microsoft.UpdateServices.Administration" -ErrorAction Stop } catch { # Try loading brought along Assemblies second Add-Type -Path "$ScriptPath\Libraries\x64\Microsoft.UpdateServices.Administration.dll" -ErrorAction 'SilentlyContinue' } } # Validate Library if ( -not ( [appdomain]::CurrentDomain.GetAssemblies() | %{ $_.GetName() } | Where-Object { $_.Name -eq "Microsoft.UpdateServices.Administration" } ) ) { Write-Warning "WSUS Libraries could not be loaded" break } # Load Functions Try { Get-ChildItem "$ScriptPath\Scripts" | Select-Object -ExpandProperty FullName | ForEach-Object { $Function = Split-Path $_ -Leaf . $_ } } Catch { Write-Warning ("{0}: {1}" -f $Function,$_.Exception.Message) Continue } if (-not ($DefaultWsusPort)) { $global:DefaultWsusPort = 8530 } <# TODO: $ExecutionContext.SessionState.Module.OnRemove{ Remove-Variable -Name Wsus -Scope Global -Force } #> |