Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

PSWindowsUpdateを使用できます コマンドラインからWindowsUpdateを管理するPowerShellモジュール。 PSWindowsUpdateモジュールはWindowsに組み込まれておらず、PowerShellギャラリーリポジトリからインストールできます。 PSWindowsUpdateを使用すると、管理者はWindowsサーバーおよびワークステーションの更新をリモートで確認、インストール、削除、および非表示にできます。 PSWindowsUpdateモジュールは、Windows ServerCoreまたはHyper-VServer(GUIがない)での更新を管理する場合や、監査モードでWindowsイメージを構成する場合に特に役立ちます。

PSWindowsUpdateモジュールのインストール

1つのコマンドでPackageManagementを使用して、オンラインリポジトリ(PSGallery)からWindows10/11およびWindowsServer2022/2019/2016にPSWindowsUpdateモジュールをインストールできます。

Install-Module -Name PSWindowsUpdate -Force

インストールが完了したら、パッケージを確認する必要があります:

Get-Package -Name PSWindowsUpdate

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

以前のバージョンのWindows2012R2/ Windows 8.1以下にPowerShellモジュールをインストールすると、エラーが発生する場合があります。

Install-Module: Unable to download from URI.Unable to download the list of available providers. Check your internet connection.

モジュールをインストールするには、接続にTLS1.2プロトコルを使用する必要があります。次のコマンドを使用して、現在のPowerShellセッションで有効にします。

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

古いバージョンのWindows(Windows 7 / 8.1 / Windows Server 2008 R2 / 2012 R2)を使用している場合、またはインターネットに直接アクセスできない場合は、PSWindowsUpdateを手動でインストールできます(ガイド「PowerShellモジュールをオフラインでインストールする方法」を確認してください)。 。

  1. PSWindowsUpdateモジュールを任意のオンラインコンピューターにダウンロードします:Save-Module –Name PSWindowsUpdate –Path C:\ps\;
  2. モジュールをターゲットコンピューターの次のフォルダーにコピーします%WINDIR%\System32\WindowsPowerShell\v1.0\Modules; PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する
  3. PowerShellスクリプト実行ポリシーを構成します:Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force
  4. これで、モジュールをPowerShellセッションにインポートできます:Import-Module PSWindowsUpdate
。 Windows 7 / Windows Server 2008 R2では、PSWindowsUpdateモジュールをインポートすると、次のエラーが表示される場合があります。「Unblock-File」という用語がコマンドレットの名前として認識されない 。原因は、モジュールがPowerShell3.0でのみ表示された一部の関数を使用しているためです。これらの関数を使用するには、PowerShellのバージョンを更新するか、| Unblock-File PSWindowsUpdate.psm1ファイルから手動で行します。

PSWindowsUpdateモジュールをコンピューターにインストールした後、 Update-WUModule を使用して、他のコンピューターまたはサーバーにリモートでインストールできます。 コマンドレット。たとえば、PSWindowsUpdateモジュールをコンピューターから2つのリモートホストにコピーするには、次のコマンドを実行します(WinRMプロトコルを介してリモートサーバーにアクセスする必要があります):

$Targets = "lon-fs02", "lon-db01"
Update-WUModule -ComputerName $Targets –Local

PoShモジュールを共有ネットワークフォルダに保存(エクスポート)して、他のコンピュータにさらにインポートするには、次のコマンドを実行します。

Save-Module -Name PSWindowsUpdate –Path \\lon-fs02\psmodules\

PSWindowsUpdateコマンドレットリスト

PSWindowsUpdateモジュールで使用可能なコマンドレットのリストを次のように表示できます。

get-command -module PSWindowsUpdate

