【问题标题】:Powershell Argument List Based On Condition基于条件的Powershell参数列表
【发布时间】:2013-02-01 03:50:13
【问题描述】:

我想根据 Switch Condition 做一个参数 Mandatory 有点像

param(
[string]$para1,
[switch]$choice="Upgrade"
[string]$paraUpg 
[string]$paraInstall 
) 

现在,如果选择是 Upgrade 我想让 $paraUpg 成为强制性的,如果 $choiceInstall 那么 $paraInstall 必须是强制性的

【问题讨论】:

  • 请告诉我们你做了什么。
  • 其实我现在想要类似 param( [string]$para1, [switch]$choice="Upgrade" [string]$paraUpg [string]$paraInstall ) 如果选择是升级我想将 $paraUpg 设为强制,如果 Choice 是 Install,则 $paraInstall 必须是强制的
  • 您可以将此新信息添加到您的问题中,并且它符合您已经尝试过并且人们不会拒绝投票的标准(也许)

标签: powershell parameters powershell-2.0 command-line-arguments


【解决方案1】:

您可以尝试以下方法。设置所有参数,如果$choice="Upgrade"$paraUpg 为空或为空,则抛出异常。对$choice="Install" 重复同样的操作。然后,您可以根据选择的参数有条件地选择参数检查后要执行的操作。

param(
    [string]$para1,
    [string]$choice="Upgrade",
    [string]$paraUpg,
    [string]$paraInstall
    )

#check if choice is "Upgrade" and paraUpg is empty
if(($choice -eq "Upgrade") -and ([string]::IsNullOrEmpty($paraUpg)))
{
    throw "paraUpg is a required parameter"
}
#check if choice is "Install" and paraInstall is empty
elseif (($choice -eq "Install") -and ([string]::IsNullOrEmpty($paraInstall)) )
{
    throw "paraInstall is a required parameter"
}

【讨论】:

    【解决方案2】:

    首先是它的PowerShell,它与 Windows 7 一起作为其添加的实用程序之一。

    到目前为止,你还没有详细说明你做了什么。我怀疑你想要这样的东西。

    在您的PowerShell 脚本中最好在顶部声明参数。

    param([string]$UserName, [string]$Password, [string]$MachineName)
    

    在需要时在您的 powershell 脚本中使用这些参数。现在创建一个批处理文件,您可以在其中将值传递给这些参数。

    @powershell -ExecutionPolicy Unrestricted -FILE YourPowerShellScript.ps1 "UserName" "Password" "MachineName"
    

    我在批处理文件中指定了策略权限,因此您不必每次在不同机器上运行脚本时都提及。希望对您有所帮助。

    【讨论】:

    • 我的问题是,当从 Batch 调用 Powershell 脚本时,它要求继续,因为脚本未签名。我想绕过该确认
    • 在我的回复中,我在参数批处理文件中提到了ExecutionPolicyUnrestricted 的权利,它将处理您的案例。您可以将其设置为Set-ExecutionPolicy AllSigned
    猜你喜欢
    • 2016-01-15
    • 2020-04-06
    • 1970-01-01
    • 2015-04-05
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多