4

Microsoft から見つけたライブラリを使用して、(C# を使用して) Live@Edu でユーザーの電子メール アカウントをプロビジョニングしようとしましたが、ライブラリはリモート PowerShell セッションを使用してこれを行います。using() { }ローカル管理者アカウントを偽装するブロックでPowerShell 呼び出しをラップしました。自分の開発マシンでコードを実行すると、うまく機能し、Live@Edu でアカウントがプロビジョニングされますが、運用サーバーで同じコードを実行すると、Access is DeniedPowerShell からエラーが発生します。

サーバーの IIS アプリケーション プール ユーザーを自分のドメイン アカウントに変更すると、運用サーバーではすべて正常に機能しますが、そのままにしておくとApplicationPoolIdentity機能しません。したがって、私のコードではローカル管理者になりすましたが、それらの資格情報は PowerShell セッションに渡されていないようです。奇妙なことに、スクリプトが自分のマシンで実行されている場合もApplicationPoolIdentity問題はなく、スクリプトは実際には自分のマシンの自分のアカウントで実行されていると思います (そして、私はローカル管理者です)。

コードに値を吐き出さ$env:usernameせると、マシン名が表示されました。PowerShell ウィンドウにコマンドを直接入力すると、実際のユーザー名が表示されるので、それが実行される実際のユーザー名が表示されることを期待していました。

コードで偽装した資格情報を使用してリモート サーバーに対話的にログインすると、すべての PowerShell コマンドレットを手動で PowerShell ウィンドウに入力すると、正常に動作します。

IIS アプリケーション プールを常に管理者アカウントで実行したくないので、管理者として PowerShell スクリプトを実行して、現在行っている偽装以上の方法はありますか?

アップデート:

私にとって解決策として機能すると思われる奇妙なことが起こりました。作成したサーバーにコードをデプロイした後、ローカル管理者アカウントを追加しました。次に、IIS アプリケーション プールに移動し、所有者をApplicationPoolIdentity作成したばかりの管理者アカウントに変更しました。その後、ページは正常に動作し、PowerShell スクリプトを実行します。私は以前からこれを知っていましたが、IIS で管理者アカウントを使用したくありませんでした。次に、アプリケーション プールの設定を元に戻しApplicationPoolIdentity、ローカル管理者アカウントを削除しましたが、ページは引き続き機能します!? IIS と Web サーバー自体を再起動すると、すべてが機能します。私が考えることができるのは、アプリケーション プールを管理者アカウントに移動すると、アプリケーション プールの一部の属性が完全に変更されたということだけです。ServerFault に変更された質問を追加しました。

4

1 に答える 1

7

この問題は、サーバー上Load User Profileで設定されているアプリの IIS アプリ プールのオプションに関係していたことが判明しました (これは Windows Server 2008 のデフォルトです)。このプロパティを読んだ後、なぜこれが私のシナリオにとって重要なのか完全にはわかりませんが、ローカル マシンの IIS の設定と Web サーバーの設定が異なっていました。これで、すべての PowerShell 呼び出しがサーバー上で問題なく動作します。FalseFalse

于 2013-06-18T15:45:08.873 に答える