Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Клиентские ОС Microsoft » Microsoft Windows 10 » Разное - [решено] Сделать все сетевые подключения приватными

Ответить
Настройки темы
Разное - [решено] Сделать все сетевые подключения приватными

Ветеран


Сообщения: 537
Благодарности: 12

Профиль | Отправить PM | Цитировать


Всем привет!
Стоит задача сделать все сети приватными, в том числе для всех новых подключений.
У меня ОС Windows 10 с пользователем admin и произвольным паролем.
Руководствуюсь этой статьёй https://www.winhelponline.com/blog/t...cific-network/
Создаю триггер:
Код: Выделить весь код
<QueryList>
    <Query Id="0" Path="System">
        <Select Path="Microsoft-Windows-NetworkProfile/Operational">
            *[System[(EventID=10000)]] and *[EventData[(Data[@Name="Category"]="0")]]
        </Select>
    </Query>
</QueryList>
Проблема в том, что моё задание ни всегда отрабатывает. Вообще, я ожидаю, что оно будет выполняться всякий раз когда я включаю компьютер независимо от входа пользователя, но похоже это работает как-то иначе. Сразу скажу, что на Windows 7 точно такое же задание с теми же параметрами в планировщике работает исправно. Я конечно же в свойствах задания ставлю флажок «Выполнять вне зависимости от регистрации пользователя» и «Выполнять с наивысшими правами».
Изучая журнал событий, я вижу, что произошло событие с EventID=10000, но моё задание даже не пыталось выполниться.
Заметил, что если запустить систему и в течение нескольких минут авторизоваться в системе под пользователем admin, то задание выполняется успешно. Если же я после включения системы не ввожу данные пользователя, но после некоторого простоя, всё же авторизуюсь под пользователем admin, вижу что моё задание не выполнялось.

Подскажите, что я делаю неправильно...
Заранее спасибо.

Отправлено: 11:02, 16-12-2020

 

Ветеран


Сообщения: 537
Благодарности: 12

Профиль | Отправить PM | Цитировать


Vadikan, я поблагодарил за скрипт
Код: Выделить весь код
# Skip network location setting for pre-Vista operating systems
if([environment]::OSVersion.version.Major -lt 6) { return }
# Skip network location setting if local machine is joined to a domain.
if(1,3,4,5 -contains (Get-WmiObject win32_computersystem).DomainRole) { return }
# Get network connections
$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
$connections = $networkListManager.GetNetworkConnections()
# Set network location to Private for all networks
$connections | % {$_.GetNetwork().SetCategory(1)}
Насчёт анализа события несколько не понял... Если в моём случае планировщик не может корректно отловить событие с ID = 10000 в принципе во время запуска ОС. Очевидно же, что до анализа скриптом дело не дойдёт...

Цитата Anton04:
Вполне возможно. Тогда нужно менять в GPO и делать "ждать загрузку сети". »
Ставить для всех сетей частная и тогда при инициализации они сразу будут такими ?

Отправлено: 13:40, 17-12-2020 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Цитата berkut_174:
Насчёт анализа события несколько не понял... Если в моём случае планировщик не может корректно отловить событие с ID = 10000 в принципе во время запуска ОС. Очевидно же, что до анализа скриптом дело не дойдёт... »
Я же вам предложил задержку, но вы отмели это почему-то
Цитата berkut_174:
Цитата:
Цитата Vadikan:
- выполнять задание с задержкой, задавая это в настройках задания или в скрипте »
Ненадёжно, на одной машине сработает, на другой нет, да и не всегда такая задержка помогает, к сожалению. Статистика плачевная тут у меня. »
Я не понимаю, в чем здесь ненадежность и почему задержка не помогает.


Через пять минут после запуска ОС запускается скрипт и анализирует события. В примере моего скрипта только последнее, но ничто не мешает выбирать последние N и перебирать их с ForEach-Object.

