Condividi tramite


Uso di PowerShell per Windows IoT

Nota

Aggiungere la versione di powershell open source usando Import-PSCoreRelease (importps). È comunque necessaria IOT_POWERSHELL funzionalità per includere file binari WinRM

Configurare e gestire in remoto qualsiasi dispositivo Windows 10 IoT Core usando Windows PowerShell. PowerShell è una shell della riga di comando basata su attività e un linguaggio di scripting, progettato in particolare per l'amministrazione del sistema.

Assicurarsi di seguire questa procedura per configurare correttamente il dispositivo in esecuzione Windows 10 IoT Core per funzionare correttamente con Visual Studio 2017.

Avvio di una sessione di PowerShell

  1. Per avviare una sessione di PowerShell con il dispositivo Windows 10 IoT Core, è prima necessario creare una relazione di trust tra il PC host e il dispositivo. Dopo aver avviato il dispositivo Windows IoT Core, verrà visualizzato un indirizzo IP sullo schermo collegato al dispositivo.

    DefaultApp in Windows 10 IoT Core

    È possibile trovare le stesse informazioni sul Dashboard Windows 10 IoT Core.

  2. Aprire una console di PowerShell amministratore nel PC locale. Digitare powershell nella casella Cerca web e Windows nel menu Start di Windows. Windows troverà PowerShell nel PC.

    Trovare PowerShell

  3. Per avviare PowerShell come amministratore, fare clic con il pulsante destro del mouse su Windows PowerShell e quindi scegliere Esegui come amministratore.

    Eseguire PowerShell come amministratore

    A questo momento verrà visualizzata la console di PowerShell.

    Console PS

  4. Potrebbe essere necessario avviare il servizio WinRM nel desktop per abilitare le connessioni remote. A tale scopo, dalla console di PowerShell digitare il comando seguente:

        net start WinRM
    
  5. Dalla console di PowerShell digitare quanto segue, sostituendo <machine-name or IP address> con il valore appropriato (usando il nome del computer è il più semplice, ma se il dispositivo non è denominato in modo univoco nella rete, provare l'indirizzo IP):

          Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>
    
  6. Immettere Y per confermare la modifica.

        Set-Item WSMan:\localhost\Client\TrustedHosts -Value "<machine1-name or IP Address>,<machine2-name or IP Address>"
    

    Nota

    Se si desidera connettere più dispositivi, è possibile usare virgole e virgolette per separare ogni dispositivo.

  7. A questo punto è possibile avviare una sessione con il dispositivo Windows IoT Core. Dalla console di PowerShell amministratore digitare:

         Enter-PSSession -ComputerName <machine-name or IP Address> -Credential <machine-name or IP Address or localhost>\Administrator
    
  8. Nella finestra di dialogo credenziali immettere la password predefinita seguente: p@ssw0rd

Nota

Il processo di connessione non è immediato e può richiedere fino a 30 secondi.

Se si è connessi correttamente al dispositivo, è necessario visualizzare l'indirizzo IP del dispositivo prima del prompt.

Console di PowerShell

  1. Aggiornare la password dell'account. È consigliabile aggiornare la password predefinita per l'account Amministratore. A tale scopo, eseguire i comandi seguenti nella connessione di PowerShell:

    a. Sostituire [new password] con una password complessa:

    net user Administrator [new password]
    

    b. Stabilire quindi una nuova sessione di PowerShell usando Exit-PSSession e Enter-PSSession con le nuove credenziali.

    Exit-PSSession
    
    Enter-PSSession -ComputerName <machine-name or IP Address> -Credential <machine-name or IP Address or localhost>\Administrator
    

Comandi di PowerShell usati comunemente

Risoluzione dei problemi relativi alla Visual Studio Remote Debugger

Per poter distribuire applicazioni da Visual Studio 2017, è necessario assicurarsi che la Visual Studio Remote Debugger sia in esecuzione nel dispositivo Windows IoT Core. Il debugger remoto deve essere aperto automaticamente quando si avvia il computer. Per eseguire il doppio controllo, usare il tlist comando per elencare tutti i processi in esecuzione da PowerShell. Nel dispositivo devono essere presenti due istanze di msvsmon.exe in esecuzione.

È possibile che il Visual Studio Remote Debugger timeout dopo lunghi periodi di inattività. Se Visual Studio non è in grado di connettersi al dispositivo Windows IoT Core, provare a riavviare il dispositivo.

Configurare il dispositivo Windows IoT Core

Se vuoi, puoi rinominare il dispositivo.

  1. Per modificare il nome del computer, usare l'utilità setcomputername :

    setcomputername <new-name>
    
  2. Riavviare il dispositivo per l'effetto della modifica. È possibile usare il shutdown comando come indicato di seguito:

    shutdown /r /t 0
    
  3. Poiché il nome del computer è stato modificato, dopo il riavvio sarà necessario eseguire nuovamente questo comando per connettersi al dispositivo usando il nuovo nome:

        Set-Item WSMan:\localhost\Client\TrustedHosts -Value <new-name>

Il dispositivo Windows IoT Core deve ora essere configurato correttamente e pronto per l'uso!

Utilità comunemente usate

Per un elenco di comandi e utilità che è possibile usare con PowerShell, vedere la pagina Utils della riga di comando .

Problemi noti e soluzioni alternative

PROBLEMA: un bug noto nei criteri di sicurezza di PowerShell causa il manifesto dei problemi seguenti all'interno della sessione remota:

  • Get-Help restituisce corrispondenze impreviste.
  • Get-Command in un modulo specificato restituisce un elenco di comandi vuoto.
  • L'esecuzione di un cmdlet da uno di questi moduli genera CommandNotFoundException: Appx, NetAdapter, NetSecurity, NetTCPIP, PnpDevice.
  • Import-Module in uno dei moduli precedenti genera un'eccezione PSSecurityException con UnauthorizedAccess. Il caricamento automatico del modulo non sembra funzionare neanche.

Soluzione alternativa: modificare i criteri di esecuzione all'interno della sessione di PowerShell remota in RemoteSigned. Per altre informazioni sui diversi criteri di esecuzione, vedere Uso del cmdlet Set-ExecutionPolicy.

PROBLEMA: i cmdlet di alcuni moduli come NetAdapter talvolta non sono visibili. Ad esempio, Get-Module NetAdapter restituisce un elenco vuoto.

Soluzione alternativa: usare il parametro -Force con Import-Module. Ad esempio, Import-Module NetAdapter -Force.

PROBLEMA: impostazione dei criteri di esecuzione su "AllSigned" interrompe la comunicazione remota di PowerShell. I tentativi successivi di creare una sessione remota hanno esito negativo con un caricamento di SecurityException Typesv3.ps1xml.

Soluzione alternativa: usare winrs.exe per ripristinare i criteri di esecuzione di PowerShell:

  • Modificare la tabella codici della console Chcp 65001
  • Accedere a una shell di cmd.exe remota Winrs.exe -r:<target> -u:<username> -p:<password> cmd.exe
  • All'interno di cmd.exe remoto modificare la chiave del Registro di sistema appropriata reg add HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /d RemoteSigned /f
  • Uscire dalla sessione di cmd.exe remota exit

Altri problemi noti

  • Negli script di PowerShell gli attributi della classe o dell'enumerazione di PowerShell non funzionano. Aggiunta di risultati attributi nella seguente eccezione generata: type deve essere un oggetto Type di runtime.

  • Il CIM in uscita e la comunicazione remota di PowerShell non sono supportati. Le funzionalità pertinenti nei cmdlet di relying non funzioneranno. Questi includono Enter-PSSession, Get-Job, Receive-Job, Import-Module, Invoke-Command e Copy-Item.

  • I comandi SecureString ConvertFrom-SecureString e ConvertTo-SecureString non funzionano a meno che la sessione non venga creata usando l'autenticazione CredSSP. In caso contrario, è necessario specificare il parametro -Key. Per informazioni dettagliate sulla configurazione dell'autenticazione CredSSP, vedere Abilitare funzionalità "Second-Hop" di PowerShell con CredSSP.