2016-03-08 41 views
0

我通過製作一個腳本來學習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變量的位置有關,但多次重寫這個部分後,我根本無法讓它工作。有任何想法嗎?

在此先感謝。

回答

0

您在這裏有一些邏輯問題: 採用這種做法:

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