Я бы сделал это так. Прежде всего, импортируйте свой список серверов, затем итерируйте его, чтобы решить, на каких серверах работать ...
#import your server list
$serverlist = Get-Content -path C:\path\to\serverlist.txt
#iterate over $serverlist, and only act on entries that match Berlin or London or Moscow, etc...
Foreach ($server in $serverlist | Where-Object {$_ -match ("Berlin|London|Moscow")}) {
Invoke-Command -ComputerName $server -Credential $cred -ScriptBlock {
#do work
}
}
Этот метод использует цикл foreach и генератор совпадений регулярных выражений для поиска Берлина, Лондона или Москвы в каждой строке вашего списка.
UPDATE
Для работы с большим массивом городов было бы намного удобнее читать, если вы работаете с CSV, с заголовками. Вот пример ...
<#
import your server list as a csv
csv looks like this...
server,city,cred
server1,moscow,cred1
server2,london,cred1
server3,moscow,cred2
server4,berlin,cred1
#>
#import serverlist.csv...
$serverlist = Import-csv -path C:\scripts\lists\serverlist.csv
#import your city list...
$citylist = Get-Content -path C:\scripts\lists\citylist.txt
#iterate $serverlist and check if $citylist contains $_.City...
$serverlist | ForEach-Object {
if ($citylist.Contains($_.City)) {
Invoke-Command -ComputerName $_.Name -Credential $_.cred -ScriptBlock {
#do work
}
}
}
ОБНОВЛЕНИЕ 2
Если вы работаете с .txt, а не с .csv, вы также можете выбрать город.
Если ваш serverlist.txt выглядит так ...
сервер городской кредит
сервер городской кредит
сервер городской кредит
... вы можете разбить каждую строку $ serverlist и сопоставить значения индекса массива. Powershell будет индексировать от 0, поэтому для сопоставления с 'city' вы должны использовать index [1] и т. Д. *
$serverlist = Get-Content -path C:\scripts\lists\serverlist.txt
#import your city list...
$citylist = Get-Content -path C:\scripts\lists\citylist.txt
#iterate $serverlist
#split each row into a collection
#check if $citylist contains a match on index 1 (city 'column')...
$serverlist | ForEach-Object {
$serverInfo = ($_).split(" ")
if ($citylist.Contains($serverInfo[1])) {
Invoke-Command -ComputerName $serverInfo[0] -Credential $serverInfo[2] -ScriptBlock {
#do work
}
}
}