PowerShell: Вывести Here-String построчно

В одном из своих скриптов мне нужно было задать массив строк, чтобы потом их по-одной перебирать:

$path_Disallowed = @(
'*.js',
'*.jse',
'*:\$Recycle.Bin',
'SKIPPED',
'vssadmin.exe',
'' #string without comma
)

for ($i = 1; $i -le $path_Disallowed.Count; $i++)
{
  # Some activity
  New-ItemProperty -Path $regPath -Name "ItemData" -PropertyType String -Value $path_Disallowed[$i] -Force | out-null
}

Но в случае массива строк можно было сделать ошибку, если добавить новую строку и при этом забыть поставить в конце ЗАПЯТУЮ!

Чтобы минимизировать шанс ошибки, я решил использовать другой подход.
В PowerShell есть такая замечательная штука, как Here-String.

@"
"Curiouser and curiouser!" cried Alice (she was so much surprised, 
that for the moment she quite forgot how to speak good English); 
"now I'm opening out like the largest telescope that ever was! 
Good-bye, feet!" 
"@

Но её нельзя выводить по индексу строки.
Пришлось использовать маленькие костыли:

$path_Disallowed = @"
*.js
*.jse
*:\`$Recycle.Bin
SKIPPED
vssadmin.exe
"@

foreach($line in $path_Disallowed -split '\r?\n')
{
  # Some activity
  New-ItemProperty -Path $regPath -Name "ItemData" -PropertyType String -Value $line -Force | out-null
}
Здесь мне пришлось использовать символ backtick (` ), чтобы вывести строку $Recycle.Bin, без него $Recycle воспринимается как переменная!


Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments