Dans SSMS Si vous vous connectez à une instance SQL Server définie sur un port spécifique autre que 1433, vous mettez simplement ", numéro de port" après le nom de l'instance. Au même titre si j'utilise System.Data.SqlClient.SqlConnection
et voulez peupler un ensemble de données avec System.Data.DataSet
, Je ferais la même chose lors de la spécification de la partie source de données de la chaîne de connexion pour passer à cet objet.
N'y a-t-il pas un moyen de faire cela en utilisant Microsoft.SqlServer.Management.Smo.Server
classer?
J'ai essayé des variations sans chance comme:
$cnString = "Data Source=Server\instance,port;Initial Catalog=master;Trusted_Connection=true;"
$cn = new-object system.data.sqlclient.sqlconnection($cnstring)
$cnSql = New-Object Microsoft.sqlserver.management.common.serverconnection($cn)
$s = New-Object Microsoft.sqlserver.management.smo.server($cnSql)
$s | Select Name, Version
Ou juste essayer:
$s = New-Object Microsoft.sqlserver.management.smo.server "Server\Instance,port"
$s | Select Name, Version
Une chose que vous pourriez faire est de définir la partie ServerConnection Portion de l'objet serveur objet à une chaîne de connexion explicite, spécifiant le nom du port.
Vous pouvez le faire soit en accédant à la propriété Server.ConnectionContext :
$ConnectionString = "data source = yourinstancename,10055; initial catalog = master; trusted_connection = true;"
$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server
$SqlServer.ConnectionContext.ConnectionString = $ConnectionString
$SqlServer.Databases |
Select-Object Name
Ou en passant l'objet ServerConnection
lorsque vous instaniez l'objet Server
:
$ConnectionString = "data source = yourinstancename,10055; initial catalog = master; trusted_connection = true;"
$ServerConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$ServerConnection.ConnectionString = $ConnectionString
$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server($ServerConnection)
$SqlServer.Databases |
Select-Object Name
[~ # ~] éditer [~ # ~] : Je viens de relire votre question, et il semble que l'une de vos tentatives est essentiellement identique à mon deuxième montée en haut. J'ai pris votre code et tout ce que j'ai changé était le data source
Portion de votre chaîne de connexion et cela a fonctionné simplement pour moi:
$cnString = "Data Source=Server\instance,port;Initial Catalog=master;Trusted_Connection=true;"
$cn = new-object system.data.sqlclient.sqlconnection($cnstring)
$cnSql = New-Object Microsoft.sqlserver.management.common.serverconnection($cn)
$s = New-Object Microsoft.sqlserver.management.smo.server($cnSql)
$s | Select Name, Version
Vous pouvez spécifier TCP/IP comme protocole réseau à l'aide du paramètre de connexion "Bibliothèque de réseau = DBMSSOCN". Ensuite, le port SQL Server indiqué est utilisé:
$cnString = "Data Source=Server\instance,port;Network Library=DBMSSOCN;Initial Catalog=master;Trusted_Connection=true;"
Voici un lien avec des informations supplémentaires: SQLConnection -> Connect via une adresse IP
Cela suppose que vous avez activé les connexions TCP/IP sur SQL Server: Activer le protocole réseau TCP/IP pour SQL Server