如何通过PowerShell获取SQL可用性组的主副本信息

时间:2013-04-11 05:05:15

标签: sql-server sql-server-2008 powershell

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

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

由于

4 个答案:

答案 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 名称和主副本服务器名称