Etat des lieux d'un service Windows
# Listage de l'état d'un service sur l'ensemble des serveurs Windows d'un domaine
# Le compte de la machine ne doit pas être désactivé et il doit répondre au ping
# Dans ce cas, il s'agit du service 'spooler'
# Autor : JHAF
# Listage de l'état d'un service sur l'ensemble des serveurs Windows d'un domaine
# Le compte de la machine ne doit pas être désactivé et il doit répondre au ping
# Dans ce cas, il s'agit du service 'spooler'
# Service à check
$Service = 'spooler'
# Horadatage pour CSV
$DateJour = Get-Date -Uformat %Y%m%d_%H%m
# Initialisation des variables en Array
$Report = @()
$Spoolers = @()
# Liste des serveurs Windows avec une compte actif
$Servers = Get-ADOrganizationalUnit -Filter * | ForEach-Object { Get-ADComputer -Filter 'operatingSystem -like "*Windows Server*" -and userAccountControl -notlike "4098"' -SearchBase "$_" -SearchScope OneLevel } | Select-Object DNSHostName, Name, SID
#$Servers | Out-GridView
# Test si les serveurs sont UP
foreach($Server in $Servers){
$pingtest = Test-Connection -ComputerName $Server.DNSHostName -Quiet -Count 1 -ErrorAction SilentlyContinue
if($pingtest){
#Write-Host $Server.DNSHostName " is reachable"
$Spoolers += Get-ADComputer -Identity $Server.Name | Select-Object DNSHostName, Name, SID
}
else{
#Write-Host $Server.DNSHostName " is not reachable"
}
}
#$Spoolers | Out-GridView
# Récupération des infos du service Spooler pour chaque serveur UP
foreach ($Spooler in $Spoolers) {
$Status = Get-Service -ComputerName $Spooler.Name -Name $Service | Select-Object MachineName, Name, Status
$Startup = Get-WmiObject -Computer $Spooler.Name -Class Win32_Service -Property StartMode -Filter "Name='$Service'"
$Report += [PSCustomObject]@{
MachineName = $Status.MachineName
Name = $Status.Name
Status = $Status.Status
StartMode = $Startup.StartMode
}
}
$Report | Out-GridView
#$Report | Export-Csv -Path C:\script\Audit\2022\1032\${DateJour}_Get-Spooler_Status.csv -NoTypeInformation -Encoding UTF8 -Delimiter ';'
# Arrêt puis désactivation du démarrage auto d'un service sur l'ensemble des machines Windows listé dans un CSV
# WinRM doit fonctionner depuis la machine qui lance le script (notamment les flux RPC doivent être ouverts)
# Dans ce cas, il s'agit du service 'spooler'
# Horadatage pour CSV
$DateJour = Get-Date -Uformat %Y%m%d_%H%m
# Service à stop et check
$Service = 'spooler'
# Initialisation des variables en Array
$Report = @()
# Fichier CSV à faire à la main pour import
$SpoolersStop = Import-Csv C:\script\Audit\2022\1032\Stop-Spoolers.csv -Delimiter ';'
# Arrêt du service et Désactivation du démarrage auto
foreach ($Spooler in $SpoolersStop) {
Get-Service -ComputerName $Spooler.MachineName -Name "spooler" | Stop-Service
Set-Service -Computer $Spooler.MachineName -Name "spooler" -StartupType "Disabled"
}
# Récupération des infos du service Spooler pour chaque serveur UP
foreach ($Spooler in $Spoolers) {
$Status = Get-Service -ComputerName $Spooler.Name -Name $Service | Select-Object MachineName, Name, Status
$Startup = Get-WmiObject -Computer $Spooler.Name -Class Win32_Service -Property StartMode -Filter "Name='$Service'"
$Report += [PSCustomObject]@{
MachineName = $Status.MachineName
Name = $Status.Name
Status = $Status.Status
StartMode = $Startup.StartMode
}
}
#$Report | Out-GridView
$Report | Export-Csv -Path C:\script\Audit\2022\1032\${DateJour}_Stop-Spoolers_Check.csv -NoTypeInformation -Encoding UTF8 -Delimiter ';'