为什么输出会根据命令之前的内容而有所不同

时间:2019-06-12 20:44:54

标签: powershell formatting

命令

Write-Host "`r`nSource Hosts" -BackgroundColor Green
$myEvents | Group-Object Host -NoElement | Sort-Object Count -Descending
Write-Host "`r`n`r`nAccounts" -BackgroundColor Green
$myEvents | Group-Object User -NoElement | sort-object Count -Descending

在传递漂亮的PSObject数组时创建漂亮的列表输出

整个脚本很短:

(Get-Date)
$Events= Get-WinEvent -ComputerName MYDC -FilterHashtable  @{Logname='Security';id=4740;StartTime=(Get-Date).AddMinutes(-30)}
$TargetEvents=@()
function OutputEvents($myEvents) {

    Write-Host "`r`nSource Hosts" -BackgroundColor Green
    $myEvents | Group-Object Host -NoElement | Sort-Object Count -Descending
    Write-Host "`r`n`r`nAccounts" -BackgroundColor Green
    $myEvents | Group-Object User -NoElement | sort-object Count -Descending
}
foreach ($Event in $Events)
{

    $obj=[PSCustomObject]@{
        Host=$Event.Properties[1].value.ToString()
        User=$Event.Properties[0].value.ToString()
    }
    $TargetEvents+=$obj
}
(Get-Date)
OutputEvents $TargetEvents

问题在于,当它在这种情况下运行时,我最终会得到

Source Hosts

Values : {HOSTNAME}
Count  : 5
Group  : {}
Name   : HOSTNAME
...etc

Accounts

Values : {Username}
Count  : 5
Group  : {}
Name   : Username
...etc

但是在代码运行之后,我可以复制并粘贴输出行并获取:

Source Hosts

Count Name                     
----- ----                     
5 APSPRW7082  
...etc

Accounts
5 SVOL.EM       
...etc

两种完全不同的格式

我不明白为什么,坦率地说,我希望它停止。

2 个答案:

答案 0 :(得分:1)

该脚本隐式地通过格式表运行。通过get-date输出另一组属性,powershell尝试以不同的方式处理输出。

答案 1 :(得分:0)

事实证明,确保格式正确运行的方法是采用输出行:

const decodedToken = jwt.decode(token, {complete: true}) as { [key: string]: any };

并将其转换为:

$myEvents | Group-Object Host -NoElement | Sort-Object Count -Descending

因此,请确保输出采用表格格式,并且不要让PS对我做出某些特别的“有用”决定。