问题标签 [cim]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
powershell - 将 Get-WmiObject 替换为 Get-CimInstance
我们正在审查我们的代码并尝试用 CIM 替换 WMI CmdLets。以下代码工作正常:
因为 WMI 默认使用 DCOM,所以我们认为它就像使用以下代码一样简单:
New-CimSession : Access denied
但是尽管我们使用相同的连接协议,但我们收到了错误。
我们这里有什么明显的遗漏吗?
c# - 调用 CIM 方法需要 MI_STRINGA 数据类型
从 C# 我试图调用 CIM 方法:
问题是它导致错误消息:WinRM 客户端无法处理请求。MI 类型 MI_STRING 的属性“NotifyServers”与架构中的预期类型不匹配:MI_STRINGA。指定正确的类型并重试该操作。
看起来好像它想要一个 8 位/ascii 字符串,但 C# 使用 unicode 字符串进行操作。如何给它一个 MI_STRINGA 数据类型?
我尝试了 byte[] 和 char[],以及指向封送内存块的指针。但它只会导致无法转换为 MI_STRINGA 的其他数据类型。
powershell - New-CimSession 自动降级到 DCOM / WMI
CIM 的好处之一是“扇出”能力;例如,运行以下命令会导致针对所有服务器并行创建会话,而不是按顺序创建:
由于我们的一些服务器没有启用 WimRM,因此我想在 WimRM 不可用时优雅地降级为使用 DCOM / 所以如果我们不需要,我们不会失败。因此,我在 Get-CimSession 周围放置了一个包装器,它执行类似这样的操作(简化版):
...我现在会这样调用:
我担心的是,这现在消除了“扇出”功能,因为每个调用New-CimSession
都是单独的/只需要 1 个服务器参数。
问题
这种担心是否有效,还是New-CimSession
更像 C# 中的 async/await 那样工作,因为在等待创建一个 CimSession 时,控制权交还给可以获取下一个会话的父线程?
其他想法/后续问题
如果我的担心是正确的,是否有更清洁的方法来解决这个问题?我考虑过使用工作流来包装这个逻辑,但这感觉就像重新发明了 New-CimSession 默认提供的东西。
我还考虑New-CimSession
过用计算机数组调用 and -ErrorAction Stop
,然后使用 catch 块来处理任何故障;但似乎只包括第一个失败的详细信息(即catch {$_.Exception.OriginInfo}
返回单个服务器名称,即使多个服务器失败)。我也没有用足够多的服务器组进行测试,以了解错误是否也终止了创建新会话的尝试;使用小数据集则不会,但这可能是因为在检测到非 winrm 服务器的错误之前已成功创建所有会话。
我目前的想法是将原始阵列的计算机名称与已创建会话中的计算机名称进行比较,以查找未为其创建会话的那些,然后尝试为剩余的那些创建 DCOM 会话。然而,这仍然感觉像是一个有点 hacky 的解决方法/我怀疑我缺乏 CIM 经验意味着我错过了一个更明显的开箱即用解决方案......
powershell - 将参数限制为特定类型;使用 CimInstance 时
有没有一种明智的方法来限制用于函数的参数类型,当它可能被封装在一个CimInstance
?
例如,假设我有如下方法:
问题?
- 有没有更好的方法来强制执行参数的类型;即使用参数类型,而不是验证脚本?
- 有没有办法使 CIM 与 WMI 的实现不可知,以便它只关心对象是 SecurityDescriptor/Access Control Entry?
即我的要求只是第一个参数是安全描述符,我的第二个是ACE;但是因为我在当前的实现中使用 CIM 来获取这些,所以它们恰好是CimInstance
. 然后我希望强制它们代表正确的底层对象,因此必须使用ValidateScript
来检查CimClass
. 但是,从这个功能的角度来看,CIM 的使用是一个任意的细节;它
c# - 在 C# 中模仿这个非常简单的 powershell 命令
试图模仿Get-CimInstance CIM_ManagedSystemElement
C# 中的命令
可悲的是,这没有按预期工作,想得到一些帮助
谢谢
powershell - 在 CIM 实例中设置 PolicyStore
Get-NetFirewallProfile
cmdlet 具有该计算机-PolicyStore ActiveStore
上所有策略的总和的选项。当我运行它时,我得到考虑 GPO 的防火墙配置文件状态。
Get-CimInstance -Namespace Root\StandardCimv2 -ClassName MSFT_NetFirewallProfile
或者,我可以使用or获取 CIM 实例Get-WmiObject -Namespace "Root\StandardCimv2" -Query "SELECT * FROM MSFT_NetFirewallProfile"
,但 GPO 值被丢弃。
如何在 中设置策略存储Get-WmiObject -Namespace "Root\StandardCimv2" -Query "SELECT * FROM MSFT_NetFirewallProfile"
?
最后,我将使用wbemcli api在 c++ 中实现查询
windows - WMI 已弃用:现在如何从 .Net Core 查询?
我在这里读到微软正在弃用 WMI。我需要在 .NET Core 中启动一个项目并从 Windows 查询信息,例如Win32_OperatingSystem
或Win32_LogicalDisk
.
我读过你应该避免Get-WmiObject
在 PowerShell 中使用,Get-CimInstance
而是使用。现在应该在 .Net Core 中使用什么(哪个 Nuget/库)来查询这些信息?
wql - How to use Microsoft.Management.Infrastructure in an application to determine which app has a file locked?
I've got Microsoft.Management.Infrastructure working in my application, at least as far as the very first sample code:
What I need is to use MMI to determine whether any applications on the local machine have a lock on a specific file (see this question to see why approaches besides MMI aren't working)
I've been reading page after page of documentation on MMI and WQL and CIM and a flock of other TLAs but cannot figure out how to either
1) ask the question "which process has file X open/locked"?
or
2) enumerate all open/locked files so I can look for file X
Important - I need to do this in code (running Process Explorer won't work for me).
c++ - 即使 WMI 已被弃用,我仍然可以使用 C++ 的 WMI Com API 来获取 CPU 使用率吗?
我听说 WMI 正在被弃用。有人说 get-WMIObject 已被弃用。我应该使用 C++ 获取系统统计信息,如 CPU 使用率、RAM 等。 https://docs.microsoft.com/en-us/windows/win32/winrm/winrm-c---api “或” https://docs.microsoft.com/en-us/windows/win32/wmisdk/ com-api-for-wmi
我将获得本地计算机的统计信息。我很困惑在 C++ 中使用 WMI 或 WINRM 或 GET-CIMINSTANCE 什么。
使用 C++(适用于 Windows/Linux)获取这些统计信息的任何其他方式也值得赞赏。
powershell - Powersell - 远程查询用户是否跨域存在 [最快]
抽象的
因此,我为一家在我的域中拥有大约 10k 计算机资产的公司工作。我的问题是查询用户是否存在于计算机上以查看他们是否曾经登录过所述计算机所需的时间。我们需要这个功能进行审计,以防他们做了他们不应该做的事情。
我已经研究了两种方法来完成这项任务,以及我没有想到的第三种替代解决方案;
-方法 A:查询每台计算机的“C:\Users<USER>”以查看 LocalPath 是否存在
-方法 B:检查每个计算机注册表中的“HKU:<SID>”以查看 SID 是否存在
-方法C:你们都比我聪明,有更好的方法吗?XD
方法 A 函数
注意:我有另一个功能,提示我输入用户名进行检查。在我工作的地方,它们是数字,所以区分大小写不是问题。我对这个函数的问题是我相信'if'语句每次都返回true,因为它运行而不是因为它与用户名匹配。
方法 B 功能
注意:我有另一个函数可以在此函数之前将用户名转换为 SID。有用。
我开始发呆的地方是使用 Invoke-Command 并实际返回一个值,以及是否将所有这些查询作为它们自己的 PS-Session 运行。我的方法 A 返回误报,我的方法 B 似乎在某些计算机上挂断了。
这些方法都没有真正快到足以获得 10k 结果,我一直在使用较小的计算机池以便在请求时测试这些结果。我绝不是专家,但我认为我有很好的理解,所以任何帮助表示赞赏!