Войти

Показать полную графическую версию : [решено] Сделать все сетевые подключения приватными


Страниц : [1] 2

berkut_174
16-12-2020, 11:02
Всем привет!
Стоит задача сделать все сети приватными, в том числе для всех новых подключений.
У меня ОС Windows 10 с пользователем admin и произвольным паролем.
Руководствуюсь этой статьёй https://www.winhelponline.com/blog/trigger-launch-program-script-connecting-to-specific-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, вижу что моё задание не выполнялось.

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

Vadikan
16-12-2020, 14:01
Вообще, я ожидаю, что оно будет выполняться всякий раз когда я включаю компьютер независимо от входа пользователя »
Для этого надо настроить сей аспект (http://www.outsidethebox.ms/20351/#_Toc135), а как у вас настроено никто кроме вас не знает. Экспортируйте задание что-ли... или скриншоты вкладки Общие хотя бы.

berkut_174
16-12-2020, 14:41
никто кроме вас не знает »
Сразу не сообразил...

Исправился:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2020-12-16T16:31:46.8055806</Date>
<Author>WIN10\admin</Author>
<URI>\change the network to private</URI>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="System"&gt;&lt;Select Path="Microsoft-Windows-NetworkProfile/Operational"&gt;
*[System[(EventID=10000)]] and *[EventData[(Data[@Name="Category"]="0")]]
&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\start.cmd</Command>
</Exec>
</Actions>
</Task>

berkut_174
16-12-2020, 15:18
Я вот похоже действительно где то неправильно делаю...
Слабал сейчас задание на основе команд по вашей ссылке, вроде пока всегда нормально меняется, проверю ещё более детально.
Спасибо, хоть по-человечески теперь задания создавать научился....

Vadikan
16-12-2020, 15:54
berkut_174, там дело не в командах, а в том:
- для одной или всех УЗ выполняется
- от имени какой УЗ выполняется
- сохранен ли пароль для УЗ, если он имеется

Команды - лишь средство настройки тем или иным образом.

berkut_174
16-12-2020, 17:36
Vadikan
Пароль я сохранял, сейчас сделал от имени системы, пароль admin не запрашивался.
В итоге, всё то же самое — система запустилась, событие есть в журнале, но моё задание даже не пыталось запуститься. Ждал я примерно около 120 секунд, потом вошёл под пользователем и сделал снимки (https://ibb.co/6sD19dx, https://ibb.co/hKsQ3HC).

Добавлял в этот раз вот так:

$userid = "NT AUTHORITY\SYSTEM"
$taskname = "Change the network to private"
$principal = New-ScheduledTaskPrincipal -UserId $userid -LogonType ServiceAccount
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -StartWhenAvailable
$action = New-ScheduledTaskAction -Execute "C:\change_network_private.cmd"
$cimclass = cimclass MSFT_TaskEventTrigger root/Microsoft/Windows/TaskScheduler
$trigger = $cimclass | New-CimInstance -ClientOnly
$trigger.Enabled = $true
$trigger.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 task
Register-ScheduledTask -TaskName $taskname -Action $action -Settings $settings -Principal $principal
# add trigger
Set-ScheduledTask -TaskName $taskname -Trigger $trigger

berkut_174
16-12-2020, 18:17
Я забыл упомянуть важный момент. Если я руками делаю Disable() для сетевого адаптера, а потом обратно Enable(), то моё задание отрабатывает. То есть оно в принципе читает указанное мной событие, но почему то не срабатываем именно при включении ОС.
Я пробовал ставить задержку, таймауты в скрипт... всегда как-то через раз срабатывает, ненадёжно.

Vadikan
16-12-2020, 18:17
berkut_174, а почему у вас @Name='Category']='0'? Я бы навскидку сказал, что нужно 1.

Я смотрю у себя, этому соответствует
- <EventData>
<Data Name="Name">Identifying...</Data>
<Data Name="Description">Identifying...</Data>
<Data Name="Guid">{c7f91c64-cd09-4ccc-ace1-88723a6c15b1}</Data>
<Data Name="Type">0</Data>
<Data Name="State">9</Data>
<Data Name="Category">0</Data>
</EventData>


И напротив, когда выполняется подключение, в этих данных SSID

- <EventData>
<Data Name="Name">mySSID</Data>
<Data Name="Description">mySSID</Data>
<Data Name="Guid">{721bca8a-8367-494d-b5f1-a592ce623b5d}</Data>
<Data Name="Type">0</Data>
<Data Name="State">9</Data>
<Data Name="Category">1</Data>
</EventData>

Если я руками делаю Disable() для сетевого адаптера, а потом обратно Enable(), то моё задание отрабатывает. То есть оно в принципе читает указанное мной событие, но почему то не срабатываем именно при включении ОС. »
Тогда есть варианты:
- дальше пытаться разбираться почему не срабатывает при включении
- выполнять задание с задержкой, задавая это в настройках задания или в скрипте
- скриптом перезагружать адаптер https://t.me/sterkin_ru/953

berkut_174
16-12-2020, 18:30
Я бы навскидку сказал, что нужно 1. »
Потому что мне нужно наоборот заменить 0 на 1, так как 0 — публичная, 1 — приватная.

- дальше пытаться разбираться почему не срабатывает при включении »
Я уже всеми частями тела помогаю... не выходит...
На Windows 7 даже экспортом с Windows 10 сейчас это же задание импортнул — работает железно.

- выполнять задание с задержкой, задавая это в настройках задания или в скрипте »
Ненадёжно, на одной машине сработает, на другой нет, да и не всегда такая задержка помогает, к сожалению. Статистика плачевная тут у меня.

- скриптом перезагружать адаптер https://t.me/sterkin_ru/953 »
Мдя... то есть при старте машины делать отключение/включение адаптера ? Вариант, конечно, но чё то колхоз...

Vadikan
16-12-2020, 18:40
Потому что мне нужно наоборот заменить 0 на 1, так как 0 — публичная, 1 — приватная. »
Ок, но если вам нужно менять профиль для сетей, которые в процессе идентификации (Identifying) или не идентифицированных (Unidentified), это можно сделать политикой https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-list-manager-policies (Она не позволяет настроить все будущие сети)

А событие уже отлавливать конкретно такое, в котором есть SSID. Ну и дальше уже выполнять скрипт ваш, чем вы там меняете профиль... тут пош https://superuser.com/a/728776

berkut_174
16-12-2020, 20:27
SSID »
Я не могу отлавливать по SSID, я его не знаю. У меня сеть заранее не определена и поэтому может быть какой угодной.

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

Vadikan
16-12-2020, 21:33
berkut_174, так вы отлавливайте планировщиком событие, а в скрипте анализируйте содержимое последнего события. Если в нем identifying или unidentified, ничего не делайте. Иначе берите оттуда SSID и меняйте профиль.

Либо просто все сети делайте приватными по событию, скрипт по ссылке выше.

berkut_174
16-12-2020, 23:08
Vadikan, чего же вы раньше не дали этой ссылки... я проглядел...
Мне ведь действительно в идеале не нужно ничего отлавливать, мне нужно чтобы все сети были приватными по умолчанию.
Это именно то, что нужно! Благодарю.

Vadikan
16-12-2020, 23:11
чего же вы раньше не дали этой ссылки... я проглядел, это именно то, что нужно! »
Так у вас же был скрипт какой-то для изменения профиля сети, который вы из планировщика запускали. Откуда ж мне знать, что вам еще и другой нужен :)

