@echo off
for /f "tokens=*" %%a in ('more') do set input=%%a
set base64tmp=%temp%\base64.tmp
set json=%temp%\json.tmp
echo %input% > %base64tmp%
certutil -decode %base64tmp% %json%
for /f "usebackq delims=" %%a in (`jq -r .user %json%`) do set "user=%%a"
for /f "usebackq delims=" %%a in (`jq -r .newPassword %json%`) do set "newPassword=%%a"
管理者認証情報を使用
Windowsのスケジュールタスクの「Log On As」プロパティを更新するには、管理者アカウントなどの適切な権限を持つ認証情報が必要です。
PAMスクリプトには多数のリソース認証情報を添付できるため、添付したリソース認証情報のUIDを把握しておくと、スクリプトで正しい認証情報が使用されてサービスの「Log On As」プロパティが更新されるのを確認するのに役立ちます。
jqを使用して添付されたリソース認証情報にアクセスし、記録UIDでフィルタリングできます。
set adminrecord=%temp%\adminrecord.tmp
set adminuid=<Admin UID>
jq -r ".[] | select(.uid == \"%adminuid%\")" %recordsjson% > %adminrecord%
@REM pull the login, domainName, and password from the %adminrecord% JSON object
for /f "usebackq delims=" %%a in (`jq -r .login %adminrecord%`) do set "adminuser=%%a"
for /f "usebackq delims=" %%a in (`jq -r .domainName %adminrecord%`) do set "domainname=%%a"
for /f "usebackq delims=" %%a in (`jq -r .password %adminrecord%`) do set "adminpassword=%%a"
@REM Create the admin usermain by combining the username@domainname
set adminusername=%adminuser%@%domainname%
@echo off
for /f "tokens=*" %%a in ('more') do set input=%%a
set base64tmp=%temp%\base64.tmp
set json=%temp%\json.tmp
set recordsb64=%temp%\recordsb64.tmp
set recordsjson=%temp%\records.tmp
echo %input% > %base64tmp%
certutil -decode %base64tmp% %json%
for /f "usebackq delims=" %%a in (`jq -r .user %json%`) do set "user=%%a"
for /f "usebackq delims=" %%a in (`jq -r .newPassword %json%`) do set "newPassword=%%a"
for /f "usebackq delims=" %%a in (`jq -r .records %json%`) do set "records=%%a"
echo %records% > %recordsb64%
certutil -decode %recordsb64% %recordsjson%
@REM Find the admin record that has a uid that matches %adminuid% and save to %adminrecord%
set adminrecord=%temp%\adminrecord.tmp
set adminuid=<Admin UID>
jq -r ".[] | select(.uid == \"%adminuid%\")" %recordsjson% > %adminrecord%
@REM pull the login, domainName, and password from the %adminrecord% JSON object
for /f "usebackq delims=" %%a in (`jq -r .login %adminrecord%`) do set "adminuser=%%a"
for /f "usebackq delims=" %%a in (`jq -r .domainName %adminrecord%`) do set "domainname=%%a"
for /f "usebackq delims=" %%a in (`jq -r .password %adminrecord%`) do set "adminpassword=%%a"
@REM Create the admin usermain by combining the username@domainname
set adminusername=%adminuser%@%domainname%
del %base64tmp%
del %json%
del %recordsb64%
del %recordsjson%
del %adminrecord%
@REM Update the scheduled task with the new password
schtasks /change /tn "<Task Name>" /s "<Taget Server>" /u %adminusername% /p %adminpassword% /ru %user% /rp "%newPassword%"
if %errorlevel% neq 0 exit /b %errorlevel%