格式 - 表格未显示在函数

时间:2018-03-12 14:46:21

标签: powershell

我有一段PowerShell代码,它从Azure读取项目列表,并将它们格式化为一个表格供用户选择:

if ($SubscriptionArray.Count -eq 1) {
    $SelectedSub = 1
}
# Get SubscriptionID if one isn't provided
while ($SelectedSub -gt $SubscriptionArray.Count -or $SelectedSub -lt 1) {
    Write-host "Please select a subscription from the list below"
    $SubscriptionArray | Select-Object "#", Id, Name | Format-Table
    try {
        $SelectedSub = Read-Host "Please enter a selection from 1 to $($SubscriptionArray.count)"
    }
    catch {
        Write-Warning -Message 'Invalid option, please try again.'
    }
}

在脚本的主区域中执行时,会输出预期结果:

AzureTableOutput

我想多次使用这个逻辑,因此将其移到一个方法中:

function Get-IndexNumberFromArray(
    [Parameter(Mandatory = $True)]
    [array]$selectArray,

    [Parameter(Mandatory = $True)]
    [string]$message
) {
    [int]$SelectedIndex = 0
    # use the current subscription if there is only one subscription available
    if ($selectArray.Count -eq 1) {
        $SelectedIndex = 1
    }

    # Get SubscriptionID if one isn't provided
    while ($SelectedIndex -gt $selectArray.Count -or $SelectedIndex -lt 1) {
        Write-Host "$message"

        $selectArray | Select-Object "#", Id, Name | Format-Table

        try {
            $SelectedIndex = Read-Host "Please enter a selection from 1 to $($selectArray.count)"
        }
        catch {
            Write-Warning -Message 'Invalid option, please try again.'
        }
    }

    return $SelectedIndex
}

此方法中的所有内容都很有效,但现在我的表格不再输出到窗口了。相反,用户只是提示从1到x中选择一个数字,而没有每个数字代表的上下文。

为什么表在脚本的主区域中工作,但不在函数中工作?

1 个答案:

答案 0 :(得分:3)

Format-Table实际上并没有打印表格,它会输出随后作为表格打印的对象。因此,如果您正在使用函数,那么Format-Table输出将获得函数返回值的一部分。

您可以将Out-Host添加到管道中,以强制Format-Table的结果终止于主机,即控制台:

$selectArray | Select-Object "#", Id, Name | Format-Table | Out-Host