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

Posted

技术标签:

【中文标题】Powershell 连接变量导致 System.Data.DataRow【英文标题】:Powershell Concatenate Variables Result in System.Data.DataRow 【发布时间】:2017-05-23 16:50:38 【问题描述】:

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

到目前为止我做了什么:

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】:

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

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

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

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

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

【讨论】:

非常感谢您的帮助和建议!效果很好:)

以上是关于Powershell 连接变量导致 System.Data.DataRow的主要内容,如果未能解决你的问题,请参考以下文章

将输入变量从PowerShell表单传递到cmdlet参数会导致空白数据

如何在 PowerShell 中连接字符串和变量?

从 PowerShell 使用 System.IO 访问 MTP 存储

在 PowerShell 中调用动态变量

PowerShell,从变量中提取多个数组以生成单个变量

如何在 powershell 中使用变量调用命令?