管理员组中的本地组和用户

时间:2013-06-27 03:41:01

标签: powershell powershell-v2.0

对于Windows 2003和2008服务器的用户和组,需要一些安全审核报告。该脚本将在服务器上本地运行。

  1. 管理员组报告

    这是本地管理员组的成员列表,应包含以下列标题。这应该只列出组名,而不是用户组的一部分。

    Server Name, Local or Domain, Domain, USER ID, Account/Group
    abc, domain, abc.com, xyz, Account
    def, domain, abc.com, pqr, groupname
    
  2. 本地用户报告

    这是本地用户报告,应包含以下列标题。

    USER ID, Account Disabled, Full Name, Last Login details
    User1, No, User Name, <date time>
    User2, Yes, Full Name, <date time>
    
  3. 我试过的东西:

    1. net local usersnet local group→我无法获取其他用户的属性。
    2. get-wmiobject win32_useraccount→无法获取群组信息。

1 个答案:

答案 0 :(得分:0)

  1. 这样的事情可能会这样:

    $hostname = $(hostname)
    $isLocal = @{
      $true  = "local";
      $false = "domain";
    }
    $type = @{
      "Win32_UserAccount" = "User";
      "Win32_Group"       = "Group";
    }
    
    gwmi -Query "ASSOCIATORS OF {Win32_Group.Domain='$hostname',Name='Administrators'} WHERE assocClass=Win32_GroupUser" |
      select @{n="Server Name";e={$hostname}},
        @{n="Local or Domain";e={$isLocal[$($_.Domain -eq $hostname)]}},
        Domain, Name, @{n="Account/Group";e={$type[$_.__CLASS]}} |
      ConvertTo-Csv -NoTypeInformation
    

    未经测试,因为我手头没有AD。

  2. 可以像这样检索本地用户信息:

    $sys = [ADSI]"WinNT://$env:COMPUTERNAME"
    $sys.Children | ? { $_.SchemaClassName -eq 'user'} |
      select @{n="USER ID";e={$_.Name.Value}},
             @{n="Account Disabled";e={[bool]($_.UserFlags.Value -band 2)}},
             @{n="Full Name";e={$_.FullName.Value}},
             @{n="Last Login Details";e={$_.LastLogin.Value}} |
      ConvertTo-Csv -NoTypeInformation