PowerShell: как включить в Аргумент одинарные кавычки? - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы передать аргумент, включающий '' одинарные кавычки для PowerShell Invoke-Sqlcmd, следующим образом.

Пакет:

set table_name=XXXX
set extract_condition=start_dt='2016-10-01'
%PS_EXE%  -ExecutionPolicy ByPass  %PS_DIR%\Export_S3.ps1 -StrTableName %table_name% -StrCondition %extract_condition%

PowerShell:

$StrQry="select * from " + $StrTableName + " where " + $StrCondition + ";"
Invoke-Sqlcmd -Query $StrQry

Возвращает ошибку операнда, «дата не совместима с int», возможно, из-за того, что одинарная кавычка не отправлена ​​в PowerShell.(Это может работать, если у $ StrCondition нет синброквоты)

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

Буду признателен, если вы дадите нам какой-нибудь совет.Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

Чтобы передать литерал аргументов в сценарий, используйте -File вместо (подразумеваемого) параметра -Command;Кроме того, для безопасности сделайте двойные кавычки:

%PS_EXE% -ExecutionPolicy ByPass -File "%PS_DIR%\Export_S3.ps1" -StrTableName "%table_name%" -StrCondition "%extract_condition%"

В качестве отступления: в PowerShell Core , -File теперь используется по умолчанию.


Если вы используете -Command (возможно, по умолчанию в Windows PowerShell), передаваемые аргументы интерпретируются PowerShell так же, как и внутри самого PowerShell, и токена, такого как start_dt='2016-10-01', то есть один без внешних кавычек , просто содержит встроенные одинарные кавычки лишенные , которые вы можете проверить из самого PowerShell:

PS> Write-Output start_dt='2016-10-01'
start_dt=2016-10-01  # !! single quotes were STRIPPED.

При включении токена как целого в "..." помогло бы в этом случае, как правило, предпочтительнее использовать -File, если вы намерены передать литерал значений в сценарий, то есть значения, которые не должны интерпретироваться PowerShell при получении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...