在上一篇文章中,我给了你一个使用Hyper-V和PowerShell使用性能计数器的简介。当然,您可以使用性能计数器来管理各种各样的东西,而是个人,记忆是最关键的。即使我’M在非生产设置中运行Hyper-V和Don’T可以访问大规模的服务器场和后端存储,我讨论的概念仍将适用于这些实例。因此,即使本文要专门用于动态内存计数器,您可能需要别的东西。我鼓励你和我的所有内容一样,看看技术和概念,并没有完全关注最终结果。

寻找实例

我在我的Windows 10框上运行Hyper-V,并将查询本地计算机。但是在那里’s no reason this won’T与远程Hyper-V服务器一起使用。虽然我没有测试任何测试窗口服务器2019.。保持代码可重复使用我’LL为Hyper-V主机定义一个变量。您自然会将其设置为您需要的任何内容。

$Computer = $env:COMPUTERNAME

我想检查单个虚拟机上的计数器实例。在上一篇文章中,我谈到了从实例获取计数器数据所以我’m将使用正则表达式模式来检索与给定VM相关联的实例。

$VMName = "WIN10"
[regex]$rx = "(?<=\\).*(?=\)"

$c = get-counter -listset 'Hyper-V Dynamic Memory VM' -ComputerName $computer | 
Select -expand PathsWithInstances | where {$_ -match $VMName}

这就是我得到的。

动态记忆性能计数器

我可以将这个柜台传递给GET-COMPT. cmdlet。

获得计数器数据

还有几个,但你得到了这个想法。

监控性能计数器

GET-COMPT.中的一个很好的功能是您可以观看一组给定的计数器。我会相信您将读取完整的cmdlet帮助和示例。但我可以运行此命令来收集指定计数器的10个样本,每2秒钟读取一次。

GET-COMPT. -counter $c -SampleInterval 2 -MaxSamples 10

大学教师’在你的采样间隔内得到了太痛苦。

电源外壳 输出远非用户友好。您可能希望将所有输​​出保存到变量或导出到XML文件中。大学教师’t use CSV. Or, let’s使PowerShell格式化结果进入更多易于管理的东西。

GET-COMPT. -Counter $c | 
Select-object -expandproperty Countersamples |
Sort-object -property InstanceName | 
Select-object -property InstanceName, 
@{Name="Counter";Expression={Split-path $_.path -Leaf}},
Cookedvalue,timestamp,
@{Name="VMHost";Expression={$rx.Match((Split-Path $_.path)).value.ToUpper()}} |
Format-Table

这更易于阅读。

电源外壳 中格式化性能计数器

或发送给out-gridview..

GET-COMPT. -Counter $c | 
Select-object -expandproperty Countersamples |
Sort-object -property InstanceName | 
Select-object -property InstanceName, 
@{Name="Counter";Expression={Split-path $_.path -Leaf}},
Cookedvalue,timestamp,
@{Name="VMHost";Expression={$rx.Match((Split-Path $_.path)).value.ToUpper()}} |
Out-GridView -Title "Dynamic Memory Counters"

电源外壳 在Out-GridView中的性能计数器

当然,这都不是实际监控。这里’■代码示例实现与我之前的片段相同的结果:2秒间隔的10个样本。

1..10 | foreach {
    $data = Get-Counter -Counter $c | Select-object -expandproperty Countersamples |
    Sort-object -property InstanceName
    clear-Host
    $data | Select-object -property InstanceName, 
    @{Name="Counter";Expression={Split-path $_.path -Leaf}},
    Cookedvalue,timestamp,
    @{Name="VMHost";Expression={$rx.Match((Split-Path $_.path)).value.ToUpper()}} |
    Format-Table
    Start-sleep -Seconds 2
}

在此示例中,我使用PowerShell控制台窗口作为监视工具。使用每2秒刷新性能数据将其写入控制台。

另一种选择是使用我的convertto-wpfgrid函数,这是我的一部分psscripttools.您可以从PowerShell Gallery安装的模块。使用此命令,我可以以图形表单显示性能计数器数据,该图形表单将自动刷新。这里’S完整的代码片段。