モジュールコマンドの使用法を簡単に説明しましょう:

  • クリア-WUJob – Get-WUJobを使用して、タスクスケジューラのWUJobをクリアします。
  • ダウンロード-WindowsUpdate Get-WindowsUpdate –Downloadのエイリアス )—更新のリストを取得してダウンロードします;
  • Get-WUInstall、Install-WindowsUpdate Get-WindowsUpdate –Installのエイリアス )–WindowsUpdateをインストールします;
  • 非表示-WindowsUpdateGet-WindowsUpdate -Hide:$falseのエイリアス )–更新を非表示にします;
  • アンインストール-WindowsUpdate –Remove-WindowsUpdateを使用して更新を削除します;
  • 追加-WUServiceManager –コンピューターに更新サーバー(Windows Update Service Manager)を登録します。
  • 有効化-WURemoting — Windows Defenderファイアウォールルールを有効にして、PSWindowsUpdateコマンドレットのリモート使用を許可します。
  • Get-WindowsUpdate (Get-WUList)—指定された基準に一致する更新のリストを表示し、更新を検索してインストールできるようにします。これは、PSWindowsUpdateモジュールのメインコマンドレットです。 WSUSサーバーまたはMicrosoftUpdateから更新プログラムをダウンロードしてインストールできます。更新カテゴリ、特定の更新を選択し、更新をインストールするときにコンピュータの再起動のルールを設定できます。
  • Get-WUApiVersion –コンピューターでWindowsUpdateAgentのバージョンを取得します。
  • Get-WUHistory –インストールされている更新のリスト(更新履歴)を表示します。
  • Get-WUInstallerStatus —Windowsインストーラサービスのステータスを確認します。
  • Get-WUJob –タスクスケジューラでWUJob更新タスクを確認します。
  • Get-WULastResults —更新の最後の検索とインストールの日付( LastSearchSuccessDate およびLastInstallationSuccessDate );
  • Get-WURebootStatus —特定の更新を適用するために再起動が必要かどうかを確認できます。
  • Get-WUServiceManager –更新ソースのリスト;
  • Get-WUSettings –WindowsUpdateクライアント設定を取得します;
  • 呼び出し-WUJob –タスクスケジューラでWUJobsタスクをリモートで呼び出して、PSWindowsUpdateコマンドをすぐに実行します。
  • 削除-WindowsUpdate –KBIDで更新をアンインストールできます。
  • 削除-WUServiceManager – Windows UpdateServiceManagerを無効にします;
  • Set-PSWUSettings –PSWindowsUpdateモジュール設定をXMLファイルに保存します。
  • Set-WUSettings –WindowsUpdateクライアント設定を構成します。
  • 更新-WUModule – PSWindowsUpdateモジュールを更新します(現在のコンピューターからモジュールをコピーするか、PSGalleryから更新することで、リモートコンピューター上のモジュールを更新できます)。
  • リセット-WUComponents コンピューター上のWindowsUpdateエージェントをデフォルトの状態にリセットできます。

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

現在のWindowsUpdateクライアント設定を確認するには、次のコマンドを実行します。

Get-WUSettings

ComputerName                                 : WKS5S2N39S2
WUServer                                     : https://MN-WSUS:8530
WUStatusServer                               : https://MN-WSUS:8530
AcceptTrustedPublisherCerts                  : 1
ElevateNonAdmins                             : 1
DoNotConnectToWindowsUpdateInternetLocations : 1
TargetGroupEnabled                           : 1
TargetGroup                                  : ServersProd
NoAutoUpdate                                 : 0
AUOptions                                    : 3 - Notify before installation
ScheduledInstallDay                          : 0 - Every Day
ScheduledInstallTime                         : 3
UseWUServer                                  : 1
AutoInstallMinorUpdates                      : 0
AlwaysAutoRebootAtScheduledTime              : 0
DetectionFrequencyEnabled                    : 1
DetectionFrequency                         : 4

この例では、コンピューター上のWindows Updateエージェントは、ローカルWSUSサーバーから更新を受信するようにGPOで構成されています。

Reset-WUComponents -Verbose コマンドレットを使用すると、すべてのWindows Updateエージェント設定をリセットし、ライブラリを再登録し、wususervを復元できます。 デフォルト状態にサービスを提供します。

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

