无法从命令外壳提示符传递切换参数

时间:2016-11-25 07:13:29

标签: sql powershell command-line

我有一个PowerShell脚本,它有几个参数,包括一个switch参数。

PowerShell中执行的以下命令按预期工作:

  \\localhost\Test\Code\DataPullResults.ps1 -TestName 'Test survey' -QUser 'sdasch@gmail.com' -SqlServerInstanceName localhost -SqlDatabaseName MyDatabase -Load:$True -ErrorAction Continue;

但是当我从命令提示符运行相同的命令时,我收到一个错误:

\\localhost\Test\Code\DataPullResults.ps1 : Cannot process
argument transformation on parameter 'FullLoad'. Cannot convert value
"System.String" to type "System.Management.Automation.SwitchParameter".
Boolean parameters accept only Boolean values and numbers, such as $True,
$False, 1 or 0.

以下是我用于从命令提示符执行的命令:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe powershell.exe -ExecutionPolicy ByPass -File \\localhost\Test\Code\DataPullResults.ps1 -TestName 'Test survey' -QUser 'sdasch@gmail.com' -SqlServerInstanceName localhost -SqlDatabaseName MyDatabase -Load:$True -ErrorAction Continue;

此处Load是切换参数。

1 个答案:

答案 0 :(得分:0)

当使用 - File参数(source)时,powershell.exe无法完全评估脚本参数。因此,您应该使用-command代替:

powershell.exe -Command \\localhost\Test\Code\DataPullResults.ps1 -TestName 'Test survey' -QUser 'sdasch@gmail.com' -SqlServerInstanceName localhost -SqlDatabaseName MyDatabase -Load:$True -ErrorAction Continue;

但除此之外,请注意您不必将布尔值传递给开关值。这意味着,如果您省略-Load,则$load将设置为$false。如果您通过-Load(不包含$true),则会将其设置为$true

Aslo,您是否注意到,您正在调用powershell.exe两次?

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe powershell.exe