$computer = $env:COMPUTERNAME
[regex]$rx = "(?<=\\).*(?=\)"

$VMName = "SRV2"
#get the available counters
$c = get-counter -listset 'Hyper-V Dynamic Memory VM' -ComputerName $computer | 
Select -expand PathsWithInstances | where {$_ -match $VMName} 

1..5 | foreach {
    Get-Counter -Counter $c | Select-object -expandproperty Countersamples |
    Sort-object -property InstanceName | 
    Select-object -property InstanceName, 
    @{Name="Counter";Expression={Split-path $_.path -Leaf}},
    Cookedvalue,TimeStamp,
    @{Name="VMHost";Expression={$rx.Match((Split-Path $_.path)).value.ToUpper()}} |
    ConvertTo-WPFGrid -Title "Dynamic Memory Counters" -Timeout 10 -Height 300 -Width 600 -CenterScreen
}

运行时,我会得到这样的东西:

以WPF形式显示性能计数器

我的代码段每10秒获得5个样本。您还可以使用DO循环或其他技术来实现相同的效果。

微调性能聚集

在我今天包装之前让我留下一些技巧,用于微调性能计数器数据的捕获。让’s说我对单个虚拟机的压力计数器感兴趣。我可以微调正常表达式模式以检索那些性能计数器实例。

$computer = $env:COMPUTERNAME
$VMName = "SRV2"
[regex]$rx = "(?<=\\).*($VMName)\.*Pressure"

#get the available counters
get-counter -listset 'Hyper-V Dynamic Memory VM' -ComputerName $computer | 
Select -expand PathsWithInstances | where {$_ -match $rx}

获取性能计数器的子集

使用此作为基础和一些额外的正则表达式Voodoo,我可以为单个虚拟机构建一点监视代码。

$computer = $env:COMPUTERNAME
$VMName = "SRV2"
[regex]$rx = "(?<=\\).*($VMName)\.*Pressure"
[regex]$rxCounter = "(?<=\\).*(?=\)"

#get the available counters
$c = get-counter -listset 'Hyper-V Dynamic Memory VM' -ComputerName $computer | 
Select -expand PathsWithInstances | where {$_ -match $rx} 

for ($i=0;$i -lt 12;$i++) {
    Get-Counter -Counter $c | Select-object -expandproperty Countersamples |
    Sort-Object -property Path |  
    Select-Object -property @{Name="VMHost";Expression={$rxCounter.Match((Split-Path $_.path)).value.ToUpper()}},
    @{Name="VMName";Expression = {$_.InstanceName.toUpper()}}, 
    @{Name="Counter";Expression={Split-Path $_.path -Leaf}},
    Cookedvalue,TimeStamp  |
    ConvertTo-WPFGrid -Title "Memory Pressure for $VMName" -Timeout 5 -Height 180 -Width 530 -CenterScreen
}

找到正确的尺寸需要一点点实验。

记忆力性能数据

下次我’LL在PowerShell中的Hyper-V性能计数器上用一种技术,我认为你’ll find intriguing.

如果你’Re遇到PowerShell脚本的问题使用此功能故障排除指南,诊断问题并解决您的PowerShell困境.

您的数据安全吗?

你知道微软没有备份办公室365数据吗?大多数人都假设他们的电子邮件,联系人和日历事件在某处保存,但它们不是。立即使用您的办公室365数据使用altaro备份 - 公司和MSP的可靠和经济高效的邮箱备份,恢复和备份存储解决方案

分享这个帖子

不是Dojo会员?

加入数千个其他IT专业人员,并收到一封每周的综述电子邮件,其中包含最新内容和更新!

发表评论或提出问题

您的电子邮件地址不会被公开。必需的地方已做标记*

您的电子邮件地址不会被公开。必需的地方已做标记*

通过电子邮件通知我的后续回复

是的,我想通过电子邮件收到新的博客帖子

什么是草的颜色?

请注意:如果您还没有Dojo论坛的会员,您将创建一个新帐户并收到激活电子邮件。

相关文章