PAMスクリプトをレコードに添付する際、リソース認証情報を追加するオプションがあります。リソース認証情報はBASE64でエンコードされたJSONデータの一部としてゲートウェイに渡されます。上記の認証情報は、リソース認証情報として添付する必要があります。
$IISAppPoolName = '<App Pool Name>'
$AppPoolStatus = Invoke-Command -Computername '<Target Machine>' -Credential $AdminCredential -ScriptBlock {
Import-Module IISAdministration
$ServerManager = Get-IISServerManager
$AppPool = Get-IISAppPool -Name $Using:IISAppPoolName
$AppPool.Stop()
$AppPool.ProcessModel.IdentityType = "SpecificUser"
$AppPool.ProcessModel.Username = $Using:Params.user
$AppPool.ProcessModel.Password = $Using:Params.newPassword
$ServerManager.CommitChanges()
$AppPool.Start()
return $AppPool
}
Write-Debug "$IISAppPoolName is: $($AppPoolStatus.State)"
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline=$true)]
[string]
$B64Input
)
$ErrorActionPreference = "Stop"
$DebugPreference = 'Continue'
function ConvertFrom-B64 {
param (
[string] $B64String
)
try {
$Json = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($B64String))
$Output = $Json | ConvertFrom-Json
}
catch {
Write-Error "Failed to convert Base64 string: $B64String"
}
return $Output
}
# JSONデータはBase64エンコードされた文字列としてゲートウェイに渡されます。
$Params = ConvertFrom-B64 -B64String $B64Input
Write-Debug "Running Post-Rotation Script on: $($Params.userRecordUid)"
# Base64エンコードされたJSON文字列から添付されたリソースレコードを変換し、
# 管理者レコードのUIDでフィルタリングして、
# サービスの「Log On As」プロパティを更新するために必要な管理者レコードを見つけます。
$ResourceCredentials = ConvertFrom-B64 -B64 $Params.records
$AdminRecord = $ResourceCredentials | Where-Object { $_.uid -eq '<Admin Record UID>' }
# 各レコードタイプには異なるJSON構造があります。
# この場合、PAMディレクトリレコードタイプを使用しているため、
# loginとdomainNameプロパティからユーザー名を構築する必要があります。
try {
$SecurePassword = ConvertTo-SecureString $AdminRecord.password -AsPlainText -Force
$AdminCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "$($AdminRecord.login)@$($AdminRecord.domainName)", $SecurePassword
Write-Debug "New PSCredential created for: $($AdminRecord.login)"
}
catch {
Write-Error "Failed to create PSCredential for: $($AdminRecord.login)"
}
$IISAppPoolName = '<App Pool Name>'
$AppPoolStatus = Invoke-Command -Computername '<Target Machine>' -Credential $AdminCredential -ScriptBlock {
Import-Module IISAdministration
$ServerManager = Get-IISServerManager
$AppPool = Get-IISAppPool -Name $Using:IISAppPoolName
$AppPool.Stop()
$AppPool.ProcessModel.IdentityType = "SpecificUser"
$AppPool.ProcessModel.Username = $Using:Params.user
$AppPool.ProcessModel.Password = $Using:Params.newPassword
$ServerManager.CommitChanges()
$AppPool.Start()
return $AppPool
}
Write-Debug "$IISAppPoolName is: $($AppPoolStatus.State)"