Private/Write-ServiceStatus.ps1

function Write-ServiceStatus {
    param (
        [parameter(Mandatory=$False)]
            [string] $FileName,
        [parameter(Mandatory=$False)]
            [string] $TableName,
        [parameter(Mandatory=$False)]
            [string] $SiteCode,
        [parameter(Mandatory=$False)]
            [int] $NumberOfDays,
        [parameter(Mandatory=$False)]
            [string] $LogFile,
        [parameter(Mandatory=$False)]
            [string] $ServerName,
        [parameter(Mandatory=$False)]
            $ContinueOnError = $true
    )
    Write-Log -Message "function: write-servicestatus ****" -LogFile $logfile

    try {
        $services = Get-WmiObject -Class "Win32_Service" -ComputerName $ServerName -ErrorAction Stop
        $Fields = @("Caption", "ServiceName", "StartMode", "Status")
        $ServicesTable = New-CmDataTable -TableName $tableName -Fields $Fields
        foreach ($service in $services) {
            $row = $ServicesTable.NewRow()
            $row.Caption = $service.Caption
            $row.ServiceName = $service.Name 
            $row.StartMode = $service.StartMode 
            $row.Status = $service.State
            $ServicesTable.Rows.Add($row)
        }
        
    }
    catch {
        if ($ContinueOnError -eq $True) {
            Write-Log -Category 'Error' -Message $_.Exception.Message -Severity 2 -LogFile $LogFile
        }
        else {
            Write-Log -Category 'Error' -Message "Terminating: $($_.Exception.Message)" -Severity 3 -LogFile $LogFile
            return
        }
    }
    <#
    $SiteInformation = Get-CmWmiObject -query "select Type from SMS_Site where ServerName = '$Server'" -namespace "Root\SMS\Site_$SiteCodeNamespace" -computerName $smsprovider -logfile $logfile
    if ($SiteInformation -ne $null) { $SiteType = $SiteInformation.Type }
     
    Write-Log -Message "getting sccm site system roles" -LogFile $logfile
    $WMISMSListRoles = Get-CmWmiObject -query "select distinct RoleName from SMS_SCI_SysResUse where NetworkOSPath = '\\\\$Server'" -computerName $smsprovider -namespace "root\sms\site_$SiteCodeNamespace" -logfile $logfile
    $SMSListRoles = @()
    foreach ($WMIServer in $WMISMSListRoles) { $SMSListRoles += $WMIServer.RoleName }
     
    Write-Log -Message "Roles discovered: " + $SMSListRoles -join(", ") -LogFile $logfile
     $Fields = @("ServiceName", "Status")
    $ServicesTable = New-CmDataTable -TableName $tableName -Fields $Fields
 
    if ($SMSListRoles -contains 'AI Update Service Point') {
        Write-Log -Message "site system role: AI Update Service Point" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "AI_UPDATE_SERVICE_POINT"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
    }
    if (($SMSListRoles -contains 'SMS Application Web Service') -or ($SMSListRoles -contains 'SMS Distribution Point') -or ($SMSListRoles -contains 'SMS Fallback Status Point') -or ($SMSListRoles -contains 'SMS Management Point') -or ($SMSListRoles -contains 'SMS Portal Web Site') ) {
        Write-Log -Message "site system role: MP, Application Web, Portal Web, DP or Fallback Status Point" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "IISADMIN"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "W3SVC"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
    }
    if ($SMSListRoles -contains 'SMS Component Server') {
        Write-Log -Message "site system role: SMS Component Server" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "SMS_Executive"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
    }
    if ($SMSListRoles -contains 'SMS Site Server') {
        Write-Log -Message "site system role: SMS Site Server" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "SMS_NOTIFICATION_SERVER"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "SMS_SITE_COMPONENT_MANAGER"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
        if ($SiteType -ne 1) {
            $row = $ServicesTable.NewRow()
            $row.ServiceName = "SMS_SITE_VSS_WRITER"
            $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
            $ServicesTable.Rows.Add($row)
        }
    }
    if ($SMSListRoles -contains 'SMS Software Update Point') {
        Write-Log -Message "site system role: Software Update Point" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "WsusService"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
    }
    if ($SMSListRoles -contains 'SMS SQL Server') {
        Write-Log -Message "site system role: SQL Server" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        if ($SiteType -ne 1) {
            $row.ServiceName = "$SQLServiceName"
        }
        else {
            $row.ServiceName = 'MSSQL$CONFIGMGRSEC'
        }
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "SQLWriter"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
    }
    if ($SMSListRoles -contains 'SMS SRS Reporting Point') {
        Write-Log -Message "site system role: SQL Reporting Services" -LogFile $logfile
        $row = $ServicesTable.NewRow()
        $row.ServiceName = "ReportServer"
        $row.Status = (Get-ServiceStatus -LogFile $logfile -ServerName $servername -ServiceName $row.ServiceName)
        $ServicesTable.Rows.Add($row)
    }
    Write-Log -Message "finished enumerating site system roles" -LogFile $logfile
    #>

    , $ServicesTable | Export-CliXml -Path ($filename)
}