0

我需要获取可用性组和侦听器名称,连接两者以获得服务器列表,然后使用它来获取资源集群。

到目前为止我所做的:

foreach ($cluster in GC "D:\TEST\Servers_List_TEST.txt") 
{ 
$AGName = invoke-sqlcmd -Serverinstance $cluster -query "select left(name,25) as ' ' from sys.availability_groups" 
$LNName = invoke-sqlcmd -Serverinstance $cluster -query "select left(dns_name,25) as ' ' from sys.availability_group_listeners" 
$NetworkName = "$AGName_$LNName" 
Get-ClusterResource -cluster $cluster -name $NetworkName | Get-ClusterParameter HostRecordTTL,RegisterAllProvidersIP }

主要问题在于 $NetworkName。它返回 System.data.DataRow,而不是连接$AGName_$LNName(两者之间需要下划线)。

4

1 回答 1

1

您的主要问题是它$AGName及其合作伙伴变量$LNName是返回的System.Data.DataRow对象Invoke-SQLcmd。它们不仅仅是简单的字符串。由于您强制它们为字符串,PowerShell 调用ToString()这些对象的方法,在这种情况下,它只是对象名称。

您还在查询中为该对象提供了一个属性(这只是一个空格)。结果对象正在使用该属性名称。

您应该在查询中添加正确的列名,但是您可以通过调用该属性来提取相关数据。

$NetworkName = "$($AGName." ")_$($LNName." ")" 

所以使用子表达式我们得到了属性的值[space]

于 2017-05-23T17:03:30.863 回答