PS Сменить сеть с домашней на публичную

Phoenix

Разработчик
Сообщения
2,164
Реакции
1,896
А вот кстати пример для отличия от cmd
#
# Name: ChangeCategory.ps1
# Copyright: Microsoft 2009
# Revision: 1.0
#
# This script can be used to change the network category of
# an 'Unidentified' network to Private to allow common network
# activity. This script should only be run when connected to
# a network that is trusted since it will also affect the
# firewall profile used.
# This script is provided as-is and Microsoft does not assume any
# liability. This script may be redistributed as long as the file
# contains these terms of use unmodified.
#
# Usage:
# Start an elevated Powershell command window and execute
# ChangeCategory.ps1
#
Код:
$NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)

$NLM_ENUM_NETWORK_CONNECTED  = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00
$NLM_NETWORK_CATEGORY_PRIVATE = 0x01
$UNIDENTIFIED = "Unidentified network"

$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)

foreach ($INetwork in $INetworks)
{
    $Name = $INetwork.GetName()
    $Category = $INetwork.GetCategory()

    if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PUBLIC) -and ($Name -eq $UNIDENTIFIED))
    {
        $INetwork.SetCategory($NLM_NETWORK_CATEGORY_PRIVATE)
    }
}

И вопрос. Так будет правильно, если надо включить не домашнюю, а общуюю сеть (?).
Код:
$NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)

$NLM_ENUM_NETWORK_CONNECTED  = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x01
$NLM_NETWORK_CATEGORY_PRIVATE = 0x00
$UNIDENTIFIED = "Unidentified network"

$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)

foreach ($INetwork in $INetworks)
{
    $Name = $INetwork.GetName()
    $Category = $INetwork.GetCategory()

    if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PRIVATE) -and ($Name -eq $UNIDENTIFIED))
    {
        $INetwork.SetCategory($NLM_NETWORK_CATEGORY_PUBLIC)
    }
}
Добавлю. Возникла нужда на win 8.1 изменить сеть на общественную, что оказалось не так то просто (!) Сначала пришлось политиками отключать домашнюю группу. Потом отыскал такой скрипт.
 

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,742
Реакции
6,211
Так, у Вас коды по сути одинаковые, просто во втором константы попутаны:
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00 а не 0x01
(надо было делать что-то одно. Только константы следующий раз не трогайте - грех.)

На TechNet пишут, что скрипт для Windows Server 2008 R2 - вероятно, будет и на 8.1. работать.
По коду № 1 ничего плохого не скажу:
перебираются циклом все сети, с фильтрацией только подключенных, приватных и имеющих имя "Unidentified network".
Если такую находит, изменяет ее категорию на NLM_NETWORK_CATEGORY_PRIVATE (т.е. домашнюю.)

Если нужно наоборот - домашнюю сменить на публичную, то код будет выглядеть так:

PowerShell:
$NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)
$NLM_ENUM_NETWORK_CONNECTED  = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00
$NLM_NETWORK_CATEGORY_PRIVATE = 0x01
$UNIDENTIFIED = "Unidentified network"
$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)
foreach ($INetwork in $INetworks)
{
    $Name = $INetwork.GetName()
    $Category = $INetwork.GetCategory()
    if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PRIVATE) -and ($Name -eq $UNIDENTIFIED))
    {
        $INetwork.SetCategory($NLM_NETWORK_CATEGORY_PUBLIC)
    }
}

Если не сработает, попробуйте из условия убрать -and ($Name -eq $UNIDENTIFIED)
Код запускаем с повышенными привилегиями.
 
Последнее редактирование:

Phoenix

Разработчик
Сообщения
2,164
Реакции
1,896
Спасибо, а я по наивности принял их за переменные..
Код:
PS C:\WINDOWS\system32> C:\Users\partizan\Desktop\PublicNet.ps1
Невозможно загрузить файл C:\Users\partizan\Desktop\PublicNet.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. ab
out_Execution_Policies по адресу http://go.microsoft.com/fwlink/?LinkID=135170.
    + CategoryInfo          : Ошибка безопасности: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

PS C:\WINDOWS\system32> $NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)
$NLM_ENUM_NETWORK_CONNECTED  = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00
$NLM_NETWORK_CATEGORY_PRIVATE = 0x01
$UNIDENTIFIED = "Unidentified network"
$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)
foreach ($INetwork in $INetworks)
{
    $Name = $INetwork.GetName()
    $Category = $INetwork.GetCategory()
    if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PRIVATE) -and ($Name -eq $UNIDENTIFIED))
    {
        $INetwork.SetCategory($NLM_NETWORK_CATEGORY_PUBLIC)
    }
}

PS C:\WINDOWS\system32>
Всё сработало, сенькс Гуру !
post-29148-0-08458700-1382181038_thumb.png
Дополню. Запускал несколько раз и не обратил внимания. Вот так работает. [то есть без -and ($Name -eq $UNIDENTIFIED) ]
PHP:
$NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)
$NLM_ENUM_NETWORK_CONNECTED  = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00
$NLM_NETWORK_CATEGORY_PRIVATE = 0x01
$UNIDENTIFIED = "Unidentified network"
$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)
foreach ($INetwork in $INetworks)
{
    $Name = $INetwork.GetName()
    $Category = $INetwork.GetCategory()
    if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PRIVATE))
    {
        $INetwork.SetCategory($NLM_NETWORK_CATEGORY_PUBLIC)
    }
}
 

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,742
Реакции
6,211
Вот так работает. [то есть без -and ($Name -eq $UNIDENTIFIED) ]
Это я так интуитивно предположил :)

Невозможно загрузить файл C:\Users\partizan\Desktop\PublicNet.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. ab
out_Execution_Policies по адресу http://go.microsoft.com/fwlink/?LinkID=135170.
По-умолчанию, доступно выполнение только подписанных сценариев.
Чтобы разрешить запуск неподписанных, следует ввести команду:
PowerShell:
Set-ExecutionPolicy RemoteSigned
непосредственно в окно интерпретатора.
Для его запуска с повышенными правами нажимаем Пуск (в Win 8 Ctrl + Esc) набираем PowerShell, затем Ctrl + Shift + Enter.
 
Сверху Снизу