cat*_*lin 2 powershell properties multiple-columns
qfarm /load命令显示我的服务器的负载。输出:
PS> qfarm /load
Server Name Server Load Load Throttling Load Logon Mode
-------------------- ----------- -------------------- ------------------
SERVER-01 400 0 AllowLogons
SERVER-02 1364 OFF AllowLogons
SERVER-03 1364 OFF AllowLogons
SERVER-04 1000 0 AllowLogons
SERVER-05 700 0 AllowLogons
SERVER-06 1200 0 AllowLogons
Run Code Online (Sandbox Code Playgroud)
我只需要显示第一列(服务器名称)和第二列(服务器负载)并循环遍历它们,以便稍后进行一些逻辑,但 powershell 似乎没有将其视为具有属性的对象:
PS> qfarm /load | Select -ExpandProperty "Server Name"
Select-Object : Property "Server Name" cannot be found.
Run Code Online (Sandbox Code Playgroud)
有没有其他可能,比如一张桌子什么的?
一种方法是从命令的输出中构建对象。测试了以下内容:
#requires -version 3
# sample data output from command
$sampleData = @"
Server Name Server Load Load Throttling Load Logon Mode
-------------------- ----------- -------------------- ------------------
SERVER-01 400 0 AllowLogons
SERVER-02 1364 OFF AllowLogons
SERVER-03 1364 OFF AllowLogons
SERVER-04 1000 0 AllowLogons
SERVER-05 700 0 AllowLogons
SERVER-06 1200 0 AllowLogons
"@ -split "`n"
$sampleData | Select-Object -Skip 2 | ForEach-Object {
$len = $_.Length
[PSCustomObject] @{
"ServerName" = $_.Substring(0, 22).Trim()
"ServerLoad" = $_.Substring(22, 13).Trim() -as [Int]
"LoadThrottlingLoad" = $_.Substring(35, 22).Trim()
"LogonMode" = $_.Substring(57, $len - 57).Trim()
}
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你应该能够$sampleData用你的qfarm load命令替换;例如:
qfarm /load | Select-Object -Skip 2 | ForEach-Object {
...
Run Code Online (Sandbox Code Playgroud)
当然,这是假设输出中没有空行并且我的每个项目开头的列位置是正确的。
PowerShell 版本 2 等效项:
#requires -version 2
function Out-Object {
param(
[Collections.Hashtable[]] $hashData
)
$order = @()
$result = @{}
$hashData | ForEach-Object {
$order += ($_.Keys -as [Array])[0]
$result += $_
}
New-Object PSObject -Property $result | Select-Object $order
}
# sample data output from command
$sampleData = @"
Server Name Server Load Load Throttling Load Logon Mode
-------------------- ----------- -------------------- ------------------
SERVER-01 400 0 AllowLogons
SERVER-02 1364 OFF AllowLogons
SERVER-03 1364 OFF AllowLogons
SERVER-04 1000 0 AllowLogons
SERVER-05 700 0 AllowLogons
SERVER-06 1200 0 AllowLogons
"@ -split "`n"
$sampleData | Select-Object -Skip 2 | ForEach-Object {
$len = $_.Length
Out-Object `
@{"ServerName" = $_.Substring(0, 22).Trim()},
@{"ServerLoad" = $_.Substring(22, 13).Trim() -as [Int]},
@{"LoadThrottlingLoad" = $_.Substring(35, 22).Trim()},
@{"LogonMode" = $_.Substring(57, $len - 57).Trim()}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10038 次 |
| 最近记录: |