2016-08-25 5 views
1

Мой сценарий заключается в следующемВыполнение динамической команды в PowerShell

New-Alias -Name sqlpackage -Value "C:\Program Files (x86)\Microsoft SQL 
Server\130\DAC\bin\sqlpackage.exe" 
$command = "sqlpackage /Action:Publish /SourceFile:$sourceFile /tcs:$TargetConnectionString /p:ScriptRefreshModule="+"$ScriptRefreshModule"+" /p:ScriptNewConstraintValidation="+"$ScriptNewConstraintValidation"+ ` 
" /p:GenerateSmartDefaults="+"$GenerateSmartDefaults"+" /p:BlockOnPossibleDataLoss="+"$BlockOnPossibleDataLoss"+" /p:BackupDatabaseBeforeChanges="+"$BackupDatabaseBeforeChanges"+ ` 
" /v:ErrorEmailRecipients="+"$ErrorEmailRecipients"+" /v:DeploymentEnvironment="+"$environment"+ $additionalVariables 
& $command 

Это терпит неудачу с sqlpackage Командлет не найден. Я попытался ввести весь путь EXE, вместо того, чтобы использовать псевдоним, который также не изменил результат.

Я также пробовал Invoke-Command, Invoke-Item и Invoke-Expression, все не удалось запустить. Я думаю как сценарий bash, который может быть моим падением. Что делать, чтобы заставить эту команду работать?

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

ответ

0

Я использовал часть вашего ответа и отошел от Invoke и &, и она работала. Также работает часть New-Alias.

New-Alias -Name sqlpackage -Value "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\sqlpackage.exe" 
sqlpackage ` 
    /Action:Publish ` 
    /SourceFile:$sourceFile ` 
    /tcs:$TargetConnectionString ` 
    /p:ScriptRefreshModule=$ScriptRefreshModule ` 
    /p:ScriptNewConstraintValidation=$ScriptNewConstraintValidation ` 
    /p:GenerateSmartDefaults=$GenerateSmartDefaults ` 
    /p:BlockOnPossibleDataLoss=$BlockOnPossibleDataLoss ` 
    /p:BackupDatabaseBeforeChanges=$BackupDatabaseBeforeChanges ` 
    /v:ErrorEmailRecipients=$ErrorEmailRecipients ` 
    /v:DeploymentEnvironment=$environment.LifeCycle ` 
    $additionalVariables 
+0

Также, если вам нужно несколько переменных, вы можете сделать '$ дополнительныеVariables ="/v: Products = "Products/v: ClearData =" no "', а затем '$ AdditionalVariables.split ('')', который получит все. –

0

New-Alias не работает, поскольку он определяет псевдонимы для существующих командлетов. Эта функция работает для меня (как на here и here):

function sqlpackage(
    $sourceFile ` 
    ,$TargetConnectionString ` 
    ,$ScriptRefreshModule ` 
    ,$ScriptNewConstraintValidation ` 
    ,$GenerateSmartDefaults ` 
    ,$BlockOnPossibleDataLoss ` 
    ,$BackupDatabaseBeforeChanges ` 
    ,$ErrorEmailRecipients ` 
    ,$environment ` 
    ,$additionalVariable1 ` 
    ,$additionalVariable2 ` 
    ,$additionalVariable3 ` 
) 
    { 
    $command = "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" 

    &$command ` 
     /Action:Publish ` 
     /SourceFile:$sourceFile ` 
     /tcs:$TargetConnectionString ` 
     /p:ScriptRefreshModule=$ScriptRefreshModule ` 
     /p:ScriptNewConstraintValidation=$ScriptNewConstraintValidation ` 
     /p:GenerateSmartDefaults=$GenerateSmartDefaults ` 
     /p:BlockOnPossibleDataLoss=$BlockOnPossibleDataLoss ` 
     /p:BackupDatabaseBeforeChanges=$BackupDatabaseBeforeChanges ` 
     /v:ErrorEmailRecipients=$ErrorEmailRecipients ` 
     /v:DeploymentEnvironment=$environment ` 
     $additionalVariable1 ` 
     $additionalVariable2 ` 
     $additionalVariable3 ` 
} 

sqlpackage ` 
    $sourceFile ` 
    $TargetConnectionString ` 
    $ScriptRefreshModule ` 
    $ScriptNewConstraintValidation ` 
    $GenerateSmartDefaults ` 
    $BlockOnPossibleDataLoss ` 
    $BackupDatabaseBeforeChanges ` 
    $ErrorEmailRecipients ` 
    $environment ` 
    $additionalVariable1 ` 
    $additionalVariable2 ` 
    $additionalVariable3 
+0

Сложная часть, которая заставила меня сделать ее строкой, это '$ дополнительные переменные'. Для каждого источника разные. т.е. '$ дополнительныеVariables ="/v: ClearData = "no" 'в одном и' $ дополнительныеVariables = "/ v: Продукты =" Продукты "' в другом и т. д. –

+0

Ну, если существует ограниченное количество возможных дополнительных флагов (скажем, 3) вы все еще используете этот синтаксис вызова (без построения строки). См. Обновленный пример выше. Если во время конкретного вызова есть только один дополнительный флаг - установите флаги 2 и 3 в пустую строку. –

Смежные вопросы