141 lines
6.1 KiB
PowerShell
141 lines
6.1 KiB
PowerShell
$ServerList1 = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "OU=Servers,OU=NCRA,DC=ccx,DC=carecentrix,DC=com" | Select-Object DNSHostName
|
|
$ServerList2 = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "OU=Servers,OU=FLT2,DC=ccx,DC=carecentrix,DC=com" | Select-Object DNSHostName
|
|
$ServerList3 = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "OU=Servers,OU=AZPH,DC=ccx,DC=carecentrix,DC=com" | Select-Object DNSHostName
|
|
$ServerList4 = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "OU=Servers,OU=CLVA1,DC=ccx,DC=carecentrix,DC=com" | Select-Object DNSHostName
|
|
$ServerList5 = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "OU=Servers,OU=CTHA,DC=ccx,DC=carecentrix,DC=com" | Select-Object DNSHostName
|
|
$ServerList6 = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "OU=Servers,OU=KSOP,DC=ccx,DC=carecentrix,DC=com" | Select-Object DNSHostName
|
|
$ServerList = $ServerList1+$ServerList2+$ServerList3+$ServerList4+$ServerList5+$ServerList6
|
|
|
|
$ServerReport = @()
|
|
|
|
$port1 = "8530"
|
|
$port2 = "8531"
|
|
$wsusserver = "psus002.ccx.carecentrix.com"
|
|
|
|
|
|
|
|
foreach ($Server in $ServerList) {
|
|
$ServerName = $Server.DNSHostName
|
|
|
|
$pssession = New-PSSession -ComputerName $ServerName -ErrorAction SilentlyContinue
|
|
$CurrentServer = New-Object System.Object
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "Name" -Value $ServerName
|
|
#Enter-PSSession $pssession
|
|
|
|
if ($null -ne $pssession){
|
|
write-host "Connected to $ServerName"
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "Status" -Value "Accessible"
|
|
$CurrentServer.Name = $ServerName
|
|
|
|
|
|
#Check HTTP Port
|
|
#Clear Port Variables
|
|
$port8530= @()
|
|
$port8531= @()
|
|
$port8530 = Invoke-Command -Session $pssession -ScriptBlock {invoke-webrequest http://psus002.ccx.carecentrix.com:8530/CLientWebService/Client.asmx -UseBasicParsing} -ErrorAction SilentlyContinue
|
|
if ($port8530.StatusCode -eq "200"){
|
|
Write-host "Port 8530 Accessible"
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8530" -Value "Open"
|
|
}
|
|
|
|
elseif ($null -eq $port8530) {
|
|
$TestNetConnection = New-Object Net.Sockets.TcpClient
|
|
$testnetconnection.connect($wsusserver,$port1)
|
|
|
|
if ($testnetconnection.Connected){
|
|
$TestNetConnection.Close()
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8530" -Value "Open"
|
|
}
|
|
else {
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8530" -Value "Unable to Verify"
|
|
Write-host "Invoke Webrequest not recognized"
|
|
}
|
|
}
|
|
|
|
else {
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8530" -Value "Closed"
|
|
Write-host "Port 8531 Inaccessible"
|
|
|
|
}
|
|
# Check HTTPS Port
|
|
$port8531 = Invoke-Command -Session $pssession -ScriptBlock {invoke-webrequest https://psus002.ccx.carecentrix.com:8531/CLientWebService/Client.asmx -UseBasicParsing} -ErrorAction SilentlyContinue
|
|
|
|
|
|
if ($port8531.StatusCode -eq "200"){
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8531" -Value "Open"
|
|
Write-host "Port 8531 Accessible"
|
|
}
|
|
|
|
elseif ($null -eq $port8531) {
|
|
$TestNetConnection = New-Object Net.Sockets.TcpClient
|
|
$testnetconnection.connect($wsusserver,$port2)
|
|
|
|
if ($testnetconnection.Connected){
|
|
$TestNetConnection.Close()
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8531" -Value "Open"
|
|
}
|
|
else{
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8531" -Value "Unable to Verify"
|
|
Write-host "Invoke Webrequest not recognized"
|
|
}
|
|
}
|
|
|
|
else {
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "8531" -Value "Blocked"
|
|
Write-host "Port 8531 Inaccessible"
|
|
}
|
|
|
|
#Check C: Drive Space
|
|
$DriveCheck =Invoke-Command -Session $pssession -ScriptBlock {get-WmiObject win32_logicaldisk -Filter "DeviceID='C:'"}
|
|
$HDFreespace = [Math]::Round($DriveCheck.Freespace / 1GB)
|
|
$HDSize =[Math]::Round($DriveCheck.Size / 1GB)
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "C: Size" -Value $HDSize
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "C: Freespace" -Value $HDFreespace
|
|
if ($HDFreespace -lt 5) {
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "SpaceCheck" -Value "Consider adding Space to C:"
|
|
Write-host "C: Drive does not have enough space"
|
|
}
|
|
else {
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "SpaceCheck" -Value "Server has sufficient space for Windows Updates"
|
|
Write-host "C: has plenty of space"
|
|
}
|
|
|
|
$DriveCheck = @()
|
|
|
|
#Windows Update Details
|
|
$failedupdates = Invoke-Command -Session $pssession -ScriptBlock {
|
|
$Session = New-Object -ComObject "Microsoft.Update.Session"
|
|
|
|
$Searcher = $Session.CreateUpdateSearcher()
|
|
|
|
$historyCount = $Searcher.GetTotalHistoryCount()
|
|
|
|
$Searcher.QueryHistory(0, $historyCount) | Select-Object @{Name="Computer"; Expression={$Computer}}, Date,
|
|
|
|
@{name="Operation"; expression={switch($_.operation){
|
|
|
|
1 {"Installation"}; 2 {"Uninstallation"}; 3 {"Other"}}}},
|
|
|
|
@{name="Status"; expression={switch($_.resultcode){
|
|
|
|
1 {"In Progress"}; 2 {"Succeeded"}; 3 {"Succeeded With Errors"};
|
|
|
|
4 {"Failed"}; 5 {"Aborted"}
|
|
|
|
}}},Title| Where-Object {$_.Status -eq "Failed"}
|
|
}
|
|
$failedupdates |Export-Csv -NoType "E:\Windows Update Failures\UpdateAudit-$ServerName-Failed-WindowsUpdates.csv"
|
|
# Exit-PSSession
|
|
$ServerReport += $CurrentServer
|
|
Get-PSSession | Remove-PSSession
|
|
#Copy-Item -Path \\$ServerName\Users\abamaso-ccxadmin\Desktop\UpdateAudit-$ServerName-Failed-WindowsUpdates.csv -Destination 'C:\Users\abamaso-ccxadmin\Desktop\WIndows Update Failures'
|
|
}
|
|
#outSide PSSession if
|
|
else {
|
|
$CurrentServer | Add-Member -MemberType NoteProperty -Name "Status" -Value "Inaccessible"
|
|
Write-host "$ServerName Inaccessible"
|
|
$ServerReport += $CurrentServer
|
|
}
|
|
}
|
|
#outside for each
|
|
$ServerReport | Export-Csv "E:\Windows Update Failures\ServerReport.csv" |