You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码或脚本程序化添加并管理IIS站点?

如何通过代码/脚本管理IIS站点(无需UI)

当然可以!IIS提供了好几种可编程的管理方式,完全能满足你通过主站点后台批量管理子站点的需求,下面我给你拆解两种最实用的方案:

方案一:用C#直接调用IIS管理API(首推)

IIS官方专门提供了Microsoft.Web.Administration这个.NET类库,能让你直接在C#代码里完成所有站点管理操作,不需要绕PowerShell,代码更简洁、性能也更优。

第一步:安装依赖包

先在你的.NET项目里安装这个NuGet包:

Install-Package Microsoft.Web.Administration

第二步:核心操作代码示例

下面是你需要的几个常用操作的完整代码:

1. 新增子站点

using Microsoft.Web.Administration;

// 初始化IIS服务器管理器
var serverManager = new ServerManager();
// 添加站点:参数依次是站点名称、协议、绑定(这里是8080端口)、物理路径
var newSite = serverManager.Sites.Add("子站点Demo", "http", "*:8080:", @"C:\inetpub\wwwroot\DemoSite");
// 如果需要绑定HTTPS,可添加下面这行(替换成你的SSL证书哈希值)
// newSite.Bindings.Add("*:443:", "你的证书哈希值", "My");
// 提交变更到IIS
serverManager.CommitChanges();

2. 启动/停止指定站点

using Microsoft.Web.Administration;
using System.Linq;

var serverManager = new ServerManager();
// 根据站点名称找到目标站点
var targetSite = serverManager.Sites.FirstOrDefault(s => s.Name == "子站点Demo");
if (targetSite != null)
{
    // 启动站点
    targetSite.Start();
    // 如果要停止,替换成下面这行
    // targetSite.Stop();
    serverManager.CommitChanges();
}

3. 修改站点物理路径(指向新目录)

using Microsoft.Web.Administration;
using System.Linq;

var serverManager = new ServerManager();
var targetSite = serverManager.Sites.FirstOrDefault(s => s.Name == "子站点Demo");
if (targetSite != null)
{
    // 获取站点的根应用
    var rootApp = targetSite.Applications["/"];
    // 修改根虚拟目录的物理路径
    rootApp.VirtualDirectories["/"].PhysicalPath = @"C:\inetpub\wwwroot\NewDemoPath";
    serverManager.CommitChanges();
}

重要提示:运行这段代码的应用程序池需要拥有IIS管理员权限,你可以直接在IIS里给主站点的应用程序池配置合适的权限,或者在代码里用身份模拟来提升权限(如果场景需要的话)。

方案二:写PowerShell脚本,再用C#调用执行

如果你的场景需要和已有的PowerShell自动化流程整合,或者有复杂的批量操作需求,也可以先写好PowerShell脚本,再在C#里调用执行。

第一步:PowerShell脚本示例

比如新增站点的脚本Create-IISSite.ps1:

param(
    [string]$SiteName,
    [string]$PhysicalPath,
    [int]$Port
)

# 导入IIS管理模块
Import-Module WebAdministration
# 创建站点,-Force参数覆盖已存在的同名站点
New-WebSite -Name $SiteName -PhysicalPath $PhysicalPath -Port $Port -Force

停止站点的脚本Stop-IISSite.ps1:

param(
    [string]$SiteName
)

Import-Module WebAdministration
Stop-WebSite -Name $SiteName

第二步:C#调用PowerShell脚本

using System.Management.Automation;

// 创建PowerShell实例
var ps = PowerShell.Create();
// 指定要执行的脚本路径,传入参数
ps.AddCommand(@"C:\Scripts\Create-IISSite.ps1")
  .AddParameter("SiteName", "子站点Demo2")
  .AddParameter("PhysicalPath", @"C:\inetpub\wwwroot\DemoSite2")
  .AddParameter("Port", 8082);

// 执行脚本并获取结果
var executionResults = ps.Invoke();
// 处理执行中的错误
if (ps.HadErrors)
{
    foreach (var error in ps.Streams.Error)
    {
        // 这里可以把错误记录到日志或者返回给前端
        Console.WriteLine(error.ToString());
    }
}

注意:运行C#程序的账号需要有执行PowerShell脚本的权限,并且需要先设置PowerShell执行策略(比如用Set-ExecutionPolicy RemoteSigned命令允许运行本地脚本)。

方案选择建议

  • 如果你的主站点是.NET技术栈,优先选方案一:代码更直接,不需要额外依赖PowerShell,维护成本更低,也更适合集成到主站点的后台逻辑里。
  • 如果需要复用已有的PowerShell自动化脚本,或者有大量批量操作的需求,可以选择方案二。

这两种方案都能完美支撑你管理数十个子站点的场景,从新增、启停到修改路径的所有操作都能覆盖,完全不需要手动操作IIS UI。

内容的提问来源于stack exchange,提问作者Be Kind To New Users

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:19:37