详细的偏好作为与空间的争论

时间:2017-09-29 11:34:45

标签: powershell

我有一个案例,其中参数及其值存储在数据库中并传递到由空格分隔的workflow。像这样:

Foo-Bar -hostName contoso -ipAddress 127.0.0.1 -userPassword passw0rd

我现在正尝试使用此格式设置详细的首选项 true ,但是这个错误:

Foo-Bar -hostName contoso -ipAddress 127.0.0.1 -userPassword passw0rd -Verbose $true

正确的格式当然是-Verbose:$true,但对于我的用例,值必须用空格分隔。我也试过-Verbose '$:true',但这不起作用。

这可能吗?

2 个答案:

答案 0 :(得分:1)

不,你不能。

这很简单。 Switch参数期望参数仅使用参数名称定义,或使用:来设置值。

然而,你可以做什么。

如果你的工作流程可以接受不传递任何参数(不是空,不是空字符串,不是0,只是......没有或空格,你可以正常使用switch参数Foo-Bar -verbose

否则,您可以使用布尔类型添加函数参数,并自行设置详细操作首选项。

 If ($EnableVerbose) {$VerbosePreference =  [System.Management.Automation.ActionPreference]::Continue}

这是一个简单的例子。

function Foo-Bar() {

[cmdletbinding()] 
 Param([string]$File,[Boolean]$EnableVerbose)


If ($EnableVerbose) {$VerbosePreference =  [System.Management.Automation.ActionPreference]::Continue}
   Write-Verbose 'Hi, My name is Samantha. I grew up in a small city in the north of Carolina. At age 5, I was expert at finding my way back to home after daddy left me alone in the wood. At that age, it happened several time already. It wasn''t the first time he did that to me and it wouldn''t be the last !...'
}

Foo-Bar -File 'MyFile.ext' -EnableVerbose $true

答案 1 :(得分:1)

你能用splatting吗?将参数传递给splat,$ param2现在用空格分隔。

function Test ([string]$name, [switch]$switch){
    if($switch){
        write-host "$name the switch is on"
    } else {
        write-host "$name the switch is off"
    }
}

$param1 = 'steve'
$param2 = $false

$splat = @{ 'name' = $param1;  'switch' = $param2; }

Test @splat