【发布时间】:2021-07-09 11:31:33
【问题描述】:
首先,我想说,我对 PowerShell 非常、非常 新手。这是我写的第一个 PS 脚本。
我目前正在开发用于 AD 管理的 PS 脚本。目前,用于添加/删除 SmbShares、从组中添加或删除用户等的脚本已经完成。 我已经有一个用于在 AD 中创建用户的工作脚本,但它不是动态的,因为在硬编码变量中,所有这些都必须输入到 new-ADUser 命令中。由于代码将用于多个特定参数集,因此它必须是动态的。
我正在使用 Import-Excel 并找到了一个很棒的函数 here,但是我在使用这个函数时遇到了两个问题。
$sb = {
param($propertyNames, $record)
$propertyNames | foreach-object -Begin {$h = @{} } -Process {
if ($null -ne $record.$_) {$h[$_] = $record.$_}
} -end {New-AdUser @h -verbose}
}
Use-ExcelData -Path $Path -HeaderRow 1 -scriptBlock $sb
其中的动态部分是,表头将用作 New-ADUser 的参数名。如果需要更改的参数数量是在 Excel 表中添加或删除一列,则只需更改一件事。列标题始终需要与 New-ADUser 的参数同名。
我现在的问题是我在 A 列中的“类型”标题。需要指定用户的类型才能将用户添加到特定的 ADGroups。但是由于上面的函数使用所有标题作为参数,这不起作用。 有谁知道如何更改函数 $sb 使其从第二列开始?我已经尝试过使用 skip 1 并尝试了许多其他解决方法,但是根据我的 non 经验,没有什么可以接近我所需要的。
解决了以下问题:将 -DataOnly 添加到 Use-ExcelData,现在它可以工作了。
第二个问题是,一旦没有更多的参数值,该函数就不会停止尝试创建用户。为了尝试,我删除了“类型”列。在尝试创建两个用户 testuser 和 testuser2 的示例中,Powershell 毫无问题地创建了用户,但随后询问了新 ADUser 的名称。
AUSFÜHRLICH: Ausführen des Vorgangs "New" für das Ziel "CN=Test User,CN=Users,DC=****,DC=**".
AUSFÜHRLICH: Ausführen des Vorgangs "New" für das Ziel "CN=Test2 User2,CN=Users,DC=****,DC=**".
Cmdlet New-ADUser an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
Name:
提前谢谢你,对不起我的英语,如果我在论坛上做错了什么,请告诉我。
【问题讨论】:
-
您能否更具体一些并提供minimal reproducible example?现在这个问题似乎很混乱(我在编辑之前理解它,但现在我不知道发生了什么)。
标签: excel powershell