Procedura: Abilitazione o disabilitazione di un protocollo di rete del server (SQL Server PowerShell)

I protocolli di rete TCP e Named Pipes vengono installati durante l'installazione di SQL Server, ma potrebbero non essere abilitati. I protocolli di rete possono essere abilitati o disabilitati utilizzando gli script di PowerShell seguenti oppure tramite Gestione configurazione SQL Server. Per rendere effettive le modifiche ai protocolli, è necessario interrompere e riavviare il Motore di database di SQL Server.

Per informazioni generali su PowerShell, vedere Panoramica di SQL Server PowerShell. Per ulteriori informazioni sulla gestione dei protocolli tramite Gestione configurazione SQL Server, vedere Procedura: Abilitazione o disabilitazione di un protocollo di rete del server (Gestione configurazione SQL Server).

L'utilità SQL Server PowerShell (SQLPS.exe) avvia una sessione di PowerShell con il provider PowerShell per SQL Server e i cmdlet caricati e registrati. Quando si esegue PowerShell (PowerShell.exe) anziché SQL Server PowerShell, eseguire dapprima le istruzioni seguenti per caricare manualmente gli assembly richiesti.

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

Con gli script seguenti vengono abilitati i protocolli. Per disabilitarli, impostare le proprietà IsEnabled su $false.

Per abilitare un protocollo di rete del server utilizzando SQL Server PowerShell

  1. Aprire un prompt dei comandi con autorizzazioni di amministratore.

  2. Per avviare SQL Server PowerShell, dal prompt dei comandi digitare sqlps.exe.

  3. Eseguire le istruzioni seguenti per abilitare i protocolli TCP e Named Pipes. Sostituire <computer_name> con il nome del computer che esegue SQL Server. Se si configura un'istanza denominata, sostituire MSSQLSERVER con il nome dell'istanza.

    $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
    

Per configurare i protocolli per il computer locale

  • Quando lo script viene eseguito localmente e configura il computer locale, SQL Server PowerShell offre una maggiore flessibilità per lo script determinando dinamicamente il nome del computer locale. Per recuperare il nome del computer locale, sostituire la riga che imposta la variabile $uri con la riga seguente.

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

Per riavviare il Motore di database tramite SQL Server PowerShell

  • Dopo aver disabilitato o abilitato i protocolli, è necessario interrompere e riavviare il Motore di database per rendere effettiva la modifica. Eseguire le istruzioni seguenti per interrompere e avviare l'istanza predefinita tramite SQL Server PowerShell. Per interrompere e avviare un'istanza denominata, sostituire 'MSSQLSERVER' con '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