Powershell连接变量导致System.Data.DataRow

时间:2017-05-23 16:50:38

标签: sql-server powershell concatenation alwayson

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

到目前为止我做了什么:

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(两者之间都需要下划线)。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

因此,使用子表达式,我们得到了属性[space]

的值