2014-11-13 5 views
0

Я новичок в написании сценариев PowerShell. Мне задали задачу понять, что делает скрипт PowerShell.PowerShell Script "&" "&&" "||" Операторы

Я застрял в следующей строке:

& $basePath\CPAU.exe -u $($sqlUser.UserName) -p $(ConvertTo-UnsecureString $sqlUser.Password) -ex "cmd /c (sqlcmd $($sqlArgs -join ' ') > $outputFile && echo TRUE > SUCCESS) || echo TRUE > FAILURE" -wait -nowarn -hide 

Такое ощущение, что сценарий пытается выполнить какую-то команду SQL. Тем не менее, я не уверен, что должен начинаться символ «&».

Кроме того, может ли CPAU.exe быть внешним в basepath? И что делать -p, -u и -ex обеспечить соблюдение?

Следующая строка:

if (!(Test-Path .\SUCCESS)) 
{ 
    #some more code 
} 

В выше, если заявление, что это .\SUCCESS значит? Не работает Test-Path на каком-то пути, чтобы проверить, существует ли он или нет?

+0

'-u' имя пользователя,' -p' пароль и '-ex', вероятно, выполняются? – Cyclonecode

+0

Спасибо, не могли бы вы написать ответ, объясняющий всю строку? Я до сих пор не понимаю, что такое "||" for и TRUE> FAILURE? – nitinsh99

+0

Пожалуйста, примите во внимание причины пробоя. – nitinsh99

ответ

5

& является PowerShell call operator, который "выполняет команду, сценарий, или блок сценария". В вашем случае это запуск внешней команды CPAU.exe, расположенной в $basePath с параметрами -u, -p, -ex, -wait, -nowarn и -hide. Эта команда запускает другую команду (аргумент параметра -ex):

cmd /c (sqlcmd $($sqlArgs -join ' ') > $outputFile && echo TRUE > SUCCESS) || echo TRUE > FAILURE 

Вышеприведенные использует cmd.exe (командная строка Windows), чтобы запустить sqlcmd $($sqlArgs -join ' '), перенаправить вывод в файл $outputFile, и писать «TRUE» либо файл SUCCESS, если команда выполнена успешно или в файл FAILURE в противном случае.

|| и && являются cmd операторами для цепочки команд. || означает «выполнить следующую команду, если предыдущая команда не удалась». && означает «выполнить следующую команду, если предыдущая команда выполнена успешно».

0
& $basePath\CPAU.exe -u $($sqlUser.UserName) -p $(ConvertTo-UnsecureString $sqlUser.Password) -ex "cmd /c (sqlcmd $($sqlArgs -join ' ') > $outputFile && echo TRUE > SUCCESS) || echo TRUE > FAILURE" -wait -nowarn -hide 

Это некоторый Powershell код, вызывая исполняемый CPAU.exe, хранящийся в $ BasePath проходящего имя пользователя и пароль и сделать его выполнить некоторый CMD код:

Cmd/с (SQLCMD $ (sqlArgs $ - join '')> $ outputFile & & echo TRUE> SUCCESS) || echo TRUE> FAILURE

cmd выполняет команду SQL, заданную некоторые предопределенные $ sqlArgs, соединенные пробелом. Вся команда перенаправляется на $ outputFile, которая также должна быть предопределена.

Если вывод команды И возможность Echo TRUE на консоли CMD истинна, создается файл SUCCESS, получающий перенаправленный вывод. Иначе, если что-то не удастся, но Echo TRUE произойдет, файл FAILURE будет создан.

Все это ждет все, чтобы быть полным, не дает никаких предупреждений и ... скрывает ....

Кто это написал, нужен отдых.