这个问题在这里已有答案:
我想使用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
是否有一种优雅的方式返回第二列而不使用它的名字?
不,这是“优雅”的方式。
出于性能原因,您可能只想检查返回到$RST
的第一个对象,而不是将每一行连接到Get-Member
:
$RST = Invoke-DbaSqlCmd -SqlInstance DBA -Query 'exec xp_fixeddrives'
$SecondCol = ($RST[0].psobject.Properties |Select -Index 1).Name
$RST.$SecondCol