Windows IoT용 PowerShell 사용

참고

Import-PSCoreRelease(importps)를 사용하여 오픈 소스 powershell 버전을 추가합니다. WinRM 바이너리를 포함하려면 IOT_POWERSHELL 기능이 여전히 필요합니다.

Windows PowerShell 사용하여 Windows 10 IoT Core 디바이스를 원격으로 구성하고 관리합니다. PowerShell은 특히 시스템 관리를 위해 설계된 작업 기반 명령줄 셸 및 스크립팅 언어입니다.

Visual Studio 2017에서 제대로 작동하도록 Windows 10 IoT Core 실행하는 디바이스를 올바르게 구성하려면 다음 단계를 수행해야 합니다.

PowerShell 세션 시작

  1. Windows 10 IoT Core 디바이스에서 PowerShell 세션을 시작하려면 먼저 호스트 PC와 디바이스 간에 신뢰 관계를 만들어야 합니다. Windows IoT Core 디바이스를 시작한 후 디바이스에 연결된 화면에 IP 주소가 표시됩니다.

    DefaultApp on Windows 10 IoT Core

    Windows 10 IoT Core 대시보드 동일한 정보를 찾을 수 있습니다.

  2. 로컬 PC에서 관리자 PowerShell 콘솔을 엽니다. Windows 시작 메뉴 근처의 웹 및 Windows 검색 상자에 powershell을 입력합니다. Windows는 PC에서 PowerShell을 찾습니다.

    PowerShell 찾기

  3. 관리자 권한으로 PowerShell을 시작하려면 Windows PowerShell 마우스 오른쪽 단추로 클릭한 다음 관리자 권한으로 실행을 선택합니다.

    관리자 권한으로 PowerShell 실행

    이제 PowerShell 콘솔이 표시됩니다.

    PS 콘솔

  4. 원격 연결을 사용하도록 설정하려면 데스크톱에서 WinRM 서비스를 시작해야 할 수 있습니다. 이렇게 하려면 PowerShell 콘솔에서 다음 명령을 입력합니다.

        net start WinRM
    
  5. PowerShell 콘솔에서 다음을 입력하고 <machine-name or IP address> 적절한 값으로 대체합니다( 컴퓨터 이름을 사용하는 것이 가장 쉽지만 디바이스가 네트워크에서 고유하게 이름이 지정되지 않은 경우 IP 주소를 사용해 보세요.)

          Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>
    
  6. 를 입력 Y 하여 변경 사항을 확인합니다.

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

    참고

    여러 디바이스를 연결하려는 경우 쉼표와 따옴표를 사용하여 각 디바이스를 구분할 수 있습니다.

  7. 이제 Windows IoT Core 디바이스로 세션을 시작할 수 있습니다. 관리자 PowerShell 콘솔에서 다음을 입력합니다.

         Enter-PSSession -ComputerName <machine-name or IP Address> -Credential <machine-name or IP Address or localhost>\Administrator
    
  8. 자격 증명 대화 상자에서 다음 기본 암호를 입력합니다. p@ssw0rd

참고

연결 프로세스는 즉시 수행되지 않으며 최대 30초가 걸릴 수 있습니다.

디바이스에 성공적으로 연결한 경우 프롬프트 앞에 디바이스의 IP 주소가 표시됩니다.

PowerShell 콘솔

  1. 계정 암호를 업데이트합니다. 관리자 계정의 기본 암호를 업데이트하는 것이 좋습니다 . 이렇게 하려면 PowerShell 연결에서 다음 명령을 실행합니다.

    a. 를 강력한 암호로 대체 [new password] 합니다.

    net user Administrator [new password]
    

    b. 다음으로, 및 Enter-PSSession 를 사용하여 Exit-PSSession 새 자격 증명과 함께 새 PowerShell 세션을 설정합니다.

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

일반적으로 사용되는 PowerShell 명령

Visual Studio 원격 디버거 문제 해결

Visual Studio 2017에서 애플리케이션을 배포하려면 Visual Studio 원격 디버거 Windows IoT Core 디바이스에서 실행 중인지 확인해야 합니다. 컴퓨터를 시작할 때 원격 디버거가 자동으로 열립니다. 검사 두 배로 늘리려면 명령을 사용하여 tlist PowerShell에서 실행 중인 모든 프로세스를 나열합니다. 디바이스에서 실행되는 두 개의 msvsmon.exe 인스턴스가 있어야 합니다.

