Хеш-таблица, включающая имя SQL Server, порт SQL и экземпляр SQL - PullRequest
0 голосов
/ 09 марта 2019

Я запускаю много команд invoke-sqlcmd, все с другим именем сервера, другим портом и другим экземпляром.

Из того, что я прочитал в хэш-таблице, есть путь

  1. Может ли хеш-таблица быть отдельным файлом?
  2. Как мне создать таблицу, которая включает имя сервера, номер порта и экземпляр?
  3. Как мне включить это в сценарий?

1 Ответ

0 голосов
/ 09 марта 2019

PS Пользовательский объект хорошо подходит для хранения ваших данных. Рассмотрим

$o = [PSCustomObject]@{
  'Name' = 'dev'
  'Server' = 'Server1'
  'Instance' = '\dev'
  'Port' = '50000'
}

Теперь объект $o содержит NoteProperty членов, содержащих данные. Доступ достаточно прост:

$o.server+$o.instance+','+$o.port
Server1\dev,50000

Хеш-таблицы в Powershell создаются со встроенным синтаксисом: $myHashTable = @{}.

Небольшая демонстрация того, как работать с хеш-таблицами, приведена в порядок. Давайте сначала заполним список вышеупомянутых пользовательских объектов. Вот так

# Empty array
$l = @()
# Add some servers
$l += [PSCustomObject]@{
  'Name' = 'dev'
  'Server' = 'Server1'
  'Instance' = '\dev'
  'Port' = '50000'
}
$l += [PSCustomObject]@{
  'Name' = 'test'
  'Server' = 'Server1'
  'Instance' = '\test'
  'Port' = '50001'
}
$l += [PSCustomObject]@{
  'Name' = 'qa'
  'Server' = 'Server1'
  'Instance' = '\qa'
  'Port' = '50002'
}
$l += [PSCustomObject]@{
  'Name' = 'prod'
  'Server' = 'Server2'
  'Instance' = '\prod'
  'Port' = '50000'
}

Теперь есть список объектов сервера, но сложно получить доступ к конкретному. Индекс сервера в списке должен быть известен, или список должен быть найден иным образом.

Рассмотрим хеш-таблицу: ее содержимое можно получить на основе ключа. Давайте использовать свойство Name в качестве ключа и добавим серверы в хеш-таблицу:

# Empty hashtable
$ht = @{}
# Iterate server list and add each PSObject into the hasthtable
$l | % { $ht.add($_.name, $_  )}
# Print results
$ht
Name Value
---- -----
qa   @{Name=qa; Server=Server1; Instance=\qa; Port=50002}
dev  @{Name=dev; Server=Server1; Instance=\dev; Port=50000}
prod @{Name=prod; Server=Server2; Instance=\prod; Port=50000}
test @{Name=test; Server=Server1; Instance=\test; Port=50001}

#Access the prod server object
$ht.prod

Name Server  Instance Port
---- ------  -------- ----
prod Server2 \prod    50000

# Get production's port
$ht.prod.port
50000

# Generate a connection string to prod
"Server={0},{1}" -f $($ht.prod.server+$ht.prod.instance), $ht.prod.port
Server=Server2\prod,50000

Что касается использования файловой хеш-таблицы, найдите Export-Clixml и Import-Clixml.

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