PowerShell Web Access(简称 PWA)是 Windows Server 的一项实用功能,它本质上是一个基于 IIS 的网关,把 PowerShell 命令行搬到浏览器里。管理员在出差途中或者使用一台不能安装远程桌面客户端的电脑时,只要打开浏览器输入地址,就能对内网服务器执行命令。本文将完整演示在 Windows Server 上从安装到落地的全部配置步骤,并说明安全加固的要点。

一、安装 PowerShell Web Access 功能
PowerShell Web Access 在 Windows Server 2012 及之后的版本中都可以通过“功能”方式安装,不需要额外的下载。这里推荐用 PowerShell 命令行来完成,比在服务器管理器里点鼠标快得多。以管理员身份打开 PowerShell,执行以下命令:
Install-WindowsFeature WindowsPowerShellWebAccess -IncludeManagementTools
安装完成后系统不会自动帮你配置任何东西,这一点和很多角色不一样。功能装好后只会在 C:\Windows\Web\PowerShellWebAccess 目录下放置必要的程序文件,真正的 Web 入口还需要手动执行安装命令。可以用如下命令把 Web 应用程序部署到默认站点:
Install-PswaWebApplication -WebApplicationName "pswa" -UseTestCertificate
执行完毕后,IIS 的默认站点下会出现一个名为 pswa 的应用程序,物理路径指向 C:\Windows\Web\PowerShellWebAccess\wwwroot。-UseTestCertificate 参数会生成一个自签名证书用于测试,生产环境绝对不要用它,后面会讲如何换成正式证书。此时打开 https://服务器IP/pswa 已经能看到登录页面,但还无法登录,因为授权规则还没有配置。
二、配置授权规则限制访问范围
PowerShell Web Access 的安全模型分两层:第一层是授权规则,决定谁能通过网关连到哪台机器;第二层是目标机器自身的认证。默认情况下规则列表为空,也就是所有人都进不来,这是刻意设计的。必须先添加规则:
Add-PswaAuthorizationRule -RuleName "管理员规则" `
-UserName "CONTOSO\admin" `
-ComputerName "SRV-DB01" `
-ConfigurationName "Microsoft.PowerShell"这条规则允许域用户 CONTOSO\admin 通过网关连接到 SRV-DB01 这台机器,并且只能使用 Microsoft.PowerShell 这个会话配置。规则里的 ComputerName 也可以写成 IP 地址,UserName 支持通配符,但强烈不建议用星号放开所有用户,这等于把网关变成了内网的万能入口。
ConfigurationName 是一个容易被忽视的安全细节。如果把它限定为 Microsoft.PowerShell,用户登录后就是普通的管理会话;如果配置了受限的会话端点(通过 Register-PSSessionConfiguration 创建),就能做到只暴露特定命令。可以用 Get-PswaAuthorizationRule 查看现有规则,用 Remove-PswaAuthorizationRule 删除。网关本身的规则存储在内部数据库中,重启服务后依然有效。
三、绑定正式证书与安全加固
测试证书只适合验证流程,生产环境必须换成 CA 签发的正式证书。假设已经从内部 CA 申请了证书并导入到本机证书存储,证书指纹可以通过下面的命令拿到,然后把 IIS 站点绑定替换掉:
# 查找证书指纹
$cert = Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.Subject -like "*pswa.corp.contoso.com*" }
$thumbprint = $cert.Thumbprint
# 修改 IIS 绑定,绑定到 443 端口
New-WebBinding -Name "Default Web Site" -Protocol https -Port 443
Get-WebBinding -Name "Default Web Site" -Protocol https |
ForEach-Object { $_.AddSslCertificate($thumbprint, "My") }注意这里的证书路径 Cert:\LocalMachine\My 是 PowerShell 提供程序风格的路径,其中 My 对应本地计算机的个人证书存储。绑定完成后记得删除之前用 -UseTestCertificate 装上的测试证书绑定,避免有人误连到旧入口。
除了证书,还有几件事必须做。第一,网关服务器要加入域,否则只能用本地账户登录,管理体验和安全性都会打折扣。第二,如果网关部署在外网可达的位置,建议在 IIS 中对 pswa 应用做 IP 限制,只允许公司出口 IP 或 VPN 网段访问。第三,目标机器上的 WinRM 服务必须处于运行状态,可以通过 Get-Service WinRM 确认,必要时执行 Enable-PSRemoting -Force 开启。第四,登录页面支持表单认证,登录失败的请求会记录在 C:\inetpub\logs\LogFiles 下的 IIS 日志中,排查问题时先看这里。
四、常见问题排查思路
配置完成后访问登录页,输入凭据点登录,如果报“无法连接到指定的目标计算机”,最常见的原因有三个:一是目标机 WinRM 没开,二是目标机不在 TrustedHosts 列表里且网关与目标机不是域内互信关系,三是授权规则里的 ComputerName 与登录页面填写的连接名称大小写或格式不一致。排查时可以在网关服务器上先用 Test-WSMan 目标计算机名 验证连通性。
另一个高频问题是登录后界面一直转圈。这多半是网关服务器的 CPU 被其他进程占用,或者 mspswatsvc(PowerShell Web Access 网关相关服务)工作异常,重启该服务通常能解决。如果页面直接返回 500 错误,检查应用程序池 PowerShellWebAccessAppPool 是否被意外停止,以及应用程序池的 .NET CLR 版本是否被改动。整个网关的日志除了 IIS 日志外,还可以在事件查看器的“应用程序和服务日志\Microsoft\Windows”节点下找到相关来源的事件,结合两边日志基本能定位绝大多数故障。
总体来说,PowerShell Web Access 的部署成本很低,一个下午就能搭好并完成加固。它在紧急运维场景下的价值非常突出:任何一台能开浏览器的设备都变成了管理终端,同时授权规则又把风险控制在了可控范围内。只要遵循最小权限原则配置规则、坚持使用正式证书,这个网关完全可以成为运维工具箱里的常备手段。
PowerShell Web AccessWindows Server远程管理修改时间:2026-09-04 00:04:55