WSUS コンピュータ をPowershellコマンドで一括削除する方法

Powershell WindowsServer WSUS


管理するパソコンが数台だったらよいのですが、何十台も削除・整理するとなると時間もかかりますし、作業漏れも発生します。

WSUSコンソールから削除すればよいのですが、手動で1台ずつ消去するには大変なので Powershell を使って一括で処理できるかを試したいと思います。

主にサーバ運用での話ですが、WSUSサーバで多数のクライアント端末を管理していると、「パソコンのリプレース」「故障端末交換」などで端末がそもそも処分されたりして、結果としてコンピュータオブジェクトが残存し、不要なコンピュータオブジェクトとして残ります。

オブジェクトが残る分には問題ありませんが、困ったことにサーバ運用では運用しているクライアント台数とかパッチの適用状況など報告することがあり、結果として精緻なWSUSコンソールの「管理台数」や「パッチ適用台数」が洗い出せなくなります。

 



Powershellコマンドを調査してみる

まずは、コマンド調査ということで Powershell コマンドレットがあるかどうかを見てみます。

マイクロソフトのサイトには Powershell コマンドレットが多数紹介されています。

URL:https://docs.microsoft.com/ja-jp/powershell/module/wsus/?view=win10-ps

【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接続

[void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”)

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer(“WSUSサーバ名”,$False)

 

#PC消す

Import-csv -Path $CSV | ForEach-object {

$a = $_.Hostname

$Client = $wsus.SearchComputerTargets(“$a”)

$client[0].Delete()

}

 

試してみますと、問題なく一括削除できました。

 



スポンサードサーチ