Procédure : activer ou désactiver un protocole réseau de serveur (SQL Server PowerShell)

Les protocoles réseau des canaux nommés et TCP sont installés par le programme d'installation de SQL Server, mais peuvent ne pas être activés. Les protocoles réseau peuvent être activés ou désactivés en utilisant les scripts PowerShell suivants ou le Gestionnaire de configuration SQL Server. Vous devez arrêter, puis redémarrer le moteur de base de données Microsoft SQL Server pour que les modifications des protocoles prennent effet.

Pour obtenir des informations générales sur PowerShell, consultez Vue d'ensemble de SQL Server PowerShell. Pour plus d'informations sur la gestion des protocoles à l'aide du Gestionnaire de configuration SQL Server, consultez Procédure : activer ou désactiver un protocole réseau de serveur (Gestionnaire de configuration SQL Server).

L'utilitaire SQL Server PowerShell (SQLPS.exe) démarre une session PowerShell avec les applets de commande et le fournisseur PowerShell SQL Server chargés et inscrits. Lorsque vous exécutez PowerShell (PowerShell.exe) au lieu de SQL Server PowerShell, exécutez d'abord les instructions suivantes pour charger les assemblys requis manuellement.

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

Les scripts suivants activent des protocoles. Pour désactiver des protocoles, affectez aux propriétés IsEnabled la valeur $false.

Pour activer un protocole réseau de serveur à l'aide de SQL Server PowerShell

  1. En utilisant des autorisations d'administrateur, ouvrez une invite de commandes.

  2. Pour démarrer SQL Server PowerShell, à l'invite de commandes, tapez sqlps.exe.

  3. Exécutez les instructions suivantes pour activer les protocoles TCP et de canaux nommés. Remplacez <computer_name> par le nom de l'ordinateur qui exécute SQL Server. Si vous configurez une instance nommée, remplacez MSSQLSERVER par le nom de cette instance.

    $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
    

Pour configurer les protocoles pour l'ordinateur local

  • Lorsque le script est exécuté localement et configure l'ordinateur local, SQL Server PowerShell peut rendre le script plus souple en déterminant de façon dynamique le nom de l'ordinateur local. Pour récupérer le nom de l'ordinateur local, remplacez la ligne qui définit la variable $uri par la ligne suivante.

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

Pour redémarrer le Moteur de base de données à l'aide de SQL Server PowerShell

  • Après avoir activé ou désactivé des protocoles, vous devez arrêter et redémarrer le moteur de base de données pour que la modification entre en vigueur. Exécutez les instructions suivantes pour arrêter et démarrer l'instance par défaut à l'aide de SQL Server PowerShell. Pour arrêter et démarrer une instance nommée, remplacez 'MSSQLSERVER' par '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