Powershell,如何获取上次Windows update安装或至少检查更新的日期?

Powershell,如何获取上次Windows update安装或至少检查更新的日期?,windows,powershell,Windows,Powershell,我正在试图找到一种方法来检索上次安装或检查windows update的日期/时间 到目前为止,我已经找到了一个函数,它允许列出最近的Windows更新,但是对于这样一个简单的函数来说,它的数据太多,太臃肿。第二,我试图访问注册表,虽然我没有运气检索我要的值 我正在Windows 10计算机上测试此功能,尽管该软件可能位于Windows Server 2012 R2上 下面是我尝试过的一些代码的示例: $key = “SOFTWARE\Microsoft\Windows\CurrentVersi

我正在试图找到一种方法来检索上次安装或检查windows update的日期/时间

到目前为止,我已经找到了一个函数,它允许列出最近的Windows更新,但是对于这样一个简单的函数来说,它的数据太多,太臃肿。第二,我试图访问注册表,虽然我没有运气检索我要的值

我正在Windows 10计算机上测试此功能,尽管该软件可能位于Windows Server 2012 R2上

下面是我尝试过的一些代码的示例:

$key = “SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install” 
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine 
$RemoteBase = [Microsoft.Win32.RegistryKey]::OpenBaseKey($keytype,"My Machine") 
$regKey = $RemoteBase.OpenSubKey($key) 
$KeyValue = $regkey.GetValue(”LastSuccessTime”) 

$System = (Get-Date -Format "yyyy-MM-dd hh:mm:ss")  
另外,只需尝试Get ChildItem

$hello = Get-ChildItem -Path “hkcu:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\”

foreach ($a in $hello) {

$a

}
我已签入regedit,但该密钥不存在。转到“Windows Update”路径仅显示应用程序更新,而不显示Windows更新

编辑 通过这句话,我似乎更接近我的目标: 获取修补程序|其中{$\.InstallDate-gt 30}

但是,我如何仅检索那些在过去30天内已安装的?这不会显示很多结果,即使使用
Select$\ InstallDate
选项:

 gwmi win32_quickfixengineering |sort installedon -desc 
另一种选择是使用com对象Microsoft.Update.Session,可在此处找到: 简言之:

$Session = New-Object -ComObject Microsoft.Update.Session 
$Searcher = $Session.CreateUpdateSearcher()
$HistoryCount = $Searcher.GetTotalHistoryCount()
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa386532%28v=vs.85%29.aspx
$Searcher.QueryHistory(0,$HistoryCount) | ForEach-Object {$_}

Get HotFix |?{$\u.InstalledOn-gt((Get Date).AddDays(-30))

在这里,您可以通过一行Powershell知道上次Windows更新的日期和时间:

(New-Object -com "Microsoft.Update.AutoUpdate"). Results | fl
您还可以使用以下脚本在Windows Server中对其进行大规模检查:

$ servers = Get-ADComputer -Filter {(OperatingSystem-like "* windows * server *") -and (Enabled -eq "True")} -Properties OperatingSystem | Sort Name | select -Unique Name

foreach ($ server in $ servers) {
write-host $ server.Name

   Invoke-Command -ComputerName $ server.Name -ScriptBlock {
(New-Object -com "Microsoft.Update.AutoUpdate"). Results}
}

摘自:

这很整洁,但结果仍然不多,只有11个。这正常吗?第二,是否可以只获取最后30天?未测试,您可以尝试
gwmi win32_quickfixengineering | sort installedon-desc |?{((获取日期)$\u.installedon)-lt 30}
这不起作用,但我可以看到您试图获取的内容。这似乎是一个典型的问题。。。但是我刚刚发现了这个。。。但无法获取依赖信息:“gwmi-cl win32_reliabilityRecords”这列出了一些时间:gwmi-cl win32_reliabilityRecords |选择生成的时间这是一个很好的替代方法,使用com对象,我正在更新答案。欢迎使用堆栈溢出!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!我想知道与另一个答案Get HotFix |?{$\u.InstalledOn-gt((Get Date.AddDays(-30))的区别是什么。您的答案显示了我从今天开始的最后一次更新,而另一次没有,但显示了更多带有kbnumber的更新。