Uso de PowerShell para Windows IoT

Nota

Agregue el código abierto versión de PowerShell mediante Import-PSCoreRelease (importps). Seguirá necesitando IOT_POWERSHELL característica para incluir archivos binarios de WinRM.

Configure y administre de forma remota cualquier dispositivo Windows 10 IoT Core mediante Windows PowerShell. PowerShell es un shell de línea de comandos basado en tareas y un lenguaje de scripting, diseñado especialmente para la administración del sistema.

Asegúrese de seguir estos pasos para configurar correctamente el dispositivo que ejecuta Windows 10 IoT Core para que funcione bien con Visual Studio 2017.

Iniciar una sesión de PowerShell

  1. Para iniciar una sesión de PowerShell con el dispositivo Windows 10 IoT Core, primero deberá crear una relación de confianza entre el equipo host y el dispositivo. Después de iniciar el dispositivo Windows IoT Core, se mostrará una dirección IP en la pantalla conectada al dispositivo.

    DefaultApp en Windows 10 IoT Core

    Puede encontrar la misma información sobre el Panel de Windows 10 IoT Core.

  2. Abra una consola de PowerShell de administrador en el equipo local. Escriba powershell en el cuadro Buscar en la web y Windows cerca del menú Inicio de Windows. Windows encontrará PowerShell en su PC.

    Búsqueda de PowerShell

  3. Para iniciar PowerShell como administrador, haga clic con el botón derecho en Windows PowerShell y seleccione Ejecutar como administrador.

    Ejecución de PowerShell como administrador

    Ahora debería ver la consola de PowerShell.

    Consola PS

  4. Es posible que tenga que iniciar el servicio WinRM en el escritorio para habilitar las conexiones remotas. Para ello, en la consola de PowerShell, escriba el siguiente comando:

        net start WinRM
    
  5. En la consola de PowerShell, escriba lo siguiente, sustituyendo <machine-name or IP address> por el valor adecuado (el uso del nombre de la máquina es el más sencillo, pero si el dispositivo no tiene un nombre único en la red, pruebe la dirección IP):

          Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>
    
  6. Escriba Y para confirmar el cambio.

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

    Nota

    Si desea conectar varios dispositivos, puede usar comas y comillas para separar cada dispositivo.

  7. Ahora puede iniciar una sesión con el dispositivo Windows IoT Core. En la consola de PowerShell del administrador, escriba:

         Enter-PSSession -ComputerName <machine-name or IP Address> -Credential <machine-name or IP Address or localhost>\Administrator
    
  8. En el cuadro de diálogo de credenciales, escriba la siguiente contraseña predeterminada: p@ssw0rd

Nota

El proceso de conexión no es inmediato y puede tardar hasta 30 segundos.

Si se ha conectado correctamente al dispositivo, debería ver la dirección IP del dispositivo antes del aviso.

Consola de PowerShell

  1. Actualice la contraseña de la cuenta. Se recomienda encarecidamente actualizar la contraseña predeterminada para la cuenta de administrador. Para ello, emita los siguientes comandos en la conexión de PowerShell:

    a. Reemplace por [new password] una contraseña segura:

    net user Administrator [new password]
    

    b. A continuación, establezca una nueva sesión de PowerShell con Exit-PSSession y Enter-PSSession con las nuevas credenciales.

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

Comandos de PowerShell usados habitualmente

Solución de problemas con Visual Studio Remote Debugger

Para poder implementar aplicaciones desde Visual Studio 2017, debe asegurarse de que el Visual Studio Remote Debugger se ejecuta en el dispositivo Windows IoT Core. El depurador remoto debe abrirse automáticamente al iniciar el equipo. Para comprobarlo, use el tlist comando para enumerar todos los procesos en ejecución de PowerShell. Debe haber dos instancias de msvsmon.exe en ejecución en el dispositivo.

Es posible que el Visual Studio Remote Debugger agote el tiempo de espera después de largos períodos de inactividad. Si Visual Studio no puede conectarse al dispositivo Windows IoT Core, intente reiniciar el dispositivo.

Configuración del dispositivo Windows IoT Core

Si lo desea, puede cambiar el nombre del dispositivo.

  1. Para cambiar el nombre del equipo, use la setcomputername utilidad :

    setcomputername <new-name>
    
  2. Reinicie el dispositivo para que el cambio surta efecto. Puede usar el comando de la shutdown siguiente manera:

    shutdown /r /t 0
    
  3. Dado que se cambió el nombre del equipo, después de reiniciar tendrá que volver a ejecutar este comando para conectarse al dispositivo con el nuevo nombre:

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

El dispositivo Windows IoT Core ahora debe estar configurado correctamente y listo para usarse.

Utilidades usadas habitualmente

Para obtener una lista de comandos y utilidades que puede usar con PowerShell, consulte la página Utils de la línea de comandos.

Problemas conocidos y soluciones alternativas

PROBLEMA: Un error conocido en las directivas de seguridad de PowerShell provoca los siguientes problemas para manifestarse dentro de la sesión remota:

  • Get-Help devuelve coincidencias inesperadas.
  • Get-Command en un módulo especificado devuelve una lista de comandos vacía.
  • La ejecución de un cmdlet desde cualquiera de estos módulos produce CommandNotFoundException: Appx, NetAdapter, NetSecurity, NetTCPIP, PnpDevice.
  • Import-Module en cualquiera de los módulos anteriores produce la excepción PSSecurityException con UnauthorizedAccess. La carga automática del módulo tampoco parece funcionar.

Solución alternativa: modifique la directiva de ejecución dentro de la sesión remota de PowerShell en RemoteSigned. Para obtener más información sobre las distintas directivas de ejecución, consulte Uso del cmdlet Set-ExecutionPolicy.

PROBLEMA: Los cmdlets de algunos módulos, como NetAdapter, a veces no son visibles. Por ejemplo, Get-Module NetAdapter devuelve una lista vacía.

Solución alternativa: use el parámetro -Force con Import-Module. Por ejemplo, Import-Module NetAdapter -Force.

PROBLEMA: al establecer la directiva de ejecución en "AllSigned" se interrumpe la comunicación remota de PowerShell. Los intentos posteriores de crear una sesión remota producen un error con una excepción SecurityException loading Typesv3.ps1xml.

Solución alternativa: use winrs.exe para restaurar la directiva de ejecución de PowerShell:

  • Página de códigos de la consola de cambios Chcp 65001
  • Inicio de sesión en un shell de cmd.exe remoto Winrs.exe -r:<target> -u:<username> -p:<password> cmd.exe
  • En el cmd.exe remoto, modifique la clave del Registro adecuada. reg add HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /d RemoteSigned /f
  • Salir de la sesión de cmd.exe remota exit

Otros problemas conocidos

  • En los scripts de PowerShell, los atributos de la clase o enumeración de PowerShell no funcionan. Agregar resultados con atributos en la siguiente excepción iniciada: Type debe ser un objeto Type en tiempo de ejecución.

  • No se admiten la comunicación remota de CIM de salida y PowerShell. La funcionalidad pertinente en los cmdlets de confianza no funcionará. Estos incluyen Enter-PSSession, Get-Job, Receive-Job, Import-Module, Invoke-Command y Copy-Item.

  • Los comandos SecureString ConvertFrom-SecureString y ConvertTo-SecureString no funcionan a menos que la sesión se cree mediante la autenticación CredSSP. De lo contrario, se debe especificar el parámetro -Key. Para más información sobre cómo configurar la autenticación CredSSP, consulte Habilitación de la funcionalidad de "segundo salto" de PowerShell con CredSSP.