【问题标题】:Check if an account is a member of a local group and perform an IF/ELSE in powershell 2.0检查帐户是否是本地组的成员并在 powershell 2.0 中执行 IF/ELSE
【发布时间】:2013-05-17 20:24:01
【问题描述】:

我想知道如何最好地解决这个问题。基本上我有一个脚本需要检查 USER1 是否是本地管理员的成员,如果是,请将其删除。这些组都是本地的,脚本将在我需要检查的系统上运行(不需要远程处理)。

我正在考虑捕获和评估来自

的输出
net localgroup Administrators

test\user1
test\user2

但是我不确定如何捕获输出以进行评估(对于 powershell 来说还很新)。有没有人做过这样的事情?非常感谢任何帮助。

【问题讨论】:

标签: powershell


【解决方案1】:

一种没有模块或管理单元的方式:

$group =[ADSI]"WinNT://./Administrators,group" 
$members = @($group.psbase.Invoke("Members")) 

($members | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}) -contains "Administrator"

这个返回TrueFalse属于这种情况

从管理员组中删除用户管理员:

$group.remove("WinNT://Administrator")

【讨论】:

  • 如果用户在一个管理组中,这将不起作用。在这种情况下,用户将是管理员,但不会显示为管理员组成员
  • @zespri OP询问如何检查本地Administrators组中的用户,如果您需要检查另一个本地组,您只需在第一行将Administrator更改为您本地组的名称代码。
  • 重点是用户可以是管理员,而不需要在本地管理员组中。如果他属于本地管理员组成员的 any 组,他们将是本地管理员。而且您无法按所示方式检查它。
  • 最好的例子是域管理员。他们是您电脑上的本地管理员,因为他们属于 Domain Admins 组,而 Domain Admins 组是本地 Administrators 组的成员。但当然,像这样的会员级别可以是多个级别,而不仅仅是一个。
  • @zespri 那么您必须检查“域管理员”组中域用户的成员身份,即:([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Domain Admins")
【解决方案2】:
$user = (net localgroup administrators | Select-String 'testuser1' -SimpleMatch).ToString()
net localgroup administrators "$user" /delete

您没有使用对象,也没有很多错误检查,但这是获得所需内容的一种非常简单的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多