背景
豆子需要設定一個計劃任務然後用某個服務賬号運作。傳統的做法一般是建立一個服務賬号,配置對應的權限,然後設定密碼永不過期。這樣的安全隐患是密碼一直沒改變。Windows 2008的時候微軟推出了MSA(托管服務賬号),本質是繼承了計算機賬戶的特性,每次由計算機自動更換密碼,這樣完全不用管理人員的介入。但是當時MSA既不支援多台主機,也不支援計劃任務,更别說第三方軟體,是以實用性不大。Windows 2012以後,微軟推出了新版本的gMSA,終于可以支援多台主機和計劃任務了。gMSA每次改密碼是由DC上面的KDS服務管理的,每次通過一個root key id,時間戳以及gMSA的SID通過某個複雜的算法生成一個随機的密碼。注意這裡的gMSA中的g代表的是group,也是說我們需要配置設定一個安全組給這個托管賬戶,安全組裡面的所有計算機賬戶都可以去使用這個托管賬戶
具體操作
1. 建立一個KDS Root Key

注意!建立以後,需要等待10個小時讓所有的DC同步
2.建立一個安全組,然後把需要管理的計算機加進去,重新開機對應的計算機
3. 建立gMSA賬号
建立成功以後可以在Management Service Accounts這個容器下看見對應的賬号
4. 安裝gMSA到主機上
登入到對應的主機上面,執行下面的指令
基本的安裝就完成了。下面就可以用這個gMSA賬号來配置服務或者計劃任務了
5. 配置計劃任務
一個很惡心的地方是,圖形界面不支援gMSA的配置。如果直接查找對應的賬号,他會報錯 說不存在
正确的方式是全程通過PowerShell實作
$F = "c:\scripts\syncErrornotification.ps1"
#The first command uses the New-ScheduledTaskAction cmdlet to assign the action variable $A to the executable file tskmgr.exe
$A = New-ScheduledTaskAction -Execute "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -Argument "-noexit -ExecutionPolicy Bypass -File $F"
#The second command uses the New-ScheduledTaskTrigger cmdlet to assign the trigger variable $T to the value AtLogon
$T = New-ScheduledTaskTrigger -daily -At 7am
#The third command uses the New-ScheduledTaskSettingsSet cmdlet to assign the settings variable $S to a task settings object
$S = New-ScheduledTaskSettingsSet -Compatibility Win8 -ExecutionTimeLimit 3600 -ThrottleLimit 2
#The fourth command assigns the principal variable to the New-ScheduledTaskPrincipal of the scheduled task, domainname\gMSA_account$
$P = New-ScheduledTaskPrincipal -UserId omnicom\svc-it$ -LogonType Password -RunLevel Highest
#The fifth command sets the description varible to $D for the task definition
$D = "Office365 Sync Errors"
#Register the scheduled task
Register-ScheduledTask test -Action $A -Trigger $T -Principal $P -Description $D
該主機上還需要授予執行腳本的權利,點開gpedit.msc, 添加對應logon as batch job的權限