Cómo habilitar o deshabilitar un protocolo de red de servidor (SQL Server PowerShell)

Los protocolos de red TCP y de canalizaciones con nombre se instalan con el programa de instalación de SQL Server, pero podrían no estar habilitados. Es posible habilitar o deshabilitar los protocolos de red mediante los siguientes scripts de PowerShell o mediante el Administrador de configuración de SQL Server. Debe detener y reiniciar SQL Server Database Engine (Motor de base de datos de SQL Server) para que los cambios en los protocolos surtan efecto.

Para obtener información general sobre PowerShell, vea Información general de PowerShell de SQL Server. Para obtener más información acerca de la administración de protocolos mediante el Administrador de configuración de SQL Server, vea Cómo habilitar o deshabilitar un protocolo de red de servidor (Administrador de configuración de SQL Server).

La utilidad SQL Server PowerShell (SQLPS.exe) inicia una sesión de PowerShell con el proveedor de SQL Server PowerShell y los cmdlets cargados y registrados. Cuando se ejecuta PowerShell (PowerShell.exe) en lugar de SQL Server PowerShell, primero se ejecutan las instrucciones siguientes para cargar manualmente los ensamblados necesarios.

# Load the assemblies
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")

Los scripts siguientes habilitan los protocolos. Para deshabilitar los protocolos, establezca las propiedades IsEnabled en $false.

Para habilitar un protocolo de red de servidor mediante SQL Server PowerShell

  1. Abra un símbolo del sistema con permisos de administrador.

  2. Para iniciar SQL Server PowerShell, escriba sqlps.exe en el símbolo del sistema.

  3. Ejecute las siguientes instrucciones para habilitar los protocolos TCP y de canalizaciones con nombre. Reemplace <computer_name> por el nombre del equipo que ejecuta SQL Server. Si va a configurar una instancia con nombre, sustituya MSSQLSERVER por el nombre de la instancia.

    $smo = 'Microsoft.SqlServer.Management.Smo.'
    $wmi = new-object ($smo + 'Wmi.ManagedComputer').
    
    # List the object properties, including the instance names.
    $Wmi
    
    # Enable the TCP protocol on the default instance.
    $uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
    $Tcp = $wmi.GetSmoObject($uri)
    $Tcp.IsEnabled = $true
    $Tcp.Alter()
    $Tcp
    
    # Enable the named pipes protocol for the default instance.
    $uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']"
    $Np = $wmi.GetSmoObject($uri)
    $Np.IsEnabled = $true
    $Np.Alter()
    $Np
    

Para configurar los protocolos en el equipo local

  • Cuando el script se ejecuta localmente y configura el equipo local, SQL Server PowerShell puede hacer que el script sea más flexible al determinar dinámicamente el nombre del equipo local. Para recuperar el nombre del equipo local, reemplace la línea donde se establece la variable $uri por la línea siguiente.

    $uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value + "']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
    

Para reiniciar el motor de base de datos mediante SQL Server PowerShell

  • Después de habilitar o deshabilitar protocolos, deberá detener y reiniciar Motor de base de datos para que se aplique el cambio. Ejecute las instrucciones siguientes para detener e iniciar la instancia predeterminada mediante SQL Server PowerShell. Para detener e iniciar una instancia con nombre, sustituya 'MSSQLSERVER' por 'MSSQL$<instance_name>'.

    # Get a reference to the ManagedComputer class.
    CD SQLSERVER:\SQL\<computer_name>
    $Wmi = (get-item .).ManagedComputer
    # Get a reference to the default instance of the Database Engine.
    $DfltInstance = $Wmi.Services['MSSQLSERVER']
    # Display the state of the service.
    $DfltInstance
    # Stop the service.
    $DfltInstance.Stop();
    # Wait until the service has time to stop.
    # Refresh the cache.
    $DfltInstance.Refresh(); 
    # Display the state of the service.
    $DfltInstance
    # Start the service again.
    $DfltInstance.Start();
    # Wait until the service has time to start.
    # Refresh the cache and display the state of the service.
    $DfltInstance.Refresh(); $DfltInstance