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

【PR】この記事には広告を含む場合があります。

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

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

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

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

スポンサーリンク

目次

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

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

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

URL:UpdateServices Module | Microsoft Learn

【WSUSコマンドレット】

コマンドレット説明
Add-WsusComputerターゲットにコンピュータを追加
Add-WsusDynamicCategoryAdds a dynamic category to a WSUS server.
Approve-WsusUpdateアップデートを承認する
Deny-WsusUpdateDeclines the update for deployment.
Get-WsusClassificationGets the list of all WSUS classifications currently available in the system.
Get-WsusComputerWSUSに登録されているコンピュータを取得
Get-WsusDynamicCategoryGets dynamic categories on a WSUS server.
Get-WsusProductGets the list of all products currently available on WSUS.
Get-WsusServerWSUSサーバ情報を取得
Get-WsusUpdateGets the WSUS update object with details about the update.
Invoke-WsusServerCleanupPerforms the process of cleanup on a WSUS server.
Remove-WsusDynamicCategoryRemoves a dynamic category from a WSUS server.
Set-WsusClassificationSets whether the classifications of updates that WSUS synchronizes are enabled.
Set-WsusDynamicCategorySets the synchronization status of a dynamic category.
Set-WsusProductSets whether the product representing the category of updates to synchronize is enabled.
Set-WsusServerSynchronizationSets 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”とするとサーバ情報が見えます。次に、コマンドでホスト名を検索します。


$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()
}

一括消去

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

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次