Хорошо, таким образом, я переделывал этого некоторое время и получил его работа. Сначала, было похоже, что сценарий работал как ожидалось, за исключением того, что это покажет сообщение об ошибке в консоли каждый раз, когда reg команда запроса не нашла reg ключ, который это искало. Это сам по себе не было проблемой, но после этого я буду ожидать, что это будет продолжаться и работать if
блок кода - вместо этого это, казалось, пропускало прямо на обработке следующего объекта в foreach-object
очередь от конвейера. Я не уверен, что продолжалось там, но в конечном счете я получил код до такой степени, когда, он оценивал все правильно и пытался работать if
блок кода. На этот раз я получал следующую ошибку каждый раз, когда хит сценария Out-Host
оператор: Out-Host : A positional parameter cannot be found that accepts argument mystringvar
. По-видимому, существует что-то об использовании Out-Host
это вызывает ForEach-Object
думать, что блок кода обработки сделан. Так или иначе я преодолел это путем переключения на использование Write-Output
вместо этого. Вот заключительный рабочий код:
import-module bsonposh
add-pssnapin Quest.ActiveRoles.ADManagement
get-qadcomputer -sizelimit 0 -searchroot 'OU=MyComputers,DC=MyDomain,DC=lcl' | test-host -property name |ForEach-Object -process {
$targnm = $_.name
$tststr=(reg query "\\$targnm\HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion)
if(-not($tststr |select-string -simplematch '1.6.0_20'))
{
$mssg="Updating to JRE 6u20 on $targnm"
Write-Output $mssg
Out-File -filepath c:\install_jre_log.txt -inputobject $mssg -Append
cmd /c \\myfileserver\apps\java\installjreremote.cmd $targnm
}
else
{
$mssg ="JRE 6u20 found on $targnm"
Write-Output $mssg
Out-File -filepath c:\install_jre_log.txt -inputobject $mssg -Append
}
}
Я думаю, что "tee" - правильная команда для этого - к сожалению, я не знаю точного синтаксиса. Ти записывает свой ввод в стандартный вывод и в файл.