As mentioned in Previous Post, we’ve had upgrades fail due to non-standard path variables. I’ve created a CI that captures the path and looks for specific things then reports Compliant, or reports the issue, which we track with reports. We use this in our PreAssessment / PreFlight Rules, so if this is Non-Compliant, it prevents the machine from Upgrading.
Script:
#Get Current Path
$Environment = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
foreach ($path in ($Environment).Split(";"))
{
if ($path -eq "C:\WINDOWS\system32"){$Path_System32 = $true}
if ($path -eq "C:\WINDOWS"){$Path_Windows = $true}
if ($path -eq "C:\WINDOWS\System32\Wbem"){$Path_Wbem = $true}
if ($path -eq "C:\WINDOWS\System32\WindowsPowerShell\v1.0\"){$Path_PoSH64 = $true}
if ($path -like "*SysWOW64\WindowsPowerShell\v1.0*"){$Path_PoSH32 = $true}
}
#This runs a PowerShell Instance in the default environment to determine if 32 or 64 bit.
$Running64bit = PowerShell.exe -command [Environment]::Is64BitProcess
#Logic Section
#Was Powershell running 32Bit?
if ($Running64bit –eq $false)
{
$SystemPathStatus = "Fail - Using 32bit PowerShell"
Write-Output "System Path Status: $SystemPathStatus"
}
else
{
#Is there other Path issues?
if ($Path_System32 -eq $null -or $Path_Windows -eq $null -or $Path_Wbem -eq $null -or $Path_PoSH64 -eq $null )
{
$SystemPathStatus = "Fail - Missing Critical Path Information"
Write-Output "System Path Status: $SystemPathStatus"
}
else
{
$SystemPathStatus = "Pass"
Write-Output "Compliant"
}
}
Reporting… yeah, I still need to blog a bunch of reports, for now, just to show that it works. 🙂



