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
及其伙伴变量 $LNName
是 System.Data.DataRow
对象,这是 Invoke-SQLcmd
返回的对象。它们不仅仅是简单的字符串。由于您强制它们为字符串,PowerShell 调用这些对象的 ToString()
方法,在这种情况下,它只是对象名称。
您还在查询中为该对象提供了 的属性(这只是一个空格)。结果对象正在使用该属性名称。
您应该在查询中添加正确的列名,但您可以通过调用该属性来提取相关数据。
$NetworkName = "$($AGName." ")_$($LNName." ")"
所以使用子表达式我们得到了属性[space]
的值
【讨论】:
非常感谢您的帮助和建议!效果很好:)以上是关于Powershell 连接变量导致 System.Data.DataRow的主要内容,如果未能解决你的问题,请参考以下文章
将输入变量从PowerShell表单传递到cmdlet参数会导致空白数据