Переключение фамилии, имени в скрипте Powershell AD - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь экспортировать группы AD и пользователей из подразделения по имени, фамилии, но я получаю его только для работы с фамилией и именем.

Все остальное, что я пробую, дает пустую строку для членов. Я попытался изменить строку в Select-Object на:

@{Name='Member';Expression={$_.FirstName = GetFirstName $_.Name $_.LastName = GetLastName $_.Name}},

$firt = $_.firstname
$last = $_.lastname
@{Name='Member';Expression={$_.name = "$first,$last"}}, 

Это рабочий код, но имена должны быть изменены.

$OU = 'OU=Groups,OU=City,OU=Continent,DC=DomainControler, DC=Domain, DC=net' #Change this to get different groups
$DateTime = Get-Date -f "dd-MM-yyyy" 

$MyFileName = "CompanyName-Groups_"+$DateTime+".csv"
$Path = Join-Path $PSScriptRoot $MyFileName

$Groups =  get-adobject -Filter 'ObjectClass -eq "group"' -SearchBase $OU
$i=0
$tot = $Groups.count
$Data = foreach ($Group in $Groups) {
    $i++ 
    $status = "{0:N0}" -f ($i / $tot * 100) 
    Write-Progress -Activity "Exporting AD Groups" -status "Processing Group $i of $tot : $status% Completed" -PercentComplete ($i / $tot * 100) 
    Get-ADGroupMember -Identity $Group | 
    Select-Object @{Name='Group';Expression={$Group.Name}}, 
                  @{Name='Member';Expression={$_.Name}}, 
                  @{Name='Enabled';Expression={if ($_.ObjectClass -eq 'user') {Get-ADUser $_ | Select-Object -Expand Enabled} else {'NA/Group'}}}
    }
$Data | Export-Csv -Path $Path -NoTypeInformation

Это пример вывода:

Group, "member", enabled
Admin, "Mario, Speedwagon", True
Admin, "Petey, Cruiser", True
Admin, "Anna, Sthesia", False
HR, "Paul, Molive", True
HR, "Phaedra, Lugt", True
IT, "Paul, Molive", False
IT, "Cliff, Hanger", True

Вот как это должно стать:

Group, "member", enabled
Admin, "Speedwagon, Mario", True
Admin, "Cruiser, Petey", True
Admin, "Sthesia, Anna", False
HR, "Molive, Paul", True
HR, "Lugt, Phaedra", True
IT, "Molive, Paul", False
IT, "Hanger, Cliff", True

1 Ответ

1 голос
/ 29 марта 2019

Я думаю, что это может прояснить для вас:

$OU = 'OU=Groups,OU=City,OU=Continent,DC=DomainControler, DC=Domain, DC=net'

$PathParams = @{
    Path      = $PSScriptRoot
    ChildPath = "PA-AD-Groups_{0}.csv" -f (Get-Date -f "dd-MM-yyyy")
}
$FilePath = Join-Path @PathParams

$Groups = Get-ADObject -Filter 'ObjectClass -eq "group"' -SearchBase $OU
$i = 0
$tot = $Groups.count

$Data = foreach ($Group in $Groups) {
    $i++
    $ProgressParams = @{
        Activity        = 'Exporting AD Groups'
        PercentComplete = ($i / $tot * 100)
        status          = "Processing Group $i of $tot : {0:N0} Completed" -f
        ($i / $tot * 100)
    }
    Write-Progress @ProgressParams

    Get-ADGroupMember -Identity $Group |
        Select-Object @{Name = 'Group'; Expression = {$Group.Name}},
    @{Name = 'Member'; Expression = {$_.Name}},
    @{Name = 'Enabled'; Expression = {
            $Script:User = $false
            if ($_.ObjectClass -eq 'user') {
                $Script:User = Get-ADUser $_
                if ($User.Enabled) {$true} else {$false}
            }
            else {
                'NA/Group'
            }
        }
    },
    @{Name = 'FirstName'; Expression = {
            if ($User) {
                $User.GivenName
            }
        }
    },
    @{Name = 'LastName'; Expression = {
            if ($User) {
                $User.Surname
            }
        }
    },
    @{Name = 'CombinedName'; Expression = {
            if ($User) {
               "{0}, {1}" -f $User.GivenName, $User.Surname
            }
        }
    }
}

$Data | Export-Csv -Path $FilePath -NoTypeInformation

Проблема, с которой вы столкнулись, заключается в том, что вы не можете использовать свойства из $User за пределами Expression в пределах Select-Object,Это просто исправляется созданием переменной, доступной по всему сценарию, которая называется Script scope и используется как $Script:User.

Более подробную информацию можно найти в Get-Help about_Scopes или здесь .

Кстати, я бы посоветовал вам использовать правильные отступы, это делает вещи более читабельными.Всплывающий параметр hashtable также помогает в этом отношении.Последний совет: не создавайте переменную, если вы используете ее только один раз.В противном случае это просто смущает вас позже.

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