我想从 WMI 命名空间的顶部开始,递归遍历所有对象,然后递归遍历每个对象的属性列表,过滤掉那些名称中包含mem 的属性并将其返回到控制台。
这是我到目前为止:
gwmi -namespace "root\cimv2" -list |???? |get-Member -MemberType property | Where-Object { $_.name -match 'mem'}
Run Code Online (Sandbox Code Playgroud)
注意大|???? 在中间那里。如果我删除它,该命令似乎可以运行,但无法找到我知道应该找到的属性。为什么?我认为这是因为我从以下两个命令中得到了不同的输出:
gwmi "Win32_operatingSystem" |get-Member -MemberType property (73 lines of output)
gwmi -namespace "root\cimv2" -list |where-object { $_.Name -eq 'Win32_OperatingSystem' } |get-Member -MemberType property (10 lines of output)
Run Code Online (Sandbox Code Playgroud)
我想要的是递归连接这个过程的单行:
gwmi -namespace "root\cimv2" -list
(manual selection of a WMI class from the list of 1000+ which appear)
gwmi "win32_OperatingSystem" | get-Member -MemberType property | Where-Object { …Run Code Online (Sandbox Code Playgroud) 从各种文档看来,要更改 WMI 访问权限,您需要使用 WMI 来访问正在运行的服务并修改树的特定部分。
使用 UI 更改 150,000 台主机有点烦人。
然后必须在添加新主机的过程中包含此类更改。
可以编写一个脚本来做同样的事情,但这需要要么连接到所有这些机器,要么在启动/安装脚本中分发以供以后更新。然后你必须从示例访问控制中复制二进制 SD 数据。
我还发现您可以更改 wbem/*.mof 文件以包含 SDDL,但我目前对这一切如何工作真的很模糊。
我是否只是错过了一些简单的管理?
我正在我的 64 位 Web 服务器上执行监控任务,该服务器有几个以 32 位模式运行的应用程序池。我在 perfmon 中使用 .Net CLR Memory 对象来监视它们。但是,我的性能监视器显示 0,除了 GC 句柄和正在使用的接收器块数之外的所有内容。其余的应用程序池工作正常。在以完全相同的方式配置的另一台服务器(在 64 位 IIS 上运行的 32 位应用程序池)上,WMI 甚至不会枚举我的所有 w3wp 实例。
有没有人对这些问题有任何想法?或者是否有工具可以监控在 64 位平台上运行的 32 位应用程序池,而不是使用内置的性能监控器?
另外,在 WMI 没有枚举所有 w3wp 实例的服务器上,我们在事件日志中有以下三个错误消息。
“ASP”服务的性能库“C:\WINDOWS\system32\aspperf.dll”的配置信息与存储在注册表中的可信性能库信息不匹配。该库中的函数不会被视为受信任的。(事件 ID 2003,源 Perflib)
“W3SVC”服务的性能库“C:\WINDOWS\system32\inetsrv\w3ctrs.dll”的配置信息与存储在注册表中的可信性能库信息不匹配。此库中的函数不会被视为受信任的。(事件 ID 2003,源 Perflib)
“InetInfo”服务的性能库“C:\WINDOWS\system32\infoctrs.dll”的配置信息与存储在注册表中的可信性能库信息不匹配。此库中的函数不会被视为受信任的。(事件 ID 2003,源 Perflib)
由于“ASP.NET_2.0.50727”服务的性能计数器库为该服务生成了一个或多个错误,因此该会话已禁用该服务的性能计数器数据收集。强制执行此操作的错误已写入应用程序事件日志。(事件 ID 1018,源 Perflib)
这些错误可能与我的问题有关。即使我在 wbem 目录中重新注册所有 .dll 文件,它仍然出现。有谁知道这些错误消息的含义以及如何修复它们?
另外对于.Net CLR Memory 对象中第一个值为0 的服务器,事件日志中没有错误消息。
iis windows-server-2003 monitoring performance-monitoring wmi
我正在通过 WMI 收集性能数据,并且希望避免为此目的使用管理员组中的帐户。目标计算机正在运行具有最新 SP/更新的 Windows Server 2003。
\n\n我已经完成了我认为适当的配置,以允许我们的用户访问 WMI(类似于此处描述的内容: http: //msdn.microsoft.com/en-us/library/aa393266.aspx)。
\n\n以下是所遵循的具体步骤:
\n\n我可以通过 WMI Explorer 远程连接,但是当我执行此查询时:
\n\nSelect CommandLine, ProcessId FROM Win32_Process\nRun Code Online (Sandbox Code Playgroud)\n\n我得到了有效的结果,但每一行都有一个空的命令行。如果我将用户添加到管理员组并重新运行查询,命令行列将包含预期的数据。
\n\n似乎我在某个地方缺少了一个许可,但我没有太多运气找到它。
\n\n提前谢谢了。
\n我需要从一组需要配置的新 HP 迷你台式机中检索硬件序列号。
这在过去使用 WSH 脚本通过 WMI 查询它是有效的。不幸的是,较新的型号不再包含 BIOS,而是带有 EFI。所有已知的查询信息的方法都不再有效。
我已经用谷歌搜索了很多这个主题,但我找到的所有答案都推荐了上面的无效方法。任何人都可以帮忙吗?如果它有所作为,我需要一个可以与 XP(嵌入式)一起使用的解决方案。
我有一个运行“经典”ASP 代码(不是 ASP.NET)的 IIS 7.5 网站,该网站在正常服务上下文下运行,并且只启用了“Windows 身份验证”。无论是否在 IIS 主机上具有隐式管理员权限(大多数没有),用户和浏览站点都没有任何问题。但是,当我尝试在 ASP 代码中执行常见的 Win32_PingStatus 请求时,它会失败,除非用户在 IIS 主机上具有管理员权限。这是我的代码...
On Error Resume Next
asset = "Computer123"
pingtest = False
query = "Select StatusCode, Address FROM Win32_PingStatus " & _
"WHERE Address=" & Chr(34) & asset & Chr(34)
Set colPingStatus = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}//./root/cimv2").ExecQuery(query)
If err.Number <> 0 Then
Response.Write "Access Denied (error: " & err.Number & " / " & err.Description & ")"
Response.End
End If
For Each objItem In colPingStatus
If objItem.StatusCode = …Run Code Online (Sandbox Code Playgroud) 如何在 Windows 下的 CLI 中检测当前媒体类型?(DVD-RW、BD-R 等)
我试过 wmic cdrom get /format:list 但没有关于当前媒体类型的信息。
我想检测光盘是否是CD、DVD、BD、RW、DL...等。在Windows GUI 下的Computer 下,我们可以根据光驱显示的图标查看信息。
另外,我找不到 Availability 和 Capabilities 值的含义,如果您知道有关它的文档,那就太好了。
C:\>wmic cdrom get /format:lis
Availability=3
Capabilities={3,4,7}
CapabilityDescriptions={"Random Access"," Supports writing"," Supports Removable
Media"}
Caption=HL-DT-ST BD-RE BH12LS35
CompressionMethod=Unknown
ConfigManagerErrorCode=0
ConfigManagerUserConfig=FALSE
CreationClassName=Win32_CDROMDrive
DefaultBlockSize=
Description=CD-ROM Drive
DeviceID=SCSI\CDROM&VEN_HL-DT-ST&PROD_BD-RE__BH12LS35\4&15828421&
;0&050000
Drive=G:
DriveIntegrity=TRUE
ErrorCleared=
ErrorDescription=
ErrorMethodology=
FileSystemFlags=
FileSystemFlagsEx=21757959
Id=G:
InstallDate=
LastErrorCode=
Manufacturer=(Standard CD-ROM drives)
MaxBlockSize=
MaximumComponentLength=254
MaxMediaSize=
MediaLoaded=TRUE
MediaType=DVD Writer
MfrAssignedRevisionLevel=1.00
MinBlockSize=
Name=HL-DT-ST BD-RE BH12LS35
NeedsCleaning=
NumberOfMediaSupported=
PNPDeviceID=SCSI\CDROM&VEN_HL-DT-ST&PROD_BD-RE__BH12LS35\4&15828421&
amp;0&050000
PowerManagementCapabilities=
PowerManagementSupported=
RevisionLevel=
SCSIBus=5
SCSILogicalUnit=0
SCSIPort=0 …Run Code Online (Sandbox Code Playgroud) 我需要在 IE 10+ 的所有机器上应用 GPO,但设置不需要也不应该应用于 ie 9。所有机器都是 Windows Vista、7 和 8(一些 32 位和其他 64 位) .
我找到了两种方法
第一种方法似乎是一个完整的黑客,可能不是找出系统实际使用的 IE 版本的最佳方法(例如程序文件 x86)
SELECT path,filename,extension,version FROM CIM_DataFile WHERE path="\\Program Files\\Internet Explorer\\" AND filename="iexplore" AND extension="exe" AND version>"8.0"
第二种方法使用内置的 WMI 命名空间和类,但据我所知,Microsoft 从 Windows XP 之后的每个操作系统中删除了 \root\cimv2\Applications\MicrosoftIE 命名空间。
root\cimv2\Applications\MicrosoftIE;SELECT * FROM MicrosoftIE_Summary WHERE Version = '8.0.6001.18702'
有谁知道 Windows 7/8 中是否有一个新的命名空间来存储 Internet Explorer 版本,或者可能有第三种方法来过滤我的 GPO,有人知道我没有找到。
我的 Windows 2008R2 服务器报告以下错误:
磁盘上的文件系统结构已损坏且无法使用。请在卷\Device\HarddiskVolume2上运行 chkdsk 实用程序。
使用 Powershell 和 WMI 在查询时如何识别这是哪个卷Win32_Volume。
例如,如果我这样做:
Get-WmiObject Win32_Volume
Run Code Online (Sandbox Code Playgroud)
我得到了服务器上所有卷的列表,但是没有一个Win32_Volume类属性使用(看起来是)这个“友好”名称 - \Device\HarddiskVolume2。我可以看到有一个DeviceID属性返回如下值:
DeviceID : \\?\Volume{4bc3df2a-65c7-11e0-9c33-806e6f6e6963}\
Run Code Online (Sandbox Code Playgroud)
还有一个Name属性,但这只是分配给卷的驱动器号。其他属性的值都与事件日志中报告的值相差甚远。
fltmc volumes我知道我可以解析或 的输出来DISKPART获取此信息,但必须有一种方法可以在 PowerShell 脚本中使用 WMI 来获取此信息。
我还查看了Win32_DiskDrive,Win32_DiskPartition和Win32_LogicalDisk类,但没有提到类似的属性值\Device\HarddiskVolume2。
windows powershell diskmanagement wmi windows-server-2008-r2
wmi ×10
windows ×5
group-policy ×2
iis ×2
permissions ×2
powershell ×2
scripting ×2
security ×2
asp ×1
dcom ×1
monitoring ×1
uefi ×1
web ×1