使用 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

安装