◎自動化-新增與掛載使用者磁碟

最近做了幾個使用者帳號處理流程的自動化,每年新進同仁在人事室簽約時填寫的帳號申請表,人事主任會在收齊後轉交到我這邊處理帳號新增事宜,新進同仁填寫的這個帳號同時會是學校Google信箱帳號也是所有教室電腦的個人登入帳號,同時在這個帳號底下會提供一個個人專用的網路磁碟。以往新增帳號的流程就是1.建立帳號、2.建立個人目錄並設定權限(共用權限為變更+安全性權限為修改)、3.掛載個人磁碟機。

新增帳號算不上是麻煩事,但異動人數多時得不斷重複做目錄權限調整或是掛載磁碟機這些相同工作還挺煩的,也因為都是手動處理就難免出錯,事後想處理就得花更多時間比對權限對齊的問題,所以把新增使用者目錄、共用權限、安全性權限、掛載使用者主資料匣這幾項工作交給自動化處理,我只做輸入帳號名稱與預設密碼就好。

Import-Module ActiveDirectory

$logFile = "C:\Scripts\CreateTeacherFolder.log"
Add-Content $logFile "$(Get-Date) - 腳本開始執行"

try {
    # 取得最近一筆事件 4720 (建立使用者帳號)
    $event = Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4720} -MaxEvents 1
    $SamAccountName = $event.Properties[0].Value

    # 查詢 AD 使用者顯示名稱
    $user = Get-ADUser -Identity $SamAccountName -Properties DisplayName
    $DisplayName = if ([string]::IsNullOrWhiteSpace($user.DisplayName)) { $SamAccountName } else { $user.DisplayName }

    Add-Content $logFile "偵測到新使用者:$SamAccountName ($DisplayName)"

    # 建立資料匣
    $rootPath = "磁碟機名稱:\目錄名稱$"
    $folderName = "$DisplayName`$"
    $folderPath = Join-Path $rootPath $folderName

    if (-not (Test-Path $folderPath)) {
        New-Item -ItemType Directory -Path $folderPath | Out-Null
        Add-Content $logFile "已建立資料匣:$folderPath"
    } else {
        Add-Content $logFile "資料匣已存在:$folderPath"
    }

    # NTFS 權限設定
    icacls $folderPath /remove "SIPS\${SamAccountName}" | Out-Null
    icacls $folderPath /remove "SIPS\Administrator" | Out-Null
    icacls $folderPath /grant "SIPS\${SamAccountName}:(OI)(CI)M" | Out-Null   # 修改權限
    icacls $folderPath /grant "SIPS\Administrator:(OI)(CI)F" | Out-Null       # 完全控制

    # 共用權限設定
    net share "$folderName" /delete
    net share "$folderName=$folderPath" /grant:"SIPS\${SamAccountName}",CHANGE /grant:"SIPS\Administrator",FULL

    # 設定使用者主資料匣 (Home Folder) → X: \\主機名稱\顯示名稱$
    $homePath = "\\主機名稱\$folderName"
    Set-ADUser -Identity $SamAccountName -HomeDirectory $homePath -HomeDrive "X:"

    Add-Content $logFile "完成 $folderName 的 NTFS、共用權限設定,並將使用者主資料匣設為 $homePath (X:)"
}
catch {
    Add-Content $logFile "❌ 發生錯誤:$($_.Exception.Message)"
}

指令交給魔法coco輕鬆搞定,但需要搭配事件來觸發動作,這部分交給排程處理,以往觸發排程的時機都是依照時間,第一次嘗試透過事件來觸發,所以流程是在我完成新增使用者帳號時,會新增一筆編號4720的事件紀錄,當4720事件紀錄產生時觸發排程工作來執行上面這段指令(檔案名稱為CreateTeacherFolder.ps1)並同時設定好權限與掛載的工作。

4720的事件在Windows記錄/安全性底下進行篩選可以撈出來

完成之後比對一下目錄的共用權限與安全性權限設定正確,新增帳號的主資料匣也掛載成功,省去日後手動處理這些瑣事的步驟,收工。

發佈留言