PowerShell Remotingを使用して、快適なワークステーションからリモートマシンでPowerShellコマンドを実行したいことはありますか?リモートPowerShellを使用すると、複数のリモートシステムでコマンドやスクリプトを持続可能な方法で実行できます。
興味がありますか?PowerShellの方法でリモートマシンを制御する方法を学ぶために続けて読んでください。
前提条件
このチュートリアルは実演形式で行われます。一緒に進めたい場合は、PowerShell 7が搭載された少なくとも3台のコンピュータを準備してください。1台は管理コンピュータであり、他の2台はリモートマシンです。
このチュートリアルでは、次のコンピュータが使用されます。
- A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
- A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
- A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
- LinuxマシンでSSHDを有効にして、リモートPowerShellエンドポイントとして機能させる。このチュートリアルではFedora 35を使用します。
- Linuxマシンでリモートコマンドを実行するためのユーザーアカウント。アカウントにはsudoとSSHアクセスが必要です。このチュートリアルではtestというアカウントを使用します。まだアカウントがない場合は、この時点でユーザーアカウントを作成してください。
WinRMを使用したWindowsでのリモートPowerShellの有効化
PowerShell 7をインストールすると、PowerShellリモートを有効にするオプションがあります。すでに有効にしているかもしれませんが、確認するために以下の手順に従ってください。
1. リモートのWindows 10 PCにログインします。
2. 管理者としてPowerShellを開きます。
3. 以下のコマンドを実行してリモートPowerShellを有効にします。
コマンドはいくつかの構成変更を実行します。これらはコンソールで確認できます。

Linux上のSSH経由でのリモートPowerShellの有効化
WinRMはWindows専用ですので、Linux上でリモートPowerShellを有効にすることはできません。代わりに、Linux上でSSH経由でリモートPowerShellを有効にすることができます。PowerShellを既にインストール済みと仮定して、以下の手順に従ってください。
1. リモートLinuxシステムにログインし、ターミナルセッションを開きます。
2. SSHサーバーの設定ファイルをテキストエディターで開きます。Gedit、Sublime、またはNanoなどのテキストエディターをお選びください。この例ではGeditを使用します。
3. 次に、以下の行をファイルに追加します。この行は、PowerShellプロセスをホストするSSHサブシステムを作成します。

4. エディターを閉じます。
5. 最後に、次のコマンドを実行してSSHサーバーを再起動します。
ローカルマシンでリモートPowerShellの信頼できるホストを追加する
この時点で、リモートコンピューターはコマンドを受け取る準備が整っています。ただし、管理コンピューターはリモートPowerShellホストに接続を拒否する場合があります。その場合、リモートホストを信頼できるホストに追加する必要があります。
管理コンピューターで管理者としてPowerShellを開きます。
以下のwinrm
コマンドを実行してください。このコマンドは、リモートWindows(192.168.8.107
)およびLinux(192.168.8.171
)マシンをコンピューターの信頼されたホストリストに追加します。

リモートコンピューターでコマンドを実行する
すべての準備が整ったら、このセクションでリモートマシン上でコマンドを実行します。
1. 管理コンピューターで新しいPowerShellセッションを開きます。
2. 次に、以下のInvoke-Command
コマンドを実行して、ユーザーma
としてリモートマシンの最初の5つのサービスをリストします。 実行するコマンドは、ScriptBlock
スイッチのブレース内に表示されます。

3. リモートLinuxホストで同じ操作を行うには、代わりに以下のコマンドを実行します。 -HostName
が-ComputerName
に置き換わり、-UserName
が-ComputerName
に置き換わったことに注意してください。 これらのパラメーターは、Invoke-Command
コマンドレットに対してターゲットがSSHホストであることを示します。

リモートコンピューターでスクリプトを実行する
Invoke-Command
コマンドレットを使用して、リモートコンピューターでPowerShellスクリプトファイルを実行することもできます。ただし、-ScriptBlock
パラメーターを指定する代わりに、スクリプトのローカルパスに続いて-FilePath
パラメーターを指定します。
1. まず、ローカルコンピューターにnametime.ps1
という名前のPowerShellスクリプトファイルを作成します。
2. スクリプトをお好みのスクリプトエディターで開き、次のコードを追加します。その後、ファイルを保存します。

3. Invoke-Command
コマンドレットを-FilePath
パラメーターと共に実行します。この-FilePath
はスクリプトファイルを指すべきです。この例では、スクリプトファイルは同じ作業ディレクトリにあります。

対話的にリモートコンピューターを管理
前のセクションでは、リモートマシンで個々のコマンドを実行する方法を見ました。このセクションでは、リモートマシンで複数のコマンドをローカルと同様に実行できる対話セッションを開く方法を学びます。
1. Enter-PSSession
コマンドを実行して、192.168.8.107
のマシンでユーザーma
としてリモートセッションを開始します。
プロンプトに表示されるように、リモートユーザーアカウントのパスワードmaを入力してください。

以下に示すように、新しいプロンプトが表示されます。角かっこ内のIPアドレスはリモートPowerShellホストを示します。

3. 以下に示すようにdir
コマンドで現在の作業ディレクトリのファイルをリスト表示します。セッション内で複数のPowerShellコマンドを実行できます。dir
ディレクトリの内容が画面に表示されるはずです。スクリーンショットに示すように。

4. 完了したらExit-PSSession
コマンドレットを実行してセッションを終了します。
終了すると、スクリーンショットに示すようにローカルのプロンプトに戻ります。

切断および再接続のリモート PowerShell セッション
対話型セッションや一回限りのコマンドの代わりに、セッションを永続的に保存することが可能です。セッションを保存すると、コンテキストを失うことなくセッション間を切り替えることができます。このセクションでは、永続的なセッションの作成と管理方法を学びます。
1. リモートコンピューター192.168.8.107
上でユーザーma
(-Credential
)としてセッションを作成するには、New-PSSession
コマンドレットを実行します。セッションを変数$var
に保存します。以下はその方法です。
2. 変数$var
を実行してその内容を表示します。
以下のように、RemoteMachine ComputerTypeとStateがOpenedに設定されたセッションオブジェクトが表示されるはずです。

3. $var
に保存されたセッションに入るには、Enter-PSSession
コマンドを実行します。
すべてが正常な場合、プロンプトは追加の出力なしにリモートプロンプトに変更されます。以下に示すように。

4. セッション内で変数$rem1
を作成します。任意の変数名と識別子文字列を使用してください。この変数は後で同じセッションに接続しているかどうかを確認するために使用します。
5. 以下のコマンドを実行してリモート PowerShell セッションを終了します。

6. リモート PowerShell セッションを再確立します。
7. リモートセッションプロンプトで$rem1
変数を実行してその値を表示します。
前に設定した値を見る必要があります。リモートPowerShellセッションを終了する前に、同じセッションに再接続したことを確認します。

8. 次のようにセッションを再度終了するには、Exit-PSSession
コマンドを実行します。
9. 最後に、Invoke-Command
を実行し、session
スイッチを$var
に設定して、同じリモートセッションでリモートマシンのホスト名を表示します。この方法は、単一のセッションに手動で接続、切断、再接続することなく、同じセッションでコマンドを実行する代替手段です。

10. Remove-PSSession
を実行して、$var
に格納されたセッションを完全に削除します。
結論
おめでとうございます!このチュートリアルの最後まで到達したことで、リモートPowerShellを使用してWindowsまたはLinuxシステムを管理する方法を学びました。このガイドは、足を濡らすことを目的としています。なぜリモートセッションでLinux上のPowerShellに深く入り込んでみませんか?