使用带有端口号的 SQL Server SMO

3 sql-server powershell smo connectivity

在 SSMS 中,如果您要连接到设置为 1433 以外的特定端口的 SQL Server 实例,您只需在实例名称后加上“,端口号”。同样,如果我正在使用System.Data.SqlClient.SqlConnection并希望使用 填充数据集System.Data.DataSet,我会在指定连接字符串的数据源部分以传递到该对象时执行相同的操作。

有没有办法使用Microsoft.SqlServer.Management.Smo.Server类来做到这一点?

我尝试了一些没有运气的变化,例如:


$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
Run Code Online (Sandbox Code Playgroud)

或者只是尝试:


$s = New-Object Microsoft.sqlserver.management.smo.server "Server\Instance,port"
$s | Select Name, Version
Run Code Online (Sandbox Code Playgroud)

Tho*_*ger 5

您可以做的一件事是将Server对象的ServerConnection部分设置为显式连接字符串,指定端口名称。

您可以通过访问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
Run Code Online (Sandbox Code Playgroud)

或者通过ServerConnection在实例化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
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚重新阅读了您的问题,似乎您的一次尝试与上面的第二次尝试基本相同。我拿走了你的代码,我改变的只是data source你的连接字符串的一部分,它对我来说很好用:

$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
Run Code Online (Sandbox Code Playgroud)