$dc = 'domain.controller.FQDN'
$wsou = 'OU=Workstations_OU,DC=domain,DC=local'
$outfile = 'c:\path\to\ccmstatus.csv'
$Session = New-PSSession -ComputerName $dc
Invoke-Command -Session $Session -ScriptBlock {Import-Module ActiveDirectory -DisableNameChecking}
Import-PSSession -Session $Session -Module ActiveDirectory | Out-Null
$workstations = Get-ADComputer -Filter * -SearchBase $wsou | Select DNSHostName
Remove-PSSession $Session
$statuses = @()
$Count = 0
$SkippedCount = 0
$ActiveCount = 0
$InactiveCount = 0
$NotFoundCount = 0
$Total=$workstations.Count
foreach ($workstation in $workstations)
{
if (Test-Connection -ComputerName $workstation.DNSHostName -Quiet -Count 1)
{
$status = Get-Service -ComputerName $workstation.DNSHostName -Name 'CcmExec' -ErrorAction:SilentlyContinue | Select Status, @{Name='Workstation';Expression={$workstation.DNSHostName}}
if ($status)
{
if ($Status.Status -eq 'Running') {$ActiveCount++} else {$InactiveCount++}
} else
{
$NotFoundCount++
$status = New-Object PsObject -Property @{Workstation=($workstation.DNSHostName);Status='Not found'}
}
$statuses += $status
} else
{
$SkippedCount++
}
$Count++
$CurrentOperation = 'checked: '+$Count+'/'+$Total+', skipped: '+$SkippedCount+', active: '+$ActiveCount+', inactive: '+$InactiveCount+', not found: '+$NotFoundCount
Write-Progress -Activity 'Checking SCCM client status' -CurrentOperation $CurrentOperation -PercentComplete ($Count/$Total*100)
}
$statuses | Export-Csv -Delimiter ';' -NoTypeInformation -Path $outfile
Comments