使用SamAccountName可用性检查循环创建AD用户

问题描述:

我通过制作一个脚本来学习Powershell,该脚本有望在我们获得新员工或顾问时自动完成所有需要完成的任务。目前我正在开发将创建AD帐户的部分。以下是特定于脚本这部分的变量。使用SamAccountName可用性检查循环创建AD用户

#Variables for preliminary SamAccountName, modifiers and initials array 
$PrelSamAccountName = ("se" + [string]$GivenName.Substring(0,3) + [string]$SurName.Substring(0,3)).ToLower() 
$Modifier1 = 1 
$Modifier2 = 0 
$InitialsArray = @("x","y","z") 

这是循环。我在New-ADUser上删除了一些参数,以减少混乱。

try { 
#Checks if preliminary SamAccountName is taken or not 
$ADCheck = Get-ADUser -Filter {SamAccountName -eq $PrelSamAccountName} 
#Creates new user 
New-ADUser -Name $Name -SamAccountName $PrelSamAccountName 
} catch { 
     #Replaces final character in preliminary SamAccountName with "1++" 
     while (($ADCheck | Select-Object -ExpandProperty SamAccountName) -eq $PrelSamAccountName) { 
     $PrelSamAccountName = ([string]$PrelSamAccountName.Substring(0,7) + ($Modifier1++)).ToLower() 
     } 
     #Changes $Initials from $null to x/y/z if an existing user has identical name as new user 
     while (($ADCheck | Select-Object -ExpandProperty Name) -eq $Name) { 
     $Initials = $InitialsArray[$Modifier2++] 
     $Name = $GivenName + " " + $Initials + " " + $SurName 
     } 
    } 

一切都按预期工作,除了一个新的用户创建的每隔一次我运行循环的事实。理想情况下,我希望它在每次运行时创建一个新用户。 :)

我假设它与$ ADCheck变量的位置有关,但多次重写这个部分后,我根本无法让它工作。有任何想法吗?

在此先感谢。

您在这里有一些逻辑问题: 采用这种做法:

Pseudocode: 
while (user exist) {create new username} 
new-aduser new username 

PS代码:

function new-sam 
{ 
    #creates new sam 
} 

$sam = "username" 
$a=$false 
while (!$a) 
{ 
    try { 
     $a = [bool](Get-ADUser -Identity $sam) 
    } 
    catch { 
     $a = $false; $sam = new-sam 
    } 
} 
new-aduser .... 
+0

谢谢,马丁。我一直在根据你的建议重新编写代码,一旦我得到它的工作,我会发布它。 – skilleras

+0

好的,我按照现在我想要的方式工作。我确信代码可以更清洁,但那是另一天的事情。再次感谢您的建议,马丁。遵循你的方法,我学到了很多东西。 :) 代码在这里:http://hastebin.com/ovavinaqun.mel – skilleras

+0

在你的func $ Integer是一个bool-var。只需使用{}其他{}作为返回语句,而不是使用while。 while语句根据条件创建一个循环,如果只是一次计算。我也改变了try/catch块。应该完全相同。这里修改:http://hastebin.com/opigepafan.mel – Martin