Я запускаю этот код
$qry = "select * from sys.databases"
$potentialSourceDatabases = @(Invoke-Sqlcmd -ServerInstance $azureSQLServerDNS `
-Database $azureDatabase -Username $SQLUsername -Password $SQLPassword `
-Query $qry -QueryTimeout "1200") | select-object -expand Name
$potentialSourceDatabasesTable = @()
$databaseCounter = 1
foreach ($item in $potentialSourceDatabases){
$itemProperties = @{
DBNumber = $databaseCounter++
DBName = $item
}
$potentialSourceDatabasesTable += New-Object -TypeName PsObject -Property $itemProperties
}
$potentialSourceDatabasesTable
$sourceDatabaseNumber = Read-Host -Prompt 'Please select the number of the desired source database'
$output = $potentialSourceDatabasesTable | Where-Object{$_.DBNumber -eq $sourceDatabaseNumber} | select-object -expand DBName
Write-Host "You selected database is $sourceDatabaseNumber with name $output"
и я получаю следующий вывод:
Пожалуйста, выберите номер нужной исходной базы данных: 1
Вы выбрали 1 базу данных с именем master
DBNumber DBName
1 мастер
2 ProdCopy1
3 ProdCopy2
Но я ожидаю, что вывод списка баз данных появится перед предложением выбрать нужную базу данных.
Я не против, если решение будет включать хеш-таблицу или другое формирование структуры. Я попытался использовать hastable:
$hashTable = @{}
$counter = 1
foreach ($item in $potentialSourceDatabases)
{
$hashTable.Add($counter++,$item)
}
$getDatabaseNumber = Read-Host -Prompt 'Select source database number'
Write-Host "You selected database #$getDatabaseNumber $hashTable.Item($getDatabaseNumber)"
но он вернулся
Выберите исходный номер базы данных: 1
Вы выбрали базу данных # 1 System.Collections.Hashtable.Item (1)
Не могли бы вы помочь мне изменить код, чтобы список таблиц отображался до раздела выбора?