PowerShellを使用してWindowsUpdateをスキャンしてダウンロードする

Get-WindowsUpdateを使用して、更新サーバー上の現在のコンピューターで利用可能な更新を一覧表示できます。 またはGet-WUList コマンド。

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

リモートコンピューターで利用可能な更新のリストを確認するには、次のコマンドを実行します。

Get-WUList –ComputerName server2

Windowsが更新を受信する場所を確認できます。次のコマンドを実行します:

Get-WUServiceManager

ServiceID IsManaged IsDefault Name
--------- --------- --------- ----
8b24b027-1dee-babb-9a95-3517dfb9c552 False False DCat Flighting Prod
855e8a7c-ecb4-4ca3-b045-1dfa50104289 False False Windows Store (DCat Prod)
3da21691-e39d-4da6-8a4b-b43877bcb1b7 True True Windows Server Update Service
9482f4b4-e343-43b6-b170-9a65bc822c77 False False Windows Update

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

ご覧のとおり、コンピューターはローカルWSUSサーバーから更新を受信するように構成されています( Windows Server Update Service =True )。この場合、コンピューターで承認された更新のリストが表示されます。

インターネット上のMicrosoftUpdateサーバー(Windows Updateに加えて、これらのサーバーにはOfficeおよびその他のMicrosoft製品の更新が含まれています)に対してコンピューターをスキャンする場合は、次のコマンドを実行します。

Get-WUlist -MicrosoftUpdate

この警告が表示されます:

Get-WUlist : Service Windows Update was not found on computer. Use Get-WUServiceManager to get registered service.

Microsoft Updateでのスキャンを許可するには、次のコマンドを実行します。

Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7

これで、MicrosoftUpdateに対してスキャンできます。この場合、Microsoft Visual C++2008およびMicrosoftSilverlightの追加の更新が見つかりました。

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

コンピューター上のWindowsUpdateエージェントのバージョンを確認するには、次のコマンドを実行します。

Get-WUApiVersion

ComputerName PSWindowsUpdate PSWUModuleDll ApiVersion WuapiDllVersion
------------ --------------- ------------- ---------- ---------------
DESKTOP-J... 2.1.1.2 2.2.0.2 8.0 10.0.19041.1320

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

