我正在尝试使用 PowerShell 来获取一些 SQL 计数器,但它似乎不再返回特定于 SQL 的计数器。我不确定我的服务器上可能发生了什么变化会导致这种情况。
该脚本非常简单,我不确定我缺少什么:
## Define some variables
$serverName = "ISOMORPH" # Server we are collecting from
# Define our list of counters
$counters = @(
"\Memory\Available MBytes",
"\Memory\Pages/sec",
"\PhysicalDisk(_Total)\Avg. Disk sec/Read",
"\PhysicalDisk(_Total)\Avg. Disk sec/Write",
"\PhysicalDisk(_Total)\Current Disk Queue Length",
"\PhysicalDisk(*)\Avg. Disk sec/Read",
"\PhysicalDisk(*)\Avg. Disk sec/Write",
"\PhysicalDisk(*)\Current Disk Queue Length",
"\Process(sqlservr)\% Privileged Time",
"\Process(sqlservr)\% Processor Time",
"\Processor(*)\% Privileged Time",
"\Processor(*)\% Processor Time",
"\SQLServer:Buffer Manager\Buffer cache hit ratio",
"\SQLServer:Buffer Manager\Buffer cache hit ratio base",
"\SQLServer:Buffer Manager\Lazy writes/sec",
"\SQLServer:Buffer Manager\Page life expectancy",
"\SQLServer:Memory Manager\Memory Grants Pending" ,
"\SQLServer:SQL Statistics\Batch Requests/sec",
"\System\Context Switches/sec",
"\System\Processor Queue Length"
)
## Get our performance counter data
Get-Counter -Counter $counters -SampleInterval 1 -MaxSamples 1
该脚本将返回所有计数器,但所有 SQL 计数器都显示 0 值。我没有收到任何错误,它只是将所有 SQL 计数器显示为值为 0。
如果我手动打开性能监视器,我可以看到这些计数器并且它们具有值。我在安装了 SQL 2014 Developer Edition 的 Windows 7 笔记本电脑上运行它。
编辑:进一步的测试让我相信这是一个操作系统特定的问题。其他人使用运行 SQL 2012 的 Windows 8.1 测试了此脚本,在这种情况下,它也为 SQL 特定计数器返回 0。
当您以管理员身份运行代码时,代码工作的原因是,当您启动 powershell 控制台时,它没有被提升。
有几个选项可以提升脚本。Ben Armstrong 的一个很好的例子让脚本检查它是否被提升,如果不是,它以提升模式启动并执行您的代码:http: //blogs.msdn.com/b/virtual_pc_guy/archive/2010/09/23/a -self-elevating-powershell-script.aspx