Visual Studio 원격 디버거 장기간 비활성 상태이면 시간이 초과할 수 있습니다. Visual Studio가 Windows IoT Core 디바이스에 연결할 수 없는 경우 디바이스를 다시 시작해 보세요.

Windows IoT Core 디바이스 구성

원하는 경우 디바이스의 이름을 바꿀 수 있습니다.

  1. 컴퓨터 이름을 변경하려면 유틸리티를 setcomputername 사용합니다.

    setcomputername <new-name>
    
  2. 변경 내용이 적용되도록 디바이스를 다시 시작합니다. 다음과 같이 명령을 사용할 shutdown 수 있습니다.

    shutdown /r /t 0
    
  3. 컴퓨터 이름이 변경되었으므로 다시 시작한 후에는 이 명령을 다시 실행하여 새 이름을 사용하여 디바이스에 연결해야 합니다.

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

이제 Windows IoT Core 디바이스를 올바르게 구성하고 사용할 준비가 되었습니다.

일반적으로 사용되는 유틸리티

PowerShell에서 사용할 수 있는 명령 및 유틸리티 목록은 명령줄 Utils 페이지를 참조하세요.

알려진 문제 및 해결 방법

문제: PowerShell 보안 정책의 알려진 버그로 인해 원격 세션 내에서 다음과 같은 문제가 발생합니다.

  • Get-Help 예기치 않은 일치 항목을 반환합니다.
  • 지정된 모듈의 Get-Command 빈 명령 목록을 반환합니다.
  • 이러한 모듈 중 하나에서 cmdlet을 실행하면 CommandNotFoundException: Appx, NetAdapter, NetSecurity, NetTCPIP, PnpDevice가 throw됩니다.
  • 위의 모듈에서 Import-Module UnauthorizedAccess를 사용하여 PSSecurityException 예외를 throw합니다. 모듈 자동 로드도 작동하지 않는 것 같습니다.

해결 방법: 원격 PowerShell 세션 내의 실행 정책을 RemoteSigned로 수정합니다. 다양한 실행 정책에 대한 자세한 내용은 Set-ExecutionPolicy Cmdlet 사용을 참조하세요.

문제: NetAdapter와 같은 일부 모듈의 Cmdlet이 표시되지 않는 경우가 있습니다. 예를 들어 Get-Module NetAdapter는 빈 목록을 반환합니다.

해결 방법: Import-Module과 함께 -Force 매개 변수를 사용합니다. 예: Import-Module NetAdapter -Force.

문제: 실행 정책을 "AllSigned"로 설정하면 PowerShell 원격이 중단됩니다. 후속 원격 세션 만들기 시도는 Typesv3.ps1xml을 로드하는 SecurityException으로 실패합니다.

해결 방법: winrs.exe 사용하여 PowerShell의 실행 정책을 복원합니다.

  • 콘솔 코드 변경 페이지 Chcp 65001
  • 원격 cmd.exe 셸에 로그온 Winrs.exe -r:<target> -u:<username> -p:<password> cmd.exe
  • 원격 cmd.exe 내에서 적절한 레지스트리 키를 수정합니다. reg add HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /d RemoteSigned /f
  • 원격 cmd.exe 세션 종료 exit

기타 알려진 문제

  • PowerShell 스크립트에서는 PowerShell 클래스 또는 열거형에 대한 특성이 작동하지 않습니다. 다음 예외가 throw된 특성 결과를 추가합니다. Type은 런타임 Type 개체여야 합니다.

  • 아웃바운드 CIM 및 PowerShell 원격은 지원되지 않습니다. 신뢰 cmdlet의 관련 기능은 작동하지 않습니다. 여기에는 Enter-PSSession, Get-Job, Receive-Job, Import-Module, Invoke-Command 및 Copy-Item이 포함됩니다.

  • CredSSP 인증을 사용하여 세션을 만들지 않는 한 SecureString 명령 ConvertFrom-SecureString 및 ConvertTo-SecureString 작동하지 않습니다. 그렇지 않으면 -Key 매개 변수를 지정해야 합니다. CredSSP 인증 구성에 대한 자세한 내용은 CredSSP를 사용하여 PowerShell "두 번째 홉" 기능 사용을 참조하세요.