我正在编写一个 powershell 脚本来捕获以下 SQL 服务器计数器:
SQL Server:内存管理器:服务器总内存 (KB)
SQL Server:内存管理器:目标服务器内存 (KB)
我的机器有 3 个 SQL 服务器实例,因此我希望此脚本动态捕获所有计数器并仅报告 1 个样本的值。我试着写以下内容:
Get-counter -List *SQL*Memory* | Select paths, counter | format-list # doesn't display full list
Get-counter -List *SQL*Memory* | Select paths, counter | where {_.counter -like "*server memory*"} |format-list # displays nothing
最终我想用参数在多个服务器上运行它-computername
,因此我希望它能够动态捕获。
任何人都可以帮我找到缺少的东西吗?以下是我正在运行的确切脚本:
Function checkTransactionsPerSecond([string] $Hostname )
{
(Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"} #this returns nothing
# $listofmetrics = (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"}
# $listofmetrics | Get-Counter
}
clear
foreach ($Hostname in Get-Content "D:\TEMP\machines.txt")
{
Write-Host $Hostname
checkTransactionsPerSecond($Hostname)
}
提前致谢
Aaron Bertrand 写了一篇非常详细的好帖子……我如何使用 PowerShell 收集性能计数器数据。
然后,Laerte Junior 在 Simple-Talk 文章:Gathering Perfmon Data with Powershell中出色地介绍了他如何找到他想要的计数器。这可能是您想要开始的地方。它有一些 cmdlet,他用来捕获我相信的特定实例的计数器。
看看这是不是你需要的:
看一下这个:
这将输出数据库列表及其关联的 \Transactions/sec。我在搜索开始时遇到错误,但我认为这是权限问题。否则它就像一个美女。如果你愿意,你可以使用正则表达式来清理它:)