Назад | Перейти на главную страницу

Как объединить два вывода Powershell, чтобы команда №2 выполнялась на каждом выходе?

Я хочу объединить команды Get-user и get-casmailbox так что я могу получить "Company" из первого вывода и "ActiveSyncStatus" из последнего в один вывод.

Я также понимаю, что мог бы написать явный цикл, генерирующий желаемые результаты, но я думаю, что более компактный синтаксис возможен с использованием $ _. команда (или подобное)

Может ли кто-нибудь показать мне команду, которая демонстрирует Get-CasMailbox, который передает вторую команду с помощью $ _. свойство, и, наконец, имеет ли объект select некоторую комбинацию атрибутов между командами?

Причина, по которой я спрашиваю, заключается в том, что мне часто приходится соединять команды таким образом, а циклы for являются явными и сложными для копирования и вставки службы поддержки. Я бы предпочел иметь одну командную строку, которую они могут вставить.

Каждый раз, когда вы используете Write-HostДжеффри Сновер убивает щенка. Или это Дон Джонс? Может быть, они оба вместе убьют щенка на какой-то церемонии. Это было бы странно.

[PS] C:\>"User1", "User2" | % { [PSObject]@{Name=$_; Company=$(Get-User $_).Company; ActiveSyncEnabled=$(Get-CASMailbox $_).ActiveSyncEnabled} }

Name                           Value
----                           -----
Name                           User1
Company                        Contoso
ActiveSyncEnabled              True
Name                           User2
Company                        Woodgrove
ActiveSyncEnabled              True

Изменить: Или это:

[PS] C:\>Foreach($_ In Get-Mailbox) { [PSObject]@{Name=$_; Company=$(Get-User $_).Company; ActiveSyncEnabled=$(Get-CASMailbox $_).ActiveSyncEnabled} }

Командлеты Exchange застают вас врасплох тем, как они обрабатывают ввод конвейера.

Если вы хотите, чтобы выходные объекты выглядели менее скученными, вы можете добавить Format-Table в конце, прямо перед финалом } ... однако помните, что Format-* почти так же плохо, как Write-Host, в том смысле, что он имеет возможность нарушить объектность вывода, поэтому форматируйте вывод только как последнее, что вы собираетесь делать. Не форматируйте вывод, а затем попытайтесь передать его другому командлету.

Я никогда не использовал PowerShell с участием Exchange, и поскольку я не знаком с этими командлетами и их выходными данными, я считаю, что этот лайнер близок к тому, что вы ищете:

Get-User | foreach { $a = $_.property1; $b = Get-CASMailbox -SomeProperty $_.property2; Write-Host "$a | $b" }