【问题标题】:Script that shows every group user belongs显示每个用户所属组的脚本
【发布时间】:2019-01-08 23:27:06
【问题描述】:

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

这是我的第一个脚本作业,我了解基本的编程算法是如何工作的。不幸的是,我不熟悉 powershell 中的脚本。如果有人能帮忙写剧本或展示一些指导教程,我会很高兴。

【问题讨论】:

  • 到目前为止您尝试过什么?一些代码来显示你已经尝试过 一些东西会很可爱...... [grin]
  • 我浪费了一些时间来搜索命令。显然 Get-ADPrincipalGroupMembership 不是这样。现在我只是在学习 powershell 语法。
  • 既然是家庭作业,老师没有给你提供学习powershell编程的资料吗?请包括您迄今为止尝试过的内容,以便我们提供帮助。包括出了什么问题以及您预计会发生什么,以便我们帮助您学习。这对我来说不是一个完整的家庭作业。
  • 是的,我知道有些人会误会我的意思,就像我只想完成作业一样:D。事实上,我们没有任何材料,也没有任何关于在 powershell 中编写脚本的讲座。所以我在问一些愚蠢的问题。对不起:/

标签: powershell powershell-ise


【解决方案1】:

至于……

显然 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

【讨论】:

  • 我只能在 Microsoft.PowerShell.LocalAccounts 模块中使用命令。还是谢谢你。
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多