我需要获取可用性组和监听器名称,连接两者以获取服务器列表,然后使用它来获取资源集群。
到目前为止我做了什么:
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
(两者之间都需要下划线)。
答案 0 :(得分:1)
您的主要问题是$AGName
及其合作伙伴变量$LNName
是System.Data.DataRow
对象,这是Invoke-SQLcmd
返回的对象。它们不仅仅是简单的字符串。由于您强制它们使用字符串,因此PowerShell会调用这些对象的ToString()
方法,在这种情况下,这些方法只是对象名称。
您还在查询中为该对象提供了的属性(这只是一个空格)。生成的对象正在使用该属性名称。
您应该在查询中添加正确的列名,但是您可以通过以任何方式调用该属性来提取相关数据。
$NetworkName = "$($AGName." ")_$($LNName." ")"
因此,使用子表达式,我们得到了属性[space]