Windows

在多台電腦上更新任務計劃程序作業密碼

  • November 19, 2020

這是交易:公司的政策是每 180 天更新一次服務帳戶密碼。問題是,我在大約 20 台伺服器上使用這些服務帳戶,執行各種工作 - 所以每 180 天,我必須花費大約 4 個小時來更新它們(如果不是 KeepassXC 的自動輸入,我需要 2 天,得愛 RDP 到 DC 半個世界)。

必須有更好的方法,但它會是什麼?

我們談論的是 W2k12r2。

您應該能夠使用一點 PowerShell 來完成此操作。本文提供了一種快速簡便的方法來更新計劃任務憑據 下面的程式碼取自https://nointerrupts.com/2018/10/18/update-scheduled-task-password-with-powershell/

$TaskCredential = Get-Credential
Get-ScheduledTask | Where-Object { $_.Principal.UserId -eq $TaskCredential.UserName } | Set-ScheduledTask -User $TaskCredential.UserName -Password $TaskCredential.GetNetworkCredential().Password

要在多台機器上遠端執行更新,請將以下內容保存為 Set- ScheduledTaskCredentials.ps1

注意:您需要在所有伺服器上設置 WinRM 才能正常工作

Param(
 [Parameter(Mandatory=$true,ValueFromPipeline=$true)][string[]]$ComputerName,
 [Parameter(Mandatory=$true)][PSCredential]$Credential,
 [Parameter(Mandatory=$true)][PSCredential]$TaskCredential
)

Invoke-Command -ComputerName $ComputerName -Credential $Credential -ScriptBlock { Get-ScheduledTask | Where-Object { $_.Principal.UserId -eq ($using:TaskCredential).UserName.Split('\')[1] } | Set-ScheduledTask -User ($using:TaskCredential).UserName -Password ($using:TaskCredential).GetNetworkCredential().Password }

然後你應該能夠像這樣執行它。

$AdminCredential = Get-Credential # Supply the admin credentials for remote access
$TaskCredential = Get-Credential # Supply the new credentials for the service account
.\Set-ScheduledTaskCredentials.ps1 -ComputerName server1.example.com,server2.example.com -TaskCredential $TaskCredential -Credential $AdminCredential

引用自:https://serverfault.com/questions/1043188