這是一個非常悲傷的需求,整個邏輯弄的我有點吐血,幸運的是終於做完了。由於用到了太多變量,不寫備註自己也看不懂,記錄一下。
需求是這樣的:某個用戶位於某個安全組內,安全組在某個OU下。現在需要創建一個新的OU,只改變OU中的某一個關鍵詞,其他部分照抄,創建一個計算機賬號,放到新的OU下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #定義函數,參數是x,分別是1和2,生成的計算機的尾巴不一樣 function chuangjianjisuanjiX ($xuhao) { if ($xuhao -eq "1") { $xuhao = "-" } elseif ($xuhao -eq "2") { $xuhao = "X" } #計算機名的來源是更上一級的一個參數,員工編號 $jisuanjiname = $jisuanji #獲取中文名,其實這裏最終沒有用到 $zhongwenming = (Get-ADUser $jisuanjiname).name #識別創建計算機規則,即創建員工編號+序號的計算機名字 $xingmingshibiechar = $jisuanjiname + $xuhao #獲取操作時間 $date = date #準備後面 用的計算機描述信息 $miaoshu = (Get-ADUser $jisuanjiname -Properties *).extensionAttribute1 + (Get-ADUser $jisuanjiname).name #這是另外一種描述信息,備註掉了,暫時不用。 #$miaoshu = (Get-ADUser $jisuanjiname).name + "使用," + (get-aduser $env:USERNAME).name + "創建。時間是" + $date #獲取用戶所在的OU。 #$newcomputerou = (Get-ADUser $jisuanjiname).DistinguishedName #獲取最終應該放置的計算機OU #這裏比較長,首先獲取這個用戶所在的安全組和郵件組,然後後去組信息,查找符合條件的安全組,最後獲取這個安全組的DistinguishedName,也就是它的OU名 $newcomputeroux = ((Get-ADUser $jisuanjiname -Properties *).memberof | Get-ADGroup | ?{ $_.distinguishedname -match "xxxxxxxxxxxx" }).DistinguishedName #獲取一下安全組的名字的長度,這個和上面的類似,很簡單,不說了。 $yhmchangdu = ((Get-ADUser $jisuanjiname -Properties *).memberof | Get-ADGroup | ?{ $_.distinguishedname -match "xxxxxxxxxxxx" }).name.Length #關鍵字替換,把原來OU中的xxx換成計算機OU,這裏 有個remove+4的操作,具體的大家可以試試,很巧妙。 $newcomputerou = $newcomputeroux.Replace('xxxx', '計算機OU').remove(0, $yhmchangdu + 4) #從OU中去除尾部比較長的部分,一般就是www.contoso.com部分,這樣最終循環的時候可以少運行一些 $quchuxinxi = "xxxxx" #需要創建的OU列表,有個數,如果計數4個,實際上OU有3個,進行一個循環 #下面這行其實不應該備註的,因爲顯色有點問題,我備註掉了。 #$chuangjianOU = $newcomputerou.Replace($quchuxinxi,"").split(',') #統計需要刪除的字符數 $x = 0 #$yxserver = "xxxxxxxxxxx" # 定義兩個數組陣列,空的,當前OU和部門名 $dangqianOU = New-Object System.Collections.ArrayList $bumenming2 = New-Object System.Collections.ArrayList #進入關鍵環節,循環部分,這裏用到了創建OU的計數器,可以看一下。 for ($i = 0; $i -lt $chuangjianOU.Count - 1; $i++) { #篩選,替換 $bumenming = $newcomputerou.Replace('OU=', '').split(',')[$i] #把修改過的東西加到數組裏面 $bumenming2.add($newcomputerou.Replace('OU=', '').split(',')[$i]) | Out-Null #計算需要刪除的字符數,繼續對OU名進行操作 $x += $bumenming.Length + 4 $dangqianOU.add($newcomputerou.Remove(0, $x)) | Out-Null } #進入下一個循環 for ($i = 0; $i -lt $bumenming2.Count; $i++) { #做一個倒數計數器 $countx = $bumenming2.count - $i - 1 #創建新的組織單位,也就是OU,參數都是從上面獲取的。因爲OU要一級一級創建,所以這裏計數器也是倒數的 new-ADOrganizationalUnit -name $bumenming2[$countx] -Path $dangqianOU[$countx] -Server $global:yxserver } #創建計算機 New-ADComputer -Name $xingmingshibiechar -path $newcomputerou -Server $global:yxserver -Enabled $True -Description $miaoshu #-ManagedBy $jisuanjiname Location "Redmond,WA"#location是位置信息 $information = $_.used + " " + $_.OU + " " + $_.OU2 + " " + $date #設置一下計算機描述的特殊字段,這是我新加的,把原安全組的信息寫進去 Set-ADComputer $xingmingshibiechar -server $global:yxserver -Replace @{ computerdis = $newcomputeroux } } |