PowerShellでWSUSに端末を完全一致で登録する

2020-08-27


はじめに

WSUS運用で、移行や個別端末などをWSUSに登録する方法およびコンピュータグループに登録した端末を追加する方法をメモします。
複数の端末を登録する際、PowerShellを利用すれば、一括で登録することができます。

端末の登録

端末を登録するために用意しておくことは、登録するホスト名(PC名)を用意しておくことです。
もし、ドメインに参加している端末の場合はホスト名.(ドメイン)を指定する必要があります。
今回はテキストファイルに記載した複数の端末を一括で登録します。

hosts.txt(HOST001はすでにWSUSに登録済みとする)


HOST
HOST002
HOST003
HOST004

sample.ps1


$server = "192.168.xxx.xxx"
$ssl = $false
$port = 8530

# getUpdateServer でWSUSの接続情報を取得・設定
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration,AdminProxy]::getUpdateServer($server, $ssl, $port)

# ファイルから端末一覧を取得する
$hosts = (Get-Contetn "C:¥WSUS¥data¥hosts.txt") -as string[]
foreach($host in $hosts) {

    # 端末情報を登録
    # 登録する前に、すでに端末が登録されているかどうかをチェックする
    $clients = $wsus.SearchComputerTargets($host)
    if ($clients.Count -eq 0) {
        $computerTarget = $wsus.RegisterComputer($host)

        if($computerTarget -ne $null) {
            # コンピュータグループに登録する(グループ名:Sample)
            $group = $wsus.GetComputerTargetGroups() | ? ($_.Name -eq "Sample")
            $group.AddComputerTarget($computerTarget)
        }
    } else {
        Write-Host $host
        Write-Host "既に登録済み"
    }
}

ここで登録された端末は下記となります


HOST002
HOST003
HOST004

「HOST」という端末名は登録されませんでした。
理由は、SearchComputerTargetsが部分一致で情報を取得するため、「HOST001」が既に登録されており
「HOST」という名前が部分的に一致し、既に存在している端末として認識されたことが原因です。
では、どうすれば登録できるかというと、下記のように書き換えることで可能です。


# 変更前
$clients = $wsus.SearchComputerTargets($host)

#変更後
$clients = $wsus.SearchComputerTargets($host) | ? ($_.FullDomainName -eq $host)

SearchComputerTargetsで取得した端末情報すべての「FullDomainName」と一致する情報のみを取得します。
変更後のコードを実行すると、無事「HOST」という端末が登録されました。

最後に

結構嵌ったのが、WSUSのCmdletが部分一致で情報を取得するところでした。
同じような方の参考になればと思います。