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();
}
どんな助けにも感謝します!
ありがとうございます。