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
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.
Puede encontrar la misma información sobre el Panel de Windows 10 IoT Core.
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.
Para iniciar PowerShell como administrador, haga clic con el botón derecho en Windows PowerShell y seleccione Ejecutar como administrador.
Ahora debería ver la consola de PowerShell.
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
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>
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.
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
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.
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
yEnter-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.
Para cambiar el nombre del equipo, use la
setcomputername
utilidad :setcomputername <new-name>
Reinicie el dispositivo para que el cambio surta efecto. Puede usar el comando de la
shutdown
siguiente manera:shutdown /r /t 0
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.