情况是这样的:公司的政策是每 180 天更新一次服务帐户密码。问题是,我在大约 20 台服务器上使用这些服务帐户,运行各种作业 - 因此每 180 天,我必须花大约 4 个小时更新它们(如果不是 KeepassXC 的自动输入,我可能需要 2 天以上的时间,我非常喜欢通过 RDP 连接到半个地球之外的 DC)。
一定有更好的方法,但是什么方法呢?
我们正在讨论 W2k12r2。
答案1
您应该能够使用一些 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