我有几台服务器,运行 Server 2003 Std/Ent 和 SQL 2000/2005,我注意到随着时间的推移,它们将开始显示更高的 CPU 使用率。停止 WMI 服务并重新启动它总是会使其重新关闭。这不是一个巨大的蠕变,但一个月后它会增加大约 10%,所以即使在空闲时间,它也会显示 10% 的 CPU 使用率。我们并没有大量使用 WMI,只有几个脚本检查服务状态和性能(它是否使用 WMI?),这就是它被注意到的方式。是否有 WMI 跟踪工具?有没有其他方法可以解决这个问题?表现出症状的服务器大不相同,除了操作系统和 SQL 之外没有共同的元素。
基本原理这属于 ServerFault 而不是 StackOverflow - 我已经有了我的程序来获取值,我正在查询返回的值及其含义。
我有一个内部程序来审核我们公司的 PC,它检查的其中一项内容是处理器的速度。为此,它查询Win32_Processor WMI 类并获取CurrentClockSpeed的值。
我们今天在玩数据时发现异常,其中一些速度报告不正确(例如,CurrentClockSpeed 表示 1.0GHz,而 CPU 名称表示Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz [已确认]实际上是 1.83GHz])。我在互联网上进行了一些挖掘,发现了这篇博客文章,它可能解释了正在发生的事情。
我最初的想法是我可以更改程序以获取MaxClockSpeed而不是CurrentClockSpeed的值,但微软的文档没有明确定义这将返回什么。我的意思是这将返回一个值,它是它的实际最大速度(假设它被超频)但它通常不会运行,或者它会返回我期望的值,这是它在正常情况下的最大速度(没有超频)条件?
我自己是 wmic 的新手,并一直尝试使用默认代理查询方法。
wmic 是基于 linux 的 WMI 工具,用于与 windows WMI 代理交谈。在尝试使用 wmic 从 nt(运行 WMI 服务的 win7)获取数据时,它显示在所有情况下都拒绝访问。
问题是可能的原因是什么,是防火墙端口、WMI 组、文件或用户权限还是其他原因?任何类型的提示都会非常有帮助。
[root@rhel6 wmic]# wmic -U nt-login-name% //nt-primary-ip "select caption, name, parentprocessid, processid from win32_process"
[librpc/rpc/dcerpc_util.c:1290:dcerpc_pipe_auth_recv()] Failed to bind to uuid 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 - NT_STATUS_NET_WRITE_FAULT
[librpc/rpc/dcerpc_connect.c:790:dcerpc_pipe_connect_b_recv()] failed NT status (c0000022) in dcerpc_pipe_connect_b_recv
[wmi/wmic.c:196:main()] ERROR: Login to remote object.
NTSTATUS: NT_STATUS_ACCESS_DENIED - Access denied
Run Code Online (Sandbox Code Playgroud) 我有一个挑战,我想使用 GPO 来设置电源计划。
在构建 WMI 过滤器(使用 WQL)时,我遇到了确定一组 WQL 语句的问题,这些语句总是true为台式机/服务器和false笔记本电脑/笔记本电脑返回。
我开始测试win32_systemenclosureproperty的使用ChassisTypes,但很快发现它ChassisTypes是一个int array,不能在(标准)WQL 中使用 [尽管它在 SCCM WQL 扩展集中可用]。
接下来我找到了使用win32_battery和检查Status属性的非零值的引用;但我很快意识到这将在通过 USB 连接 UPS 的台式机和服务器上返回一个值。
由于true对于台式机/服务器和false笔记本电脑/笔记本电脑,上述情况都不会总是(+/- 可容忍的 N)返回,因此我找到了该win32_portablebattery课程。
我很兴奋,开始测试并很快注意到win32_portablebattery在桌面或服务器上执行时没有返回任何内容。我所说的“无”不是说{empty string}/"",我不是说NULL,我也不是说false,我真的没有什么意思。我什至试图检查__CLASS = "" ,__CLASS IS NULL并且仍然返回false台式机和服务器。
有没有人知道任何进一步的WQL-fu 尝试使用 获得true结果win32_portablebattery?
我打算使用 WMIC 来重置远程机器的信任,并且不在网络上。以下所有变化都会导致“拒绝访问”:
以下工作正常:
net use \\patterson-e10 /user:patterson-e10\wks.admin xxx
Run Code Online (Sandbox Code Playgroud)
以下所有失败:
wmic /node:"patterson-e10" /user:"patterson-e10\wks.admin" /password:xxx process call create "cmd /c dir"
wmic /node:"patterson-e10" /user:".\wks.admin" /password:xxx process call create "cmd /c dir"
wmic /node:"patterson-e10" /user:"wks.admin" /password:xxx process call create "cmd /c dir"
wmic /node:"patterson-e10" /user:wks.admin /password:xxx process call create "cmd /c dir"
Run Code Online (Sandbox Code Playgroud)
我即将尝试 Powershell (PS) 远程处理,但我不确定它如何与信任一起工作。
更新
我也尝试过 PSExec 和 SC(我将在其中“启动服务”)并遇到类似的身份验证失败。
似乎部分有效的唯一途径是我启动 RDP 会话,并将驱动器映射到我的源计算机,然后在那里运行命令。我研究了脚本 RDP,除了创建连接文件之外,我似乎无能为力。
更新 2
该机器没有控制台,因此以下将非域成员添加到TrustedHosts 的解决方案不起作用,我只是希望有另一种解决方案/解决方法。
我一直在编写一个非常简单的脚本来监控我们终端服务器场使用的某些方面,并且正在实施一个部分,我在其中检查给定时间点服务器上的内存使用情况。这是我用来获得的特定部分:
<#Modified to troubleshoot this particular section; defined $TermSvr and pipe output directly to
host:#>
$RemoteSvr = "Win10Test"
#Check current Memory Usage and Available Space
$SysMem = Get-WmiObject Win32_OperatingSystem -ComputerName $RemoteSvr
"$RemoteSvr has {0:#.0} GB free space out of {1:#.0} GB total available memory" -f
($SysMem.FreePhysicalMemory/1GB),
($SysMem.TotalVisibleMemorySize/1GB) | Write-Host
Run Code Online (Sandbox Code Playgroud)
这输出:
Win10Test has **.0** GB free space out of **.0** GB total available memory
Run Code Online (Sandbox Code Playgroud)
但; 当我将 ($_.SysMem.TotalVisibleMemorySize/ 1GB ) 更改为 ($_.SysMem.TotalVisibleMemorySize/ 1MB )
它输出:
Win10Test has 1.1 GB free space out …Run Code Online (Sandbox Code Playgroud) 我在W2K8R2机器上安装(并注册)了一个 DCOM 应用程序,其 GUID 可以在 dcomcnfg 显示的 DCOM 列表中找到。
我还可以使用 Powershell 查找其 GUID 的Win32_DCOMApplication或Win32_DCOMApplicationSetting对象:
PS C:\Windows\system32> Get-WMIObject Win32_DCOMApplicationSetting -Filter "AppID='{1CECFD4D-2CFB-4626-95C7-0266C26960FA
}'"
__GENUS : 2
__CLASS : Win32_DCOMApplicationSetting
__SUPERCLASS : Win32_COMSetting
__DYNASTY : CIM_Setting
__RELPATH : Win32_DCOMApplicationSetting.AppID="{1CECFD4D-2CFB-4626-95C7-0266C26960FA}"
__PROPERTY_COUNT : 12
__DERIVATION : {Win32_COMSetting, CIM_Setting}
__SERVER : MYSRV
__NAMESPACE : root\cimv2
__PATH : \\MYSRV\root\cimv2:Win32_DCOMApplicationSetting.AppID="{1CECFD4D-2CFB-4626-95C7-0266C269
60FA}"
AppID : {1CECFD4D-2CFB-4626-95C7-0266C26960FA}
AuthenticationLevel :
Caption :
CustomSurrogate :
Description :
EnableAtStorageActivation : False
LocalService :
RemoteServerName :
RunAsUser :
ServiceParameters :
SettingID …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 WMI 从 Windows Server 2012 查询 DNS 统计信息。
如果我在 Powershell 中运行以下命令:
Get-WmiObject -Namespace root\MicrosoftDNS -Class MicrosoftDNS_Statistic | ?{ $_.Name.Contains("UDP messages allocated") } | ft Name,Value
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
Name Value
---- -----
UDP messages allocated 20550
UDP messages allocated 2596235
Run Code Online (Sandbox Code Playgroud)
两个同名的统计信息?和完全不同的价值观?什么?所以我开始调查底层的类,我看到这个类实际上有:
uint32 UdpAlloc;
uint32 TcpAlloc;
Run Code Online (Sandbox Code Playgroud)
这似乎很明显,上面的两个值很可能就是这两个值。但是 - 哪个是哪个?
这似乎是一个明显的假设,即较大的数字是 UDP,较小的数字是 TCP。但是,由于存在多个重复的统计数据,而不仅仅是这个,而且其中一些具有较低的值,可能是 TCP 或 UDP,这一事实使情况变得更加复杂。
有没有其他人以前见过这个并解决它?
问题:我需要弄清楚哪个卷对应哪个分区,哪个分区对应于一个非常有效的脚本庄园中的哪个磁盘。我知道如何对应哪个分区对应哪个磁盘,因为磁盘id直接在一个简单的wmic查询的结果中。然而,问题的第一部分更加困难。如何关联哪个卷属于哪个分区?
有没有办法使用 wmic、PowerShell、cmd 提示符对哪个卷映射到哪个分区进行逆向工程,这适用于所有当前支持的 Windows Server 版本(Windows Server 2008R2 - Windows Server 2016)?
如果是这样,这个查询看起来如何?
使用 diskpart 获取信息不是一种选择。虽然它可以用来编写磁盘操作的脚本,但是使用 diskpart 作为返回有关磁盘配置信息的工具是很糟糕的。Diskpart 输出不可解析。
我的 90% 的服务器上都有 PSRemoting。但是有一些我不确定他们发生了什么。Server 2016。
大部分是Hyper-V主机,但不是全部。
Enable-PSRemoting -Force作品。Windows 防火墙设置为接受。
测试 WSMan 错误是Code="2150858770".
Software caused connection abortport 5985),我得到 [SYN]、[SYN,ACK]、[ACK]、[PSH,ACK]、POST,然后是 [RST,ACK]。我可以尝试任何想法或事情吗?
wmi ×10
powershell ×3
windows ×2
cpu-usage ×1
dcom ×1
disk-volume ×1
linux ×1
opennms ×1
partition ×1
pstools ×1
scripting ×1
sql-server ×1
windows-7 ×1
winrm ×1