修改 UserAccountControl 标志 - 切换标志

Modifying UserAccountControl Flags - Toggling a Flag

我想知道是否有一种方法可以在不考虑其他标志状态的情况下打开或关闭 UserAccountControl 标志。例如,假设我们有如下配置:

尽管当前 $user.UserFlags.value,我如何只将 'Password never expires' 标志切换为 true?

当所有标志都关闭时,$user.UserFlags.value 为 513。当仅切换 'Password never expires' 标志时,$user.UserFlags.value 为 66049。

如您所想,$user.UserFlags.value 可以针对不同的配置反映一系列数字,如下文所述:

How to use the UserAccountControl flags to manipulate user account properties

我觉得我可以使用带掩码的按位操作想出一个解决方案,但需要一些指导。我的最终目标是编写一个 Power Shell 脚本来切换此值,无论当前配置是什么。

有什么建议吗?

您要查找的操作是XOR。使用按位异或运算符 (-bxor) 将当前 UserFlags 值与您要切换的标志(在本例中为标志 DONT_EXPIRE_PASSWORD 的 0x10000 或 65536)合并并提交更改:

$user.InvokeSet('UserFlags', $user.UserFlags.Value -bxor 0x10000)
$user.CommitChanges()

有关详细信息,请参阅 about_Comparison_Operators 中的 "Bitwise Operators" 部分。