因此,我尝试为服务器上的所有计算机输出完整的KB列表(可在一台计算机上运行),但它不会将Get-ADcomputer
识别为cmdlet。检查各种信号源时,似乎不包含AD模块。当我在工作计算机/服务器上这样做时,我不愿下载任何或任何性质的东西。
有没有什么方法可以在不使用AD模块的情况下实现以下目的,或者我可能会错过如何导入模块(如果存在,我认为它不会在这个系统上执行)?
# 1. Define credentials
$cred = Get-Credential
# 2. Define a scriptblock
$sb = {
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$HistoryCount = $Searcher.GetTotalHistoryCount()
$Searcher.QueryHistory(0,$HistoryCount) | ForEach-Object -Process {
$Title = $null
if ($_.Title -match "\(KB\d{6,7}\)") {
# Split returns an array of strings
$Title = ($_.Title -split '.*\((?<KB>KB\d{6,7})\)')[1]
} else {
$Title = $_.Title
}
$Result = $null
switch ($_.ResultCode) {
0 { $Result = 'NotStarted'}
1 { $Result = 'InProgress' }
2 { $Result = 'Succeeded' }
3 { $Result = 'SucceededWithErrors' }
4 { $Result = 'Failed' }
5 { $Result = 'Aborted' }
default { $Result = $_ }
}
New-Object -TypeName PSObject -Property @{
InstalledOn = Get-Date -Date $_.Date;
Title = $Title;
Name = $_.Title;
Status = $Result
}
} | Sort-Object -Descending:$false -Property InstalledOn | Where {
$_.Title -notmatch "^Definition\sUpdate"
}
}
#Get all servers in your AD (if less than 10000)
Get-ADComputer -ResultPageSize 10000 -SearchScope Subtree -Filter {
(OperatingSystem -like "Windows*Server*")
} | ForEach-Object {
# Get the computername from the AD object
$computer = $_.Name
# Create a hash table for splatting
$HT = @{
ComputerName = $computer ;
ScriptBlock = $sb ;
Credential = $cred;
ErrorAction = "Stop";
}
# Execute the code on remote computers
try {
Invoke-Command @HT
} catch {
Write-Warning -Message "Failed to execute on $computer because $($_.Exception.Message)"
}
} | Format-Table PSComputerName,Title,Status,InstalledOn,Name -AutoSize
答案 0 :(得分:2)
您有3个选择:
首先是安装AD的RSAT功能,其中包括AD模块。这可能是最好的选择,除非有特定的东西阻止它。如果您从客户端操作系统运行脚本,则需要先安装RSAT。
选项2(仅在添加Windows功能时才应该使用)是下载并使用Quest AD工具,它们提供非常相似的功能,但看起来戴尔正在尽力做到现在隐藏这些可能很难找到......
选项3是使用.NET ADSI类直接访问AD,无需在任何能够运行PowerShell的系统上进行任何额外下载。如果您想要使用此路线,请查看界面Here和System.DirectoryServices
命名空间Here的文档。
修改强>
刚刚注意到问题的最后一部分,你是什么意思&#34;一个完整的KB列表&#34;?不只是Windows更新或手动更新的东西? Windows更新列表中还有哪些内容不是Windows更新?
答案 1 :(得分:0)
您还没有提到您正在使用的操作系统,但一般情况下,如果您拥有服务器2008 R2或更高版本,您只需要激活RSAT功能AD PowerShell模块就可以获得您正在寻找的cmdlet。 / p>
在客户端计算机上,您必须&#39;安装RSAT,然后激活功能。您可以查看technet文章了解更多信息:https://technet.microsoft.com/en-us/library/ee449483(v=ws.10).aspx
如果您不想使用该选项,则必须使用.NET ADSI类。关于如何做到这一点有很多例子,它基本上归结为几行。 Technet也有这方面的例子:https://technet.microsoft.com/en-us/library/ff730967.aspx