标签: wmi

Powershell 递归 WMI 查询

我想从 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)

scripting powershell wmi

6
推荐指数
1
解决办法
2606
查看次数

有没有办法使用 GroupPolicy 设置对 WMI 的访问?

从各种文档看来,要更改 WMI 访问权限,您需要使用 WMI 来访问正在运行的服务并修改树的特定部分。

使用 UI 更改 150,000 台主机有点烦人。
然后必须在添加新主机的过程中包含此类更改。

可以编写一个脚本来做同样的事情,但这需要要么连接到所有这些机器,要么在启动/安装脚本中分发以供以后更新。然后你必须从示例访问控制中复制二进制 SD 数据。

我还发现您可以更改 wbem/*.mof 文件以包含 SDDL,但我目前对这一切如何工作真的很模糊。

我是否只是错过了一些简单的管理?

windows permissions group-policy dcom wmi

6
推荐指数
1
解决办法
3万
查看次数

在监控 64 位 IIS 上运行的 32 位应用程序池时遇到问题

我正在我的 64 位 Web 服务器上执行监控任务,该服务器有几个以 32 位模式运行的应用程序池。我在 perfmon 中使用 .Net CLR Memory 对象来监视它们。但是,我的性能监视器显示 0,除了 GC 句柄和正在使用的接收器块数之外的所有内容。其余的应用程序池工作正常。在以完全相同的方式配置的另一台服务器(在 64 位 IIS 上运行的 32 位应用程序池)上,WMI 甚至不会枚举我的所有 w3wp 实例。

有没有人对这些问题有任何想法?或者是否有工具可以监控在 64 位平台上运行的 32 位应用程序池,而不是使用内置的性能监控器?

另外,在 WMI 没有枚举所有 w3wp 实例的服务器上,我们在事件日志中有以下三个错误消息。

  1. “ASP”服务的性能库“C:\WINDOWS\system32\aspperf.dll”的配置信息与存储在注册表中的可信性能库信息不匹配。该库中的函数不会被视为受信任的。(事件 ID 2003,源 Perflib)

  2. “W3SVC”服务的性能库“C:\WINDOWS\system32\inetsrv\w3ctrs.dll”的配置信息与存储在注册表中的可信性能库信息不匹配。此库中的函数不会被视为受信任的。(事件 ID 2003,源 Perflib)

  3. “InetInfo”服务的性能库“C:\WINDOWS\system32\infoctrs.dll”的配置信息与存储在注册表中的可信性能库信息不匹配。此库中的函数不会被视为受信任的。(事件 ID 2003,源 Perflib)

  4. 由于“ASP.NET_2.0.50727”服务的性能计数器库为该服务生成了一个或多个错误,因此该会话已禁用该服务的性能计数器数据收集。强制执行此操作的错误已写入应用程序事件日志。(事件 ID 1018,源 Perflib)

这些错误可能与我的问题有关。即使我在 wbem 目录中重新注册所有 .dll 文件,它仍然出现。有谁知道这些错误消息的含义以及如何修复它们?

另外对于.Net CLR Memory 对象中第一个值为0 的服务器,事件日志中没有错误消息。

iis windows-server-2003 monitoring performance-monitoring wmi

6
推荐指数
1
解决办法
2999
查看次数

有用的 WMI 管理脚本

在对我对这个问题的回答的评论中,cop1152 说他喜欢 WMI 脚本。嗯,我也是!

您最喜欢、最好、最有用的脚本是什么,想与社区分享?

谢谢。

scripting windows wmi

5
推荐指数
2
解决办法
5786
查看次数

WMI 权限:选择 CommandLine,ProcessId FROM Win32_Process 不返回 CommandLine 数据

我正在通过 WMI 收集性能数据,并且希望避免为此目的使用管理员组中的帐户。目标计算机正在运行具有最新 SP/更新的 Windows Server 2003。

\n\n

我已经完成了我认为适当的配置,以允许我们的用户访问 WMI(类似于此处描述的内容: http: //msdn.microsoft.com/en-us/library/aa393266.aspx)。

\n\n

以下是所遵循的具体步骤:

\n\n
    \n\n
  1. 打开管理工具 -> 计算机管理:在计算机管理(本地)下展开服务和应用程序,右键单击 WMI 控制并选择属性。在“安全”选项卡中,展开“根”,突出显示 CIMV2,单击“安全”(靠近窗口底部);添加性能监视器用户并启用选项:启用帐户和远程启用。
  2. \n
    \n\xc2\xad
  3. 打开管理工具 -> 组件服务:在控制台根目录下转到组件服务->计算机 -> 右键单击​​我的电脑并选择属性,选择 COM 安全选项卡,在 \xe2\x80\x9cAccess Permissions\xe2\x80\x9d 中单击“编辑默认值”选择(或添加然后选择)\xe2\x80\x9cPerformance Monitor Users\xe2\x80\x9d 组并允许本地访问和远程访问,然后单击“确定”。在\xe2\x80\x9c启动和激活权限\xe2\x80\x9d中单击\xe2\x80\x9c编辑默认值\xe2\x80\x9d选择(或添加然后选择)\xe2\x80\x9c性能监视器用户\xe2\x80\ x9d 组并允许本地和远程启动和激活权限。
  4. \n
    \n\xc2\xad
  5. 打开管理工具 -> 组件服务:在控制台根目录下,转到组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置 -> 突出显示 \xe2\x80\x9cWindows Management and Instrumentation\xe2\x80\x9d 右键单击​​并选择属性,选择安全选项卡,在\xe2\x80\x9c启动和激活权限\xe2\x80\x9d下选择自定义,然后单击编辑,添加\xe2\x80\x9c性能用户组\xe2\x80\x9d并允许本地和远程远程启动和远程激活权限。
  6. \n
\n\n

我可以通过 WMI Explorer 远程连接,但是当我执行此查询时:

\n\n
Select CommandLine, ProcessId FROM Win32_Process\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到了有效的结果,但每一行都有一个空的命令行。如果我将用户添加到管理员组并重新运行查询,命令行列将包含预期的数据。

\n\n

似乎我在某个地方缺少了一个许可,但我没有太多运气找到它。

\n\n

提前谢谢了。

\n

security permissions wmi

5
推荐指数
1
解决办法
6903
查看次数

如何在新的 U/EFI 盒上从 Windows 检索序列号?

我需要从一组需要配置的新 HP 迷你台式机中检索硬件序列号。

这在过去使用 WSH 脚本通过 WMI 查询它是有效的。不幸的是,较新的型号不再包含 BIOS,而是带有 EFI。所有已知的查询信息的方法都不再有效。

我已经用谷歌搜索了很多这个主题,但我找到的所有答案都推荐了上面的无效方法。任何人都可以帮忙吗?如果它有所作为,我需要一个可以与 XP(嵌入式)一起使用的解决方案。

windows wmi uefi

5
推荐指数
1
解决办法
2588
查看次数

vbscript / ASP 代码中的 WMI 模拟级别

我有一个运行“经典”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)

security iis web asp wmi

5
推荐指数
1
解决办法
1263
查看次数

如何在 Windows 下的 CLI 中检测当前媒体类型?(DVD-RW、BD-R 等)

如何在 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&amp;VEN_HL-DT-ST&amp;PROD_BD-RE__BH12LS35\4&amp;15828421&amp
;0&amp;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&amp;VEN_HL-DT-ST&amp;PROD_BD-RE__BH12LS35\4&amp;15828421&
amp;0&amp;050000
PowerManagementCapabilities=
PowerManagementSupported=
RevisionLevel=
SCSIBus=5
SCSILogicalUnit=0
SCSIPort=0 …
Run Code Online (Sandbox Code Playgroud)

windows command-line-interface optical-media wmi

5
推荐指数
2
解决办法
3263
查看次数

适用于 Internet Explorer 10+ 的 WMI 过滤器

我需要在 IE 10+ 的所有机器上应用 GPO,但设置不需要也不应该应用于 ie 9。所有机器都是 Windows Vista、7 和 8(一些 32 位和其他 64 位) .

我找到了两种方法

  1. 检查 c:\program files\internet explorer\ 中的 iexplorer.exe 版本号
  2. 从 \root\cimv2\Applications\MicrosoftIE 中选择 MicrosoftIE_Summary

第一种方法似乎是一个完整的黑客,可能不是找出系统实际使用的 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,有人知道我没有找到。

internet-explorer group-policy wmi

5
推荐指数
1
解决办法
1万
查看次数

如何根据事件日志中报告的卷名称识别 WMI 中的卷?

我的 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_DiskPartitionWin32_LogicalDisk类,但没有提到类似的属性值\Device\HarddiskVolume2

windows powershell diskmanagement wmi windows-server-2008-r2

5
推荐指数
1
解决办法
8063
查看次数