在 powershell 中数组到 table
Array to table in powershell
帮我解决一些问题。我是 PS 的新人并且
我需要将数据输出到 table 视图。
看起来像这样。
name1 name2
----- -----
value1 value2
但是我有:
$a=(get-service).name
$b=(get-service).Status
foreach ($name in $a)
{
$data = [pscustomobject]@{name1 = $name}
}
$data
结果
name1
-----
XboxNetApiSvc
没有预留
$a=(get-service).name
$b=(get-service).Status
$data = [pscustomobject]@{name1 = $a ; name2 = $b }
$data
结果
name1 name2
----- -----
{2GISUpdateService, AcronisActiveProtectionService, AcrSch2Svc, AdobeARMservice...} {Stopped, Running, Running, Running...}
此脚本所需的全部内容
$list = ((Get-ADComputer -SearchBase "OU=PC,DC=cbu,DC=lan" -Filter {Enabled -eq "True" } -Properties DNSHostName).DNSHostName)
$encoding = [System.Text.Encoding]::UTF8
$up = @()
$down = @()
$table= @()
foreach ($pc in $list)
{
if ((Test-Connection -Count 1 -computer $pc -quiet) -eq $True)
{
$up += $pc
#write-host $pc "is up"
}
else
{
$down += $pc
#Write-Host $pc "down"
}
}
毕竟我需要 2 列的 $up 和 $down 输出值
如果您只使用 Get-Service
作为示例,您可以只使用 Select
:
Get-Service | Select Name, Status
其他
$MyList | Select Name1, Name2
此外,如果你有一个复杂的命令并且你想提取 PSObject
的 table :
Get-Process | Select-Object -Property ProcessName, Id, WS
阅读更多关于 Select-Object
的信息:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-4.0
您可能有一个自定义命令行开关,但您可以 运行 类似于:
(Get-Service) | select Name,Status | Format-Table
更新
阅读您的更新后。在脚本的末尾,您有两个数组 $up
和 $down
。我将把它声明为静态方式以使示例更容易
$up = @('pc1', 'pc2')
$down = @('pc3','pc4', 'pc5')
因为数组可以有不同的长度,你需要计算最大长度:
$max = ($up, $down | Measure-Object -Maximum -Property Count).Maximum
然后创建一个 "merges" 上面数组的对象:
0..$max | Select-Object @{n="Up";e={$up[$_]}}, @{n="Down";e={$down[$_]}}
输出为:
Up Down
-- ----
pc1 pc3
pc2 pc4
pc5
是的,Piotr Stapp 是正确的。您可以使用格式-Table
示例 1:
获取进程 |排序对象开始时间 |格式-Table-查看开始时间
示例 2:
(获取服务)| select 姓名、状态 |格式-Table
示例 3:
获取进程 |金融时报
帮我解决一些问题。我是 PS 的新人并且 我需要将数据输出到 table 视图。 看起来像这样。
name1 name2
----- -----
value1 value2
但是我有:
$a=(get-service).name
$b=(get-service).Status
foreach ($name in $a)
{
$data = [pscustomobject]@{name1 = $name}
}
$data
结果
name1
-----
XboxNetApiSvc
没有预留
$a=(get-service).name
$b=(get-service).Status
$data = [pscustomobject]@{name1 = $a ; name2 = $b }
$data
结果
name1 name2
----- -----
{2GISUpdateService, AcronisActiveProtectionService, AcrSch2Svc, AdobeARMservice...} {Stopped, Running, Running, Running...}
此脚本所需的全部内容
$list = ((Get-ADComputer -SearchBase "OU=PC,DC=cbu,DC=lan" -Filter {Enabled -eq "True" } -Properties DNSHostName).DNSHostName)
$encoding = [System.Text.Encoding]::UTF8
$up = @()
$down = @()
$table= @()
foreach ($pc in $list)
{
if ((Test-Connection -Count 1 -computer $pc -quiet) -eq $True)
{
$up += $pc
#write-host $pc "is up"
}
else
{
$down += $pc
#Write-Host $pc "down"
}
}
毕竟我需要 2 列的 $up 和 $down 输出值
如果您只使用 Get-Service
作为示例,您可以只使用 Select
:
Get-Service | Select Name, Status
其他
$MyList | Select Name1, Name2
此外,如果你有一个复杂的命令并且你想提取 PSObject
的 table :
Get-Process | Select-Object -Property ProcessName, Id, WS
阅读更多关于 Select-Object
的信息:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-4.0
您可能有一个自定义命令行开关,但您可以 运行 类似于:
(Get-Service) | select Name,Status | Format-Table
更新
阅读您的更新后。在脚本的末尾,您有两个数组 $up
和 $down
。我将把它声明为静态方式以使示例更容易
$up = @('pc1', 'pc2')
$down = @('pc3','pc4', 'pc5')
因为数组可以有不同的长度,你需要计算最大长度:
$max = ($up, $down | Measure-Object -Maximum -Property Count).Maximum
然后创建一个 "merges" 上面数组的对象:
0..$max | Select-Object @{n="Up";e={$up[$_]}}, @{n="Down";e={$down[$_]}}
输出为:
Up Down
-- ----
pc1 pc3
pc2 pc4
pc5
是的,Piotr Stapp 是正确的。您可以使用格式-Table
示例 1:
获取进程 |排序对象开始时间 |格式-Table-查看开始时间
示例 2:
(获取服务)| select 姓名、状态 |格式-Table
示例 3:
获取进程 |金融时报