Functions/Get-ENSStatus.PS1
|
function Get-ENSStatus {
<# .Notes AUTHOR: Skyler Hart CREATED: 09/10/2019 21:57:28 LASTEDIT: 09/25/2019 14:43:59 KEYWORDS: REQUIRES: #Requires -Version 3.0 #Requires -Modules ActiveDirectory #Requires -PSSnapin Microsoft.Exchange.Management.PowerShell.Admin #Requires -RunAsAdministrator .LINK https://wanderingstag.github.io #> [CmdletBinding()] [Alias('ENS','Get-ENSInfo','ESS','Get-ESSInfo')] Param ( [Parameter(Mandatory=$false, Position=0)] [Alias('Host','Name','Computer','CN')] [string[]]$ComputerName = "$env:COMPUTERNAME" ) #Set variables needed for overall script $i = 0 $number = $ComputerName.length [int32]$version = $PSVersionTable.PSVersion.Major $hname = $host.Name $64na = 'SOFTWARE\\WOW6432Node\\Network Associates\\ePolicy Orchestrator\\Agent' $64ens = 'SOFTWARE\\WOW6432Node\\Network Associates\\TVD\\Shared Components\\Framework' $32ens = 'SOFTWARE\\Network Associates\\TVD\\Shared Components\\Framework' $d = $env:USERDNSDOMAIN $dn = $d.Split('.') | Select-Object -Last 1 #For each computer, check ENS foreach ($comp in $ComputerName) { #Set variables required per computer Clear-Variable -Name value2,reg,key,key2,datold,daysdatold,daysold,ensversion,epolist,epoinfo,ePOServers,ePOServerList,lasc,lascd,luc,lucd,name -ErrorAction SilentlyContinue | Out-Null $continue = $false $ensinstalled = $false #Progress Bar... Computers checked if ($number -gt "1") { $i++ $amount = ($i / $number) $perc1 = $amount.ToString("P") Write-Progress -activity "Getting ENS status. Currently checking $comp" -status "Computer $i of $number. Percent complete: $perc1" -PercentComplete (($i / $ComputerName.length) * 100) }#progress bar #Make sure running at least PowerShell v3 if ($version -gt 2 -or $hname -like "ServerRemote*") { #try 64 if fails then try 32-bit and if that fails then mark as unable to connect try { $ErrorActionPreference = "Stop" $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $comp) $key = $reg.OpenSubKey($64na) try { $key2 = $reg.OpenSubKey($64ens) $ensinstalled = $true } catch { $ensinstalled = $false } $epolist = $key.GetValue('ePOServerList') if ($ensinstalled -eq $true) { [string]$luc = $key2.GetValue('LastUpdateCheck') [string]$lasc = $key2.GetValue('LastASCI') $ensversion = $key2.GetValue('Version') if ([string]::IsNullOrWhiteSpace($epolist)) { $ensinstalled = "Partial - not functional" } $continue = $true } } catch { try { $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $comp) $key = $reg.OpenSubKey($32ens) $value2 = $key.GetValue('CurrentVersion') $value2 | Out-Null $continue = $true } catch { $value2 = $null $continue = $false } } if ($continue) { $epoinfo = $epolist.Split('|') $epoinfo = $epoinfo.Split(';') $ePOServers = $epoinfo | Where-Object {$_ -match $dn} foreach ($ePOServer in $ePOServers) { $name = $null $name = $ePOServer.Substring(0, $ePOServer.IndexOf('.')) if ([string]::IsNullOrWhiteSpace($ePOServerList)) { $ePOServerList = $name } else { $ePOServerList = $ePOServerList + ", " + $name } } $ePOServerList = $ePOServerList.Trim() $lucd = [datetime]::ParseExact($luc, 'yyyyMMddHHmmss', $null) $lascd = [datetime]::ParseExact($lasc, 'yyyyMMddHHmmss', $null) #Perform check to see if DAT is out of date if ($lucd -eq $null) { [string]$ldfj = "20000101" $lucd = [datetime]::ParseExact($ldfj, 'yyyyMMdd', $null) } #$today = get-date #$daysold = $today - $lucd #if ($daysold -gt $datdaysold) {$datout = "Yes"} #else {$datout = "No"} #$daysdatold = $daysold.Days } #Create the object data [PSCustomObject]@{ ComputerName = $comp FrameworkInstalled = $ensinstalled FrameworkVersion = $ensversion ePOServerList = $ePOServerList LastServerComms = $lascd LastSecurityUpdateCheck = $lucd } }#if host version gt 2 else { Write-Output " PowerShell must be at least version 3. Current version: $version" }#else host version }#foreach computer }#get ensstatus |