从输入列表中生成多个输出

时间:2019-02-05 18:21:11

标签: powershell automation active-directory powershell-v2.0 powershell-v3.0

请找到以下示例脚本。在此脚本中,给定了单个输入$ 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') 

1 个答案:

答案 0 :(得分:0)

您说您打算处理CSV文件。您应该将CSV导入一个变量,然后对该变量进行Foreach。

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

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

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

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

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

如果人们有一个HR /雇员编号,我强烈建议使用它。还可以保证它是唯一的,并且键入的字符通常少于实际名称。