Скрипт, который показывает, что каждый пользователь группы принадлежит - PullRequest
0 голосов
/ 09 января 2019

Мне нужно создать скрипт, который перечисляет каждую группу, к которой принадлежит пользователь, указанный по имени, и показывает имя указанного пользователя (только локальные группы и учетные записи). Указанное имя пользователя должно быть единственным аргументом в скрипте. Если мы не объявляем имя пользователя, скрипт должен использовать имя пользователя, выполняющего скрипт. Если мы объявляем имя пользователя, которое не является текущим в системе, скрипт ничего не показывает, поэтому ошибки не будет.

Это моя первая домашняя работа со сценарием, я понимаю, как работают основные алгоритмы программирования. К сожалению, я не знаком со сценариями в powershell. Я был бы очень рад, если бы кто-то мог протянуть руку и написать сценарий или показать некоторые направленные уроки.

1 Ответ

0 голосов
/ 09 января 2019

Что касается…

Видимо, 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

Я использовал командлет, чтобы объяснить, что вы используете. Если вы используете PowerShell v5, для этого уже есть командлеты локальной группы.

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 модуль, который выполняет различные функции управления локальными пользователями

Смотри также:

Управление локальными учетными записями пользователей с помощью PowerShell - часть 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...