【问题标题】:Invoke-expression on a previous script to add parameters to it from a csv在先前的脚本上调用表达式以从 csv 向其添加参数
【发布时间】:2025-12-05 09:20:04
【问题描述】:

我只是从几个月开始学习 powershell,并且我被要求编写一个超出我实际知识范围的脚本。 当我必须从 ONE AD 组中提取用户时,我有一个可以完美运行的脚本。我的问题是这个脚本只接受一个参数,本周我被要求提取超过 1000 个组......)

.\myscript.ps1 广告组

我想做什么: 1. 我在 CSV 中得到一个提取,所以我想将所有这些组的参数输入到我的脚本中 2. 我想生成结果的文件文本,但我不确定在这种情况下哪种方法最好。

这是我的代码

$grouplist=IMPORT-CSV C:\Myfile\Mytest\liste.csv
foreach ($group in $grouplist) {
    Invoke-Expression .\membre_group_AD_V2.ps1 $group
                                }

我的 CSV 测试只是分组来运行我的测试,我在每个组上都得到了同样的错误

Invoke-Expression : Impossible de trouver un paramètre positionnel acceptant l'argument « @{grouplist=Administrators} ».

Au caractère C:\myfile\Mytest\script\dev\bouclage_membre_group_AD_V2.ps1:36 : 2
+     Invoke-Expression .\membre_group_AD_V2.ps1 $group
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument : (:) [Invoke-Expression], ParameterBindingException    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand

如果需要,我可以尝试翻译此错误。如果您能帮助提高我的知识,那就太好了!感谢您抽出宝贵时间阅读本文。

【问题讨论】:

  • 为什么要使用Invoke-Expression 而不是只运行带参数的脚本?
  • 因为我认为这是运行我的脚本的正确方式。我刚刚测试没有invoke-expression它提示另一个错误,它似乎试图比较我的组(可能是我对消息的理解是错误的)
  • 如果您向我们展示一个示例 csv 文件可能会有所帮助,其中只有几条记录。
  • 我删除了我的回复。这没有帮助。
  • Matt 向我展示了可以从您收到的错误消息中确定 CSV 文件的结构,因此没有必要发布我要求的示例 CSV。

标签: powershell csv active-directory


【解决方案1】:

您的 CSV 文件中似乎有一个“组列表”标题。我认为它看起来像这样:

"grouplist"
"Administrators"
"Other Group Name"

现在,当您使用 Import-Csv 时,所有行都被读入一个对象,每列具有一个 NoteProperty,以 csv 文件中的标题命名。

因此,在您的情况下,$grouplist 中的每个对象都有一个包含名称的 grouplist 属性 - 这是您要作为参数传递给脚本的属性值:

$grouplist=Import-Csv C:\Myfile\Mytest\liste.csv
foreach ($group in $grouplist) {
    .\membre_group_AD_V2.ps1 $group.grouplist
}

假设membre_group_AD_V2.ps1 的输出已经符合您的预期,请使用Out-File cmdlet 和-Append 将其写入同一个文本文件:

$grouplist=Import-Csv C:\Myfile\Mytest\liste.csv
$OutfilePath = "C:\Myfile\membre_group_out.txt"
foreach ($group in $grouplist) {
    .\membre_group_AD_V2.ps1 $group.grouplist | Out-File $OutfilePath -Append -Encoding utf8
}

如果没有,您必须向我们展示 membre_group_AD_V2.ps1 脚本

【讨论】:

  • 感谢您提供的文件外答案。您对我的第一个脚本工作的权利就像我想要的那样。我只有 csv 部分作为参数有问题
  • 这个答案很有帮助。不幸的是,您正在猜测 CSV 标头的真实外观。你不得不猜测,因为真正的结构没有在 OP 中揭示。