#powershell
#powershell
Вопрос:
Цель состоит в том, чтобы запустить скрипт, который проверит удаленное подключение PowerShell к списку хостов. Я бы хотел, чтобы статус каждого задания отображался в одной строке, а не хост и состояние в отдельных строках. Я хотел бы видеть:
server1 Завершен server2 Завершен server3 Сбой server4 Завершен
Я попытался использовать {"$_.Location, $_.State"}
в качестве последней строки, но, похоже, она выдает типы, а не значения.
Нужно ли мне создавать a New-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 > .получить-v2.ps1 Id Name PSJobTypeName State HasMoreData Location Команда -- ---- ------------- ----- ----------- -------- ------- 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 Завершено
Ответ №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 }
Ответ №2:
Измените свой код на ForEach-Object, например:
ForEach-Object {"$($_.Location) $($_.State)"}
Комментарии:
1. Большое спасибо, @Kory Gill. Это очень похоже
command substitution
на * nix оболочки.2. @Liturgist В PowerShell это называется подвыражением , но по сути это одно и то же.