请找到以下示例脚本。在此脚本中,给定了单个输入$ 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')
答案 0 :(得分:0)
您说您打算处理CSV文件。您应该将CSV导入一个变量,然后对该变量进行Foreach。
如果要检查现有帐户,则可能希望Do
循环在帐户名末尾附加一个数字。那可能是您的Check-ADUser函数的一部分。
对于AD过滤器,请勿在过滤器中使用大括号。最佳做法是将其放在单引号之间。
Get-ADUser -f 'samAccountname -eq $LoginName'
来自NT / AD管理20年的另一个非代码建议:
如果您的CSV包含人员名称,请不要使用人员的真实姓名作为登录ID。人们出于各种目的而更改其姓名,而仅仅因为结婚或其他原因而更改帐户名就很痛苦。
如果人们有一个HR /雇员编号,我强烈建议使用它。还可以保证它是唯一的,并且键入的字符通常少于实际名称。