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

Phoenix

Ветеран
Сообщения
2,107
Реакции
2,051
Баллы
503
А вот кстати пример для отличия от 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

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,141
Реакции
5,916
Баллы
648
Так, у Вас коды по сути одинаковые, просто во втором константы попутаны:
$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,107
Реакции
2,051
Баллы
503
Спасибо, а я по наивности принял их за переменные..
Код:
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>
Всё сработало, сенькс Гуру !
Дополню. Запускал несколько раз и не обратил внимания. Вот так работает. [то есть без -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

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,141
Реакции
5,916
Баллы
648
Вот так работает. [то есть без -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.
 
Сверху Снизу