PowerShell Script Check SQL & IIS Installs
PowerShell Script that Queries Active Directory for enabled Windows Systems, tests Windows remote access, connects and searches services for SQL and IIS, cleans results and exports data to file, attaches files and sends in email. PowerShell is a great tool for doing almost everything. Find unknown SQL Database Servers and IIS Web server instances on the network that may require hardening tasks.
<#
.SYNOPSIS
Use PowerShell to search servers services for SQL and IIS installs
.DESCRIPTION
Queries Active Directory for Enabled Windows Systems
Tests Windows Remote Access
Connects and searches services fro SQL and IIS
Cleans results and Exports data to file
Attaches files and sends in email
.NOTES
Requires rights on remote machines
Requires Active Directory Module
#>
#======================================================
# Query Active Directory for Enabled Windows Systems
#======================================================
$Computers=Get-ADComputer -properties * -Filter * | Where{($_.OperatingSystem -like "Windows*") -and ($_.Enabled -eq $True)} | Select -ExpandProperty Name
# Upper Case System names
$MyCAPComputers=$Computers.ToUpper()
# Instantiate Array
$MyComputersPassWinRM=@()
#====================================================================
# Loop through systems and check for Widows remote managerment access
#====================================================================
Foreach ($Comp in $MyCAPComputers)
{
if ((Test-Connection -ErrorAction SilentlyContinue –ComputerName $Comp –Quiet –Count 1) –and ((Invoke-Command -ErrorAction SilentlyContinue –ComputerName $comp –ScriptBlock { 1 }) –eq 1))
{
$MyComputersPassWinRM+=$Comp
}
}
#======================================================================
# Set Up SQL Service Check Command and Execute as Job - Export to File
#======================================================================
$SQL_Services={get-service | where{$_.Displayname -like "SQL Server (*"}}
$SQL_JobID=Invoke-Command $MyComputersPassWinRM -ScriptBlock $SQL_Services -AsJob -ThrottleLimit 50
Receive-Job -id $SQL_JobID.ID -Wait | Export-CSV 'C:\temp\SQLInstall_X.csv'
#======================================================================
# Set Up IIS Service Check Command and Execute as Job - Export to File
#======================================================================
$IIS_Services={get-service | where{$_.name -eq "W3SVC"}}
$IIS_JobID=Invoke-Command $MyComputersPassWinRM -ScriptBlock $IIS_Services -AsJob -ThrottleLimit 50
Receive-Job -id $IIS_JobID.ID -Wait | Export-CSV 'C:\temp\IISInstall_X.csv'
#=======================================
# Import / Export - Cleanup SQL Dataset
#=======================================
$MySQLOutputfile = Import-CSV 'C:\temp\SQLInstall_X.csv' | Select PSComputername, Name, Displayname, Status
$MySQLOutputfile | Export-CSV -NoTypeInformation 'C:\temp\SQLInstall_Cleaned.csv'
#======================================
# Import / Export - Cleanup IIS Dataset
#======================================
$MyIISOutputfile = Import-CSV 'C:\temp\IISInstall_X.csv' | Select PSComputername, Name, Displayname, Status
$MyIISOutputfile | Export-CSV -NoTypeInformation 'C:\temp\IISInstall_Cleaned.csv'
#====================================
# Create Array for Attachments
#====================================
$Attach=@()
$Attach+='C:\temp\SQLInstall_Cleaned.csv'
$Attach+='C:\temp\IISInstall_Cleaned.csv'
#====================================
# Attach Files and Send Email
#====================================
$smtpServer = "xxxxxxx.COM"
$strFrom = "Scripts-IIS-SQL_Install@yourdomain.com"
$strTo = "xxxx@xxxx.com"
$StrCC="xxxx@xxxx.com"
$strSubject = “IIS - SQL Install"
$Body="See Attched Files listing IIS & SQL Instances"
Send-Mailmessage -SmtpServer $SmtpServer -from $strFrom -Attachments $Attach -to $strTo -Cc $StrCC -Subject $strSubject -BodyasHTML $Body