Видя ваш последний комментарий о желании использовать CSV-файл для заполнения Hashtable, вы можете сделать это:
Предположим, что ваш CSV выглядит следующим образом
"Server","Database"
"server1","database1"
"server2","database4"
"server1","database2"
"server1","database3"
"server2","database5"
Затем вы можете прочитать егопри использовании Import-Csv
и создании из него хэша, например:
$h = @{}
Import-Csv '<PATH_TO_THE_CSV_FILE>' | Group-Object Server | ForEach-Object {
$db = @()
foreach ($item in $_.Group) {
$db += $item.Database
}
$h += @{$($_.Name) = $db}
}
В зависимости от вашей версии PowerShell (я думаю, что для этого вам нужен как минимум 5.1), вы можете упростить предыдущее, выполнив:
$h = @{}
Import-Csv 'D:\Code\PowerShell\StackOverflow\Databases.csv' | Group-Object Server | ForEach-Object {
$h += @{$($_.Name) = $_.Group.Database}
}
Далее вы можете использовать цикл, описанный Томом Шумахером:
foreach($server in $h.Keys){
$Analysis_Server = New-Object Microsoft.AnalysisServices.Server
$Analysis_Server.connect("$server")
foreach($db in $h[$server]) {
write-output "$server - has db $db"
$database = $Analysis_Server.Databases.FindByName($db)
####### Setting connection property for $database #######
$database.DataSources[0].ConnectionString = "UserId=…;Password=…."
}
}
Редактировать
Из вашего комментария я получаю ваш файл CSV выглядиткак это:
"Server","Database"
"server1", "database1, database2, database3"
"server2","database4, database5"
В этом случае вы можете прочитать его в Hashtable следующим образом:
$h = @{}
Import-Csv '<PATH_TO_THE_CSV_FILE>' | ForEach-Object {
$h += @{$($_.Server) = ($_.Database -split '\s*,\s*') }
}
Если ваш CSV-файл имеет не , заголовки, такие каквыше, используйте переключатель -Header
командлета Import-Csv
, чтобы дать столбцам имя, с которым мы можем работать следующим образом:
Import-Csv '<PATH_TO_THE_CSV_FILE>' -Header 'Server','Database'