【问题标题】:Generate multiple outputs from the list of inputs从输入列表生成多个输出
【发布时间】:2019-06-29 15:28:46
【问题描述】:

请找到以下示例脚本。在此脚本中,已给出单个输入 $Name 以生成唯一的登录名。

但是,例如,如果从 $Name 下的 CSV 导入多个名称列表,如何将列表中的每个名称传递给函数以生成唯一的登录名并将每个输出的唯一登录名存储到 CSV。

示例脚本:

    $Name = "Sample Name"

## Declaring count to 0 .

$i=0

#Define login name
Function New($Count)
{ 
$Splitter = $Name.Split(' ')
$Add1 = $Splitter[0].Substring(0,1)
$Add2 = $Splitter[1].Substring(0,1)

switch($Count)
{
0 {return $LoginName = $Add1+$Add2}
1 {return $LoginName = $Add2+$Add1}
default {return $LoginName = $Add1+$Add2+$Add1}
}
}

#Check AD exist
Function check-ADuser($loginName){

    IF(Get-ADUser -f {samAccountname -eq $LoginName})
        {return $result= $False}
        else {return $result = $True}}
        return $result

#Generate login name
Do{
$loginName = New($i)
$ADresult = check-ADuser -loginName $loginName
$i++

}while($result -ne 'True') 

【问题讨论】:

  • 您需要一个foreach(){} 循环或for(){} 循环来迭代一个集合
  • 你在哪里定义了Check-ADUser?
  • @trebleCode 我仍然不确定逻辑。例如,使用 foreach() 循环可以迭代多个用户并存储在数组中,但是根据上面的代码,我们如何将数组中的每个存储项传递给“Do While”循环以生成多个唯一的登录名。
  • @TheIncorrigible1 我错过了代码的一部分,包括在 AD 中定义用户存在的函数。请让我知道更多信息。

标签: powershell automation active-directory powershell-2.0 powershell-3.0


【解决方案1】:

您说您打算处理一个 CSV 文件。您应该将 CSV 导入变量并对其执行 Foreach。

如果您想检查现有帐户,那么您可能希望Do 循环在帐户名称末尾附加一个数字。这可能是您的 Check-ADUser 功能的一部分。

对于 AD 过滤器,请勿在过滤器中使用大括号。最佳做法是将其放在单引号之间。

Get-ADUser -f 'samAccountname -eq $LoginName'

另一个非代码建议,来自 20 年的 NT/AD 管理:

如果您的 CSV 包含人员姓名,请不要使用人员的实际姓名作为登录 ID。人们出于各种目的更改自己的姓名,而仅仅因为他们要结婚或其他原因而更改帐户名称是痛苦。

如果人们有 HR/员工编号,我强烈建议使用它。它也保证是唯一的,并且通常比他们的实际名称少打字。

【讨论】:

    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2022-01-02
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多