Мой скрипт показывает вывод нескольких команд Get-LocalGroupMember как один объект. Как их разделить? - PullRequest
0 голосов
/ 07 января 2019

Мне нужно сделать скрипт в PowerShell, который показывает все группы, к которым принадлежит пользователь. Более того, если переключатель -ListAllMembers включен, на нем также должны отображаться все члены этих групп. Дело в том, что мой скрипт показывает всех членов разных групп как один объект (массив), и я хочу, чтобы они были разделены. Команда Get-LocalGroupMember находится в цикле foreach. Что я могу сделать?

Effect

Param(
    $userToCheck,
    [switch]$listAllMembers
)

function CheckIfBelongs {
    foreach ($user in Get-LocalGroupMember $args[0]) {
        if ($user.Name -eq ($env:USERDOMAIN + "\" + $args[1])) {
            return $true
        }
    }
    return $false
}

if (!$userToCheck) {
    $userToCheck = $env:USERNAME
}

Write-Host "`nUser $userToCheck belongs to these local groups:`n"

foreach ($group in Get-LocalGroup) {
    if (CheckIfBelongs $group $userToCheck) {
        Write-Host $group.Name
        if ($listAllMembers) {
            Get-LocalGroupMember $group
        }
    }
}

exit 0

Ответы [ 2 ]

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

Наконец мне удалось решить проблему. Я использовал Out-String, чтобы преобразовать объект в строку и затем отправить его на консоль. Теперь работает отлично.

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

Write-Host пишет напрямую в консоль хоста. Вывод по умолчанию (производимый Get-LocalGroupMember) направляется в поток вывода success . Порядок вывода не гарантируется для всех потоков. Кроме того, форматирование по умолчанию в PowerShell подавляет дополнительные заголовки таблиц при выводе объектов того же типа, что и таблица. Из-за этого вы видите только одну таблицу и вывод хоста перед этой таблицей.

Измените Write-Host на Write-Output, и результат будет таким, как вы ожидаете.

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