Поскольку повторяться мне уже поднадоело, я ожидаю конкретных результатов отработки скрипта с разных машин, запущенного с условием выше.
Код: Выделить весь код
$e = Get-WinEvent -Maxevents 5 -FilterHashtable @{logname="Microsoft-Windows-NetworkProfile/Operational"; id=10000} 
$e | ForEach-Object {
    $xml = [xml]$_.ToXml()
    $SSID = $xml.Event.EventData.Data[1]."#text"
    #if ($SSID -notlike '*iden*') {Set-NetConnectionProfile -Name $SSID -NetworkCategory "Private"}
    if ($SSID -notlike '*iden*') {Get-Date; $SSID | Out-File C:\temp\ssid.txt -Append}
}

Отправлено: 14:46, 17-12-2020 | #22


Ветеран


Сообщения: 537
Благодарности: 12

Профиль | Отправить PM | Цитировать


Vadikan, отмёл я вариант с задержкой, потому что мне он не очень нравится, ну вдруг будет все пять минут сеть отсутствовать...

В итоге, пришёл к двум рабочим вариантам:
  • скрипт отсюда https://superuser.com/a/728776 и триггер при запуске без задержки
  • мой скрипт с командой, которую я приводил в #15 сообщении, с двумя триггерами — при запуске без задержки и при наступлении события с ID = 10000 and Category=0

Поэтому окончательный вариант буду использовать такой:
Код: Выделить весь код
$userid = "NT AUTHORITY\SYSTEM"
$taskname = "Set all network profiles to private"
$principal = New-ScheduledTaskPrincipal -UserId $userid -LogonType ServiceAccount
$trigger = @($(New-ScheduledTaskTrigger -AtStartup))
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -StartWhenAvailable
$execute = "powershell"
$argument = "-WindowStyle Hidden -command `"[Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).GetNetworkConnections() | % {`$_.GetNetwork().SetCategory(1)}`""
$action = New-ScheduledTaskAction -Execute $execute -Argument $argument
$cimclass = cimclass MSFT_TaskEventTrigger root/Microsoft/Windows/TaskScheduler
$triggerevent = $cimclass | New-CimInstance -ClientOnly
$triggerevent.Enabled = $true
$triggerevent.Subscription = "<QueryList><Query Id='0' Path='System'><Select Path='Microsoft-Windows-NetworkProfile/Operational'>*[System[(EventID=10000)]] and *[EventData[(Data[@Name='Category']='0')]]</Select></Query></QueryList>"
Register-ScheduledTask -TaskName $taskname -Action $action -Trigger $trigger -Settings $settings -Principal $principal
Set-ScheduledTask -TaskName $taskname -Trigger $((Get-ScheduledTask -TaskName $taskname).triggers + $triggerevent)
Далее мусолить тему не вижу смысла...
Всем спасибо!

Последний раз редактировалось berkut_174, 17-12-2020 в 16:26.


Отправлено: 16:03, 17-12-2020 | #23


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


berkut_174, я вижу, что вы довольны, но все-таки хотелось бы добить вопрос с точки зрения эффективности.

Как я понял, задержка вас не устроила из-за того, что сети могут очень долго проходить идентификацию (обозначу их И).

Но это ведь легко решается тем же скриптом.
1. Берем все сети и смотрим, есть ли там И.
2. Если
- нет, назначаем всем сетям частный профиль и завершаем скрипт
- да, ставим скрипт на паузу N минут, после чего возвращаемся к п.1

Рано или поздно сеть должна либо идентифироваться, либо стать неидентифицированной. Ну и в конце концов можно в скрипте задать число таких проверок, скажем 6 каждые 10 минут.

При этом политикой для всех И задан частный профиль.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 16:36, 18-12-2020 | #24



Компьютерный форум OSzone.net » Клиентские ОС Microsoft » Microsoft Windows 10 » Разное - [решено] Сделать все сетевые подключения приватными

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как скрыть значок определённого подключения из папки "сетевые подключения"? Solnyshko Хочу все знать 6 06-06-2020 10:36
Прочее - Сетевые подключения: два подключения..одно вроде через другой комп AVERm Сетевые технологии 7 07-04-2010 15:22
Интернет - [решено] Пропали все сетевые подключения и вновь не создаются MXMX Microsoft Windows 2000/XP 7 20-05-2009 19:09
[решено] Не видны подключения по локальной сети в папке "Сетевые подключения" Skoba Microsoft Windows NT/2000/2003 12 08-10-2007 09:06
сетевые подключения Daniil Сетевые технологии 3 19-09-2003 11:05




 
Переход