#powershell #powershell-3.0
#powershell #powershell-3.0
Вопрос:
Я пытаюсь установить последнее «обновление для системы безопасности» из списка подключенных к сети ПК. Я использую функцию Get-HotFix с несколькими опциями, и это работает, за исключением случаев, когда два разных исправления были обновлены в один и тот же день.. пример
Функция оценки
(Get-HotFix -ComputerName $Client -Description 'Security Update' | Sort-Object -Property InstalledOn)[-1]
Результат
Source Description HotFixID InstalledBy InstalledOn
------ ----------- -------- ----------- -----------
PC-W007 Security Update KB4586863 NT AUTHORITYSYSTEM 11/19/2020 12:00:00 AM
Полный список исправлений
Source Description HotFixID InstalledBy InstalledOn
------ ----------- -------- ----------- -----------
PC-W007 Update KB4578974 NT AUTHORITYSYSTEM 10/23/2020 12:00:00 AM
PC-W007 Update KB4513661 1/9/2020 12:00:00 AM
PC-W007 Security Update KB4516115 1/9/2020 12:00:00 AM
PC-W007 Update KB4517245 1/9/2020 12:00:00 AM
PC-W007 Security Update KB4528759 1/9/2020 12:00:00 AM
PC-W007 Security Update KB4561600 NT AUTHORITYSYSTEM 8/8/2020 12:00:00 AM
PC-W007 Security Update KB4565554 NT AUTHORITYSYSTEM 8/8/2020 12:00:00 AM
PC-W007 Security Update KB4569073 NT AUTHORITYSYSTEM 8/21/2020 12:00:00 AM
PC-W007 Security Update KB4576751 NT AUTHORITYSYSTEM 9/18/2020 12:00:00 AM
PC-W007 Security Update KB4577670 NT AUTHORITYSYSTEM 10/23/2020 12:00:00 AM
PC-W007 Security Update KB4580325 NT AUTHORITYSYSTEM 10/23/2020 12:00:00 AM
PC-W007 Security Update KB4586863 NT AUTHORITYSYSTEM 11/19/2020 12:00:00 AM
PC-W007 Security Update KB4586786 NT AUTHORITYSYSTEM 11/19/2020 12:00:00 AM
Желаемый результат
PC-W007 Security Update KB4586786 NT AUTHORITYSYSTEM 11/19/2020 12:00:00 AM
Как я могу это сделать?
Обратите внимание на эти два результата: Мне нужно последнее
PC-W007 Security Update KB4586863 NT AUTHORITYSYSTEM 11/19/2020 12:00:00 AM
PC-W007 Security Update KB4586786 NT AUTHORITYSYSTEM 11/19/2020 12:00:00 AM
Полный сценарий
Start-Transcript -Path "$(Get-location)RESULTLOG-$(Get-date -Format "yyyyMMddTHHmmss").log"
Function Get-FileName{
[System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”) |
Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = Get-Location
$OpenFileDialog.filter = “All files (*.*)| *.*”
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
}
$Importfile = Get-FileName
$Clients = Get-Content $Importfile
Foreach($Client in $Clients){
if (Test-Connection -ComputerName $Client -Count 2 -Quiet) {
try {
(Get-HotFix -ComputerName $Client -Description 'Security Update' | Sort-Object -Property InstalledOn)[-1]
"==============================================================================="
}
catch {
"$Client An error occurred."
"==============================================================================="
}
}
else{
"$Client >>>>>>> not on line "
"==============================================================================="
}
}
Stop-Transcript
Комментарии:
1. какая версия PoSh вам нужна? версии v2 и v3 немного отличаются … [ усмешка ]
2. Кажется
Get-HotFix
, что командлет возвращает объекты, свойствоInstalledOn
которых является строкой без истинной временной части. Также вызывается свойствоInstallDate
, которое является объектом DateTime, но я никогда не видел, чтобы оно действительно имело значение..3. @Lee_Dailey Мне нужна версия 3
4. @victorR — я вижу, что вы нашли решение … и опубликовал его. отлично! [ усмешка ] поскольку вам не нужна ps2, пожалуйста, удалите этот тег из вашего вопроса.
Ответ №1:
Я нашел решение своей проблемы, я изменил свою функцию оценки на это :
(Get-HotFix -ComputerName $Client -Description 'Security Update' | Select-Object -Last 1)