Windows IoT の PowerShell を使用する

注意

Import-PSCoreRelease (importps) を使用して、オープン ソースの PowerShell バージョンを追加します。 WinRM バイナリを含めるには、IOT_POWERSHELL 機能が引き続き必要です

Windows PowerShell を使用して、すべての Windows 10 IoT Core デバイスをリモートから構成および管理できます。 PowerShell は、特にシステム管理用に設計された、タスクベースのコマンドライン シェルおよびスクリプト言語です。

次の手順に従って、Windows 10 IoT Core を実行しているデバイスを正しく構成し、Visual Studio 2017 で適切に動作するようにしてください。

PowerShell セッションの開始

  1. Windows 10 IoT Core デバイスで PowerShell セッションを開始するには、まずホスト PC とお使いのデバイスの間の信頼関係を構築する必要があります。 Windows IoT Core デバイスを起動すると、デバイスに接続された画面に IP アドレスが表示されます。

    Windows 10 IoT Core の DefaultApp

    Windows 10 IoT Core ダッシュボードでも同じ情報を確認できます。

  2. ローカル PC で管理者の PowerShell コンソールを開きます。 Windows の [スタート] メニューの近くにある [Web と 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> を適切な値に置き換えます (machine-name を使用するのが最も簡単ですが、デバイスがネットワーク上で一意に名前付けされていない場合は、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

Note

接続プロセスはすぐには実行されず、最大 30 秒かかる場合があります。

デバイスに正常に接続すると、プロンプトの前にデバイスの IP アドレスが表示されます。

PowerShell コンソール

  1. アカウントのパスワードを更新します。 管理者アカウントの既定のパスワードを更新することを強くお勧めします。 これを行うには、PowerShell 接続で次のコマンドを発行します。

    a. [new password] を強力なパスワードに置き換えます。

    net user Administrator [new password]
    

    b. 次に、Exit-PSSessionEnter-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 から実行中のプロセスをすべて一覧表示します。 デバイスでは 2 つの 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 で使用できるコマンドとユーティリティの一覧については、コマンド ライン ユーティリティに関するページをご覧ください。

既知の問題と対処法

問題: PowerShell セキュリティ ポリシーの既知のバグにより、リモート セッション内で次の問題が発生します。

  • Get-Help により、予期しない一致が返されます。
  • 指定されたモジュール上の Get-Command により、空のコマンド リストが返されます。
  • これらのいずれかのモジュールからコマンドレットを実行すると、CommandNotFoundException: Appx、NetAdapter、NetSecurity、NetTCPIP、PnpDevice がスローされます。
  • 上記のいずれかのモジュール上の Import-Module により、UnauthorizedAccess による PSSecurityException 例外がスローされます。 モジュールの自動読み込みも機能していないようです。

回避策: リモート PowerShell セッション内の実行ポリシーを RemoteSigned に変更します。 さまざまな実行ポリシーの詳細については、Set-ExecutionPolicy コマンドレットの使用に関するページをご覧ください。

問題: NetAdapter などの一部のモジュールからのコマンドレットが表示されないことがあります。 たとえば、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 クラスまたは列挙型への属性の追加が機能しません。 属性を追加すると、次の例外がスローされます。型は、ランタイム型オブジェクトである必要があります

  • 送信 CIM と PowerShell のリモート処理はサポートされていません。 依存するコマンドレット内の関連する機能が動作しません。 これには、Enter-PSSession、Get-Job、Receive-Job、Import-Module、Invoke-Command、Copy-Item が含まれます。

  • SecureString コマンドである ConvertFrom-SecureString と ConvertTo-SecureString CredSSP は、CredSSP 認証を使用してセッションが作成されていない限り、動作しません。 それ以外の場合は、-Key パラメーターを指定する必要があります。 CredSSP 認証の構成について詳しくは、CredSSP を使用した PowerShell の “次ホップ” 機能の有効化に関するページをご覧ください。