我想在 Powershell 中获取当前主副本的机器。有 cmdlet 可以做到吗?
我加载 sqlps 模块并转储 find all sql命令,但似乎没有人与此相关..
谢谢
我想在 Powershell 中获取当前主副本的机器。有 cmdlet 可以做到吗?
我加载 sqlps 模块并转储 find all sql命令,但似乎没有人与此相关..
谢谢
我认为这应该有效:
$null = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");
$svr = New-Object Microsoft.SqlServer.Management.Smo.Server("AServerInstanceInYourAG");
$svr.AvailabilityGroups["YourAvailabilityGroup"].PrimaryReplicaServerName;
也可以通过连接监听器来获取Primary Replica
$null = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");
$listenerName = "YourListenerName";
$sqlListener = New-Object Microsoft.SqlServer.Management.Smo.Server($listenerName);
$primaryReplicaName = $sqlListener.AvailabilityGroups.PrimaryReplicaServerName;
我使用集群资源名称中的所有者名称属性:
get-clusterresource -name $AGName | Select -ExpandProperty OwnerNode
下面是我用来将 SQL 代理从一个节点复制到另一个节点的示例:
$Node1 = 'Node1\Instance1'
$Node2 = 'Node2\Instance2'
$AGName = "AG_Name"
$AGPrimary = get-clusterresource -name $AGName | Select -ExpandProperty OwnerNode
If ($AGPrimary -eq $env:COMPUTERNAME)
{
Copy-DbaAgentJob -source $Node1 -destination $Node2
write-host 'Success!'
}
else
{
Write-Output "No object copying is processed, this is not the primary node."
}
虽然这是一个老问题,但近 3 年后它仍然有用
今天,回答这个问题要容易得多
import-module sqlserver;
$svr = "svr_name" # this can be any server involved in Availability Group
$AGPath = "sqlserver:\SQL\$svr\default\AvailabilityGroups";
dir -path $AGPath | select-object Name, PrimaryReplicaServerName;
这将返回 AG 名称和主副本服务器名称