簡體   English   中英

在PowerShell中執行動態命令

[英]Executing dynamic command in 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 cmdlet,則會失敗。 我嘗試將整個exe路徑放到命令而不是使用也沒有改變結果的別名。

我也嘗試過Invoke-CommandInvoke-ItemInvoke-Expression ,所有這些都無法運行。 我在想bash腳本可能是我的垮台。 我該怎么做才能使這個命令工作?

它需要是動態的,因為變量根據源文件而變化。

New-Alias不會工作,因為它定義了現有cmdlet的別名。 這個功能對我有用(按此處此處 ):

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 

我使用了你的一部分答案,離開了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM