2

我想使用 Invoke-DbaSqlCmd 在 PowerShell 中查询 SQL Server。

Invoke-DbaSqlCmd -SqlInstance DBA -Query 'exec xp_fixeddrives'

这将返回一个 System.Data.DataRow 对象。对象类型并不重要。重要的是要知道结果会因 SQL Server 语言而异。在法语中,它将是“Mo disponible”,而英语将是“MB Free”。我希望我的代码可以使用任何可用的 SQL Server 语言。

在此处输入图像描述

我想在不使用 Get-Member 的情况下选择第二列。就像这里的解决方案:

$RST = Invoke-DbaSqlCmd -SqlInstance DBA -Query 'exec xp_fixeddrives'
$SecondCol = ($RST | Get-Member -MemberType Properties)[1].Name
$RST.$SecondCol

有没有一种优雅的方式来返回第二列而不使用它的名称?

4

1 回答 1

3

不,这是“优雅”的做法。

出于性能原因,您可能只想检查返回的第一个对象,$RST而不是通过管道将每一行发送到Get-Member

$RST = Invoke-DbaSqlCmd -SqlInstance DBA -Query 'exec xp_fixeddrives'
$SecondCol = ($RST[0].psobject.Properties |Select -Index 1).Name
$RST.$SecondCol
于 2018-02-14T16:47:47.663 回答