Как я могу предотвратить формирование нескольких таблиц в foreach PowerShell? - PullRequest
0 голосов
/ 08 октября 2018

Я разрабатываю сценарий, который подключается к Azure AD и извлекает неудачный вход в систему для любого пользователя, поэтому я, вероятно, получу больше, чем строку для пользователя.У меня есть этот код в foreach (есть что-то после части кода):

$ConvertedOutput  | Select-Object   @{Label="UserId"; Expression={$_.UserId}},
@{Label="CreationTime"; Expression={$_.CreationTime}},
@{Label="UserAgent"; Expression={$FinalOutput[0]."Value"}},
@{Label="Operation"; Expression={$_.Operation}},
@{Label="LogonError"; Expression={$_.LogonError}},
@{Label="ClientIP"; Expression={$_.ClientIP}} | Format-Table

Как я могу предотвратить формирование нескольких таблиц?Я только хотел таблицу для первой записи, а затем дополнительные записи под той же таблицей.Спасибо вот выход

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Добро пожаловать в переполнение стека.В общем, рекомендуется предоставлять образцы (фальшивые) данные в текстовом формате, а не рисунки (только заголовки), чтобы нам было проще ответить на ваш вопрос.

При чтении части кода это не такЭто не принесет особой пользы, если вы не планируете его расширять.Все выражения генерируют те же ключи и значения, что и исходный объект, что означает, что вы можете упростить это до: Select-Object UserId, CreationTime, UserAgent, Operation, LogonError, LogonError, ClientIP или даже: Select-Object * (или просто опустить полное Select-Object), если вы не выбрали подмножество столбцов.

Относительно вашего вопроса. По умолчанию PowerShell обычно объединяет выходные данные самостоятельно, что означает, что, возможно, есть что-то еще (что вы не предоставляете, например, команда Write-Host), которое приводит к тому, что данныебыть выпущенным предварительно из конвейера.
Позвольте мне показать это с вымышленными списками объектов, созданными на лету из трех отдельных списков CSV:

$Result = &{
ConvertFrom-Csv @'
Id,FirstName,LastName
1,Nancy,Davolio
2,Andrew,Fuller
3,Janet,Leveling
'@

ConvertFrom-Csv @'
Id,FirstName,LastName
4,Margaret,Peacock
5,Steven,Buchanan
6,Michael,Suyama
'@

ConvertFrom-Csv @'
Id,FirstName,LastName
7,Robert,King
8,Laura,Callahan
9,Anne,Dodsworth
'@
}

С помощью приведенной выше команды $Result содержит следующие данные:

PS C:\> $Result

Id FirstName LastName
-- --------- --------
1  Nancy     Davolio
2  Andrew    Fuller
3  Janet     Leveling
4  Margaret  Peacock
5  Steven    Buchanan
6  Michael   Suyama
7  Robert    King
8  Laura     Callahan
9  Anne      Dodsworth

Здесь важно упомянуть одну важную вещь: столбцы трех списков должны иметь одинаковые столбцы (или, по крайней мере, первая строка должна содержать все ожидаемые столбцы), см .: Невсе свойства отображаются

Если это не поможет вам в дальнейшем, я рекомендую вам добавить больше деталей в ваш квестион. * * тысяча двадцать-один

0 голосов
/ 08 октября 2018
# Create an empty array to store your results in
[array]$results = @()

# This is your existing loop
foreach (...) {
    ...
    $ConvertedOutput = <your existing code>
    ...
    # Append your object to the results array
    $results += $ConvertedOutput | Select-Object ... <your existing code>
}

# Now your results object contains all of the values from inside your loop
# So let's display that!
Write-Output $results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...