Как отформатировать выходную строку в виде строки или полей объекта?

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

server1 завершено
server2 завершено
ошибка server3
server4 завершено

Я пытался использовать {"$_.Location, $_.State"}в качестве последней строки, но это, кажется, испускает типы, а не значения.

Нужно ли создавать aNew-Object, чтобы содержать эти два поля для вывода?

Да, это перебор — AsJob на такой крошечный запрос. Следующая цель состоит в том, чтобы построить что-то, что начнет длительные рабочие места.

Есть предложения по форматированию вывода? Или о чем-то еще здесь, что не является PowerShell-ic.

$server_list = @(
    'server1'
    ,'server2'
    ,'server3'
    ,'server4'
)

$outfile = ".get-psversions.csv"

$server_list |
    ForEach-Object {
        $thishost = $_

        Try {
            $current_host = $_
            $v = Invoke-Command -ComputerName $current_host {$PSVersionTable.PSVersion} -ErrorAction Stop -AsJob
        }
        Catch
        {
            $v = New-Object -TypeName "System.Version"
            $v | Add-Member -MemberType NoteProperty -Name PSComputerName -Value "$thishost connect failed"
        }
        $v
    }
Get-Job | Wait-Job | ForEach-Object {$_.Location, $_.State}
PS X:ScriptsPSAutomation>. get-v2.ps1

Id Имя PSJobTypeName Состояние Hasmoredata Расположение Команды
-- ---- ------------- ----- ----------- -------- -------
390 Job390 RemoteJob работает True server1 $PSVersionTable.PSVersion
392 Job392 RemoteJob работает True server2 $PSVersionTable.PSVersion
394 Job394 RemoteJob работает True server3 $PSVersionTable.PSVersion
396 Job396 RemoteJob работает True server4 $PSVersionTable.PSVersion
server1
Завершено
server2
Завершено
server3
Неудачный
server4
Завершено

2 ответа

  1. Для выбора свойств объектов используйте Select-Object:

    Get-Job | Wait-Job | Select-Object Location, State
    

    Передайте результат по Format-Tableконвейеру, если необходимо применить табличный вывод (по умолчанию в табличной форме отображаются до 4 свойств, если количество отображаемых свойств выходит за пределы, PowerShell переключается на форму списка).

    Get-Job | Wait-Job | Select-Object Location, State | Format-Table -AutoSize
    

    Конечно, вы также можете использовать оператор format, если вам нужны выходные строки с определенным форматом:

    Get-Job | Wait-Job | ForEach-Object { "{0}:`t{1}" -f $_.Location, $_.State }