Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何在不使用表或过多空间的情况下以列显示输出?_Powershell - Fatal编程技术网

Powershell 如何在不使用表或过多空间的情况下以列显示输出?

Powershell 如何在不使用表或过多空间的情况下以列显示输出?,powershell,Powershell,我想在脚本运行时更新脚本输出状态。这是一个简单的脚本,可以在无人值守的情况下安装基本的东西(遗憾的是没有完全无人值守) 下面你看到的就是我一直在做的事情。我希望这是非常人性化的可读性,因为我可能不是唯一一个会使用这个脚本的人 我想显示两列。一个写着消息说发生了什么,另一个写着它的用途 我不相信表会起作用,因为我希望它能够单独输出每一行,以防一行实际失败而导致脚本崩溃,或者类似的情况。据我所知,表是一次性输出的 目前,我使用的字符串带有多余的空格。这是可行的,但我觉得必须有一个更优雅的方式来做到这

我想在脚本运行时更新脚本输出状态。这是一个简单的脚本,可以在无人值守的情况下安装基本的东西(遗憾的是没有完全无人值守)

下面你看到的就是我一直在做的事情。我希望这是非常人性化的可读性,因为我可能不是唯一一个会使用这个脚本的人

我想显示两列。一个写着消息说发生了什么,另一个写着它的用途

我不相信表会起作用,因为我希望它能够单独输出每一行,以防一行实际失败而导致脚本崩溃,或者类似的情况。据我所知,表是一次性输出的

目前,我使用的字符串带有多余的空格。这是可行的,但我觉得必须有一个更优雅的方式来做到这一点。这是一种方法,我可以给某个东西输入一串字符串,找到最长字符串的长度,并添加所有必要的空格,使它们具有相同的长度

当前变量

$ready=“已安装”
$Installing=“Installing”
$Installed=“已安装”
$Run=“Run”
$Warning=“Warning”
$Failed=“失败”
$NotFound=“未找到”
$SWhatIf=“WhatIf”
所需输出

写入主机“${Installing}Google Chrome”
安装谷歌浏览器
写入主机“${ready}Adobe Reader”
已安装Adobe Reader
写入主机“${Run}7-Zip”
运行7-Zip

您可以选择创建哈希表而不是单个变量,并将所有值设置为相同长度。大概是这样的:

$actions = @{
    Already    = "Already Installed"
    Installing = "Installing"
    Installed  = "Installed"
    Run        = "Run"
    Warning    = "WARNING"
    Failed     = "FAILED"
    NotFound   = "NOT FOUND"
    WhatIf     = "WhatIf"
}
# get the length of the longest value
$longest = ($actions.Values | Measure-Object -Property Length -Maximum).Maximum
# next update the values of the hashtable so all get the same length
foreach($key in $($actions.keys)){
    $actions[$key] = ($actions[$key]).PadRight($longest, ' ')
}
然后使用
$actions
散列,如下所示:

Write-Host "$($actions['Installing']): Google Chrome"
Write-Host "$($actions['Already']): Adobe Reader"
Write-Host "$($actions['Run']): 7-Zip"
输出:


这似乎正是我所希望的。它单独输出,所以中断不会干扰写入主机,并保持其一致性。谢谢:D
Installing       : Google Chrome
Already Installed: Adobe Reader
Run              : 7-Zip