2017-02-03 1 views
0

Я пишу сценарий, который имеет много выходных данных и может принимать несколько имен компьютеров. На выходе объявляется имя компьютера, а затем много информации об этом конкретном компьютере. Я хочу иметь серию # s сверху и снизу, где он объявляет имя компьютера перед каждым разделом информации, но хотел бы посмотреть, могу ли я иметь количество #s, такое же, как длина предоставленного имени компьютера (с). Например:Как написать строку, длина которой зависит от длины записи пользователя?

######## 
COMPNAME 
########

или

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

Я предпочел бы не должны иметь, если еще для каждого возможного случая, такие как

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

и так далее. Если понадобится, я буду, это будет всего лишь десять из тех или иных. Или я мог бы просто использовать некоторое количество # s, которое всегда обязательно покрывает, по крайней мере, максимальную длину, которое может быть именем компьютера.

ответ

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 
@@@@@@@ 
+0

Спасибо, Kory! Это именно то, что я искал. Я немного изменил свое мнение о форматировании, которое я хочу использовать, но это прекрасно отвечает на мой вопрос. – Casspers

0

вы можете сделать это

$NbChar=5 


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

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

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

#method 4 
"".PadLeft($NbChar, '@') 
0

Я бы рекомендовал оберточной предложение Kory Gill «s в пользовательской функции, так что у вас есть простой способ форматирования любого имени:

function Format-ComputerName([string]$ComputerName) { 
    $separator = '#' * $ComputerName.Length 
    '{0}{1}{2}{1}{0}' -f $separator, [Environment]::NewLine, $ComputerName 
} 
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           # 
################################################################################ 

Более подробную информацию о строке форматирования here

Смежные вопросы