Come comandare un Powershell remoto sui PC del dominio?

PSsessionAdmin Spesso vorreste usare Powershell in remoto sui vostri PC del dominio ma l’attivazione delle PSsession vi sembra complessa. Ecco un modo semplice e veloce.

Anzitutto bisognerà avere sul server l’utilità PsExec. Segui il link al precedente post di Sistemisti Senior per sapere come fare per scaricarlo. Ricordarsi di copiare il file PsExec.exe nella cartella %WINDIR%\SYSTEM32 (oppure di aggiungere il percorso alla variabile PATH).

Creare quindi il seguente file .bat

@echo off
title Sessione CMD su computer locale
set TESTATA= cls ^&echo. ^&echo ATTIVA E LANCIA UNA PSSESSION SU UN PC REMOTO ^&echo ============================================= ^&echo. ^&echo. ^&echo.
%TESTATA%
echo ATTENZIONE: per uscire digitare exit al primo prompt ed exit(1) al secondo
echo.
echo.
set /P NOMEPC=Inserire il nome del PC remoto: 
title Sessione CMD su computer remoto
%TESTATA%
echo Avvio PSEXEC sul computer remoto per eventuale 
echo attivazione delle sessioni remote di PowerShell
echo.
echo.
psexec \\%NOMEPC%  -s winrm.cmd quickconfig -q
echo %errorlevel% 
IF %ERRORLEVEL% GEQ 1 echo ************** ERRORE! **************** && pause
color 1f
title Sessione PowerShell su computer remoto
%TESTATA%
echo Avvio Powershell su PC %NOMEPC%
echo.
echo.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit " & {New-PSSession -ComputerName %NOMEPC% |Enter-PsSession}"
color

Goto Fine



:FINE

Otterrete una bella schermata come questa:

Schermata 2017-12-13 alle 12.11.02

Ricordarsi che:

Per uscire dalla sessione remota di Powershell digitare “exit” o “Exit-PsSession” come nell’esempio:

[NOME-PC_REMOTO]: PS C:\Users\admin\Documents> Exit-PSSession 

Per uscire dalla sessione locale di Powershell e tornare nel prompt dei comandi digitare “exit(1)” come nell’esempio:

PS C:\Windows\system32> exit(1) 
Annunci

Spegnimento/riavvio programmato di un server VmWare ESX

EsxShutdown Dovete fare uno spegnimento o un riavvio una tantum di un server ESXi ma non avete altri server/client da cui lanciare questa operazione?

Fatelo fare al vostro server ESXi!

Ecco come fare:

SSH

Innanzitutto bisognerà abilitare (anche temporaneamente) il server SSH: quindi aprire lo vSphere Client, selezionare il server, ed aprire il tab Configuration; cliccare su Security profiles quindi selezionare le proprietà della sezione Services; scegliere la voce SSH ed avviare il servizio (scegliere anche Start and Stop with host se si intende farlo partire sempre automaticamente). Dalla sezione Firewall assicurarsi che SSH server sia spuntato per consentire le connessioni remote.
La stessa operazione (abilitazione dell’SSH) può essere svolta dalla console fisica dell’hypervisor.

Client SSH

Se non avete un client SSH vi consiglio di scaricare l’ottimo Putty. Lo trovate a questo link (qui il link per il download dell’eseguibile)

Connessione remota e schedulazione

Una volta lanciato il client SSH ci si potrà connettere al server ESX (usando le stesse credenziali dello vSphere client). Ottenuto l’accesso ecco i comandi da lanciare:
N.B.: attenzione che l’orario è in UTC quindi bisognerà sottrarre 1 ora.
Esempio per le ore 13:15 la riga deve cominciare con 15 12 *… dove 15 è il minuto e 12 l’ora

/bin/echo "15   12   *   *   *    /sbin/shutdown.sh && /sbin/poweroff" >> /var/spool/cron/crontabs/root
PIDprima=$(cat /var/run/crond.pid)
/bin/kill $(cat /var/run/crond.pid)
/usr/lib/vmware/busybox/bin/busybox crond 
PIDdopo=$(cat /var/run/crond.pid)
echo
echo Modificato e riavviato crond: il PID passa da $PIDprima a $PIDdopo

Quindi con queste operazioni abbiamo aggiunto una riga al crontab, lo schedulatore del sistema operativo di ESXi, in modo che alle 13:15 compia l’operazione richiesta (/sbin/shutdown.sh && /sbin/poweroff).
Poi abbiamo interrotto lo schedulatore killando il relativo processo (/bin/kill $(cat /var/run/crond.pid)).
Abbiamo poi riavviato lo schedulatore con le nuove impostazioni (/usr/lib/vmware/busybox/bin/busybox crond)
Le altre righe sono puramente informative.

ATTENZIONE:
Ricordarsi di impostare lo ShutDownGuest per ogni macchina virtuale. Questo fara sì che allo spegnimento dell’hypervisor ad ogni VM sarà imposto lo spegnimento dal proprio sistema operativo.
E’ indispensabile che i VMware Tools siano installati su tutte le VM!
ShutDownGuest

Lanciare un comando da remoto su ogni PC acceso in un dominio

remote command

Volete lanciare un comando remoto su ogni PC collegato al dominio mentre gli utenti sono connessi? Ad esempio volete inviare un messaggio alla console di ognuno o aggiornare le policies?

Powershell ci da una mano.

Ecco come fare:
Anzitutto è necessario scaricare dal sito di Microsoft il tool PSEXEC presente all’interno dei PsTools.
PsExec consente di lanciare un comando su un PC connesso alla rete senza che l’utente connesso alla console se ne renda conto. Una funzionalità veramente eccezionale di cui non possiamo che ringraziare il grande Mark Russinovich.
Dopo aver scaricato i PsTools vi consiglio di copiare il file psexec.exe nella cartella %windir%\system32.
Una volta che avremo a disposizione questo tool bisognerà capire quali PC sono collegati al nostro server; per questo useremo il comando net session.
Questo comando restituisce l’indirizzo IP di ogni PC connesso al nostro server. Il risultato del comando si presenta così:

C:\Users\Administrator>net session

Computer            Nome utente   Tipo client  In pausa da
------------------------------------------------------------------
\\192.168.143.35    utente1                    1 00.08.45
\\192.168.143.41    utente23                   4 00.01.22
\\192.168.143.42    utente12                   3 00.01.54
\\192.168.143.43    utente16                   6 01.46.35
\\192.168.143.44    utente43                   3 00.00.01
\\192.168.143.46    utente3                   63 00.00.03

Questo ci servirà a comprendere bene il comando che utilizzeremo in Powershell.
Esso infatti acquisisce tutti gli IP dal comando net session e li riutilizza per lanciare un comando dal prompt dei comandi in remoto.
Ecco il piccolo script da lanciare in powershell:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c COMANDO}

Di seguito alcuni esempi pratici:

Aggiornare le group policies su tutti i PC:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c echo n ^|gpupdate /force}

Inviare un messaggio alla console di tutti i PC connessi:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c msg * Riavviare i PC}

Creare una determinata cartella in ogni PC connesso:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c mkdir c:\PIPPO}