管理するパソコンが数台だったらよいのですが、何十台も削除・整理するとなると時間もかかりますし、作業漏れも発生します。
WSUSコンソールから削除すればよいのですが、手動で1台ずつ消去するには大変なので Powershell を使って一括で処理できるかを試したいと思います。
主にサーバ運用での話ですが、WSUSサーバで多数のクライアント端末を管理していると、「パソコンのリプレース」「故障端末交換」などで端末がそもそも処分されたりして、結果としてコンピュータオブジェクトが残存し、不要なコンピュータオブジェクトとして残ります。
オブジェクトが残る分には問題ありませんが、困ったことにサーバ運用では運用しているクライアント台数とかパッチの適用状況など報告することがあり、結果として精緻なWSUSコンソールの「管理台数」や「パッチ適用台数」が洗い出せなくなります。
Powershellコマンドを調査してみる
まずは、コマンド調査ということで Powershell コマンドレットがあるかどうかを見てみます。
マイクロソフトのサイトには Powershell コマンドレットが多数紹介されています。
URL:UpdateServices Module | Microsoft Learn
【WSUSコマンドレット】
コマンドレット | 説明 |
---|---|
Add-WsusComputer | ターゲットにコンピュータを追加 |
Add-WsusDynamicCategory | Adds a dynamic category to a WSUS server. |
Approve-WsusUpdate | アップデートを承認する |
Deny-WsusUpdate | Declines the update for deployment. |
Get-WsusClassification | Gets the list of all WSUS classifications currently available in the system. |
Get-WsusComputer | WSUSに登録されているコンピュータを取得 |
Get-WsusDynamicCategory | Gets dynamic categories on a WSUS server. |
Get-WsusProduct | Gets the list of all products currently available on WSUS. |
Get-WsusServer | WSUSサーバ情報を取得 |
Get-WsusUpdate | Gets the WSUS update object with details about the update. |
Invoke-WsusServerCleanup | Performs the process of cleanup on a WSUS server. |
Remove-WsusDynamicCategory | Removes a dynamic category from a WSUS server. |
Set-WsusClassification | Sets whether the classifications of updates that WSUS synchronizes are enabled. |
Set-WsusDynamicCategory | Sets the synchronization status of a dynamic category. |
Set-WsusProduct | Sets whether the product representing the category of updates to synchronize is enabled. |
Set-WsusServerSynchronization | Sets whether the WSUS server synchronizes from Microsoft Update or an upstream server |
表記は英文ですが、コマンドレットを見てみますと、コンピュータオブジェクト削除はできそうにありません。どちらかというとサーバでのパッチ承認とか設定とかのコマンドのようです。このコマンドレットでは現時点では対応できなさそうです。
コンピュータオブジェクトを1つ消してみる
次に、調べてみますと、マイクロソフトのブログより、Powershell の運用に関して投稿がありました。
こちらの方を参考にして対応できそうです。
まずは、Powershellコンソールにてアッセンブリを読み込ませ、WSUSサーバへ接続します。
# Wsus接続 [void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”) $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer(“WSUSサーバ名”,$False) |
サーバ情報は変数に代入してますので、”$wsus”とするとサーバ情報が見えます。次に、コマンドでホスト名を検索します。
$wsus.GetComputerTargetByName(“ホスト名.FQDN”) |
ホスト名を検索し、クライアントを削除します。
$Client = $wsus.SearchComputerTargets(“ホスト名”) $client[0].Delete() |
これで、WSUSコンソールより、コンピュータオブジェクト1つが消去できるようになりました。このパターンを使って繰り返し処理を行いたいと思います。
コンピュータオブジェクト一括消去してみる
多数のオブジェクト一括削除は一括削除方法ですが、CSVファイルを作成・読み込ませ、一行ずつ処理を行う方式とします。
Powershellとして、Foreach-objectコマンドレットを利用し、一行ずつPCを消去します。また、CSVファイルは、以下の方法で作成します。
(CSV記載)
Hostname
PC1
PC2
Powershellスクリプト以下のスクリプトを作成し、CSVファイルを配置します。
Import-Csvコマンドレットを利用しCSV取り込み、繰り返し処理を行います。繰り返しは ForEachコマンドレットを利用します。
試したことろ、直接パラメータは渡せないみたいで、いったん変数($a )に格納して処理を行っています。CSVの取り込みが終われば、ループ処理もBreakして終了します。
尚、CSVファイルにもよりますが、保存形式がSJISの場合、文字化け等不具合がある可能性がありますので、”-Encoding Default” をつけておくとよいと思います。
#CSV読み込み $CSV = “csvファイルのパス” #Wsus接続 #PC消す |
試してみますと、問題なく一括削除できました。