Я работаю над сценарием PowerShell, который будет импортировать файл CSV, содержащий информацию о сервере (включая имя сервера, экземпляр, состояние и имена баз данных), с помощью командлета Import_Csv. После импорта файла сценарий перебирает файл, подключается к каждому серверу / экземпляру и добавляет пользователя в каждую базу данных.
Я пытаюсь понять, как можно использовать обычный цикл FOR в скрипте вместо цикла FOREACH. Я хочу ограничить количество подключений к каждому серверу, просматривая список серверов / баз данных. Я хочу проверить, совпадает ли текущий сервер / экземпляр со следующим сервером / экземпляром в файле, оставьте соединение открытым. Например, если у меня есть следующие данные в файле:
server1,instance1,online,database1
server1,instance1,online,database2
server2,instance1,online,database1
server2,instance1,online,database2
Когда я смотрю данные в первой строке, перед закрытием соединения с сервером1 \ instance1 я хочу проверить, находятся ли те же данные во второй строке, чтобы мне не нужно было закрывать текущее соединение, а затем через минуту подключитесь к тому же серверу.
У меня вопрос, есть ли способ получить доступ к следующему элементу файла CSV в PowerShell в цикле FOREACH, или я должен использовать цикл FOR? Если вместо этого я использую цикл FOR, что лучший способ получить доступ к каждому полю?
Вот то, что я сейчас имею с комментариями в цикле foreach того, что я хотел бы, чтобы произошло:
Param(
[Parameter(Mandatory=$true,position=0)]
[string]$serverListFilePath = $( Read-Host "Server List File Path: " )
)
Write-Host "File path: $serverListFilePath"
$serverListArray = Import-Csv -Path $serverListFilePath # Import the server list CSV file and store it into a CSV object
#$serverListArray
foreach ($item in $serverListArray) # Basically all the substance/work of this script is going to be done in this loop since it needs to go through each server in the file one-by-one
{
Try
{
$serverNameCSV = $item.server_Name
$serverInstanceCSV = $item.Server_Instance
$serverStatusCSV = $item.Server_Status
$databaseNameCSV = $item.Database_Name
# If no connection to server
# Create connection to server/instance
# Run SQL queries
# If (<current server\instance> -ne <next server\instance>)
# Close connection to server/instance
# continue
# else
# continue
} # End Try
# Catch
Любые идеи о том, как это сделать, будут высоко оценены.