Il sistema operativo Windows 10 integra diversi strumenti per l'accesso remoto e sono disponibili anche numerosi strumenti di terze parti. La funzione di accesso remoto è molto utile ma può rappresentare un rischio per la sicurezza. Per questo motivo bisogna prestare attenzione che tali strumenti vengano utilizzati correttamente e solo dalle persone precedentemente abilitate. La maggior parte degli strumenti utilizzati per l'accesso remoto, tra cui anche PowerShell, richiede l'abilitazione da parte dell'utente per poter essere utilizzati.
PowerShell rappresenta uno strumento molto potente in ambiente Windows grazie al supporto completo del Common Information Model (CIM), all'accesso a Windows Management Instrumentation (WMI) e alle API .NET e Component Object Model (COM). Una delle caratteristiche più importanti per gli amministratori Windows, è probabilmente la possibilità di eseguire comandi PowerShell su sistemi remoti.
Fin dalle prime versioni di PowerShell, Microsoft ha aggiunto il supporto per l'esecuzione di cmdlet su sistemi remoti utilizzando il parametro -ComputerName (una funzionalità di .Net). La documentazione Microsoft per l'accesso remoto tramite -ComputerName indica che questa funzionalità di accesso remoto, in determinati cmdlet PowerShell, utilizza "diversi protocolli di comunicazione". Negli ambienti moderni in cui è consentito solo un accesso limitato a SMB, l'accesso remoto con alcuni cmdlet potrebbe non funzionare. Microsoft, invece, ha indicato che l'accesso remoto in PowerShell sarà realizzato con il protocollo WS-Management utilizzando HTTPS e il protocollo Simple Object Access Protocol (SOAP) utilizzando strutture dati XML.
I comandi messi a disposizione da Microsoft per l'accesso remoto ai sistemi Windows con PowerShell sono:
- Enable-PSRemoting/Disable-PSRemoting
- Enter-PSSession/Exit-PSSession
- Invoke-Command
- New-PSSession/Remove-PSSession
Nei sistemi Windows 10 e Windows 11, a differenza di Windows Server 2012R2 e successivi, l'accesso remoto PowerShell è disattivato per impostazione predefinita. Per attivare tale funzionalità è necessario eseguire il comando
Enable-PSRemoting -Force
da PowerShell avviato come amministratore.
Il comando apporterà diverse modifiche alla configurazione locale di Windows:
- Avvia il servizio WinRM, in ascolto sulla porta TCP 5985.
- Modifica l'avvio automatico di WinRM.
- Apporta modifiche al firewall di Windows per consentire l'accesso alla porta TCP 5985.
- Configura la funzione di accesso remoto di WS-Management per l'uso di PowerShell.
FIG 1 - PowerShell, Enable-PSRemoting |
FIG 2 - Windows Firewall |
Per l'accesso remoto a PowerShell è possibile eseguire il cmdlet Enter-PSSession e specificate il nome dell'host di destinazione o l'indirizzo IP usando -ComputerName
Enter-PSSession -ComputerName PC2
Se l'utente collegato non ha i privilegi di accesso remoto e si desidera utilizzare credenziali alternative, salvare le credenziali in una variabile con Get-Credential quindi fornire la variabile come argomento a Enter-PSSession utilizzando l'opzione -Credential
$cred = Get-Credential
Enter-PSSession -ComputerName PC2 -Credential $cred
Per terminare la sessione remota di PowerShell e tornare l sistema host, eseguire
Exit-PSSession