我正在运行许多invoke-sqlcmd
命令,所有命令都具有不同的服务器名称,不同的端口和不同的实例。
根据我所读的哈希表,该去的路
答案 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
。