My script is as follows
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
This fails with sqlpackage cmdlet not found. I tried putting the entire exe path to command instead of using alias which didnt change the outcome as well.
I also tried Invoke-Command
, Invoke-Item
and Invoke-Expression
, all failed to run as well. I am thinking like bash script which might be my downfall. What should I do to make this command work?
It needs to be dynamic since the variables are changing according to the source files.
New-Alias
wont work as it defines aliases for existing cmdlets. This function worked for me (as per here and 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
I used a part of your answer and moved away from Invoke and & and it worked. Also New-Alias part is working too.
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.