繁体   English   中英

Powershell中的开关参数

[英]Switch Parameter in Powershell

我一直在寻找,但我似乎无法找到让这项工作按照我想要的方式进行的方法。

我是 PS 参数的新手,有一些我认为应该相当简单的东西......我希望能够运行脚本并检测开关是否存在。 如:

myscript.ps1 -Deploy

-要么-

myscript.ps1

代码,我一直在玩:

function start-script {
    param (
        [parameter()]
        [switch]$Deploy
    )
    if ($Deploy.IsPresent) {
        Write-Host "True"
    }
    else {
    Write-Host "False"
    }
}
    
start-script

运行时,这不会返回任何错误,但也不会 output 写入主机的结果。 它基本上什么都不做。 我做错了什么,我将如何获得正确的输出?

谢谢。

编辑:添加我正在经历的截图,因为一些人说它应该可以工作或可以删除.isPresent

在此处输入图像描述

有道理,这是因为在您的 function 调用(脚本的最后一行)中,您从未给 function 任何参数。 如果你想从外部源向你的 ps1 脚本传递一个参数,你应该在脚本的顶部添加一个param(...)块。 我正在使用您已有的代码,但在这种情况下,我认为根本不需要 function。

代码可以简化为:

param (
    [switch]$Deploy
)

if ($Deploy) {
    Write-Host "True"
}
else {
    Write-Host "False"
}

但是如果你想使用 function:

param (
    [switch]$Deploy
)

function Start-Script {
    param (
        [switch]$Deploy
    )
     
    if ($Deploy) {
        Write-Host "True"
    }
    else {
        Write-Host "False"
    }
}

Start-Script @PSBoundParameters
  • 来自 PowerShell:
PS /> .\script.ps1
False

PS /> .\script.ps1 -Deploy
True
  • 来自 CMD:
D:\> powershell -File script.ps1
False

D:\> powershell -File script.ps1 -Deploy
True

编辑

  • 一些上下文, [switch]$Deploy仅存在于 function 的 scope 中,这就是我们在脚本顶部添加param(...)块的原因。
  • 使用$PSBoundParameters展开可以使用多个函数。

例子:

param (
    [switch]$Deploy,
    [string]$Name
)

function Start-Script {
    param (
        [switch]$Deploy
    )

    "Deploy switch is: {0}" -f $Deploy.IsPresent
}

function SayHello {
    param(
        [string]$Name
    )

    "Hello $Name!"
}

# This is what @mclayton was referring to in his comment.
# If the Argument $Name is called:
if($PSBoundParameters.ContainsKey('Name'))
{
    # Call the function
    SayHello @PSBoundParameters
}

Start-Script @PSBoundParameters
  • 来自 PowerShell:
PS /> .\script.ps1 -Name Santiago -Deploy
Hello Santiago!
Deploy switch is: True

更简单:

function Test {
param (
    [switch]$Deploy
)
$Deploy.IsPresent
}

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM