Function PowerShell故障-使用带参数的函数

Function PowerShell故障-使用带参数的函数,function,powershell,parameters,Function,Powershell,Parameters,我正在开发一个脚本,它将用于禁用人们在PowerShell中的广告帐户以及执行许多其他功能 我希望脚本提供批量模式或单一模式的选项。例如,只要运行脚本,就会强制执行一个参数,询问您是要在单一模式还是批量模式下运行脚本。如果选择批量模式,则应加载已定义的功能BULKmode并导入csv 如果选择了Single mode(单一模式),则它将在Single mode(单一模式)下运行并选择Singlemode(单一模式)功能 但是,PowerShell的问题是,参数和函数都位于脚本的顶部。我已经尝试了

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

我希望脚本提供批量模式或单一模式的选项。例如,只要运行脚本,就会强制执行一个参数,询问您是要在单一模式还是批量模式下运行脚本。如果选择批量模式,则应加载已定义的功能BULKmode并导入csv

如果选择了Single mode(单一模式),则它将在Single mode(单一模式)下运行并选择Singlemode(单一模式)功能

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

没有param这样的术语

当我先输入参数,然后它加载参数,然后说

没有这样的功能

下面是一个片段


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

实现这一点的方法是将信息作为数组传递到主函数中。如果您有一个条目或多个条目,则无所谓。然后使用foreach在数组中循环并调用实际禁用AD帐户和任何其他所需操作的函数

这意味着您不必检查“批量”或“单一”模式。这就行了

例如:

function MainFunction
{
param (pass in array here)

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

function DoWork
{
    //do things here
}

您似乎想要提示用户输入。 我更喜欢使用参数,但如果要提示输入,请尝试以下操作:

Function BulkMode
{
    "Running BulkMode"
}

Function SingleMode
{
    "Running SingleMode"
}


$Input = Read-Host "Press Y for BulkMode"

if ($Input -eq "Y")
{
    Bulkmode
}

else
{
    SingleMode
}

希望这是有意义的,如果您需要更多信息,请提供建议这听起来像是两个参数集可以更好地实现的东西。其中一个参数集可能采用SamAccountName数组。除其他外,另一个参数集可能采用单个文件名。
Function BulkMode
{
    "Running BulkMode"
}

Function SingleMode
{
    "Running SingleMode"
}


$Input = Read-Host "Press Y for BulkMode"

if ($Input -eq "Y")
{
    Bulkmode
}

else
{
    SingleMode
}