显示每个组用户所属的脚本

时间:2019-01-08 23:27:06

标签: powershell powershell-ise

我必须创建一个脚本,该脚本列出由名称指定的用户所属的每个组,并显示指定用户的名称(仅本地组和帐户)。指定的用户名应仅是脚本中的参数。如果不声明用户名,脚本应使用运行脚本的用户名。如果我们声明的用户名不是系统中当前的用户名,则脚本不会显示任何内容,因此不会出现错误。

这是我的第一个脚本作业,我了解基本编程算法的工作原理。不幸的是,我对Powershell中的脚本不熟悉。如果有人能伸出援手,写剧本或展示一些指导性的教程,我将感到非常高兴。

1 个答案:

答案 0 :(得分:2)

至于……

  

显然,Get-ADPrincipalGroupMembership不是这种方式

...这实际上不是一个有效的声明,并且在此站点上,您的用例中有几个问答。基本上就是这样。

# Get users with base properties and their group membership, display user and group name
 ForEach ($TargetUser in (Get-ADUser -Filter *))
 {
 "`n" + "-"*12 + " Showing group membership for " + $TargetUser.SamAccountName
 Get-ADPrincipalGroupMembership -Identity $TargetUser.SamAccountName | Select Name
 }

# Results

 ------------ Showing group membership for Administrator
Name     
----     
Domain Users     
Administrators     
...

------------ Showing group membership for Guest
Domain Guests     
Guests

OP更新

我使用了cmdlet来解释您所使用的内容。 如果您使用的是PowerShell v5,则已经有本地组cmdlet。

Get-Command -Name *LocalUser*

# Results

CommandType     Name

Cmdlet          Disable-LocalUser
Cmdlet          Enable-LocalUser
Cmdlet          Get-LocalUser
Cmdlet          New-LocalUser
Cmdlet          Remove-LocalUser
Cmdlet          Rename-LocalUser
Cmdlet          Set-LocalUser 


Get-Command -Name *LocalGroup*

# Results

CommandType     Name

Cmdlet          Add-LocalGroupMember
Cmdlet          Get-LocalGroup
Cmdlet          Get-LocalGroupMember
Cmdlet          New-LocalGroup
Cmdlet          Remove-LocalGroup
Cmdlet          Remove-LocalGroupMember
Cmdlet          Rename-LocalGroup
Cmdlet          Set-LocalGroup

然后做这样的事情...

Clear-Host
$LocalUserName = Read-Host -Prompt 'Enter a username'

# If no user is passed, list all
If($LocalUserName -eq '')
{ 
    ForEach($GroupName in Get-LocalGroup)
    {
        Get-LocalGroupMember -Group "$($GroupName.Name)" | 
        Select @{n='GroupName';e={$($GroupName.Name)}},Name
    } 
}
Else
{
    # process only the user passed
    Get-LocalGroup | 
    %{
        If(Get-LocalGroupMember -Group "$($_.Name)" -Member $LocalUserName -ErrorAction SilentlyContinue)
        {
            [PSCustomObject]@{
                GroupName = $_.Name
                Username = $LocalUserName
            }
        }
    }
}

如果使用较低版本,则可以使用PowerShellGallery.com模块或直接使用ADSI。这个站点和整个网络上都有很多关于此的文章和示例。

示例:

LocalUserManagement 3.0 执行各种本地用户管理功能的模块

另请参阅:

Managing Local User Accounts with PowerShell - Part 1