Private/Initialize/Initialize-CWAA.ps1
function Initialize-CWAA { if (-not ($PSVersionTable)) { Write-Warning 'PS1 Detected. PowerShell Version 2.0 or higher is required.' return } if (-not ($PSVersionTable) -or $PSVersionTable.PSVersion.Major -lt 3 ) { Write-Verbose 'PS2 Detected. PowerShell Version 3.0 or higher may be required for full functionality.' } If ($env:PROCESSOR_ARCHITEW6432 -match '64' -and [IntPtr]::Size -ne 8) { Write-Warning '32-bit PowerShell session detected on 64-bit OS. Attempting to launch 64-Bit session to process commands.' $pshell="${env:WINDIR}\sysnative\windowspowershell\v1.0\powershell.exe" If (!(Test-Path -Path $pshell)) { Write-Warning 'SYSNATIVE PATH REDIRECTION IS NOT AVAILABLE. Attempting to access 64-bit PowerShell directly.' $pshell="${env:WINDIR}\System32\WindowsPowershell\v1.0\powershell.exe" $FSRedirection=$True Add-Type -Debug:$False -Name Wow64 -Namespace "Kernel32" -MemberDefinition @" [DllImport("kernel32.dll", SetLastError=true)] public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr); [DllImport("kernel32.dll", SetLastError=true)] public static extern bool Wow64RevertWow64FsRedirection(ref IntPtr ptr); "@ [ref]$ptr = New-Object System.IntPtr $Result = [Kernel32.Wow64]::Wow64DisableWow64FsRedirection($ptr) # Now you can call 64-bit Powershell from system32 } If ($myInvocation.Line) { &"$pshell" -NonInteractive -NoProfile $myInvocation.Line } Elseif ($myInvocation.InvocationName) { &"$pshell" -NonInteractive -NoProfile -File "$($myInvocation.InvocationName)" $args } Else { &"$pshell" -NonInteractive -NoProfile $myInvocation.MyCommand } $ExitResult=$LASTEXITCODE If ($FSRedirection -eq $True) { [ref]$defaultptr = New-Object System.IntPtr $Result = [Kernel32.Wow64]::Wow64RevertWow64FsRedirection($defaultptr) } Write-Warning 'Exiting 64-bit session. Module will only remain loaded in native 64-bit PowerShell environment.' Exit $ExitResult } #Ignore SSL errors Add-Type -Debug:$False @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy #Enable TLS, TLS1.1, TLS1.2, TLS1.3 in this session if they are available IF([Net.SecurityProtocolType]::Tls) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls} IF([Net.SecurityProtocolType]::Tls11) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11} IF([Net.SecurityProtocolType]::Tls12) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12} IF([Net.SecurityProtocolType]::Tls13) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls13} $Null=Initialize-CWAAModule } |