ここでは、スクリプトの実行時にPRTGが解析できるXML出力を生成しています。このスクリプトは、最新のWindows更新プログラムのインストールがいつ発生したかを判断することを目的としています。すべてのリモートサーバーでうまく動作しますが、ローカルマシン上で実行されている場合、正しい$値が得られません。整数ではなくヌルになります。私は、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