我正在尝试构建一个脚本,该脚本将从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个选项,可根据用户想要完成的内容填写。
答案 0 :(得分:2)
您只需要分离强制参数和可选参数。使用默认值初始化可选参数,如果缺少必需参数,则只需取消该行的操作。
答案 1 :(得分:1)
你可以使用splatting。在splatting中,将哈希表传递给函数,该函数被解释为参数。
例如:
$params=@{Name='Fred'}
my-func @params
通过使用splatting,你不必拥有一堆嵌套的if-then结构,只需构建参数列表并发送它。