SQL Server PowerShell : Activer désactiver certains protocoles SQL Server

Sur certaines éditions de SQL Server, l’activation du protocole TCPIP requiert une action manuelle. Voici un script powershell qui peut être intégré à une installation automatique et qui active le protocole TCPIP d’une part et désactive les canaux nommés d’autre part.

Ce script prend en paramètre le nom du serveur ainsi qu’un compte de connexion et mot de passe. Ce compte doit être administrateur du serveur en local pour pouvoir accéder à l’espace de nom « root\Microsoft\SqlServer\ComputerManagement« . De plus, il faudra penser à changer l’espace de nom en « root\Microsoft\SqlServer\ComputerManagement10 » pour SQL Server 2008 et SQL Server 2008 R2. Enfin ce script n’opère que sur l’instance par défaut.

#################################
# @author = Mikedavem           #
# @Description =                #
# Activation du protocole TCPIP #
# et désactiviation des canaux  #
# nommés.                       #
#################################

$computername = « computeurname »;
$login = « domain\administrateur »
$pwd = convertto-securestring « pass » -asplaintext -force;

try
{
    # Définition du crédential
    $credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $login,$pwd -ErrorAction « silentlycontinue »;

    # Protocol Canaux nommés à désactiver
    $protocol = Get-WmiObject -computername $computername -credential $credential -namespace « root\Microsoft\SqlServer\ComputerManagement10″ `
                              -class ServerNetworkProtocol `
                              -filter « ProtocolName=’np’ and InstanceName=’MSSQLSERVER' » `
                              -ErrorAction « silentlycontinue »;
    $protocol.SetDisable();

    # Protocol TCP à activer
    $protocol = Get-WmiObject -computername $computername -credential $credential -namespace « root\Microsoft\SqlServer\ComputerManagement10″ `
                              -class ServerNetworkProtocol `
                              -filter « ProtocolName=’tcp’ and InstanceName=’MSSQLSERVER' »;
    $protocol.SetEnable();

    # Redémarrage service SQL
    $sqlservice = Get-WmiObject -computername $computername -credential $credential -namespace « root\Microsoft\SqlServer\ComputerManagement10″ `
                                -class SqlService `
                                -filter « ServiceName=’MSSQLSERVER' » `
                                -ErrorAction « silentlycontinue »;
    $sqlservice.StopService();
    $sqlservice.StartService();
}
catch
{
    « Une erreur est survenue lors de la mise à jour des protocoles : »;
    « Détail de l’erreur : »
    $err = $Error[0];
    $err | Format-List *;
}

Bonne activation de protocole !!

David BARBARIN (Mikedavem)
Elève ingénieur CNAM

