Я разрабатываю сценарий, который подключается к 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

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

0
Matteo Riccio 8 Окт 2018 в 12:03

2 ответа

Лучший ответ
# 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
0
gvee 8 Окт 2018 в 12:21

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

Чтение вашей части кода не добавляет особой ценности, если вы не планируете ее дальнейшее расширение. Все выражения генерируют те же ключи и значения, что и исходный объект, а это означает, что вы можете упростить это до просто: 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
iRon 8 Окт 2018 в 12:13