目标是运行一个脚本,将PowerShell远程检查检查到主机列表。我希望每个作业的状态显示在一行而不是主机和状态在不同的行上。我想看看:
server1 Completed server2 Completed server3 Failed server4 Completed
我尝试使用{"$_.Location, $_.State"}
作为最后一行,但这似乎是发出类型而不是值。
我是否需要创建一个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:\Scripts\PSAutomation> .\get-v2.ps1 Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 390 Job390 RemoteJob Running True server1 $PSVersionTable.PSVersion 392 Job392 RemoteJob Running True server2 $PSVersionTable.PSVersion 394 Job394 RemoteJob Running True server3 $PSVersionTable.PSVersion 396 Job396 RemoteJob Running True server4 $PSVersionTable.PSVersion server1 Completed server2 Completed server3 Failed server4 Completed
答案 0 :(得分:0)
将您的代码更改为ForEach-Object,如:
ForEach-Object {"$($_.Location) $($_.State)"}
答案 1 :(得分:0)
要选择对象的属性,请使用Select-Object
:
Get-Job | Wait-Job | Select-Object Location, State
如果需要强制执行表格输出,则将结果传递到Format-Table
(默认情况下,如果显示的属性数量超出PowerShell切换到列表格式,则表格形式最多显示4个属性)。
Get-Job | Wait-Job | Select-Object Location, State | Format-Table -AutoSize
当然,如果您需要具有特定格式的输出字符串,也可以使用format operator:
Get-Job | Wait-Job | ForEach-Object { "{0}:`t{1}" -f $_.Location, $_.State }