大規模にパソコンやプリンターなどを展開しているとき、最も大変なのは入替作業だ。
パソコンを一気に交換するとき、プリンターを一気に交換するときには基本現在割り当てているIPアドレスを利用することになるが、そんな時にまず必要なのが情報収集。
今回の記事では、プリンターの入替作業を想定し、PowerShellを利用してLAN内にあるプリンターの情報を一括で取得し、入替後のドライバーも遠隔でインストールする方法を紹介する。
Windows Remote Management(WinRM)について
実際にグループポリシー管理エディターでは、WinRMについて下記のように説明されている。
このポリシー設定を使用すると、HTTPトランスポートに対する要求が、Windowsリモート管理(WinRM)サービスによって、既定のHTTPポートを介してネットワークで自動的にリッスンされるかどうかを管理できます。
このポリシー設定を有効にすると、そのネットワークでは、WinRMサービスによって、HTTPトランスポートに対する要求が既定のHTTPポート経由で自動的にリッスンされます。
WinRMサービスがネットワーク経由で要求を受信できるようにするには、Windowsファイアウォールポリシー設定で、ポート5985(HTTPの既定のポート)を例外として定義します。
このポリシー設定を無効にするか、または構成しない場合、WinRMサービスはWinRMリスナーが構成されているかどうかにかかわらず、リモートコンピューターからの要求に対して応答しません。
正直これを読んでもあまり意味は伝わってこないが、ざっくりいうと
WinRMによるリモートサーバー管理を許可していると、PowerShell等からのRemote Managementが可能になってアクセスできるよ
ということだ。
しかし、HTTPS形式のプロキシサーバーなどを介している場合は別途設定が必要となるので注意が必要だ。
WinRMを利用できる環境を構築する
実際にWinRM使ってみたい!と思ってもすぐに使えるわけではない。
今回の記事ではAD環境を想定しているが、ポリシー環境になくてもコマンドで許可する方法も紹介するので安心してほしい。
WinRMによる管理を許可する
WinRMを利用してリモートによる管理を許可するには、パソコンから見た時にどんな接続の場合にリモート許可をするか設定する必要がある。
その方法として、ADサーバーの環境があるかないかで設定方法が異なるので、それぞれ紹介していく。
Active Directory(AD)環境がある場合
すでにAD環境がある場合には、グループポリシーにてドメイン参加端末に一斉配布することが可能だ。
具体的に手順を解説していく。
- グループポリシー管理エディターを開く。
- 反映させたいグループに設定されているポリシーを右クリックして、[編集]をクリックする。
- コンピューターの構成:ポリシー▶管理用テンプレート▶Windowsコンポーネント▶Windowsリモート管理(WinRM)▶WinRMサービスを選択して、「WinRMによるリモートサーバー管理を許可する」をダブルクリックする。
- 基本的にはこれが「未構成」になっているので、「有効」に変更する。
- オプションの「IPv4フィルター」と「IPv6フィルター」にそれぞれ「*」と記載する。
- [適用」ボタンをクリックした後、[OK」ボタンをクリックする。
この操作により、ポリシーが適用された端末にWinRMにてリモートが行えるようになる。
OS起動時に基本的にはポリシーが適用されるのでそれを待つか、gpupdate /force
コマンドをパソコンで実施し、強制的に適用させても良いだろう。
Active Directory(AD)環境がない場合
AD環境があれば一斉に配布という事も可能だが、WORKGROUP環境のままパソコンを展開しているという場合は、接続したいパソコンにて下記のコマンドをPowerShellにて順番に実行する。
これによりWinRMによるリモートの管理が行えるようになる。
# ①リモート操作を許可する
winrm quickconfig -force
# ②接続先を指定する
Set-Item WSMan:\localhost\Client\TrustedHosts * -Force
# 3スクリプト実行許可
Set-ExecutionPolicy RemoteSigned –Force
WinRMサービスを起動する
これまで紹介したのはあくまでも、WinRMによるリモート管理を許可しただけにすぎない。
接続先のパソコンで、WinRMサービスが起動していなくては接続できないので、WinRMサービスを自動で起動するように設定しよう。
Active Directory(AD)環境がある場合
- グループポリシー管理エディターを開く。
- 反映させたいグループに設定されているポリシーを右クリックして、「編集」をクリックする。
- コンピューターの構成:ポリシー▶Windowsの設定▶セキュリティの設定▶システムサービスより、「Windows Remote Manager(WS-Management)」をダブルクリックする。
- 「このポリシーの設定を定義する」にチェックして、スタートアップモードを「自動」に設定する(下図参照)。
- [適用」ボタンをクリックして[OK」ボタンをクリックする。
これでサービスが起動されるとようやくWinRMによるリモート接続が可能となる。
Active Directory(AD)環境がない場合
AD環境がない場合は、接続したいパソコンにて直接サービスを起動させる必要がある。
※環境によっては、「コンピューターの管理」から「別のコンピューターに接続」に接続して、遠隔でサービスを実行させることもできる。
その場合は下記のような手順でサービスを起動する。
- 「Win + R」キーを同時に押して「ファイル名を指定して実行」を開き、「services.msc」と入力して[OK]ボタンをクリックする。
- サービスが開くので、「Windows Remote Manager(WS-Management)」をダブルクリックして、「スタートアップの種類」を「自動」に設定する。
※このとき、すぐに検証を行う場合は「サービスの状態」にて[開始]ボタンをクリックしておく。 - [適用]ボタンをクリックして[OK]ボタンをクリックする。
以上でWinRMによるリモート接続の手動許可は完了だ。
PowerShellコマンドでプリンターの情報を抽出する
今後の業務引き継ぎも考えて筆者の場合は、PowerShellファイルを作成しないコマンド実行のみの簡易的なものを作成することにした。
想定している動きは以下の通り。
コマンドの実行により、プリンター情報をすべて抽出する。
その抽出した情報はデスクトップにある「Result」フォルダーにすべて、パソコンのホスト名をファイル名として保存していく。
プリンターの基本情報を抽出する
AD環境がある場合はADサーバーにて、AD環境がない場合は自分の端末で下記のコマンドを実行する。
Invoke-Command -ComputerName ○○○ -ScriptBlock {Get-WmiObject -Class Win32_Printer} > .\result\"result_○○○.txt"
※○○○は、パソコンのホスト名かIPアドレスだ。
あくまでもとにかく簡単に作りたかったので、Excelにまずは対象のホスト名を羅列していく。
B列に下記の式を挿入する。
="invoke-command -computername"&" "&A2&" "&"-scriptBlock {get-wmiObject -class win32_printer} > ○○○\""result_"&A2&".txt"""
※○○○は保存したいフォルダーのパスだ。
すると、B列には想定していたコマンドができあがる。
次にB列のみすべてコピーしてPowerShellに貼り付けると、上から順にコマンドが実行されて、任意のフォルダーにプリンターの情報が次々に保存される。
プリンターのIPアドレスを抽出する
プリンターの基本情報を抽出するとき、これまで紹介したように下記のようなコマンドになっていた。
Invoke-Command -ComputerName ○○○ -ScriptBlock {Get-WmiObject -Class Win32_Printer}
プリンターのIPアドレスやその他ポートの情報までを抽出したい場合には別途下記のようなコマンドを実行する。
Invoke-Command -ComputerName ○○○ -ScriptBlock {Get-WmiObject -Class Win32_TcpIpPrinterPort}
あとは先程抽出したプリンターの基本情報をVLookUpなどでくっつければ、プリンターの情報がすべて抽出できるだろう。
まとめ
今回の記事では、PowerShellを用いてWinRMによりリモート接続し、一括でパソコンに設定されたプリンター情報を抽出する方法を紹介した。
実際に利用して、入れ替えがスムーズに行なえたのでぜひ参考にしてみてほしい。
※当サイト(tamocolony)では極力最新の情報を掲載するよう努めていますが、掲載内容は最新のものと異なる、もしくは情報自体が誤っている可能性があります。当サイトにて記載している情報について、有用性や正確性、安全性についていかなる保証もするものではありません。
修正の必要や記事に関する質問がある場合は、当サイト問い合わせページよりお知らせいただけると幸いです。