从具有.net core的IIS服务器获取应用程序池名称和状态

ghg1uchk  于 2022-11-12  发布在  .NET
关注(0)|答案(2)|浏览(301)

我想访问.NET核心应用程序池的名称和状态
我们过去要么手动检查状态,要么使用不同的工具来检查IIS中应用程序池的状态。但使用这些工具进行更新和删除仍然是一项手动工作,人们往往会忘记。
我试图这样做:

public static void GetApplicationPoolNames()
    {
        ServerManager manager = new ServerManager();
        Site defaultSite = manager.Sites["Default Web Site"];

        foreach (Application app in defaultSite.Applications)
        {
            Console.WriteLine(
                "{0} is assigned to the '{1}' application pool.",
                app.Path, app.ApplicationPoolName);
        }
    }

但这只适用于我的本地IIS安装。我喜欢访问不同的IIS服务器并检索此信息。是否有必要将应用程序托管在同一IIS池中?或者它可以是一个独立的项目吗?

lp0sw83n

lp0sw83n1#

这里有两种获取应用程序池信息的方法,第一种方法就像在你的代码中一样,你可以方便快捷地获取本地IIS上的应用程序池信息。

public static void GetPoolName()
    {
        ServerManager server = new ServerManager();
        ApplicationPoolCollection apc = server.ApplicationPools;
        foreach (ApplicationPool pool in apc)
        {
            bool autostart = pool.AutoStart;
            string poolname = pool.Name;

            Console.WriteLine(poolname);
            Console.WriteLine(autostart);
        }
    }

第二个使用DirectoryEntry获取应用池信息,包括远程服务器中的iis。您需要设置服务器名称、用户名和密码,以便拥有权限。更多信息可以参考此link

public static void GetPoolName()
    {
        string uname = "your username";
        string pwd = "passwod";
        string serverName = "remote server";
        DirectoryEntries apppools = new DirectoryEntry("IIS://" + serverName + "/W3SVC/AppPools", uname, pwd).Children;
        foreach (DirectoryEntry pool in apppools)
        {
            int code = (int)pool.InvokeGet("AppPoolState");
            string status;
            switch (code)
            {
                case 2:
                    status = "Running";
                    break;
                case 4:
                    status = "Stopped";
                    break;
                default:
                    status = "Unknown";
                    break;
            }
            Console.WriteLine(pool.Name);
            Console.WriteLine(status);
        }
    }
wfauudbj

wfauudbj2#

如果有人发现这个问题,并且只需要.NET Core中的应用程序池名称

Environment.UserName

保存用户名,默认情况下,该用户名与IIS中的应用程序池名称相同。

相关问题