根据输入构建命令参数

时间:2013-04-16 18:06:23

标签: powershell windows-server-2008 group-policy

我正在尝试构建一个脚本,该脚本将从CSV导入数据并根据填写的数据处理命令。小例子:

使用以下标题格式化的CSV

Name TargetOU Description ManagingGroup Permission

其中一些是必需的,一些是可选的。

使用参数很容易实现,但这是尝试在没有用户交互的情况下运行。如果我只有Name和可选的Description

,则下面的代码可以解决问题
If ($_.Description -ne $null) {
    New-GPO -Name $_.Name -Description $_.Description }
ElseIF ($_.Description -eq $null) {
    New-GPO -Name $_.Name }

如果我想让它变得更复杂,我最终必须为所需的和可选参数的每种可能组合编写If语句:

If ($_.Description -ne $null -and $_.TargetOU -ne $null) {
    New-GPO -Name $_.Name -Description $_.Description | New-GPLink -Target $_.TargetOU }
ElseIf ($_.Description -eq $null -and $_.TargetOU -ne $null) {
    New-GPO -Name $_.Name | New-GPLink -Target $_.Target }

等......为每种可能的组合。

在没有100个If语句的情况下,是否有更简单的方法来构建此命令? CSV可能包含10个选项,可根据用户想要完成的内容填写。

2 个答案:

答案 0 :(得分:2)

您只需要分离强制参数和可选参数。使用默认值初始化可选参数,如果缺少必需参数,则只需取消该行的操作。

答案 1 :(得分:1)

你可以使用splatting。在splatting中,将哈希表传递给函数,该函数被解释为参数。

例如:

$params=@{Name='Fred'}

my-func @params

通过使用splatting,你不必拥有一堆嵌套的if-then结构,只需构建参数列表并发送它。