2

我正在尝试构建一个脚本,该脚本将从 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 个选项,可根据用户想要完成的内容填写。

4

2 回答 2

2

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

于 2013-04-16T18:50:42.823 回答
1

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

例如:

$params=@{Name='Fred'}

my-func @params

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

于 2013-04-16T20:01:34.030 回答