[PowerShell] Получить содержимое и добавить запись в столбец? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь ввести список пользователей в PowerShell и получить определенную c группу безопасности, прикрепленную к учетной записи пользователя. В настоящее время у меня есть две части - таблица Excel с несколькими частями данных и .txt только с именами пользователей. Скрипт, который у меня сейчас есть, просто вводит имена пользователей из .txt и получает группу безопасности из их учетной записи, которая соответствует указанному префиксу c, однако я заметил, что такой способ не дает никакого определенного порядка c. Несмотря на то, что пользователи находятся в определенном порядке c (скопированы и вставлены точно из документа Excel), фактический результат не возвращается.

Итак, вот что я хотел бы сделать сейчас , Я просто не знаю как. Я хотел бы получить содержимое из документа Excel, взять все имена пользователей и выполнить Get-ADPrincipalGroupMembership, как сейчас, а затем записать группу безопасности обратно в строку, которая соответствует имени пользователя. Например, если я посмотрю SG для msnow, он получит SG для msnow, а затем запишет SG обратно в строку, которая имеет msnow, и продолжит просмотр списка. Вместо того, чтобы просто выполнить Out-GridView, он фактически записал бы это в документ Excel.

Любая помощь по выполнению этой работы?

Вот код, который у меня есть прямо сейчас.

Import-Module ActiveDirectory

$Names = Get-Content C:\Temp\Users.txt
$Records = @()

Foreach ($ADUsers in $Names) {
    Try {
        $SG = Get-ADPrincipalGroupMembership -Identity $ADUsers | Select Name | Where {$_.Name -Like "SG - *"}
        $SGName = $SG.Name
    }
    Catch [ADIdentityNotFoundException] {
        $SGName = "User not found"
    }
    $Records += New-Object PSObject -Property @{"UserName" = $ADUsers;"Security Group" = $SGName}
}

Write-Host "Generating CSV File..."
$Records | Out-GridView

Спасибо!

1 Ответ

0 голосов
/ 17 июня 2020

Если вы сохраните файл Excel как CSV, он будет выглядеть примерно так:

"UserName","Security Group","InsideInfo"
"bloggsj","","tall guy"
"ftastic","","nothing worth mentioning"

, это не должно быть так сложно.

$out = 'D:\Test\Updated_usersandgroups.csv'
$csv = Import-Csv -Path 'D:\Test\usersandgroups.csv'

Write-Host "Updating CSV File..."
foreach ($user in $csv) {
    try {
        $SG = Get-ADPrincipalGroupMembership -Identity $user.UserName -ErrorAction Stop
        # if more groups are returned, combine them into a delimited string
        # I'm using ', ' here, but you can change that to something else of course
        $SGName = ($SG | Where-Object {$_.Name -Like "SG - *"}).Name -join ', '
    }
    catch [ADIdentityNotFoundException] {
        $SGName = "User $($user.UserName) not found"
    }
    catch {
        # something else went wrong?
        $SGName = $_.Exception.Message
    }
    # update the 'Security Group' value
    $user.'Security Group' = $SGName
}

Write-Host "Generating updated CSV File..."
$csv | Export-Csv -Path $out -UseCulture -NoTypeInformation

# show output on screen
$csv | Format-Table -AutoSize  # or -Wrap if there is a lot of data

# show as GridView (sorts by column)
$csv | Out-GridView

Вывод в консоли будет тогда выглядит как

UserName Security Group           InsideInfo              
-------- --------------           ----------              
bloggsj  SG - Group1, SG - Group1 tall guy                
ftastic  SG - Group1              nothing worth mentioning

Примечание. Я не знаю, какой разделитель использует ваш Excel при сохранении в файл CSV. На моем голландском компьютере используется точка с запятой ;, поэтому, если в вашем случае это не запятая, добавьте символ разделителя в качестве параметра в командлет Import-Csv: -Delimiter ';'

Excel использует все, что установлено в вашем языковом стандарте, как ListSeparator для символа-разделителя. В PowerShell вы можете увидеть, что это такое, выполнив (Get-Culture).TextInfo.ListSeparator. На выходе переключатель -UseCulture гарантирует, что он использует этот разделитель, чтобы Excel понимал

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