标签: wmi

生成唯一的计算机ID

我需要编写一个函数来生成一个id,该id对于运行Windows操作系统的给定机器是唯一的.

目前,我正在使用WMI查询各种硬件参数并将它们连接在一起并散列它们以获得唯一的id.我的问题是,我应该使用的建议参数是什么?目前,我正在使用bios\cpu\disk数据的组合来生成唯一ID.如果每个指标有多个结果,我会使用第一个结果.

但是,我遇到了一个问题,即双引导到两个不同的Windows操作系统的机器在每个操作系统上生成不同的站点代码,理想情况下不会发生这种情况.

作为参考,这些是我目前使用的指标:

Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed
Win32_BIOS:Manufacturer
Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version
Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads
Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber
Win32_VideoController:DriverVersion, Name
Run Code Online (Sandbox Code Playgroud)

windows wmi winapi uniqueidentifier

101
推荐指数
3
解决办法
10万
查看次数

使用Windows服务和c#检测USB驱动器的插入和移除

研究制作USB分布式应用程序的可能性,该应用程序
将在插入USB记忆棒时自动启动并在移除记忆棒时关闭

将使用.Net和C#.
寻找建议如何使用C#解决这个问题?


更新:实现此服务的两种可能解决方案.
- 覆盖WndProc

- 使用WMI查询与ManagementEventWatcher

.net c# windows wmi windows-services

59
推荐指数
6
解决办法
7万
查看次数

如何获得CPU温度?

我需要为我正在开发的应用程序收集一些系统信息.使用C#可以轻松获得可用内存和CPU负载.不幸的是,CPU温度并不那么容易.我尝试过使用WMI但是我无法使用任何东西

Win32_TemperatureProbe
Run Code Online (Sandbox Code Playgroud)

要么

MSAcpi_ThermalZoneTemperature
Run Code Online (Sandbox Code Playgroud)

有人已经处理过这个问题吗?我想知道像SiSoftware Sandra这样的监控程序如何获取这些信息......

如果有人感兴趣,这里是该类的代码:

public class SystemInformation
{
    private System.Diagnostics.PerformanceCounter m_memoryCounter;
    private System.Diagnostics.PerformanceCounter m_CPUCounter;

    public SystemInformation()
    {
        m_memoryCounter = new System.Diagnostics.PerformanceCounter();
        m_memoryCounter.CategoryName = "Memory";
        m_memoryCounter.CounterName = "Available MBytes";

        m_CPUCounter = new System.Diagnostics.PerformanceCounter();
        m_CPUCounter.CategoryName = "Processor";
        m_CPUCounter.CounterName = "% Processor Time";
        m_CPUCounter.InstanceName = "_Total"; 
    }

    public float GetAvailableMemory()
    {
        return m_memoryCounter.NextValue();
    }

    public float GetCPULoad()
    {
        return m_CPUCounter.NextValue();
    }

