来自MVC的Ps WebAdministration仅返回有关当前网站的信息

时间:2016-02-02 16:59:10

标签: c# asp.net asp.net-mvc powershell web-administration

我想要一些简单的事情:列出所有网站(现在只在我自己的IIS7上,但后来用于serverfarm)。 我想使用powershell-4命令,比如Get-WebBinding或Get-Website,因为pShell很容易在其他服务器上远程执行。

我想从Intranet网页触发pShell,以显示服务器场的每个主机的实时域绑定概述。

脚本在Powershell窗口中运行良好,从C#-WIN表单调用它也可以工作,但是从网页调用(MVC5)它只返回页面托管的站点,而不是所有站点..发生了什么? ?

我正在使用网址“http://localwebsite/getsites”直接从浏览器中调用它。

C#代码:

   [ Route("getsites") ]
   public string test(string machine)
    {
     var runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();
        var pipeline = runspace.CreatePipeline();

        //string script = @"Get-Item ""IIS:\sites\*""";
        string script = @"Import-Module WebAdministration; Get-WebBinding";
        pipeline.Commands.AddScript(script);
        pipeline.Commands.Add("Out-String");
        var results = pipeline.Invoke();
        runspace.Close();
        var stringBuilder = new StringBuilder();
        foreach (PSObject obj in results)
        {
            //results has just 1 element
            stringBuilder.AppendLine(obj.ToString());
        }
        var result = stringBuilder.ToString();
        //result contains just the current site instead of all 10 sites
        return result;
}

1 个答案:

答案 0 :(得分:0)

有趣! Get-WebBinding不返回列表中的最后一个站点,而只返回运行c#代码的站点的名称!我使用[路由(" getites"))直接从浏览器调用代码。

测试:

Import-Module WebAdministration 
Get-WebBinding | Out-File "e:\temp\out-file.txt"

使用浏览器调用它(使用上面的mvc-snippet)

http://localwebsiteName.nl/getsites

输出:

protocol                                 bindingInformation                     
--------                                 ------------------                     
http                                     *:80:localwebsiteName.nl   

我仍然不明白为什么,因为IIS应用程序池在我的个人域帐户下运行并具有所有管理员权限..任何人都有想法?

Final update: This behaviour appears a limitation in WebAdminstration package. 
the same Ps-script returns ALL websites (as expected) when executed remotely.
Call seq:
browser > local MVC > pShell > remote pShell > local MVC > browser

为什么我要打扰?因为现在我只需添加名称并启用pShell远程处理即可添加服务器