【问题标题】:Display output from multiple variables in a for loop在 for 循环中显示多个变量的输出
【发布时间】:2016-11-27 10:15:03
【问题描述】:

我正在尝试输出 Skype 响应组队列的不同属性以用于文档目的。

我想将NameTimeoutThresholdTimeoutActionTimeouturiOverflowThresholdOverflowActionOverflowCandidate 作为第 1 行中的 .csv 文件头,然后输出为从第 2 行开始在各个列中输入。

我在下面尝试过,但格式真的很糟糕,并且标题不断重复。有人可以帮忙吗?

也尝试在 HTML 中获取输出,但没有成功。

$p = Get-CsRgsQueue | Where-Object {$_.Name -like "IPL*"} | Select-Object Name

foreach ($Name in $p)
{
    $q   = Get-CsRgsQueue -Name "$Name"
    $N   = $q.Name
    $TT  = $q.TimeoutThreshold
    $TA  = $q.TimeoutAction.Action
    $TAU = $q.TimeoutAction.uri
    $OF  = $q.OverflowThreshold
    $OFA = $q.OverflowAction
    $OFC = $q.OverflowCandidate

    $out = New-Object PSObject
    $out | Add-Member NoteProperty QueueName $N
    $out | Add-Member NoteProperty Timeout $TT
    $out | Add-Member NoteProperty TimeoutAction $TA
    $out | Add-Member NoteProperty TransferURI $TAU
    $out | Add-Member NoteProperty OverflowThreshhold $OF
    $out | Add-Member NoteProperty OverflowAction $OFA
    $out | Add-Member NoteProperty OverflowCandidate $OFC

    $out | FT -AutoSize | Export-Csv C:\abc.csv -Append
}

【问题讨论】:

  • 你必须省略` | FT -AutoSize` 在最后一行。
  • 为了整理它,你可以为你的属性使用一个哈希表,它被称为 splatting。希望格式看起来没问题。已编辑 *** Grr,很抱歉下面的格式。
  • foreach ($name in $P) $properties = @{ $q = get-csrgsqueue -name "$Name" $N = $q.Name $TT = $q.TimeoutThreshold $TA = $q.TimeoutAction.Action $TAU= $q.TimeoutAction.uri $OF= $q.OverflowThreshold $OFA= $q.OverflowAction $OFC= $q.OverflowCandidate } new-object -TypeName psobject -Property $properties
  • 如果格式正常,每个属性都应该在一个新行上。

标签: powershell formatting export-to-csv


【解决方案1】:

我在下面试过了,但格式真的很糟糕,而且标题 不断重复。有人可以帮忙吗?

这是因为您通过 FT -AutoSize (Format-Table -AutoSize) 管道传输您的对象 - 仅当您要显示/呈现您的数据时才使用 Format-* cmdlet。

您还可以通过只调用一次Get-CsRgsQueue,将其传递给ForEach-Object,最后为对象属性构造一个哈希表来节省一些时间:

Get-CsRgsQueue | Where-Object {$_.Name -like "IPL*"} | ForEach-Object {
    New-object psobject -Property @{
        QueueName          = $_.Name
        Timeout            = $_.TimoutThreshold
        TimeoutAction      = $_.TimeoutAction.Action
        TransferURI        = $_.TimeoutAction.Uri
        OverflowThreshhold = $_.OverflowThreshold
        OverflowAction     = $_.OverflowAction
        OverflowCandidate  = $_.OverflowCandicate
    }
} |Export-Csv c:\abc.csv -NoTypeInformation

【讨论】:

    【解决方案2】:

    Mathias Jessen 的短解

    Get-CsRgsQueue | where Name -like "IPL*" | %{
        [pscustomobject] @{
        QueueName          = $_.Name
        Timeout            = $_.TimoutThreshold
        TimeoutAction      = $_.TimeoutAction.Action
        TransferURI        = $_.TimeoutAction.Uri
        OverflowThreshhold = $_.OverflowThreshold
        OverflowAction     = $_.OverflowAction
        OverflowCandidate  = $_.OverflowCandicate
        }
    } | Export-Csv C:\result.csv -NoType
    

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多