    public float GetCPUTemperature()
    {
        //...
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# wmi

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

从HKEY_USERS值中获取用户名

有没有办法将HKEY_USERS下的值与实际用户名相关联?
我看到了一些类似的问题,但大多数(如果不是全部)都讨论了C#代码,我需要的是VBScript.

windows registry vbscript wmi

40
推荐指数
4
解决办法
17万
查看次数

WMI"已安装"查询与添加/删除程序列表不同?

尝试使用WMI获取已安装的Windows XP程序列表.使用wmic,我试过:

wmic /output:c:\ProgramList.txt product get name,version
Run Code Online (Sandbox Code Playgroud)

我得到了许多已安装程序的列表,但在根据显示的"添加/删除程序"清除此列表后,我看到添加/删除程序的GUI中列出的程序多于WMI查询.我需要使用另一个WMI查询来安装其余的程序吗?或者还有其他一些我需要寻找的地方吗?

此外,WMI查询中列出的两个已安装的程序不在"添加/删除程序"中.知道为什么吗?

windows wmi windows-installer

39
推荐指数
6
解决办法
16万
查看次数

使用PowerShell中的"备份"上下文创建卷影副本

我正在编写PowerShell脚本以使用rsync备份Windows计算机.为此,我试图使用所述脚本中的WMI创建一个具有编写器参与的非持久性Shadow副本(显然建议用于备份).

我从另一个问题(从PowerShell访问卷影复制(VSS)快照)中发现了一种通常创建卷影副本的方法,但是那里给出的示例使用"ClientAccessible"作为上下文参数,这导致创建持久性影子复制,没有作家参与.

在搜索解决方案时,我发现我可以使用以下命令获取上下文列表,我假设WMI理解这些上下文:

Get-WmiObject win32_shadowcontext | Out-GridView
Run Code Online (Sandbox Code Playgroud)

它列表有一个名为"备份"的上下文,这是我想要的方便.我继续尝试使用该上下文创建非持久性卷影副本:

$shadow = (Get-WmiObject -list win32_shadowcopy).Create("C:\", "Backup")
Run Code Online (Sandbox Code Playgroud)

但是,这似乎失败了,$ shadow变量的内容设置为

ReturnValue      : 5
ShadowID         : {00000000-0000-0000-0000-000000000000}
Run Code Online (Sandbox Code Playgroud)

根据相关文档(Win32_ShadowCopy类的Create方法),返回值表示"不支持的卷影副本上下文".

我找不到任何相关文档,说明为什么不支持此上下文或者是否可以使用它.我也尝试了"FileShareBackup"和"AppRollback"上下文没有成功.

我假设我要么缺少明显的东西,要么由于某种原因,WMI在创建卷影副本时不支持"clientAccessible"以外的任何其他内容,或者这是依赖于操作系统的(我在Windows 7上测试这个,64位)

我怎样才能让它发挥作用?

backup powershell wmi shadow-copy

38
推荐指数
1
解决办法
3953
查看次数

如何在PowerShell中调用带输出参数的方法?

我正在编写一个脚本来开始使用PowerShell.我正在尝试转换一个工作的VBScript脚本,该脚本枚举远程Windows计算机上的映射网络驱动器.

其中一项任务是使用远程WMI来读取注册表并找到explorer.exe的进程所有者,以确定谁登录.这个指南似乎很容易.

但是,我需要调用的WMI方法是来自Win32_Process的GetOwner(),它需要两个输出参数来存储其返回值.

如何调用带输出参数的方法?当我尝试给它两个字符串时,我得到错误:Cannot find an overload for "GetOwner" and the argument count: "2"..MSDN页面说有两个参数,所以我不确定我做错了什么.

powershell wmi remote-registry

33
推荐指数
2
解决办法
2万
查看次数

检测处理器数量

如何检测.net中的物理处理器/核心数?

.net environment cpu wmi

28
推荐指数
2
解决办法
2万
查看次数

通过Powershell更改远程计算机上IIS网站的物理路径

我目前正在开发一个部署脚本,它将占用我的网站,从svn导出它,删除其中的任何测试文件等,缩小javascript/css,将代码复制到远程Web服务器,然后切换物理路径现有站点到新目录.

到目前为止,除了在IIS中切换物理目录外,我还能正常工作.

$IIsServer = Get-WmiObject Site -Namespace "root/WebAdministration" -ComputerName $serverIP -Credential $credentials -Authentication PacketPrivacy
$site = $IIsServer | Where-Object {$_.Name -eq $siteName}
Run Code Online (Sandbox Code Playgroud)

当我查看我拥有的值时,我无法找到物理路径属性.

任何建议将不胜感激.

wmi iis-7 powershell-2.0

27
推荐指数
2
解决办法
2万
查看次数

在C#中查找有关通过USB连接的所有串行设备的信息

我的项目需要在连接到USB时检测特定设备.我可以识别此设备的唯一方法是通过其描述/设备名称,而不是com端口.我发现执行正确的功能是使用WMI查询并检查name属性:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from WIN32_SerialPort");
            foreach (ManagementObject port in searcher.Get())
            {
                deviceName = (string)foundPort.GetPropertyValue("Name"); 
                ...
Run Code Online (Sandbox Code Playgroud)

我最初通过连接我的手机对此进行了测试,并且查询按预期返回了COM3上找到的手机.然后,我连接了另一个设备(一个USB到串行转换器,它更像我需要这个项目的设备),查询根本找不到它.它只能找到手机.但是,此设备显示在设备管理器中的端口COM4上.更糟糕的是,SerialPort类找到了两个设备,但它没有提供识别设备所需的信息:

    string[] tempPorts = SerialPort.GetPortNames();
Run Code Online (Sandbox Code Playgroud)

我已经在SO和其他地方阅读了很多线程,但找不到满意的解决方案.有人可以澄清为什么WIN32_SerialPort查询找不到我的其他设备?出于某种原因它不被认为是win32串口吗?并且,有人可以指出我解决这个问题的方向吗?

.net c# wmi serial-port

26
推荐指数
2
解决办法
2万
查看次数