我想在Powershell中获取当前主副本的机器。有cmdlet吗?
我加载sqlps模块并转储查找所有 sql 命令,但似乎没有人与此相关..
由于
答案 0 :(得分:2)
我认为这应该有效:
$null = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");
$svr = New-Object Microsoft.SqlServer.Management.Smo.Server("AServerInstanceInYourAG");
$svr.AvailabilityGroups["YourAvailabilityGroup"].PrimaryReplicaServerName;
答案 1 :(得分:0)
您还可以通过连接到侦听器来获取主副本
$null = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");
$listenerName = "YourListenerName";
$sqlListener = New-Object Microsoft.SqlServer.Management.Smo.Server($listenerName);
$primaryReplicaName = $sqlListener.AvailabilityGroups.PrimaryReplicaServerName;
答案 2 :(得分:0)
我使用群集资源名称中的所有者名称属性:
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 :(得分:0)
虽然这是一个老问题,但在将近 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 名称和主副本服务器名称