Что я делаю здесь, это генерация вывода XML, которое PRTG может анализировать при запуске скрипта. Сценарий предназначен для определения того, когда произошла последняя установка обновления Windows. Он отлично работает для всех удаленных серверов, но когда он запускается на локальном компьютере, он не получает правильное значение $. Он заканчивается как null, а не целое число. Я предполагаю, что у меня что-то отсутствует в том, как Invoke-Command работает на локальном сервере и удаленном сервере. Кто-нибудь возражал бы, показывая мне, где я совершил ошибку?Блок сценария Invoke-Command возвращает переменную с удаленных серверов, но не с локального сервера
$ErrorActionPreference = "Stop"
#Get a list of servers
$servers = Get-ADComputer -SearchBase 'DC=<removed>,DC=int' -Filter {OperatingSystem -NotLike "Windows Server 2003*"} | Sort Name | Select -ExpandProperty Name
$value = ""
#This is the start of the XML output that PRTG will be parsing when the code runs
Write-Host "<prtg>"
#Loop through all servers and attempt to get a value for last windows update install.
foreach($server in $servers) {
Write-Host "`t<result>`n`t<channel> $server </channel>"
try {
Invoke-Command -ComputerName $server -ScriptBlock {
$props = @{
LastDetect = Get-ItemProperty -Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Detect’ -Name LastSuccessTime | select -ExpandProperty LastSuccessTime
LastInstall = Get-ItemProperty -Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install’ -Name LastSuccessTime | select -ExpandProperty LastSuccessTime
}
$stringdato = $props.LastInstall;
$DATO = ([datetime]::ParseExact($stringdato, "yyyy-MM-dd HH:mm:ss", $null))
$today = (Get-Date)
$timeout = ($today - $DATO)
$value = $timeout.Days
}
} catch {
# set value to 999 if there is a problem, for PRTG's error threshold.
$value = 999
}
Write-Host "`t<value>$value</value>"
Write-Host "`t<CustomUnit>days</CustomUnit>`n`t<LimitMaxError>90</LimitMaxError>`n`t<LimitMaxWarning>60</LimitMaxWarning>`n`t<LimitMode>1</LimitMode>`n`t</result>`n"
}
Write-Host "</prtg>"
Там нет ничего плохого с удаленным доступом в локальную систему как концепция. Могут быть ситуации, когда это не имеет смысла, но нет ничего особенного в удалении на локальную машину, что плохо. Есть также ситуации, когда это имеет большой смысл. – briantist
@briantist: если он есть, вам нужно добавить локальную систему в список TrustedHosts, а также я считаю, что проверка должна помочь. –
Это не обязательно так. Необходимо удалить удаленные, но не доверенные хосты в среде домена. – briantist