Назад | Перейти на главную страницу

Включить командную строку для общего доступа к файлам и принтерам - как включить ее только для profile = private

Я знаю, что следующий cmd может включить правило брандмауэра для совместного использования файлов и печати:

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

Но он включает общий доступ к файлам и принтерам для всех профилей.

Я хотел бы включить его только для частного профиля, то есть когда ПК / ноутбуки с Windows подключены к домашней или рабочей сети. Я особенно стараюсь не включать его для ноутбуков, подключенных к общедоступной сети. В идеале обнаружение сети должно быть отключено для общедоступной сети.

я пробовал

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

и переключатель «профиль» отклонен. Итак, как я могу применить правило брандмауэра выборочно?

много спасибо за любой ввод ..

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

Не забудьте запустить от имени администратора.

Вы активируете предустановленное правило, и я предполагаю, что предустановленное правило Profile=any в этом.

Попробуйте сначала:

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

Обходя тему, бывают редкие случаи, когда использование названий на местном языке не работает, т.е. Польский Udostępnianie plików i drukarek (SMB — ruch przychodzący) знак равно File and Printer Sharing (SMB-In). Я считаю, что это как-то связано с обработкой UTF-8 в netsh, поскольку есть сообщения о том, что использование netsh для подключения к сетям Wi-Fi с именем UTF иногда тоже не работает.

В этих случаях используйте PowerShell Set-NetFirewallRule и не зависящий от языка параметр "Имя" (в данном случае FPS-SMB-In-TCP). Использовать Get-NetFirewallRule команда, чтобы получить все правильные имена для ваших правил.

Опираясь на @ Ответ Малдера, чтобы включить его в частном режиме, его необходимо настроить отдельно для каждого правила в «Брандмауэре Защитника Windows в режиме повышенной безопасности».

Чтобы запустить брандмауэр Защитника Windows в режиме повышенной безопасности

Run the following in an Administrative Powershell window ... to review possible rules:

& "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  

Поздно к вечеринке, но именно так вы можете включать и отключать правила брандмауэра для совместного использования файлов и принтеров в частных сетях с помощью Powershell.

Get-NetFirewallRule -DisplayGroup "File and Printer Sharing" -Direction In | where Profile -CLike "*Private*" | Enable-NetFirewallRule

Get-NetFirewallRule -DisplayGroup "File and Printer Sharing" -Direction In | where Profile -CLike "*Private*" | Disable-NetFirewallRule

Команды требуют прав администратора.

Эти команды получают правила входящего брандмауэра в группе отображения общего доступа к файлам и принтерам (как отмечали другие, это может быть локализовано на ваш язык), фильтруются по правилам, которые соответствуют частному профилю (вы можете изменить его на Public или Domain, если хотите вместо этого измените эти правила), и включает или отключает их.

Введите это в командной строке PowerShell с повышенными привилегиями:

Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

У меня это сработало на Windows 10 1703