0

我正在编写一个具有大量输出的脚本,并且可以采用多个计算机名称。输出宣布计算机名称,然后是有关该特定计算机的大量信息。我想在上面和下面有一系列#s ,它在每个信息部分之前宣布计算机名称,但想看看我是否可以让 #s 的数量与提供的计算机名称的长度相同(s )。例如:

########
公司名称
########

或者

##############
更长的公司名称
##############

我宁愿不必为每种可能的情况都有一个 if else ,例如

if ($compname.length -eq "8") {
  Write-Host "########"
  Write-Host "$compname"
  Write-Host "########"
} elseif ($compname -eq "9") {
  Write-Host "#########"
  Write-Host "$compname"
  Write-Host "#########"

等等。如果必须,我会的,只有十个左右。或者我可以只使用一定数量的#s ,它们肯定会至少覆盖计算机名称的最大长度。

4

4 回答 4

6

你会喜欢 PowerShell 的这个功能的。您可以“乘”一个字符串。

尝试这个:

$sep = '@'

Write-Output ($sep*5)

$names = "Hello World", "me too", "goodbye"

$names | % {
Write-Output ($sep*($_.Length))
Write-Output $_
Write-Output ($sep*($_.Length))
}

输出

@@@@@
@@@@@@@@@@@
Hello World
@@@@@@@@@@@
@@@@@@
me too
@@@@@@
@@@@@@@
goodbye
@@@@@@@
于 2017-02-04T00:18:37.357 回答
0

你可以这样做

$NbChar=5


#method 1 (best)
'@' * $NbChar

#method 2
New-Object  System.String "@", $NbChar

#method 3
-join (1..$NbChar | %{"@"})

#method 4
"".PadLeft($NbChar, '@')
于 2017-02-04T08:45:58.117 回答
0

我建议将Kory Gill的建议包装在自定义函数中,以便您可以轻松地格式化任何给定名称:

function Format-ComputerName([string]$ComputerName) {
  $separator = '#' * $ComputerName.Length
  '{0}{1}{2}{1}{0}' -f $separator, [Environment]::NewLine, $ComputerName
}
于 2017-02-04T13:39:32.600 回答
0

或固定宽度的横幅:

"{0}`r`n# {1,-76} #`r`n{0}" -f ('#' * 80), $compname;

例如:

################################################################################
# LONGERCOMPNAME                                                               #
################################################################################

您还可以添加日期、时间等:

"{0}`r`n# {1:G} : {2,-54} #`r`n{0}" -f ('#' * 80), (Get-Date), $compname;

例如:

################################################################################
# 04/02/2017 16:42:07 : LONGERCOMPNAME                                         #
################################################################################

有关字符串格式的更多信息在这里

于 2017-02-04T16:40:00.567 回答