Добавить список переменных в сценарий powershell - PullRequest
0 голосов
/ 14 февраля 2020

Я уверен, что это очевидно, но за свою жизнь я не могу найти информацию. Много сообщений о разделении вывода на несколько строк, но я не могу найти информацию об использовании нескольких строк в качестве входных данных.

Я часто создаю текстовые файлы со списками переменных, а затем использую $ server = G C servers.txt и используйте «Для каждого» l oop, чтобы обработать их. Должен быть способ включить этот список в скрипт.

Например, если я обычно создаю 'servers.txt', состоящий из:

server1

server2

server3 ....

Можно ли перечислить эти серверы в самом скрипте? Что-то вроде (и я знаю, что это не работает как написано:

$servers= @(
    Server1
    Server2
    Server3
    )

ОБНОВЛЕНИЕ

Я знаю, что могу разделить их на кавычки и добавить запятые, но это именно то, что я пытаюсь чтобы избежать. Если я копирую список серверов из электронной таблицы с копированием правой кнопкой мыши, я хотел бы иметь возможность вставить его в свой скрипт, не добавляя запятые и одинарные кавычки. Прямо сейчас я избегаю этого, сбрасывая содержимое в текстовый файл, затем используйте Get-Content для его импорта, но я пытаюсь найти способ обойти этот дополнительный шаг и просто вставить его в сценарий, а затем нажать кнопку «Выполнить» без изменения текста.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2020

Судя по комментариям, вы хотите скопировать и вставить список систем в скрипт и обработать его как массив. Один из способов сделать это - использовать here-strings.

$servers = @'
server1
server2
server3
'@ -split '\r?\n'

Выход

$servers
server1
server2
server3
$servers.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String[]                                 System.Array

Просто вставьте список серверов между @''@ строк. Помните, что @' и '@ должны быть в строках без других значений.

См. О правилах цитирования для получения информации о here-strings.

1 голос
/ 14 февраля 2020

Если вы хотите иметь возможность вставлять имена серверов непосредственно в ваш скрипт, не используя промежуточный 2-й файл, просто вставьте список в многострочную строку, например:

$serversTxt = @"
server1
server2
server3
"@

$servers = $serversTxt -split "`n"
0 голосов
/ 14 февраля 2020

Отфильтруйте пустые строки:

Get-Content -Path .\servers.txt | Where-Object -FilterScript {$_ -ne ''}

Редактировать : Конечно, вы можете включить имена серверов в свой сценарий, если решите это сделать. Если у вас есть массив, как вы создали в своем примере, то просто итерируйте его внутри циклической конструкции, делая что-то с каждым сервером, на каждом l oop.

$Servers = @('Server1','Server2','Server3')

Foreach ($Server in $Servers) {
    "Do something to $Server."
} # End Foreach.

Do something to Server1.
Do something to Server2.
Do something to Server3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...