【问题标题】:PowerShell troubles - Using Functions with ParametersPowerShell 问题 - 使用带参数的函数
【发布时间】:2017-12-27 17:55:38
【问题描述】:

我正在开发一个脚本,该脚本将用于在 PowerShell 中禁用人们的 AD 帐户以及执行许多其他功能。

我希望脚本提供批量模式或单一模式的选项。例如,一旦您运行脚本,就会强制执行一个参数,询问您是要以单一模式还是批量模式运行它。如果选择批量模式,那么它应该加载已经定义的函数BULKmode并导入一个csv。

如果选择了单模式,那么它会以单模式运行并选择函数Singlemode

然而,PowerShell 的问题在于参数和函数都位于脚本的顶部。我已经尝试了两个命令,当我将函数放在参数之前时收到的错误是有

没有参数这样的术语

当我把参数放在第一位时,它会加载参数,然后说

没有这个功能

下面是sn-p

Param(
[Parameter (Mandatory=$true)]
[String]$PressYforBulkMode)

If ($PressYforBulkMode -eq "Y") {
Bulkmode
}

Else {
Singlemode
}

【问题讨论】:

  • 希望这是有道理的,如果您需要更多信息,请告知
  • 这听起来像是用两个参数集更好地实现的东西。一个参数集采用SamAccountName 的数组(可能),除此之外。除其他外,另一个参数集采用单个文件名(可能)。

标签: function powershell parameters


【解决方案1】:

最好的解决方案是拆分你的函数,这样你就可以使用循环来使用执行实际工作的函数。

这样做的方法是将您的信息作为数组传递到主函数中。如果您有一个条目或多个条目,则无关紧要。然后使用 foreach 循环遍历数组并调用实际禁用 AD 帐户的函数以及所需的任何其他操作。

这意味着您不必检查“批量”或“单一”模式。它会起作用的。

例子:

function MainFunction
{
param (pass in array here)

    foreach(entry in $myArray)
    {
        DoWork $entry
    }
}

function DoWork
{
    //do things here
}

【讨论】:

    【解决方案2】:

    您似乎想提示用户输入。 我更喜欢使用参数,但如果你想提示输入,试试这个:

    Function BulkMode
    {
        "Running BulkMode"
    }
    
    Function SingleMode
    {
        "Running SingleMode"
    }
    
    
    $Input = Read-Host "Press Y for BulkMode"
    
    if ($Input -eq "Y")
    {
        Bulkmode
    }
    
    else
    {
        SingleMode
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多