包含SQL Server名称,SQL端口和SQL实例的哈希表

时间:2019-03-08 22:37:52

标签: powershell

我正在运行许多invoke-sqlcmd命令,所有命令都具有不同的服务器名称,不同的端口和不同的实例。

根据我所读的哈希表,该去的路

  1. 哈希表可以是单独的文件吗?
  2. 如何创建包含服务器名称,端口号和实例的表?
  3. 如何将其合并到脚本中?

1 个答案:

答案 0 :(得分:0)

PS Custom对象非常适合包含您的数据。考虑

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

现在$o对象包含NoteProperty个包含数据的成员。访问非常简单:

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

Powershell中的哈希表是使用内置语法{​​{1}}创建的。

快速演示如何使用哈希表。让我们首先填充上述自定义对象的列表。像这样

$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

关于如何使用基于文件的哈希表,请查找Export-Clixml# 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