Change ‘Unidentified network’ from Public to Work in Windows 7

There isn’t an easy way to set the category of an Unidentified network in Windows 7 RC+ builds. By default, an Unidentified network will be set to Public for security. Often, the Unidentified network is setup intentionally (e.g. two machines connected via a hub; a network TV tuner, etc.). In these cases, Home/Work is a better category to allow common network tasks to succeed.

Below is a Powershell script to change the category from Public to Work (identical to Home, except Homegroup won’t be started up). You need to be already connected to the ‘Unidentified network’ prior to running this script.

 # 
# 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)
    }
}

 

  1. Save the script locally as ChangeCategory.ps1 (say under c:\)
  2. Launch an elevated Powershell command window
  3. Change your execution policy to allow the script to run (if not already changed)
    PS> set-executionpolicy remotesigned
  4. Run the script
    PS> c:\ChangeCategory.ps1

At the end of this, the category for the Unidentified network will show as Work in Network and Sharing Center. This setting is not persisted across re-connects and you will require to run the script again to change the category. Be sure to run the script only for networks that you trust since this affects the firewall profile that will be used.