Spegnimento programmato PC della rete

sheduledpoweroff

Volete spegnere dei PC di un dominio ad orari diversi usando una tabella di Excel?

 

Usate Powershell!

Un cliente mi ha chiesto di spegnere ogni sera, ad orari programmati, i PC del suo dominio

e così ho pensato di creare uno script Powershell che leggesse il nome del computer e l’orario da un file CSV editabile dal cliente con Excel.

Ecco come ho fatto:

Create col Blocco note un file Lista_PC_da_spegnere.csv così formattato (nome computer; ora spegnimento senza minuti):

PC;ORA-SPEGNIMENTO
PC01;18
PC02;18
PC03;20
PC04;22

Se ora provate ad aprire il file con Excel otterrete:

ExcelCSV

Ricordate di salvare sempre in formato CSV quando richiesto!

Ora create il file “Spegni_PC.ps1”

Write-Host "Controllo PC accesi" 
$PC_accesi = Import-CSV -delimiter ';' 'C:\ServerFolders\Lista_PC_da_spegnere.csv' | Where { Test-Connection $_.PC -count 1 -quiet }
$PC_accesi | ft -AutoSize

$IntestazioneSpegnimento=0

$PC_accesi | foreach {
    $PC = New-Object Object
    $PC | Add-Member Noteproperty Nome -value $_.PC
    $LAN=gwmi -ComputerName $PC.Nome -Class Win32_NetworkAdapterConfiguration | Where-Object {$_.DefaultIPGateway}
    $PC | Add-Member Noteproperty MAC -value $LAN.MacAddress
    $PC | Add-Member Noteproperty Gateway -value $LAN.DefaultIPGateway
    $PC | Add-Member Noteproperty DNS -value $LAN.DNSServerSearchOrder
    $PC | Add-Member Noteproperty IP -value ($LAN.ipaddress | Where-Object {($_).SubString(0,5) -eq ($LAN.DefaultIPgateway).SubString(0,5)})
    $OraOFF=$_.'ora-spegnimento'
    New-EventLog "Spegnimento remoto PC" -Source "Verifica stato" -ErrorAction SilentlyContinue
    $paramsEventoAcceso = @{
    LogName = 'Spegnimento remoto PC'
    Source = 'Verifica stato'
    EntryType = 'Information'
    EventId = 1001
    Message = 'Il PC '+$PC.Nome+' è acceso. Spegnimento previsto per le '+$OraOFF+":00."
    }
    Write-EventLog @paramsEventoAcceso

    if ((get-date).hour -eq $OraOFF) {
        $IntestazioneSpegnimento++
        if ($IntestazioneSpegnimento=1) {
            Write-Host "ESECUZIONE SPEGNIMENTO PC"
            Write-Host "-------------------------"
        }
        Write-Host -ea silentlycontinue ('Spengo '+$PC.Nome)
        New-EventLog "Spegnimento remoto PC" -Source "Spegnimento computer" -ErrorAction SilentlyContinue
        $paramsEventoSpengo = @{
            LogName = 'Spegnimento remoto PC'
            Source = 'Spegnimento computer'
            EntryType = 'Warning'
            EventId = 1000
            Message = 'Lancio spegnimento PC.'+($PC|Out-String)
            }
        Write-EventLog @paramsEventoSpengo
        Stop-Computer -ErrorAction SilentlyContinue -ComputerName $_.PC -Force 
        }
    }

Poi create una Operazione pianificata da eseguire ogni mezz’ora con i seguenti parametri:

Programma o script C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe e come parametro -file “C:\ServerFolders\Spegni_PC.ps1”.

scheduled1
scheduled2
scheduled3

Basterà quindi editare il file con Excel per stabilire nome del PC ed orario di spegnimento.

Lascia un commento qui