在Powershell脚本中添加两个选项

时间:2018-10-03 22:54:36

标签: powershell powershell-v2.0

请原谅我仍在学习Powershell,所以这可能是一个愚蠢的问题,但是如何为.ps1添加选项? 例如,我目前有一个脚本来下载文件并运行它,但是如果它无法运行,它将在本地查找文件然后运行它。我如何分开这两个,以便用户可以选择下载还是直接在本地运行? 例如。: './script.ps1本地' 将在本地查找文件并运行 './script.ps1外部' 将下载文件并运行它 我不确定函数是否适合此操作,因为脚本的重点不是要将其导入模块,我只是想要它,因此您可以运行.ps1。

2 个答案:

答案 0 :(得分:1)

在文件顶部添加;

Param(
  [Parameter(Position=1)][string]$option
)

Switch ($option)
{
   'local' { RunLocal }
   'other' { RunOther }
   default { RunDefault }
}

看起来像

Param(
  [Parameter(Position=1)][string]$option
)

function RunLocal {
 Write-Host "RunLocal"
}

function RunOther {
 Write-Host "RunOther"
}

function RunDefault {
 Write-Host "RunDefault"
}

Switch ($option)
{
   'local' { RunLocal }
   'other' { RunOther }
   default { RunDefault }
}

答案 1 :(得分:1)

如果您需要将传递给参数的值约束为一组固定值,请使用 [ValidateSet(...)]参数属性

[CmdletBinding()]
Param(
  [ValidateSet('Local', 'External')]
  [string] $Option = 'Local'
)

Switch ($Option)
{
   'local' { 
      # ...
      break
    }
   'external' { 
      # ... 
      break
   }
}

上面的默认值-Option(因此参数变量$Option)设为'Local',同时允许将LocalExternal显式传递给{{1 }}-不允许使用其他值。