berkut_174
17-12-2020, 08:05
Vadikan, есть, но он почему-то ни всегда срабатывал, если добавить его в планировщик при запуске ОС. В прочем посмотрим, как этот себя будет вести, вероятно, могут быть аналогичные проблемы, надо больше тестов.
Тем более по ссылке уж больно короткий оказался, у меня основной через изменение реестра и ещё вот такой:

Get-NetConnectionProfile | Where{ $_.NetWorkCategory -ne 'Private'} | ForEach {$_|Set-NetConnectionProfile -NetWorkCategory Private}


Я же правильно понял, что скрипт по ссылке текущие и все будущие сети будет делать по умолчанию частными ?..

Vadikan
17-12-2020, 08:50
berkut_174, скрипт меняет профиль всех имеющихся сетей. Будущие сделать частными невозможно.

berkut_174
17-12-2020, 09:47
Vadikan, ох, тогда я снова могу попасть в такую ситуацию, что задание выполняемое при запуске, будет завершено, когда ещё сеть не была инициализирована, соответственно кина не будет...
Такое ведь возможно ?

berkut_174
17-12-2020, 10:38
Собственно говоря, именно потому что мой скрипт ни всегда корректно отрабатывал, когда использовался триггер «при запуске системы», я начал отлавливать событие с ID = 10000. На Windows 7 это сработало безукоризненно, но на Windows 10 с попеременным успехом...

Anton04
17-12-2020, 10:51
что задание выполняемое при запуске, будет завершено, когда ещё сеть не была инициализирована, соответственно кина не будет...
Такое ведь возможно ? »

Вполне возможно. Тогда нужно менять в GPO и делать "ждать загрузку сети".

Vadikan
17-12-2020, 11:57
тогда я снова могу попасть в такую ситуацию, что задание выполняемое при запуске, будет завершено, когда ещё сеть не была инициализирована, соответственно кина не будет... »
Я же говорю
вы отлавливайте планировщиком событие, а в скрипте анализируйте содержимое последнего события. Если в нем identifying или unidentified, ничего не делайте. Иначе берите оттуда SSID и меняйте профиль. »
Я не понял, вы это видели или просто тихо ждали, пока вам напишут такой скрипт?:) Вроде ж видели, раз отмечали сообщение полезным.

$e = Get-WinEvent -Maxevents 1 -FilterHashtable @{logname="Microsoft-Windows-NetworkProfile/Operational"; id=10000}
$xml = [xml]$e.ToXml()
$SSID = $xml.Event.EventData.Data[1]."#text"
if ($SSID -notlike '*iden*') {Set-NetConnectionProfile -Name $SSID -NetworkCategory "Private"}
Под локализацию подстраивайте самостоятельно.




© OSzone.net 2001-2012