使用 WMI 禁用帐户
Disable an account using WMI
我正在尝试禁用本地 Windows 帐户。在微软图书馆的帮助下,我能够写出这个
ManagementScope mgmtScope = new ManagementScope("\\.\Root\CIMv2");
ObjectQuery oQuery = new ObjectQuery("SELECT * FROM Win32_UserAccount");
ManagementObjectSearcher mgmtSearch = new ManagementObjectSearcher(mgmtScope, oQuery);
ManagementObjectCollection objCollection = mgmtSearch.Get();
foreach (ManagementObject mgmtObject in objCollection)
{
if ((string)mgmtObject["Name"] == "test")
{
mgmtObject.SetPropertyValue("Disabled", true);
Console.WriteLine("{0}", mgmtObject.GetPropertyValue("Disabled"));
}
}
GetPropertyValue
函数告诉我值已经设置为"true"但是当程序退出foreach循环时,值又被设置为"false".
有人知道为什么会这样吗?
编辑:我终于找到了答案。我只需要使用 ManagementObject.Put()
方法将更改应用到对象
使用方法
将更改应用于对象
ManagementObject.Put()
这个问题已经有了答案,但我会冒昧地向您展示使用 ORMi 库(我制作并维护的)可以更轻松地做到这一点:
1) 定义你的 class:
[WMIClass("Win32_UserAccount")]
public class UserAccount
{
public string Name { get; set; }
public bool Disabled { get; set; }
}
2) 查询 WMI:
WMIHelper helper = new WMIHelper("root\CimV2");
UserAccount account = helper.Query<UserAccount>().Where(p => p.Name == "test").SingleOrDefault();
account.Disabled = false;
helper.UpdateInstance(account);
希望对您有所帮助!
PD:您也可以通过NuGet
安装
我正在尝试禁用本地 Windows 帐户。在微软图书馆的帮助下,我能够写出这个
ManagementScope mgmtScope = new ManagementScope("\\.\Root\CIMv2");
ObjectQuery oQuery = new ObjectQuery("SELECT * FROM Win32_UserAccount");
ManagementObjectSearcher mgmtSearch = new ManagementObjectSearcher(mgmtScope, oQuery);
ManagementObjectCollection objCollection = mgmtSearch.Get();
foreach (ManagementObject mgmtObject in objCollection)
{
if ((string)mgmtObject["Name"] == "test")
{
mgmtObject.SetPropertyValue("Disabled", true);
Console.WriteLine("{0}", mgmtObject.GetPropertyValue("Disabled"));
}
}
GetPropertyValue
函数告诉我值已经设置为"true"但是当程序退出foreach循环时,值又被设置为"false".
有人知道为什么会这样吗?
编辑:我终于找到了答案。我只需要使用 ManagementObject.Put()
使用方法
将更改应用于对象ManagementObject.Put()
这个问题已经有了答案,但我会冒昧地向您展示使用 ORMi 库(我制作并维护的)可以更轻松地做到这一点:
1) 定义你的 class:
[WMIClass("Win32_UserAccount")]
public class UserAccount
{
public string Name { get; set; }
public bool Disabled { get; set; }
}
2) 查询 WMI:
WMIHelper helper = new WMIHelper("root\CimV2");
UserAccount account = helper.Query<UserAccount>().Where(p => p.Name == "test").SingleOrDefault();
account.Disabled = false;
helper.UpdateInstance(account);
希望对您有所帮助!
PD:您也可以通过NuGet
安装