通过PowerShell从SQL Server中提取数据

时间:2014-01-08 18:47:48

标签: sql-server powershell

为什么这样做:

param($destserver, $destDB)
$destserver = "CCIIT23"
$destDB = "SSIMS_Prod"
$Servers = "CCIIT23"
$CounterList = "\Memory\Available MBytes", "\Memory\Page Faults/sec", "\Memory\Pages/sec"
$Servers | Foreach-Object { 
$Serv = $_; $CounterList | Foreach-Object { 
    Get-Counter -Computer $Serv -Counter $_ -SampleInterval 1
    }
}

这不起作用?

param($destserver, $destDB)
$destserver = "CCIIT23"
$destDB = "SSIMS_Prod"
$Servers = Get-SqlData $destserver $destDb "Select ServerName From ServerNames"
$CounterList = Get-SqlData $destserver $destDb "Select Counter From MemoryCounterList"
$Servers | Foreach-Object { 
$Serv = $_; $CounterList | Foreach-Object { 
    Get-Counter -Computer $Serv -Counter $_ -SampleInterval 1
    }
}

1 个答案:

答案 0 :(得分:2)

我在这里猜测你正在使用模块Get-SqlData中的SQL PSX。如果你已经付出了一些努力,你可能已经阅读了这个

  

Get-SqlData函数执行查询并返回一个数组   的System.Data.DataRow。

来源:Get-SqlData

DataRow不是字符串,而是对象。访问MSDN,您会找到一个如何使用DataRow对象的示例:row["ColumnName"]

这意味着你应该尝试使用

$Serv = $_["ServerName"]   #You may need to use $_["ServerName"].ToString()  .  $_.Servername might also work

Get-Counter -Computer $Serv -Counter ($_["Counter"]) -SampleInterval 1

我没有可以测试的SQL服务器,但这应该让你去。谷歌搜索可能会引导您访问另一个论坛帖子,其中显示如果Foreach-Object不起作用,如何遍历结果集:

http://powershell.com/cs/forums/t/7980.aspx

欢迎大家在这里提问,但是请表现出一些努力,否则您的问题将被关闭和投票。