如何在Windows 10企业版服务器用PowerShell v5+通过XML模板配置Perfmon计数器
批量部署Perfmon计数器模板的PowerShell方案
一、PowerShell v5+批量推送模板的可行性与方法
完全可以通过PowerShell v5及以上版本实现批量部署,以下是两种实用方法:
方法1:利用logman命令行工具(简单高效)
logman是Windows自带的性能日志管理工具,支持直接导入XML模板,结合PowerShell远程执行能力可批量操作:
# 定义目标服务器列表 $servers = @("Server01", "Server02", "Server03") # XML模板路径(推荐放在共享目录,或先复制到目标服务器本地) $templatePath = "\\SharedServer\PerfTemplates\ProcessCounters.xml" # 数据收集集名称 $dcSetName = "ProcessPerfMonitor" Invoke-Command -ComputerName $servers -ScriptBlock { # 清理同名现有收集集(避免冲突) logman stop $using:dcSetName -s localhost -ets 2>&1 | Out-Null logman delete $using:dcSetName -s localhost -ets 2>&1 | Out-Null # 导入模板并创建收集集 logman import $using:dcSetName -xml $using:templatePath -s localhost -ets # 可选:立即启动收集 logman start $using:dcSetName -s localhost -ets } -Credential (Get-Credential)
方法2:通过CIM远程操作
借助CIM接口也能完成模板导入,适合需要更精细控制的场景:
$servers = @("Server01", "Server02") $localTemplatePath = "C:\Temp\PerfTemplate.xml" $dcSetName = "ProcessPerfCounters" foreach ($server in $servers) { # 先把模板复制到目标服务器本地 Copy-Item -Path $localTemplatePath -Destination "\\$server\C$\Temp\" -Force # 调用CIM方法导入模板 Invoke-CimMethod -ComputerName $server -ClassName Win32_PerfFormattedData_Counters_PerfmonCounterSet ` -MethodName ImportCounterSet -Arguments @{FileName = "C:\Temp\PerfTemplate.xml"} }
二、Pla.DataCollectorSet COM对象的完整操作步骤
使用Pla COM对象可以实现更灵活的自定义配置,完整流程如下:
$servers = @("Server01", "Server02") $localTemplatePath = "C:\PerfTemplates\ProcessCounters.xml" $dcSetName = "ProcessPerformanceMonitor" Invoke-Command -ComputerName $servers -ScriptBlock { # 创建Pla数据收集集对象 $dcSet = New-Object -COM Pla.DataCollectorSet # 设置收集集名称 $dcSet.Name = $using:dcSetName # 从XML模板导入配置,第二个参数设为$true覆盖现有同名集 $dcSet.Import($using:localTemplatePath, $true) # 保存配置到本地计算机,$false表示不立即启动 $dcSet.Commit($null, $false) # 可选:启动数据收集 $dcSet.Start($false) # 释放COM对象避免资源泄漏 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($dcSet) | Out-Null } -Credential (Get-Credential)
关键参数说明
Import():第一个参数为目标服务器上的模板路径,bOverwrite设为$true可覆盖现有同名收集集Commit():$null表示保存到本地计算机,bStart设为$false仅保存配置不启动Start():bSynchronous设为$false表示异步启动,避免阻塞远程会话
三、注意事项
- 执行PowerShell的账户需在所有目标服务器拥有管理员权限,且目标服务器已启用WinRM远程管理
- 若使用共享目录存放模板,需确保目标服务器的执行账户或计算机账户有读取权限
- 建议先在单台测试服务器验证命令,再批量执行
内容的提问来源于stack exchange,提问作者Avinash Mvrick
相关产品推荐
相关产品推荐

