OK, então eu tenho mexido com esse aqui um pouco e consegui trabalhar. No início, parecia que o script estava sendo executado conforme o esperado, exceto que mostraria uma mensagem de erro no console sempre que o comando reg query não encontrasse a chave reg que estava procurando. Isso em si não era um problema, mas depois disso eu esperava que continuasse e executasse o bloco de código if
- em vez disso, ele parecia estar pulando direto para o processamento do próximo objeto na fila foreach-object
do pipeline. Eu não tenho certeza do que estava acontecendo lá, mas eventualmente consegui o código no ponto em que ele estava avaliando tudo corretamente e tentando executar o bloco de código if
. Desta vez, eu estava recebendo o seguinte erro sempre que o script atingia uma instrução Out-Host
: Out-Host : A positional parameter cannot be found that accepts argument mystringvar
. Aparentemente, há algo sobre o uso de Out-Host
que faz com que ForEach-Object
pense que o bloco de código de processamento está pronto. De qualquer forma, eu superei isso mudando para usar Write-Output
. Aqui está o código final de trabalho:
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
}
}