powershell - 检查 TCP 连接数
问题描述
我需要检查给定计算机上的连接数,如果它大于 100 - 杀死进程。我的代码:
IF ((Get-counter -Counter "\TCPv4\Connections Established" | Measure-Object).Length -gt 100)
{
stop-process -name Notepad
Write-host Process killed!
}
Else {
Write-host OK!
}
它不工作。如何将“已建立的连接”转换为字符串并使其工作?PowerShell 新手。谢谢。
我使用脚本:
IF ((Get-Counter -Counter "\TCPv4\Connections Established").CounterSamples.CookedValue -gt 100)
{
stop-process -name Notepad
Write-host Process killed!
}
Else {
Write-host not ok.
}
输出:
PS C:\Users\Administrator> D:\Share\scriptif.ps1
DEBUG: 1+ <<<< D:\Share\scriptif.ps1
DEBUG: ! CALL function 'scriptif.ps1' (defined in file 'D:\Share\scriptif.ps1')
DEBUG: 2+ IF <<<< ((Get-counter -Counter "\TCPv4\Connections Established").CounterSamples.cookedvalue -gt 100)
DEBUG: 8+ <<<< Write-host not ok.
not ok.
DEBUG: 2+ $foundSuggestion = <<<< $false
DEBUG: ! SET $foundSuggestion = 'False'.
DEBUG: 4+ if <<<< ($lastError -and
DEBUG: 15+ $foundSuggestion <<<<
当我尝试时(在命令行中):
(Get-Counter -Counter "\TCPv4\Connections Established").CounterSamples.CookedValue
我有空的结果。
我尝试了新的调试方法,但没有效果:
PS C:\Users\Administrator> (Get-Counter -Counter "\TCPv4\Connections Established").CounterSamples.CookedValue
DEBUG: 1+ (Get-Counter -Counter "\TCPv4\Connections Established").CounterSamples. <<<< CookedValue
DEBUG: 2+ $foundSuggestion = <<<< $false
DEBUG: ! SET $foundSuggestion = 'False'.
DEBUG: 4+ if <<<< ($lastError -and
DEBUG: 15+ $foundSuggestion <<<<
解决方案
一步一步地检查你的输出,看看你在哪里可以找到你感兴趣的数字。让我们从检查什么Get-Counter
给你开始:
PS> (Get-counter -Counter "\TCPv4\Connections Established")
Timestamp CounterSamples
--------- --------------
2019-10-09 11:20:09 \\hostname\tcpv4\connections established :
190
您必须从CounterSamples
属性中获取数据,所以让我们检查一下:
PS> (Get-counter -Counter "\TCPv4\Connections Established").countersamples
Path InstanceName CookedValue
---- ------------ -----------
\\hostname\tcpv4\connections established 159
如您所见,您要查找的是CookedValue
属性,因此您可以将if
语句更改为:
if ((Get-counter -Counter "\TCPv4\Connections Established").countersamples.cookedvalue -gt 100) {
# do something
}
编辑:根据评论,这是启用调试的所需输出(评论开头#
是我添加的):
# First I set debug
PS> Set-PSDebug -Trace 2
# Then I check CounterSamples
PS> (Get-counter -Counter "\TCPv4\Connections Established").countersamples
DEBUG: 1+ >>>> (Get-counter -Counter "\TCPv4\Connections Established").countersamples
DEBUG: ! CALL function '<ScriptBlock>'
Path InstanceName CookedValue
---- ------------ -----------
\\hostname\tcpv4\connections established 186
# Then I check CookedValue
PS> (Get-counter -Counter "\TCPv4\Connections Established").countersamples.cookedvalue
DEBUG: 1+ >>>> (Get-counter -Counter "\TCPv4\Connections Established").countersamples.cookedvalue
DEBUG: ! CALL function '<ScriptBlock>'
192
对于 PowerShell 2.0 兼容性,请使用以下Select-Object
方式代替.CookedValue
:
(Get-counter -Counter "\TCPv4\Connections Established").countersamples | Select-Object -ExpandProperty CookedValue
推荐阅读
- java - 正确的数据格式和对齐
- arrays - C - 将一维数组设为二维
- python - Python多串口减慢Linux上的USB速度
- firebase - 是否可以使用安全规则仅授予用户访问在 Firestore 中以其 uid 命名的文档的权限?
- javascript - JavaScript Chart.JS - 将图表保持在两行中,而不是将所有内容堆叠成一列
- java - 无法在appium上运行基本程序
- java - Selenium Java:侧栏菜单导航->无法选择无序列表菜单项
- r - 从使用 2 个不同几何图形创建的 ggplot 图例中删除某些值
- java - 从命令提示符运行时,LeanFT 无法找到窗口或屏幕 - Terminal Emulator IBM Application
- android - 如何从 NavigationView 向片段添加选项菜单