Foreach-объект Powershell, с если оператор, не работающий - справка!

Попытайтесь удалить запаздывающую наклонную черту на строках ServerName.

1
задан 3 May 2010 в 22:27
2 ответа

Хорошо, таким образом, я переделывал этого некоторое время и получил его работа. Сначала, было похоже, что сценарий работал как ожидалось, за исключением того, что это покажет сообщение об ошибке в консоли каждый раз, когда 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
    }
}
2
ответ дан 3 December 2019 в 22:34

Вы могли попытаться упростить if кому:

if($tststr -notmatch '1.6.0_20')

видеть, помогает ли это, но я ничего не вижу, очевидно, неправильно, если это действительно никогда не оценивает к истинному. Так else пункт всегда выполняется?

0
ответ дан 3 December 2019 в 22:34
  • 1
    That' s не то же как в вопросе с тех пор you' ре, теперь делающее соответствие регулярного выражения и потребность выйти . †“-like, могло бы быть соответствующей альтернативой. –  Joey 2 May 2010 в 12:06
  • 2
    - notlike работал бы, если бы я просто смотрел на простую строку, но команда reg.exe на самом деле возвращает массив строк. Так, я придерживался своего исходного использования Избранной Строки. –  Dmart 3 May 2010 в 22:06

Теги

Похожие вопросы