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

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...