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

Lanciare uno script remoto su un PC del dominio con PsExec

server-to-pc Volete lanciare uno script remoto su un PC del dominio?

Volete, ad esempio, attivare il DHCP su un client della rete?

Usate PSexec!

Ecco come fare:

Anzitutto devi scaricare PsExec (puoi seguire le istruzioni presenti in questo nostro articolo).
Crea poi un file vbs o bat da copiare sul PC remoto e lanciare. Io in questo caso uso un file AttivaDHCP.vbs che configura l’assegnazione automatica degli indirizzi IP con DHCP sul PC remoto. Queste le righe dello script AttivaDHCP.vbs:

strComputer = "."
Set objWMIService = GetObject(_
 "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
 ("Select * from Win32_NetworkAdapterConfiguration " _
 & "where IPEnabled=TRUE")
 
For Each objNetAdapter In colNetAdapters
 errEnable = objNetAdapter.EnableDHCP()
 errEnable = objNetAdapter.SetDNSServerSearchOrder()
Next

Crea poi un file .bat ed inserisci nella sezione “Impostazione parametri fissi” il nome dell’utente amministratore, il percorso/nome del file dello script da copiare e lanciare sul PC remoto. Ecco lo script:

@echo off
rem Impostazione parametri fissi
rem ============================
SET UTENTEAMMINISTRATORE="MIODOMINIO\Administrator"
SET PERCORSOSCRIPT="\\SERVER-01\Scripts"
SET NOMESCRIPT="AttivaDHCP.vbs" 

echo Impostazione parametri variabili
echo ================================
SET /P NOMEPC=[Inserisci il nome del PC]: 
SET /P PASSWORDADMIN=[Inserisci la password dell'utente %UTENTEAMMINISTRATORE%]: 


if "%PASSWORDADMIN%"=="NUL" goto NOPARAMETERS
if "%NOMEPC%"=="NUL" goto NOPARAMETERS 
Set NOMEPC=NUL 
Set PASSWORDADMIN=NUL 
echo.
echo.
echo.

echo Copio il file dello script sul PC %NOMEPC%
echo ==========================================
set STRINGAPSEXECCOPIA=cmd /c copy %PERCORSOSCRIPT%\%NOMESCRIPT% %public%\downloads
psexec -u %UTENTEAMMINISTRATORE% -p %PASSWORDADMIN% \\%NOMEPC% %STRINGAPSEXECCOPIA%
echo.
echo.
echo.

echo Lancio lo script sul PC %NOMEPC%
echo ================================
set STRINGAPSEXECLANCIA=cscript %public%\downloads\%NOMESCRIPT%
psexec -u %UTENTEAMMINISTRATORE% -p %PASSWORDADMIN% \\%NOMEPC% %STRINGAPSEXECLANCIA%
echo.

pause 
Set PASSWORDADMIN=NUL
Set NOMEPC=NUL
goto FINE

:NOPARAMETERS
echo.
echo ERRORE: Inserire il nome del PC e la PASSWORD DI ADMIN

:FINE
echo.
echo =================
echo Fine elaborazione

Lo script dapprima copierà il file indicato nella variabile %NOMESCRIPT% nel percorso locale del PC %public%\downloads e poi lo lancerà. Per consentire i giusti permessi lo script chiederà la password dell’utente amministrativo indicato nella variabile %UTENTEAMMINISTRATORE%.

Otterrai:

Impostazione parametri variabili
================================
[Inserisci il nome del PC]: PC-001
[Inserisci la password dell'utente "MIODOMINIO\Admin"]: Mi@password.



Copio il file dello script sul PC PC-001
==========================================

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


        1 file copiati.
cmd exited on PC-001 with error code 0.



Lancio lo script sul PC PC-001
================================

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft (R) Windows Script Host Versione 5.8
Copyright (C) Microsoft Corporation 1996-2001. Tutti i diritti riservati.

cscript exited on PC-001 with error code 0.

Premere un tasto per continuare . . .

=================
Fine elaborazione

Impostare da remoto IP dinamico sui client di un dominio

Remote enable DHCP client Vorreste impostare da remoto il client DHCP dei PC di un dominio?

Mettetevi sul vostro server e usate questi script!

Spesso mi capitano nuove aziende che adottano sui propri PC gli IP statici, e quindi ho creato questi script per evitare di passare per ogni computer e cambiare la configurazione della scheda di rete.
Ecco come fare…

Nel vostro server create, in una share condivisa raggiungibile da tutti i client di un dominio, il file AbilitaDHCP.vbs.
Lo script sarà eseguito da remoto su ogni PC tramite l’utility PSEXEC (quindi scaricate i e scompattate il file psexec.exe nella cartella c:\windows\system32 del server da cui lancerete gli script).
Ecco lo script VBS da creare e condividere:

strComputer = "."
Set objWMIService = GetObject(_
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration " _
        & "where IPEnabled=TRUE")
 
For Each objNetAdapter In colNetAdapters
    errEnable = objNetAdapter.EnableDHCP()
    errEnable = objNetAdapter.SetDNSServerSearchOrder()
Next

Ora create lo script DHCP-DNS-auto-da-remoto.ps1 come di seguito indicato. Quando lo lancerete vi sarà chiesto di inserire il nome del PC;
lo script quindi verificherà su tutte le schede di rete abilitate del PC se il client DHCP è già attivo e poi chiederà se volete abilitarlo.

$PC = read-host "Inserire il nome del PC da controllare"
$test=Get-WmiObject win32_networkadapterconfiguration -computername $PC -erroraction silentlycontinue | where {($_.IPenabled)}
if ($test) {
	$test|ft ipaddress, dhcpenabled, dhcpserver ,DNSServerSearchOrder -AutoSize
	if ($test.dhcpenabled) {
		write-host "L'host"$PC "ha gia' il DHCP attivo"
	} 
	else {
		$Risposta = read-host "Vuoi abilitare DHCP/DNS automatici su"$PC"? (S/N)"
		if ($Risposta -eq "S") {
			psexec -accepteula \\$PC cscript /B /NoLogo \\server\condivisione\AbilitaDHCP.vbs
			psexec -accepteula \\$PC ipconfig /all
			read-host 
			}
	}
}
else {
	write-host Host $PC non raggiungibile
}

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}