可通过Invoke-Command远程执行Set-NetFirewallRule批量启用“文件和打印机共享”规则,需确保WinRM已启用、防火墙放行5985端口、权限充足,并准确匹配规则名(如SMB-In),脚本支持IP/主机名列表及多规则启用。
可以通过 powershell 的 invoke-command 远程执行 set-netfirewallrule 命令,批量启用目标主机上的“文件和打印机共享”相关防火墙规则。关键在于确保远程管理环境就绪、规则名称准确、权限足够,并处理常见失败原因。
确认目标主机支持远程 PowerShell 并已启用 WinRM
远程执行的前提是 WinRM(Windows Remote Management)已配置并运行:
- 在每台目标主机上以管理员身份运行:
winrm quickconfig -quiet或Enable-PSRemoting -Force - 确保防火墙允许 WinRM 流量(默认 TCP 5985/5986),可临时启用:
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -Enabled True - 若跨域或使用非域账户,需在本地主机执行:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force(生产环境建议指定 IP 列表)
识别并启用正确的防火墙规则名称
“文件和打印机共享”实际由多个规则组成,常见名称包括(区分系统语言,以下为英文系统):
-
File and Printer Sharing (Echo Request - ICMPv4-In)(ICMP 通信用) -
File and Printer Sharing (NB-Session-In)(NetBIOS 会话) -
File and Printer Sharing (SMB-In)(核心 SMB 共享规则,必须启用) -
File and Printer Sharing (LLMNR-UDP-In)(本地链路多播名称解析)
建议先在一台目标主机上运行 Get-NetFirewallRule -DisplayGroup "File and Printer Sharing" | Select Name,Enabled 确认确切显示名和当前状态。
编写批量启用脚本(支持 IP 或主机名列表)
以下脚本读取主机列表,逐台启用 SMB-In 和 Echo Request 规则(最常用组合):
$Computers = Get-Content "C:\servers.txt" # 每行一个主机名或IP
$RulesToEnable = @("File and Printer Sharing (SMB-In)", "File and Printer Sharing (Echo Request - ICMPv4-In)")
<p>foreach ($comp in $Computers) {
Write-Host "正在配置 $comp..." -ForegroundColor Green
try {
Invoke-Command -ComputerName $comp -ScriptBlock {
param($ruleNames)
foreach ($r in $ruleNames) {
$rule = Get-NetFirewallRule -DisplayName $r -ErrorAction SilentlyContinue
if ($rule) {
Set-NetFirewallRule -DisplayName $r -Enabled True -Profile Any
Write-Host "✓ 已启用: $r" -ForegroundColor Cyan
} else {
Write-Host "⚠ 未找到规则: $r" -ForegroundColor Yellow
}
}
} -ArgumentList $RulesToEnable -ErrorAction Stop
}
catch {
Write-Host "✗ $comp 执行失败: $($_.Exception.Message)" -ForegroundColor Red
}
}</p>
注意:
• 脚本需在具有目标主机本地管理员权限的账户下运行
• 若目标为中文系统,请将规则名替换为对应中文显示名(如“文件和打印机共享(SMB-入)”)
• 使用 -Profile Any 确保规则在域、专用、公用网络均生效
验证与故障排查要点
启用后建议快速验证:
- 在本地用
Test-NetConnection $target -Port 445检查 SMB 端口连通性 - 在目标主机运行
Get-NetFirewallRule -DisplayName "File and Printer Sharing (SMB-In)" | Select Enabled, Profile确认状态 - 常见失败原因:
– 当前用户无远程主机管理员权限
– WinRM 服务未运行或监听地址受限
– 防火墙拦截了 WinRM 自身通信(5985端口)
– 组策略禁用了“允许入站远程管理例外”或覆盖了防火墙设置











