Microsoft から見つけたライブラリを使用して、(C# を使用して) Live@Edu でユーザーの電子メール アカウントをプロビジョニングしようとしましたが、ライブラリはリモート PowerShell セッションを使用してこれを行います。using() { }
ローカル管理者アカウントを偽装するブロックでPowerShell 呼び出しをラップしました。自分の開発マシンでコードを実行すると、うまく機能し、Live@Edu でアカウントがプロビジョニングされますが、運用サーバーで同じコードを実行すると、Access is Denied
PowerShell からエラーが発生します。
サーバーの IIS アプリケーション プール ユーザーを自分のドメイン アカウントに変更すると、運用サーバーではすべて正常に機能しますが、そのままにしておくとApplicationPoolIdentity
機能しません。したがって、私のコードではローカル管理者になりすましたが、それらの資格情報は PowerShell セッションに渡されていないようです。奇妙なことに、スクリプトが自分のマシンで実行されている場合もApplicationPoolIdentity
問題はなく、スクリプトは実際には自分のマシンの自分のアカウントで実行されていると思います (そして、私はローカル管理者です)。
コードに値を吐き出さ$env:username
せると、マシン名が表示されました。PowerShell ウィンドウにコマンドを直接入力すると、実際のユーザー名が表示されるので、それが実行される実際のユーザー名が表示されることを期待していました。
コードで偽装した資格情報を使用してリモート サーバーに対話的にログインすると、すべての PowerShell コマンドレットを手動で PowerShell ウィンドウに入力すると、正常に動作します。
IIS アプリケーション プールを常に管理者アカウントで実行したくないので、管理者として PowerShell スクリプトを実行して、現在行っている偽装以上の方法はありますか?
アップデート:
私にとって解決策として機能すると思われる奇妙なことが起こりました。作成したサーバーにコードをデプロイした後、ローカル管理者アカウントを追加しました。次に、IIS アプリケーション プールに移動し、所有者をApplicationPoolIdentity
作成したばかりの管理者アカウントに変更しました。その後、ページは正常に動作し、PowerShell スクリプトを実行します。私は以前からこれを知っていましたが、IIS で管理者アカウントを使用したくありませんでした。次に、アプリケーション プールの設定を元に戻しApplicationPoolIdentity
、ローカル管理者アカウントを削除しましたが、ページは引き続き機能します!? IIS と Web サーバー自体を再起動すると、すべてが機能します。私が考えることができるのは、アプリケーション プールを管理者アカウントに移動すると、アプリケーション プールの一部の属性が完全に変更されたということだけです。ServerFault に変更された質問を追加しました。