Попытка удаленного использования PsTools (PsExec) для возврата результата в Powershell - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь запустить скрипт удаленно, который дважды проверит правильность IP-адреса, используя PsExec в Powershell.Проблема в том, что я хочу, чтобы он только возвращал результат True или False и не отображал никаких других строк в Powershell.

Я также пытался запускать фоновые задания, но, похоже, это не получалось, потому что когда я это делаю, это просто ничего не дает.

function remoteIPTest($Computer) {

    $result = & cmd /c PsExec64.exe \\$Computer -s cmd /c "ipconfig"

        if ($result -like "*10.218.5.202*") {
            return "True"
        }   
}

$Computer = "MUC-1800035974"
remoteIPTest $Computer

После запуска я просто хочузаявление на возврат:

True

Вместо возврата:

Starting cmd on MUC-1800035974... MUC-1800035974...
cmd exited on MUC-1800035974 with error code 0.
True

1 Ответ

0 голосов
/ 31 января 2019

psexec выводит свои сообщения о состоянии на stderr , который присваивается переменной, такой как $result =, не , поэтому эти сообщения по-прежнему выводятся на экран.

Переменные только захватывают stdout вывод из внешних программ, таких как psexec, что в данном случае является выводом ipconfig.

Следовательно, ответ на suppress stderr , который вы можете сделать с 2>$null (2 - номер потока ошибок PowerShell, на который отображается stderr) - см. Перенаправление ошибки / вывода в NULL .
Обратите внимание, что это также подавит истинные сообщения об ошибках.

Кроме того, вызовы cmd /c не нужны, поскольку вы можете использовать psexec для прямого вызова других программ, если у вас правильно настроен путь.

Вместо этого:

$result = & cmd /c PsExec64.exe \\$Computer -s cmd /c "ipconfig"

Сделайте это:

$result = PsExec64.exe \\$Computer -s ipconfig 2>$null

Надеюсь, это поможет.

...