コンピューターが受信した更新のリストから特定の製品またはKBを削除するには、次の方法でそれらを除外できます。

  • カテゴリ(-NotCategory );
  • タイトル(-NotCategory );
  • 更新番号(-NotKBArticleID

たとえば、OneDrive、ドライバーの更新、および特定のKBをリストから除外しましょう:

Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4489873

PowerShellを使用したWindowsUpdateのインストール(Install-WindowsUpdate)

(ローカルWSUSではなく)Windows UpdateサーバーからWindowsデバイスで利用可能なすべての更新プログラムを自動的にダウンロードしてインストールするには、次のコマンドを実行します。

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

AcceptAll パラメータは、すべてのアップデートパッケージのインストールを受け入れ、 AutoReboot アップデートのインストール後にWindowsを自動的に再起動できるようにします。

次のオプションを使用することもできます:

  • IgnoreReboot –自動再起動を無効にします;
  • ScheduleReboot –コンピュータを再起動する正確な時間を設定します。

更新のインストール履歴をログファイルに保存できます(WindowsUpdate.logファイルの代わりに使用できます)。

Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "c:\logs\$(get-date -f yyyy-MM-dd)-WindowsUpdate.log" -force

KB番号で特定のアップデートパッケージのみをインストールできます:

Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

この場合、各アップデートのインストールを手動で確認する必要があります。

インストールリストから特定の更新を除外する場合は、次のコマンドを実行します。

Install-WindowsUpdate -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot

PowerShellを使用してリモートコンピューターにWindowsUpdateをインストールする

PSWindowsUpdateモジュールを使用すると、複数のワークステーションまたはサーバーに一度にリモートで更新をインストールできます(PSWindowsUpdateはこれらのコンピューターにインストール/インポートする必要があります)。管理者が更新プログラムをインストールするためにリモートのWindowsホストに手動でログオンする必要がないため、これは非常に便利です。 WinRMは、リモートコンピューターで(手動またはGPOを介して)有効にして構成する必要があります。

ほとんどすべてのPSWindowsUpdateモジュールコマンドレットを使用すると、–Computernameを使用してリモートコンピューターでWindowsUpdateを管理およびインストールできます。 属性。

PSWindowsUpdateモジュールをリモートコンピューターにインストールし、動的RPCポートを介してWindowsDefenderファイアウォールのdllhost.exeプロセスにアクセスできるようにします。 Invoke-Commandコマンドレットを使用して、リモートコンピューターでPSWindowsUpdateモジュールを構成できます。

$Targets = "lon-fs02", "lon-db01"
Invoke-Command -ComputerName $Target -ScriptBlock {Set-ExecutionPolicy RemoteSigned -force }
Invoke-Command -ComputerName $Target -ScriptBlock {Import-Module PSWindowsUpdate; Enable-WURemoting}

PSWindowsUpdateモジュールを使用して、ADドメイン内のコンピューターとワークグループ内の両方のコンピューターでWindows Updateをリモートで管理できます(ワークグループ環境にはPowerShell Remoting構成が必要です)。

リモートコンピューターの更新を管理するには、winrmの信頼できるホストリストにホスト名を追加するか、HTTPS経由でPowerShell Remoting(WinRM)を構成する必要があります。

winrm set winrm/config/client '@{TrustedHosts="server1,server2,…"}'

またはPowerShellを使用する場合:
Set-Item wsman:\localhost\client\TrustedHosts -Value server1 -Force

次のコマンドは、利用可能なすべての更新プログラムを3つのリモートWindowsホストにインストールします。

$ServerNames = "server1, server2, server3"
Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll | Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false -Verbose -ErrorAction Ignore

Invoke-WUJobコマンドレット(以前はInvoke-WUInstallと呼ばれていました)は、ローカルのSYSTEMアカウントで実行されるリモートコンピューター上にスケジューラータスクを作成します。

WindowsUpdateをインストールする正確な時刻を指定できます。

Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate –AcceptAll -AutoReboot | Out-File C:\Windows\PSWindowsUpdate.log } -Confirm:$false -TriggerDate (Get-Date -Hour 22 -Minute 0 -Second 0)

Get-WUJobを使用して、更新インストールタスクのステータスを確認できます。

Get-WUJob -ComputerName $ServerNames

コマンドが空のリストを返す場合は、すべてのコンピューターでの更新インストールタスクが完了しています。

リモートコンピューターに更新をインストールして、管理者に電子メールレポートを送信できます。

Install-WindowsUpdate -ComputerName nysrv1 -MicrosoftUpdate -AcceptAll - IgnoreReboot -SendReport –PSWUSettings @{SmtpServer="smtp.woshub.com";From="update_alert@woshub.com";To="wsus_admin@woshub.com";Port=25} -Verbose

PowerShellを使用してWindowsUpdate履歴を確認する(Get-WUHistory)

Get-WUHistoryの使用 コマンドレットを使用すると、コンピューターにインストールされている更新プログラムのリストを以前に自動または手動で取得できます。

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

特定のアップデートのインストール日に関する情報を入手できます:

Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

特定の更新プログラムが複数のリモートコンピューターにインストールされているかどうかを確認するには、次のPowerShellコードを使用できます。

"server1","server2" | Get-WUHistory| Where-Object {$_.Title -match "KB4011634"} | Select-Object *|ft

アップデートのインストール後にコンピューターを再起動する必要があるかどうかを確認します(再起動を保留中):

Get-WURebootStatus –ComputerName WKS21TJS

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

RebootRequiredの値を確認してください およびRebootScheduled 属性。

