如何通过代码或脚本程序化添加并管理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
相关产品推荐
相关产品推荐

