首页 / 资讯中心 / 文章详情

Windows Server 2012 R2 离线安装 IIS 全攻略:从版本确认到验证

Windows Server 2012 R2 离线安装 IIS 全攻略:从版本确认到验证 ★ FEATURED ARTICLE
简介这份离线安装包面向需要在无外网环境中为 Windows Server 2012 R2 部署或更新 IIS 的 IT 管理员与运维人员解决内网、隔离机房或严格网络安全策略下无法在线拉取系统组件的问题。压缩包共 1568 个文件约 99.04MB以 dll 动态库、resx 资源文件、exe 可执行程序为主辅以 aspx 页面、config 配置、sql 脚本、browser 浏览器定义及 tlb、targets 等组件描述文件完整覆盖 IIS 角色与 Side-by-Side 组件存储所需内容。已有 572 人学习下载说明其在同类离线部署场景中具备一定参考价值。资源保留了 IIS 各功能模块的原始文件结构便于通过 DISM 指定源路径添加 Web 服务器角色也方便管理员按模块排查组件缺失、核对版本依赖是内网服务器搭建 Web 服务时较为实用的基础素材。1. 内网服务器上装 IIS离线包救了我一次上个月给某公司内网一台 Windows Server 2012 R2 补装 IIS机器不通外网服务器管理器里点「添加角色和功能」走到一半就卡在「正在获取可用源」进度条不动日志里全是找不到源文件的报错。这台机器是业务前置机不能重装系统也不能临时开外网只能走离线安装这条路。Windows Server 2012 R2 的 IIS 离线安装包本质是把Microsoft-Windows-IIS-*这一组角色和功能组件按 CBS 包格式打包配合DISM或Install-WindowsFeature的-Source参数指定本地源目录来装。装不好会怎样轻则角色装一半回滚系统里留下半残的 IIS 服务项重则 CBS 存储被污染后续任何角色都装不上。这篇笔记写给两类人一是内网、隔离网里必须把 IIS 装起来的运维二是想搞清楚-Source到底该指向哪个目录、/LimitAccess为什么必须加的开发者。下面按「先对版本、再放源、后装、最后验证」的顺序走一遍。2. 装前对版本2012 R2 的 IIS 源到底要哪些文件2.1 先确认系统版本和 CBS 状态离线装 IIS 翻车最多的原因不是包不对是系统版本对不上。Windows Server 2012 R2 的版本号是6.3.9600和 Windows Server 20126.2.9200是两个东西源文件不能混用。装之前先开一个管理员权限的 PowerShell把版本和 CBS 健康状态确认一遍# 确认系统版本必须是 6.3.9600 才是 2012 R2 [System.Environment]::OSVersion.Version # 查看当前已安装的角色和功能确认 IIS 是否已部分安装 Get-WindowsFeature -Name Web-Server, Web-Mgmt-Tools # 检查组件存储健康状态Healthy 才能继续 DISM /Online /Cleanup-Image /CheckHealth第一行输出Major Minor Build Revision四段6 3 9600就是 2012 R2。第二行如果Web-Server的Install State显示Available说明还没装如果显示Install Pending或者装了一半报错得先清理再装。第三行CheckHealth只做快速检查返回No component store corruption detected才算干净。我一般还会补一条DISM /Online /Cleanup-Image /ScanHealth它比CheckHealth扫得细耗时几分钟但能提前发现 CBS 损坏避免装到一半才炸。提示CheckHealth和ScanHealth都不改系统只读检查真正修复要用/RestoreHealth但离线环境没有源修不了所以这一步只做「能不能装」的判断。2.2 离线源目录该放什么、放哪2012 R2 的 IIS 离线源标准做法是从同版本、同补丁级别的安装介质ISO 或install.wim里提取sources\sxs目录。这个目录里是 CBS 格式的.cab包IIS 角色依赖的Microsoft-Windows-IIS-WebServer、Microsoft-Windows-IIS-WebServerRole、Microsoft-Windows-IIS-ManagementConsole等都在里面。把整个sxs目录拷到目标机器本地磁盘比如D:\sxs不要放网络共享路径——Install-WindowsFeature在部分补丁级别下对 UNC 路径支持不稳本地路径最省心。目录结构大致是这样装之前扫一眼确认关键包在路径内容是否必需D:\sxs\所有 CBS 包根目录必需D:\sxs\Microsoft-Windows-IIS-WebServer-Package~*.cabIIS 核心 Web 服务器包必需D:\sxs\Microsoft-Windows-IIS-ManagementConsole-Package~*.cabIIS 管理器图形界面按需D:\sxs\Microsoft-Windows-IIS-ASPNET45-Package~*.cabASP.NET 4.5 支持按需D:\sxs\Microsoft-Windows-IIS-HttpLogging-Package~*.cab日志模块建议保留如果源目录是从别的机器拷来的注意补丁级别要一致。2012 R2 装过不同累积更新的机器sxs里的包版本号会不同混用会出现「源文件版本与目标系统不匹配」的报错。最稳的做法是拿目标机器同批次、同补丁基线的那台机器的sxs或者直接用原始 ISO 挂载后拷sources\sxs。2.3 用 DISM 还是 Install-WindowsFeature两条路都能装区别在参数和报错信息。Install-WindowsFeature是 PowerShell 封装报错友好适合交互式操作DISM /Online /Enable-Feature更底层适合脚本化和排错。我一般先用Install-WindowsFeature试失败再切DISM看详细日志。两者的源参数写法不同前者是-Source D:\sxs后者是/Source:D:\sxs别写混。3. 正式安装三条命令把 IIS 装干净3.1 最小化安装 Web-Server 角色先只装核心 Web 服务器角色把依赖链跑通再按需加管理工具和 ASP.NET。这样出问题时范围小好定位# 只装核心 Web 服务器角色指定本地离线源禁止联网找源 Install-WindowsFeature -Name Web-Server -Source D:\sxs -IncludeAllSubFeature:$false -Restart:$false-Name Web-Server是角色名不是显示名「Web 服务器(IIS)」写错会报找不到功能。-Source D:\sxs指向本地源目录路径末尾不要带反斜杠带了在某些版本上会解析失败。-IncludeAllSubFeature:$false表示只装角色本体不连带所有子功能——IIS 的子功能有几十个全装会拖慢速度还引入不必要的组件。-Restart:$false先不自动重启等确认装完再决定。这条命令跑完输出里Success为True、Restart Needed为No才算干净通过。3.2 补管理工具和常用子功能核心角色装好后按业务需要补 IIS 管理器和 ASP.NET 支持。管理工具是图形化运维的刚需ASP.NET 4.5 是很多老业务系统的前提# 补装 IIS 管理器、ASP.NET 4.5、静态内容压缩等常用子功能 Install-WindowsFeature -Name Web-Mgmt-Tools, Web-Asp-Net45, Web-Stat-Compression, Web-Http-Logging -Source D:\sxs -Restart:$falseWeb-Mgmt-Tools是 IIS 管理器所在的父功能装了它inetmgr命令才能用。Web-Asp-Net45对应 ASP.NET 4.5注意 2012 R2 默认带的是 .NET 4.5如果业务要 4.6 得单独装运行时IIS 这边只负责注册处理程序。Web-Stat-Compression和Web-Http-Logging是生产环境几乎必开的前者省带宽后者是排障黑匣子。多个功能名用逗号分隔一条命令装完比一个个装快也少几次 CBS 事务提交。3.3 用 DISM 兜底并看详细日志如果Install-WindowsFeature报错但信息含糊切DISM重跑同一批功能它会把失败包名和错误码打出来# DISM 方式装 IIS 核心角色/LimitAccess 强制不联网 DISM /Online /Enable-Feature /FeatureName:IIS-WebServerRole /Source:D:\sxs /LimitAccess /LogPath:C:\iis_install.log/FeatureName:IIS-WebServerRole是 DISM 侧的角色名和 PowerShell 的Web-Server不是同一个命名体系别照抄。/LimitAccess是关键参数它告诉 DISM 不要去找 Windows Update 做备用源离线环境不加这个DISM 会卡在联网超时上很久。/LogPath把日志单独落到C:\iis_install.log装失败时直接搜Error和包名比翻C:\Windows\Logs\CBS\CBS.log快得多。装完记得把日志留着后面排查用得上。4. 避坑与排查五条血泪记录4.1 报错 0x800f0906源文件找不到现象是Install-WindowsFeature返回0x800f0906提示「无法下载源文件」。原因通常是-Source路径写错、sxs目录不完整或者系统在找源时优先走了 Windows Update 而没走本地。解决分三步先Test-Path D:\sxs确认目录在再确认sxs下有Microsoft-Windows-IIS-WebServer-Package~*.cab这类包最后在命令里显式加-LimitAccessPowerShell 侧对应的是确保没有联网回退必要时改用 DISM 的/LimitAccess。我遇到过路径末尾多一个反斜杠导致解析失败的情况去掉就好。4.2 装到一半回滚CBS 留下半残状态现象是安装进度到某个百分比后回滚Get-WindowsFeature里 IIS 显示Install Pending。原因是 CBS 事务提交失败常见于源包版本和目标系统补丁级别不一致。解决先DISM /Online /Cleanup-Image /StartComponentCleanup清理挂起事务再Get-WindowsFeature确认状态回到Available然后换一份与目标机器补丁基线一致的sxs重装。别在Install Pending状态下硬装第二次会把 CBS 搞得更乱。4.3 管理工具装了但 inetmgr 打不开现象是Web-Mgmt-Tools显示已安装但运行inetmgr提示找不到命令或界面空白。原因是只装了父功能没装子功能或者 IIS 管理服务WMSVC没起。解决确认Web-Mgmt-Console子功能在Get-WindowsFeature里是Installed再Get-Service WMSVC看服务状态没起就Start-Service WMSVC并设成自动。图形界面依赖 .NET 和 WMI如果系统 .NET 有问题管理器也会白屏这时看事件查看器里.NET Runtime的报错。4.4 离线源放网络共享装到一半断连现象是源放 UNC 路径\\fileserver\sxs安装中途报网络相关错误。原因是Install-WindowsFeature在部分补丁级别下对 UNC 源的访问不稳定尤其跨网段时。解决把sxs整个拷到目标机器本地磁盘再装几百 MB 到 1 GB 左右拷一次省心。拷完用Get-FileHash对一下关键包的哈希防止拷贝损坏。4.5 装完 IIS 但网站 500缺 ASP.NET 注册现象是 IIS 起来了静态页能开.aspx页面报 500.19 或 500.21。原因是 ASP.NET 4.5 功能装了但没向 IIS 注册处理程序。解决用管理员权限跑%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i把 ASP.NET 重新注册到 IIS。注意 2012 R2 上这个命令已被标记弃用但在离线补装场景下仍然有效跑完iisreset重启 IIS 再测。5. 装完怎么验证三条命令确认 IIS 真跑通装完不等于跑通我习惯用三条命令做收尾验证缺一条都不算完。第一条看角色状态第二条看服务第三条发一个本地 HTTP 请求# 1. 确认角色和关键子功能都是 Installed Get-WindowsFeature -Name Web-Server, Web-Mgmt-Tools, Web-Asp-Net45 | Format-Table Name, InstallState # 2. 确认 W3SVC 和 WMSVC 服务在跑启动类型为自动 Get-Service W3SVC, WMSVC | Format-Table Name, Status, StartType # 3. 本地发请求看是否返回 200 (Invoke-WebRequest -Uri http://localhost -UseBasicParsing).StatusCode第一条输出里三个功能的InstallState都必须是Installed有一个Available就说明没装全。第二条W3SVC是 World Wide Web 发布服务WMSVC是管理服务两个都得Running、AutomaticW3SVC没起的话http://localhost直接连不上。第三条返回200说明默认站点和静态处理链路通了如果返回503多半是应用程序池没起去Get-IISAppPool看状态。再补一个更贴近业务的验证放一个测试页到C:\inetpub\wwwroot\test.html内容随便写一行然后浏览器或Invoke-WebRequest访问http://localhost/test.html能出内容说明静态文件服务正常。如果业务要跑 ASP.NET再放一个.aspx测试页能出结果才说明 4.5 注册没问题。这套验证我一般写成一个小脚本存着每次装完 IIS 跑一遍比人肉点界面靠谱。注意验证阶段别急着开防火墙入站规则对外放端口先在本地localhost验证通再按业务需要开 80/443避免装完就暴露一个半配置的站点。从那以后我每次离线装 IIS都强制走一遍「版本确认 → CBS 健康检查 → 本地源校验 → 最小化安装 → 三条验证」这个顺序一步不跳。跳过哪步后面就得花几倍时间在日志里找原因。这套流程在 2012 R2 上跑了不下十台机器最慢的一台也就四十分钟装完验证完。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站