4 réflexions au sujet de « SQL Server PowerShell : Activer désactiver certains protocoles SQL Server »

  1. Effectivement c’est avec la version 1.0 de PowerShell que j’ai fait les tests.
    c’est cette version qui est installée par défaut lors de l’installation de SQL2K8.
    je comprends maintenant pourquoi il ne voulait pas les try et catch.
    En tout cas merci.

  2. Hello David,
    J’ai essayé de tester ton script, mais j’ai eu quelques difficultés.
    Parce que je ne connaissais pas bien le PowerShell.
    D’abord quand j’execute ton script, la console PowerShell me dit qu’il ne connait pas : Try {} et Catch ()
    J’ai donc modifié ton script et faire des tests.
    Et ça marche nickel dans mon environnement de test (SQL2K8).
    J’ai mis des commentaires pour ceux qui veulent l’adapter pour :
    1 ) SQL SERVER 2005
    2 ) une instance nommée
    Voici le script qui marche dans mon environnement :

    ##################################################################################################
    # @author : Mikedavem
    # @Description :
    # –>Désactiver des Canaux nommés [ Name pipe (np)]
    # –>Désactiver mémoire partagées [ Shared memory (sm)]
    # –>Désactiver protocole via [via]
    # –>Activation du protocole TCPIP
    # –>Activation du protocole TCPIP
    # @Modify by : Etienne ZINZINDOHOUE
    # @OS : WXP
    # @SQL SERVER : SQL SERVER 2008
    # @ Date : 2010-06-03
    # @Comments :
    # –> Pour SQL SERVER 2005 il faut remplacer
    # -namespace « rootMicrosoftSqlServerComputerManagement10″
    # par
    # -namespace « rootMicrosoftSqlServerComputerManagement »
    #
    # –> Pour une instance nommée remplacé
    # InstanceName=’MSSQLSERVER’
    # par
    # InstanceName=’NomInstance’
    # ET
    # ServiceName=’MSSQL’
    # par
    # ServiceName=’MSSQL`$NomInstance’
    # –> Pour avoir la liste des services sous SQL SERVER 2008 faire :
    # Get-WmiObject `
    # -namespace rootMicrosoftSqlServerComputerManagement10 `
    # -class SqlService | Select-Object ServiceName, DisplayName, SQLServiceType, State
    ##################################################################################################

    Write-Host -NoNewLine « ######################################################## »
    Write-Host -NoNewLine  » Désactiver des Canaux nommés [ Name pipe (np)] « 
    Write-Host -NoNewLine « ######################################################## »
    $protocol = Get-WmiObject -namespace « rootMicrosoftSqlServerComputerManagement10″ -class ServerNetworkProtocol -filter « ProtocolName=’np’ and InstanceName=’SQL2K8INSTANCE2′ » -ErrorAction « silentlycontinue »;
    $protocol.SetDisable();

    Write-Host -NoNewLine « ######################################################## »
    Write-Host -NoNewLine  » Désactiver mémoire partagées [ Shared memory (sm)] « 
    Write-Host -NoNewLine « ######################################################## »
    $protocol = Get-WmiObject -namespace « rootMicrosoftSqlServerComputerManagement10″ -class ServerNetworkProtocol -filter « ProtocolName=’sm’ and InstanceName=’SQL2K8INSTANCE2′ » -ErrorAction « silentlycontinue »;
    $protocol.SetDisable();

    Write-Host -NoNewLine « ######################################################## »
    Write-Host -NoNewLine  » Désactiver VIA (via) « 
    Write-Host -NoNewLine « ######################################################## »
    $protocol = Get-WmiObject -namespace « rootMicrosoftSqlServerComputerManagement10″ -class ServerNetworkProtocol -filter « ProtocolName=’via’ and InstanceName=’SQL2K8INSTANCE2′ » -ErrorAction « silentlycontinue »;
    $protocol.SetDisable();

    Write-Host -NoNewLine « ######################################################## »
    Write-Host -NoNewLine  » Activer TCP « 
    Write-Host -NoNewLine « ######################################################## »
    $protocol = Get-WmiObject -namespace « rootMicrosoftSqlServerComputerManagement10″ -class ServerNetworkProtocol -filter « ProtocolName=’tcp’ and InstanceName=’SQL2K8INSTANCE2′ »;
    $protocol.SetEnable();

    Write-Host -NoNewLine « ######################################################## »
    Write-Host -NoNewLine  » Redémarrer service SQL « 
    Write-Host -NoNewLine « ######################################################## »
    $sqlservice = Get-WmiObject -namespace « rootMicrosoftSqlServerComputerManagement10″ -class SqlService -filter « ServiceName=’MSSQL`$SQL2K8INSTANCE2′ » -ErrorAction « silentlycontinue »;
    $sqlservice.StopService();
    $sqlservice.StartService();

  3. Bonne idée ;-)
    Pour couvrir tous les protocoles de connexions à SQL SERVER
    tu peux aussi ajouter à ton script la Désactivation/Activation de :

    1 ) Shared Memeroy (Memoire partagée) [Sm]

    2 ) Via [Via]

    Je vais tester le script et je ferai un retour

    A+

    Etienne ZINZINDOHOUE

Laisser un commentaire