1

以下命令在直接从 powershell 调用时有效,但在 ASP.NET 应用程序中调用时无效。

Invoke-Command -ComputerName remotesrv -ScriptBlock { 5 }

我想,存在某种用户权限问题,但此时我被卡住了,不知道如何解决这个问题。

ASP.NET 代码如下所示:

System.Threading.Tasks.Task.Factory.StartNew(() =>
    {
        using (PowerShell powershell = PowerShell.Create())
        {
            var rs = "-ComputerName remotesrv";
            powershell.AddScript("Set-ExecutionPolicy RemoteSigned");
            var script = String.Format("Invoke-Command {0} -scriptblock {{ 5 }}", rs);
            powershell.AddScript(script);

            powershell.InvocationStateChanged += delegate(object sender, PSInvocationStateChangedEventArgs e)
            {
                if (e.InvocationStateInfo.State == PSInvocationState.Completed)
                {
                    // Clean up
                }
            };

            var output = new PSDataCollection<PSObject>();
            output.DataAdded += delegate(object sender, DataAddedEventArgs e)
            {
                PSDataCollection<PSObject> myp = (PSDataCollection<PSObject>)sender;
                Collection<PSObject> results = myp.ReadAll();
                foreach (PSObject result in results)
                {
                    if (result.BaseObject is int)
                    {
                        // Do something in the database
                    }
                }
            };

            IAsyncResult asyncResult = powershell.BeginInvoke<PSObject, PSObject>(null, output);
            asyncResult.AsyncWaitHandle.WaitOne();
        }
    }
);

如果我不添加-ComputerName remotesrv,则执行脚本。

您需要做什么才能从 ASP.NET 应用程序远程调用 powershell 脚本?

4

2 回答 2

0

我建议您通读Powershell 远程处理要求,特别是用户权限部分。默认情况下,创建连接的帐户必须是远程计算机上的管理员。如果您的 Web 应用程序在远程计算机上以非管理员身份运行,则连接将失败。请注意,这是默认行为,可以通过调整远程机器上的会话配置来更改。

于 2014-06-17T00:42:23.913 回答
0

我有同样的问题,我的解决方案是更改执行 IIS 应用程序池的用户。在设置 Enable-PsRemoting -Force 和 Set-ExecutionPolicy Unrestricted,(也许最好离开 ExecutionPolicy RemoteSigned),invoke-command 仍然不起作用。然后我转到任务管理器,进程选项卡并查看 w3wp.exe,执行该进程的用户是“DefaultAppPool”,我猜这个用户没有远程访问或在 PowerShell 上执行的权限。(图片显示管理员,因为我已经更改了它)

在此处输入图像描述

要更改用户,请转到 IIS 管理器,在应用程序组中,我的站点的应用程序组显示在标识中:ApplicationPoolIdentity,选择应用程序池并单击高级设置,在进程模型中,选择标识并单击省略号(带有三个点的按钮) . 在个人帐户设置一个管理员帐户的用户名和密码,重新启动 IIS。

在此处输入图像描述

如果我通过任务管理器查看,iis 用户已更改

于 2015-01-15T17:16:13.627 回答