我需要编写一个函数来生成一个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) 研究制作USB分布式应用程序的可能性,该应用程序
将在插入USB记忆棒时自动启动并在移除记忆棒时关闭
将使用.Net和C#.
寻找建议如何使用C#解决这个问题?
我需要为我正在开发的应用程序收集一些系统信息.使用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) 有没有办法将HKEY_USERS下的值与实际用户名相关联?
我看到了一些类似的问题,但大多数(如果不是全部)都讨论了C#代码,我需要的是VBScript.
尝试使用WMI获取已安装的Windows XP程序列表.使用wmic,我试过:
wmic /output:c:\ProgramList.txt product get name,version
Run Code Online (Sandbox Code Playgroud)
我得到了许多已安装程序的列表,但在根据显示的"添加/删除程序"清除此列表后,我看到添加/删除程序的GUI中列出的程序多于WMI查询.我需要使用另一个WMI查询来安装其余的程序吗?或者还有其他一些我需要寻找的地方吗?
此外,WMI查询中列出的两个已安装的程序不在"添加/删除程序"中.知道为什么吗?
我正在编写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位)
我怎样才能让它发挥作用?
我正在编写一个脚本来开始使用PowerShell.我正在尝试转换一个工作的VBScript脚本,该脚本枚举远程Windows计算机上的映射网络驱动器.
其中一项任务是使用远程WMI来读取注册表并找到explorer.exe的进程所有者,以确定谁登录.这个指南似乎很容易.
但是,我需要调用的WMI方法是来自Win32_Process的GetOwner(),它需要两个输出参数来存储其返回值.
如何调用带输出参数的方法?当我尝试给它两个字符串时,我得到错误:Cannot find an overload for "GetOwner" and the argument count: "2"..MSDN页面说有两个参数,所以我不确定我做错了什么.
我目前正在开发一个部署脚本,它将占用我的网站,从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)
当我查看我拥有的值时,我无法找到物理路径属性.
任何建议将不胜感激.
我的项目需要在连接到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串口吗?并且,有人可以指出我解决这个问题的方向吗?
wmi ×10
.net ×4
windows ×4
c# ×3
powershell ×2
backup ×1
cpu ×1
environment ×1
iis-7 ×1
registry ×1
serial-port ×1
shadow-copy ×1
vbscript ×1
winapi ×1