tech.guitarrapc.cóm

Technical updates

IISのApplication Poolを起動しようとするとEvent ID 5021のエラーが出てすぐに停止してしまう

IISのApplication Poolは、 指定されたユーザーで実行しています。 今回は、そのユーザー設定を意図した設定にしていないとApplication Poolが開始できずあせっちゃうよというお話です。

原因

Event ID 5021は、Application Poolの実行ユーザーの認証が出来なかったことを示します。 TechNet - Event ID 5021 — IIS Application Pool Availability.aspx)

このApplication Poolで利用しているユーザー認証情報は、"C:\Windows\System32\inetsrv\config\applicationHost.config" などにあります。 これは、自身の環境に依存するので確認してください。

この中に記述されているユーザー情報、このユーザー設定に原因があります。 以下は、自分が気付くきっかけになったサイトの抜粋です。 IIS APP pool issue - resolved

<site name="WhatsUpGold" id="2" serverAutoStart="true">
  <application path="/" applicationPool="NmConsole">
    <virtualDirectory path="/" physicalPath="D:\Program Files (x86)\Ipswitch\WhatsUp\HTML" userName="WhatsUpGold_User" password="[enc:AesProvider:HASH ON FIRST LINE:enc]" />
  </application>
  <application path="/NmConsole" applicationPool="NmConsole">
    <virtualDirectory path="/" physicalPath="D:\Program Files (x86)\Ipswitch\WhatsUp\HTML\NM.UI" userName="WhatsUpGold_User" password="[enc:AesProvider:HASH ON SECOND LINE:enc]" logonMethod="ClearText" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation="*:8080:" />
  </bindings>
</site>

それまで使えていて、再起動後起こったいう場合は、10中8,9恐らく該当ユーザーのパスワード期限切れです。

この場合は、Server Manager > Computer Management > User and Group > UserのProperty > 次回ログインでパスワード変更を..... が有効になってしまっていることが多いです。

対処

パスワードを設定するか、無期限にするなど方法はあります。 この辺は、セキュリティポリシーに従うべきでしょう。

仮にパスワードを無期限にして、パスワード変更も不可にする場合は、以下のPowerShellコードで変更可能です。

$users = @(
  "UserName",
  "UserName2",
)

foreach ($user in $users)
{
  $HostPC = [System.Environment]::MachineName
  $targetuser=[adsi]("WinNT://" + $HostPC + "/$user, user")
  $userFlags = $targetuser.Get("UserFlags")
  $userFlags = $userFlags -bor 0X10040
  $targetuser.Put("UserFlags", $userFlags)
  $targetuser.SetInfo()
}

パスワードの更新や、フラグ変更が完了後、正常にApplication Poolが開始できれば問題ありません。 気付かないといきなりなるので気を付けてください。いや、本当に笑えませんから。