3

我想在 Powershell 中获取当前主副本的机器。有 cmdlet 可以做到吗?

我加载 sqlps 模块并转储 find all sql命令,但似乎没有人与此相关..

谢谢

4

4 回答 4

3

我认为这应该有效:

$null = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");

$svr = New-Object Microsoft.SqlServer.Management.Smo.Server("AServerInstanceInYourAG");

$svr.AvailabilityGroups["YourAvailabilityGroup"].PrimaryReplicaServerName;
于 2013-04-11T09:08:48.857 回答
1

也可以通过连接监听器来获取Primary Replica

$null = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");

$listenerName = "YourListenerName";

$sqlListener = New-Object Microsoft.SqlServer.Management.Smo.Server($listenerName);

$primaryReplicaName = $sqlListener.AvailabilityGroups.PrimaryReplicaServerName;
于 2014-11-06T14:54:49.513 回答
1

我使用集群资源名称中的所有者名称属性:

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."
}
于 2018-09-17T18:54:37.013 回答
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 名称和主副本服务器名称

于 2021-07-07T22:23:33.530 回答