Masato's IT Library

Microsoftの製品・サービスを中心に,色々と書いていきたいと思います

PowerShellでリモートからコマンドを実行する

はじめに

みなさん,Linuxの管理時にSSHは使われますか?(使われますよね)
Windowsでも,リモートデスクトップではなく,PowerShellを使ってリモートからアクセスしたい!と思いませんか?(思いますよね)

ここでは,Windows 7以降を実行するWindows(Server・コンシューマどちらでも)に対して,リモートからPowerShellを用いてアクセスする方法を書きたいと思います.

WinRM (Windows Remote Management)を有効にする

接続のホストで,一度だけ次のコマンドを実行して,WinRMを有効にします.

Enable-PSRemoting

この時,ネットワークの設定が「プライベート」でない場合,エラーが発生して停止してしまいますので,ネットワークの設定を変更するか,次のコマンドで強制的にWinRMを有効にします.

Enable-PSRemoting -SkipNetworkProfileCheck

同様に,接続のホストでも先ほどのコマンドを実行してWinRMを有効にします.

なお,WinRMを有効にすることで,ファイアウォールの5985番ポートがオープンしますのでご注意ください.

TrustedHostsを設定する

WinRMでは,接続のホストから見て,接続のホストが「信頼できるホストである」ことが必要です.
Active Directory配下にどちらのホストも存在する場合は問題ないのですが,ワークグループ環境などでは,次のコマンドを用いて個別に接続先のホストを信頼してあげる必要があります.

接続のホストから,次のコマンドを実行してください.

Set-Item WSMan:\localhost\Client\TrustedHosts -Value (ホスト名 or IPアドレス or *)

実行すると次のようなメッセージが表示されますから,Yを入力して続行します.

WinRM セキュリティの構成。
このコマンドは WinRM クライアントの TrustedHosts の一覧を変更します。TrustedHosts
の一覧内にあるコンピューターは認証されない可能性があります。クライアントはこれらのコンピューターに資格情報を送信する可能性があります。この一覧を変更します
か?
[Y] はい(Y) [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
  • 複数のホスト名やIPアドレスを設定する場合
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value "host1, host2"

  • すべてのホストを信頼する場合
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*"

  • 現在設定されているTrustedHostsを確認
    Get-Item WSMan:\localhost\Client\TrustedHosts

  • 設定されているTrustedHostsをすべて消去
    Clear-Item WSMan:\localhost\Client\Trustedhosts

これで,接続前の準備は完了です(2回目以降は行う必要はありません)

セッションを開始する

次のコマンドにより,リモートマシンへの接続を開始します.
コマンド実行後にパスワードを入力するダイアログが開きます.

Enter-PSSession -ComputerName (ホスト名) -Credential (ユーザ名\ドメイン)

以降,ローカルマシンと同様にリモートコンピュータ上でPowerShellによる操作を行うことができます.

セッションを終了する

セッションを終了する場合は次のコマンドを実行します.

Exit-PSSession

便利なコマンド

yomon.hatenablog.com

tech.guitarrapc.com

tech.guitarrapc.com