PowerShell通過安全組創建計算機賬號

這是一個非常悲傷的需求,整個邏輯弄的我有點吐血,幸運的是終於做完了。由於用到了太多變量,不寫備註自己也看不懂,記錄一下。


需求是這樣的:某個用戶位於某個安全組內,安全組在某個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 }
 
 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章