自宅にたくさんのWindowsマシンを持っている人も多いのでは
ネットワーク経由でまとめて管理する
自宅のように、ActiveDirectory(Windowsドメイン)のない環境で、多数のWindows PCを利用している場合、それぞれのマシンを管理するのは結構大変だ。
稼働しているPCが3~4台を越えると、バージョンの把握さえおぼつかなくなることがある。こうしたときに役立つのが、PowerShellの持つ、PSRemotingと呼ばれる機能だ。LinuxのSSH(Secure Shell)やかつてのリモートシェル(rsh)と同じように、他のPCで動作するPowerShellにログインしたり、コマンドを実行させることができる。
これを使うと、表示はローカルマシンのPowerShellウィンドウで、実際の実行はネットワーク経由でリモート側PCにさせることができるようになる。PowerShellは、そもそもシステムの管理用に作られているので、サービスの制御やOSバージョンなどのシステム情報、その他さまざまなマシンの管理機能が利用できる。これを使えば、たとえばローカルマシンすべての特定のサービスを自動起動にするといったことが可能になる。
なお、以下の設定に先立ち、「ExecutionPolicy」を設定しておく必要がある。これについては、連載102回の「マイクロソフト版のOpenSSHをWindows 10にインストールする」で解説したように、管理者権限でPowerShellを起動して、以下のコマンドを実行しておく。
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
リモートによるWindows PCの管理
Windowsでは、NTの時代からシステムをリモートで管理することが可能になっていた。たとえば、システム情報の管理などに関してはWMI(Windows Management Instrumentation)があり、サービスを制御するsc.exeコマンドも、リモートでの制御が可能だっだ。
しかし、セキュリティが重視されるにつれ、こうした手法でも、利用に先立ち、なんらかの設定が必要になった。リモートで設定を変更することは、マルウェアなどの格好の餌食となるからだ。このため、たとえばscコマンドを利用する場合、現在では先だって、net useコマンドを(net.exe useサブコマンド)を使って、プロセス間通信である「ipc$」を立ち上げておく必要がある。また、手動でipc$を接続すると、接続はそのままになるため、scコマンドなどの終了後には接続を削除しておかねばならない。
PSRemotingも起動に先立ち、若干の設定が必要となるほか、実行時にパスワードによるユーザー認証などが必要となる。しかし、個々のマシンで2つのコマンドを実行すれば、すぐにPSRemotingが利用可能になり、ネットワーク内のマシンの管理を一ヵ所で集中してできるようになる。
別の方法として、すべてのマシンにSSHサーバーを導入して、SSHからリモートマシンにログインして、コマンドプロンプトからpowershellを起動するやり方がある。しかし、OpenSSHなどのインストールといった手間があるのと、接続後にpowershellを起動する必要があるなど手間がかかる。なお、PSRemotingは、設定により、ネットワーク接続をSSHとすることも可能だが、やはりPSRemotingの標準的な方法よりも設定の手間がかかってしまう。
そういうわけで、現時点では、ワークグループネットワーク(=非アクティブディレクトリ)で多数のPCをリモート管理するのは、PSRemotingが最も簡単といえる。
PSRemotingを実際に設定する
PSRemotingを利用するには、管理される各マシンを設定する必要がある。また利用時には、管理される各マシンでAdministrator権限を持つユーザーアカウントを利用する。このため、すべてのマシンに、日常的に利用しているアカウントなどを登録して、ユーザーの種別を管理者としておくと便利だ。
もちろん、それぞれのマシンで別々のユーザーアカウントを使ってもかまわないが、そうなると、マシンとユーザーアカウントの対応をすべて覚えなければならず、かなり管理が面倒になる。あるいは、逆に管理用のアカウントを作り、すべてのマシンに登録しておいてもよい。PSRemotingでは、接続のたびにユーザーアカウントとパスワードを指定するため、なにか1つ管理者アカウントがあればよく、必ずしもPowerShellを立ち上げているローカルアカウントと同じでなくてもいい。
ここでは、利用するPCやユーザーアカウントを以下のように仮定して解説をすすめる。これらは、実際には、各自の利用環境に合わせて変更してほしい。
・リモート管理されるPCの名前:remote-pc
・管理を行うローカルマシン:local-pc
・共通で使う管理者アカウント:admin-user
まずは、ローカルマシンで管理者権限でPowerShellを立ち上げる。ここでPSRemotingを有効にする。以下の2つのコマンドを実行する。なお、リモート側でも同じコマンドを実行するので、PowerShellのスクリプトファイル(.ps1)を作ると便利だ。
Enable-PSRemoting -SkipNetworkProfileCheck
Set-Item WSMan:\localhost\Client\TrustedHosts -Value *
まずは、手動で1回やってみると理解が早い。最初のコマンドは、PowerShellでPSRemotingを有効にするコマンド。実際にはスクリプトが呼び出され、ユーザー権限やファイアウォールの変更など一連の作業を行う。
2つめのコマンドは、ローカルネットワークに接続しているマシンをすべて信頼するための設定。本来は、1台1台設定すべきなのだろうが、かなり面倒なので、ローカルマシンをすべて信頼させている。リモートPCを登録するなら、コマンドの最後の部分の「*」を「"remote-pc1,remote-pc2,remote-pc3,……"」などのようにコンピュータ名をカンマで区切ったものをダブルクオートで括って指定する。自分自身の指定も必要なので、ローカルのすべてのマシンで同じコマンドでかまわないのだが、マシンが追加されるたびにすべてのマシンでホストを登録する必要がある。
スクリプトは、前記のコマンドを単純に入れたテキスト型式でよくメモ帳などでも作成できる。ただし、拡張子を「.ps1」などとしておく(仮にPSR.ps1とする)。
#
# PowerShell Remoting Enable script
#
# Please Run in Adminstrator
#
Enable-PSRemoting -SkipNetworkProfileCheck
Set-Item WSMan:\localhost\Client\TrustedHosts -Value *
これをすべてのマシンからアクセス可能なネットワーク共有フォルダ(\\local-pc\shareとする)などに入れておき、各マシンで、管理者権限でPowershellを起動し、共有ファイルのUNCを使って以下のように起動させる。
\\local-pc\share\PSR.ps1
さて、リモート側の設定が終了したら、次は接続テストをする。
PSRemotingの接続テスト
PSRemotingで接続テストをするには、以下のようなコマンドにより、リモート側にログインしてみる。
New-PSSession -ComputerName [リモートPCのコンピュータ名] -Credential リモートのアカウント名
これで、下の画面のようにセッションのリストが表示され、エラーが出なければOKだ。なお、コンピュータ名のところを「localhost」として自分自身に接続させることもできるので、最初のマシンは、これでテストするといいだろう。
なお、このあと、
Enter-PSSession 1
とすると、前記のリスト先頭のID番号を指定してリモート側にログインできるようになる(上記コマンド最後の数字がセッションのID)。リモート側のセッションにログインすると、プロンプトが変化する。また、一度作成したセッションは、以下のコマンドでIDを指定して削除できる。
Remove-PSSession ID番号
PSRemotingは、一回設定すれば、あとは、すべて1台のマシンからすべてのマシンを制御できるようになる。最初はちょっと手間だが、その後は管理が格段にラクになる。
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