Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Дата последнего обновления серверов

Ответить
Настройки темы
PowerShell - [решено] Дата последнего обновления серверов

Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Добрый день!

Подскажите, как можно получить дату последнего обновления списка серверов?
Есть такой вариант:

Код: Выделить весь код
cls 
$ScriptBlock = {
  $hash=@{}
  $Session = New-Object -ComObject Microsoft.Update.Session
  $Searcher = $Session.CreateUpdateSearcher()
  $hash[$env:Computername] = $Searcher.QueryHistory(1,1) | select -ExpandProperty Date
  $hash
}

$server_list = cat d:\server_list.txt

foreach ($server in $server_list) {
  Invoke-Command -ComputerName $server -ScriptBlock $ScriptBlock
}
Но этот вариант не на всех серверах работает. На некоторых возвращается ошибка, о недоступности RPC...

Цитата:
[host-1234] Connecting to remote server host-1234 failed with the following error message : WinRM cannot complete the operation. Verify that the specified computer name is valid, that the computer is accessible over the network, and that a firewall exception for the WinRM service is enabled and allows access from this computer. By default,
the WinRM firewall exception for public profiles limits access to remote computers within the same local subnet. For more information, see the about_Remote_Troubleshooting Help topic.
+ CategoryInfo : OpenError: (host-1234:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : WinRMOperationTimeout,PSSessionStateBroken
Альтернативный вариант, получать по wmi, но с ним тоже проблемы, он возвращается неправильные даты.

Код: Выделить весь код
$server = "host-1234"
Get-HotFix -computername $server | where {$_.InstalledOn} | sort InstalledOn -desc | select InstalledOn -First 1
Вероятно это связано с региональными настройками. Например, последнее обновление было 18.12.2015, а выводит 12.10.2015. Даже если прикинуть, что он выводит в формате MM/dd/YYYY. Дата всё равно не верная...

Отправлено: 12:56, 18-12-2015

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$server = $env:ComputerName
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install"
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine 
$RemoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$server) 
$regKey = $RemoteBase.OpenSubKey($key) 
$regkey.GetValue("LastSuccessTime")
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:18, 19-12-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Kazun,
Большое спасибо за ответ!
Такой вариант рассматривался, но в win10 и win serv 2016 такого пути - SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install нет((

Отправлено: 09:11, 21-12-2015 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Get-WinEvent -FilterHashtable @{LogName="System";ID=19} -MaxEvents 1
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:42, 21-12-2015 | #4


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Подскажите, а есть возможность через wmi корректное время получать?
Пример выше шикарен, но на удалённых хостах не работает, очень много где RPC выключен.

Отправлено: 13:27, 21-12-2015 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Get-WmiObject Win32_NTLogEvent -filter "LogFile='System' and EventCode=19" | Select -First 1 |  Foreach {$_.ConvertToDateTime($_.TimeWritten).ToString("dd:MM:yyyy HH:mm:ss")}
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:51, 21-12-2015 | #6


Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Так это будет выглядеть на PS, может кому пригодиться:

Код: Выделить весь код
cls
$log = "C:\temp\log.txt" #путь до лога
$ou = "OU=Servers,DC=test,DC=domain,DC=ru" #путь до OU, где будет происходить поиск серверов
$server_list = Get-ADComputer -Filter * -SearchBase $ou | Sort-Object #получаем список компьютеров и упорядочиваем их по алфавиту

foreach ($server in $server_list.Name) {
  try {
    $last_update = Get-WmiObject Win32_NTLogEvent -ComputerName $server -filter "LogFile='System' and EventCode=19" -ErrorAction Stop | Select -First 1 | Foreach {$_.ConvertToDateTime($_.TimeWritten).ToString("dd:MM:yyyy HH:mm:ss")} #через wmi запрос обращаемся к журналу сервера и ищем событие обновлений
    #Write-Host $server ": " $last_update -ForegroundColor Green #вывод информации в консоль
    $server + ": " + $last_update | Out-File -FilePath C:\temp\log.txt -Append #запись информация в лог
  }
  catch {
    $ex = $Error[0].Exception.Message #записываем ошибку в переменную
    #Write-Host $server ": " $ex -ForegroundColor Red #вывод информации в консоль
    $server + ": " + $ex | Out-File -FilePath C:\temp\log.txt -Append #запись ошибку в лог
  }
}

Отправлено: 16:06, 29-12-2015 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Дата последнего обновления серверов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - Windows 8.1 - при запуске чёрный экран после последнего обновления xXx34rus Microsoft Windows 8 и 8.1 2 18-10-2015 02:34
Интерфейс - [решено] После последнего обновления не полностью прорисовывается панель задач Wusa Microsoft Windows 7 5 22-07-2015 21:42
PowerShell - MS SQL / ORACLE статус бэкапа и дата последнего бэкапа отправить на почту AZABAZA Скриптовые языки администрирования Windows 4 27-04-2015 12:45
PowerShell - [решено] Дата последнего логона пользователя RedR Скриптовые языки администрирования Windows 1 25-12-2014 12:55
[решено] Дата последнего входа в систему Solitude Microsoft Windows 2000/XP 1 15-07-2006 02:16




 
Переход