以下是我的Powershell脚本:
$server_file = 'serverlist.txt'
$servers = @{}
Get-Content $server_file | foreach-object -process {$current = $_.split(":"); $servers.add($current[0].trim(), $current[1].trim())}
foreach($server in $servers.keys){
write-host "Deploying $service on $server..." -foregroundcolor green
}
我的serverlist.txt
看起来像这样:
DRAKE : x64 SDT: x64 IMPERIUS : x64 Vwebservice2012 : x64
每次运行此脚本时,我都会得到IMPERIUS
作为我的服务器名称。我想按照它们在serverlist.txt
中编写的顺序遍历服务器。
我在Get-Content
电话中遗漏了什么吗?
答案 0 :(得分:3)
不要将服务器存储在临时变量中。
.NET框架无法保证hashtables(@{}
)的迭代顺序。如果您想维护输入顺序,请避免使用它们。
简单地说:
$server_file = 'serverlist.txt'
Get-Content $server_file | ForEach-Object {
$current = $_.split(":")
$server = $current[0].trim()
$architecture = $current[1].trim()
Write-Host "Deploying $service on $server..." -ForegroundColor Green
}
注意:即使它在这种特殊情况下可能不会产生很大的不同,通常在使用Get-Content
时应始终明确定义文件编码以避免出现乱码数据。 Get-Content
没有针对文件编码的复杂自动检测,并且它使用的默认值对于您的输入文件始终是错误的。