シナリオは次のとおりです。Server1とServer2は、どちらも同じパッチレベルでWindows Server 2012 R2を実行しており、現在、負荷分散クラスター内にあります。 Server1にはアプリケーションの問題があり、それを置き換えることをお勧めします。これはクラスターから削除され、代わりにServer3がプロビジョニングされています。
Server1とServer2が最初に構築されたとき、パッチ管理ソリューションは使用されませんでした。それらは同時に構築され、当時の最新レベルにパッチが適用されました。
目的はServer3をServer2と同じレベルにパッチすることです。
前述のように、パッチ管理ソリューションは利用できません。
もちろん、Server2の更新を1つずつ確認し、それらをServer3に適用することはオプションですが、それよりも優れた方法を実行できるはずです。やっぱり2017年です。
PowerShellを介してKB番号でServer2のすべての更新のリストを取得することが可能であり、このリストが利用可能です。
しかし、これらの更新とこれらの更新のみをダウンロードしてServer3に適用するにはどうすればよいですか?
初期の調査では、VBSとPowerShellの両方の多数のWindows更新スクリプトが見つかりましたが、現在のすべての更新を適用する必要がないという重要な要件ですべて失敗します。
Server2のパッチレベルを最新にし、Server3でも同じにすることもオプションですが、ダウンタイム/メンテナンスウィンドウ(クラスター内に実行可能なServer1がない)をスケジュールする必要があるため、避けたいオプションです。アプリケーションテスト。最後の手段としてそれを維持しましょう。
それで、上記の制約を前提として、これを賢明な方法で自動化するための私の合理的なオプションは何ですか?
私はかなり確信しています this はあなたが探しているものです。
最初にserver2で実行してKB番号のリストを取得し、次にサーバー3を実行してそれらのKB番号をに渡します。
おそらくWSUSをインストールするためのクリーナー。その後、WSUSPowerShellモジュールを使用してこれを行うことができます。このスクリプトは、ローカルにインストールされた更新プログラムを確認し、WSUSに接続してから、WSUSの特定のグループに対してそれらの更新プログラムを承認します。
$servername = <ip of WSUS>
$port = "8530"
$groupname = <name of server group>
# Import Libraries
[void][reflection.Assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
# Connect to WSUS
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($servername, $False, $port)
# Connect to local Update Service
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
$installedUpdates = $Searcher.QueryHistory(0, $historyCount) | Select-Object Title
# Approve all locally installed updates in WSUS
foreach ($installedUpdate in $installedUpdates) {
$update = $wsus.SearchUpdates($installedUpdate)
$group = $wsus.GetComputerTargetGroups() | where {$_.Name -eq $groupname}
$update[0].Approve(“Install”,$group)
}
すべてのローカル更新をファイルに書き込むこともできます。
$filename = <path>
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
$installedUpdates = $Searcher.QueryHistory(0, $historyCount) | Select-Object Title
$installedUpdates | Export-Csv $filename
次に、そのファイルを他のサーバーにコピーして、次のように実行します。 https://msdn.Microsoft.com/en-us/library/windows/desktop/aa387101(v = vs.85).aspx ==
しかし、これらの更新をダウンロードして、これらの更新のみをServer3に適用するにはどうすればよいでしょうか。
チェックしますか Microsoft Updateカタログ (サイトはIEでのみ機能することに注意してください)? KB IDで更新を確認し、バスケットに追加してから、すべてダウンロードできます。 KBIDでバスケットへの更新の追加を自動化することもできると思います。
必要な更新のリストがあるので、タスクは非常に簡単になります。注:systeminfo
utilは、新しいものに置き換えられた更新を反映していません。これは必須です。
UPD。KB識別子を介した自動ダウンロード更新の最適な方法 ここで説明 。しかし、彼は肉体労働を排除しませんでした。 Microsoftは、アップデートの直接ダウンロードに苦労しています。