0

Windows 2008R2 の IIS 7.5 でホストされている ASP.NET サイトから powershell スクリプトを実行しようとしています。

このサイトには、ユーザー名とパスワード用の 2 つのフィールドとボタンがあります。
ボタンが押されると、次のコードが実行され、出力がサイトに書き込まれます。

サイトにログインした最初のユーザーでは、すべてが正常に機能しています。
最初のユーザーは、コマンドレットを無制限に実行できます。
しかし、別のユーザー (kerberos 認証) でサイトにログインすると、2 番目のユーザー (およびそれ以降のすべてのユーザー) はスクリプトを実行できません。
RunspaceFactory.CreateRunspace() が例外で失敗しています。
例外は何ですか?良い質問です。メッセージと innerException は空白です。
イベント ログも空です。
iisreset コマンドの後、最初のユーザーはスクリプトを実行できますが、他のすべてのユーザーは実行できません。

さらに、ユーザー名とパスワードのフィールドを使用して、まったく同じことを行う WinForms アプリケーションを作成しましたが、すべて正常に動作します!
したがって、問題はpowershellへのIIS接続にあると思います。

次のコードは、ボタンを押すたびに実行されます:
(メモ帳に書かれた軽微な構文エラーが含まれている可能性があります (過去をコピーすることはできません))

string serverNameFQDN = "myserver.mydomain.com";

char[] cArray = passwordClearText.ToCharArray();
SecureString secString = new SecureString();

foreach(char c in cArray)
{
        secString.AppendChar(c);
}

PSCredential psCred = new PSCredential(Username, secString);

WSManConnectionInfo connectionInfo = 
    new WSManConnectionInfo(new Uri(String.Format("http://{0}:5985/wsman", serverNameFQDN)),
                    "http://schemas.microsoft.com/powershell/Microsoft.Powershell", psCred)
    {
        AuthenticationMechanism = AuthenticationMechanism.Kerberos,
        OpenTimeout = 10000,
        OperationTimeout = 30*60*1000;
    };

using (Runspace remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
    var pipe = remoteRunspace.CreatePipeline();
    remoteRunspace.Open();

    pipe.Commands.AddScript("some-cmdlet");
    var res = pipe.Invoke();

    // Get the output, irrelevent.

    pipe.Stop();
    pipe.Dispose();
    remoteRunSpace.Close();
}

どんな助けにも感謝します!
ありがとうございます。

4

1 に答える 1

0

問題は実際にはpowershellライブラリのバグ(または機能)です。GC を強制しても、オブジェクトは死ぬことはありません。

これは、Microsoft のコンサルタントと何時間にもわたって Windbg を行った後の Microsoft の回答です。

実行空間ごとに新しいプロセスを開くことでこの問題を回避でき、win32api を使用してユーザーを渡すことができます。

于 2013-11-12T18:21:08.650 に答える