启用文件和打印共享命令行 - 如何仅为 profile=private 启用它

启用文件和打印共享命令行 - 如何仅为 profile=private 启用它

我知道以下 cmd 可以启用文件和打印共享防火墙规则:

netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes

但它会为所有配置文件启用文件和打印共享。

我想只为私人配置文件启用它,即当 Windows PC/笔记本电脑连接到家庭或工作网络时。我特别避免为连接到公共网络的笔记本电脑打开它。理想情况下,公共网络的网络发现应该关闭。

我试过了

netsh advfirewall firewall set rule group=”File and Printer Sharing” profile=private new enable=Yes

并且“配置文件”开关被拒绝。那么我该如何有选择地应用防火墙规则呢?

非常感谢您的任何意见。

答案1

您正在激活一条预设规则,我猜测该预设规则中包含以下内容Profile=any

首先尝试一下:

netsh advfirewall firewall set rule group="File and Printer Sharing" new profile=private

答案2

netsh advfirewall firewall set rule name="File and Printer Sharing (SMB-In)" dir=in profile=public|private|domain new enable=Yes|No

要同时设置三个配置文件,请使用:

netsh advfirewall firewall set rule name="File and Printer Sharing (SMB-In)" dir=in new enable=Yes

规则名称必须改成你当地的语言,例如:

netsh advfirewall firewall set rule name="檔案及印表機共用 (SMB-In)" dir=in profile=private new enable=Yes

不要忘记以管理员身份运行。

答案3

围绕这个主题,在极少数情况下,使用本地语言名称不起作用,即波兰语Udostępnianie plików i drukarek (SMB — ruch przychodzący)= File and Printer Sharing (SMB-In)。我相信这与 netsh 中的 UTF-8 处理有关,因为有报告称使用 netsh 连接到 UTF 命名的 wifi 网络有时也不起作用。

在这些情况下,请使用 PowerShellSet-NetFirewallRule和与语言无关的“名称”参数(在本例中为FPS-SMB-In-TCP)。使用Get-NetFirewallRule命令获取规则的所有正确名称。

答案4

构建于@Mulder 的回答,若要启用其私人模式,需要在“高级安全 Windows Defender 防火墙”中针对每条规则进行专门设置​​。

运行高级安全 Windows Defender 防火墙

在管理 Powershell 窗口中运行以下命令...以查看可能的规则:

& "C:\WINDOWS\system32\mmc.exe" "C:\WINDOWS\system32\wf.msc" 

仅允许在专用网络上访问文件/打印

在管理 Powershell 窗口中运行以下命令。

# Allow access to administrative shares through firewall [Ref: https://serverfault.com/a/968310/336668]

$ruleDisplayNames = "File and Printer Sharing (Echo Request - ICMPv4-In)", `
  "File and Printer Sharing (Echo Request - ICMPv6-In)",  `
  "File and Printer Sharing (LLMNR-UDP-In)",  `
  "File and Printer Sharing (NB-Datagram-In)",  `
  "File and Printer Sharing (NB-Name-In)",  `
  "File and Printer Sharing (SMB-In)",  `
  "File and Printer Sharing (Spooler Service - RPC)",  `
  "File and Printer Sharing (Spooler Service - RPC-EPMAP)", `
  "File and Printer Sharing (NB-Session-In)"

$rules = Get-NetFirewallRule | Where {$ruleDisplayNames -contains $_.DisplayName -and $_.Profile -ne "Domain"} 

# The default rules have the non-Domain rule apply for both Public and
#  Private. This updates the rule to be Private only
$rules | Set-NetFirewallRule -Profile Private

# Enable the rule -- i.e. grant the eexception (allow through firewall)
$rules | Enable-NetFirewallRule  

相关内容