Get-ADComputerコマンドレット(PowerShellモジュールのActive Directoryから)を使用して、ドメイン内のすべてのコンピューターに更新が最後にインストールされた日付を含むレポートを生成できます。

$Computers=Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows*' }
Foreach ($Computer in $Computers)
{
Get-WULastResults -ComputerName $Computer.Name|select ComputerName, LastSearchSuccessDate, LastInstallationSuccessDate
}

類推すると、60日以上アップデートがインストールされていないコンピュータを見つけることができます。 結果をOut-GridViewインタラクティブテーブルに表示します:

$result=@()
Foreach ($Computer in $Computers) {
$result+= Get-WULastResults -ComputerName $Computer.Name
}
$result| Where-Object { $_.LastInstallationSuccessDate -lt ((Get-Date).AddDays(-60)) }| Out-GridView

PowerShellを使用したWindowsUpdateのアンインストール(削除-WindowsUpdate)

Remove-WindowsUpdateを使用できます PowerShellを使用して更新を正しくアンインストールするためのコマンドレット。 KBArticleIDパラメーターの引数としてKB番号を指定するだけです。コンピュータの自動再起動を遅らせるには、–NoRestartオプションを追加します:

Remove-WindowsUpdate -KBArticleID KB4489873 -NoRestart

PowerShellを使用してWindowsUpdateを非表示にする方法

特定の更新プログラムを非表示にして、Windows Updateサービスによってコンピューターにインストールされないようにすることができます(ほとんどの場合、ドライバーの更新プログラムを非表示にする必要があります)。たとえば、KB4489873とKB4489243の更新を非表示にするには、次のコマンドを実行します。
$HideList = "KB4489873", "KB4489243"
Get-WindowsUpdate -KBArticleID $HideList –Hide

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

これで、次にGet-WUlistコマンドを使用して更新をスキャンするときに、非表示の更新がインストール可能な更新のリストに表示されなくなります。

これは、このコンピューターに隠されている更新のリストを表示する方法です:

Get-WindowsUpdate –IsHidden

Hに注意してください (非表示)属性が非表示の更新の[ステータス]列に表示されました。

PSWindowsUpdatePowerShellモジュールを使用してWindowsUpdateを管理する

一部の更新を再表示するには、次のコマンドを実行します:

Get-WindowsUpdate -KBArticleID $HideList -WithHidden -Hide:$false

または:

Show-WindowsUpdate -KBArticleID $HideList

PowerShellコンソールに不快感を感じる場合は、グラフィックの Windows Update MiniToolをお勧めします。 Windows10/11およびWindowsServer2022/2019で更新を管理するため。


  1. WindowsPowerShellスクリプトで生産性を向上させる

    Linuxの生産性をWindowsに持ち込むことができたらどうでしょうか。 WindowsとLinuxの主な違いの1つは、ほとんどのLinuxディストリビューションに強力なBashシェルがパッケージ化されていることです。比較すると、Windowsのコマンドプロンプトは必要最低限​​のものです。 Windowsに同様に強力な端末がある場合はどうなりますか? PowerShellを使用すると、その夢が現実になる可能性があります。 免責事項:PowerShellは「Bashfor Windows」ではなく、またそうなることを意図したものでもありません。はい、どちらも生産性を大幅に向上させることが

  2. Windows タグでファイルとフォルダを管理する方法

    システムから古いファイルを検索することは、炭庫で黒猫を探すようなものです。たとえば、昨年の南アメリカでの休暇の写真はどこに保存したのでしょうか。または 2018 年に書いたレポートの名前は? Windows 10 には強力な検索機能が組み込まれていますが、特に Cortana を使用すると、画像、音楽、PDF などのフィルターを使用してスマートに検索できます。最も無視されている機能の 1 つである Windows タグ 効率的な方法でファイルを検索して整理するのは理にかなっています。 Windows タグとは何か、なぜそれを使用する必要があるのか​​? タグは、Windows 10 の最も