使用Powershell进行编辑时Mirth属性文件损坏

问题描述

我正在尝试编辑Mirth属性文件,以使用Powershell添加Microsoft sql服务器驱动程序url和类名。我可以编辑和保存。在编辑后启动Mirth服务时,Mirth属性文件已损坏。但是我同时检查了原始内容和编辑后的内容。除添加的更改外,其他所有内容都相同,并且文件大小从5kb增加到10kb。谁能帮我吗?这是Powershell脚本。

$server="Localhost"
$PropertyfilePath = "C:\Program Files\Mirth Connect\conf\mirth.properties"
$connectionString = "jdbc:sqlserver://$($server):1433;instanceName=$($server);databaseName=Mydb;integratedSecurity=true" 
$driverName = "com.microsoft.sqlserver.jdbc.sqlServerDriver"
$data= @()
copy-Item $PropertyfilePath "D:\Mirthbackup" -force
$newstreamreader = New-Object System.IO.StreamReader($PropertyfilePath)
[int]$eachlinenumber = 1
while (($readeachline = $newstreamreader.ReadLine()) -ne $null)
{
    if($readeachline.Contains("= derby")){
            
        $readeachline.Remove(0)
        $update= "database = sqlserver"
        $data +=$update
        $eachlinenumber++
    }
   elseif($readeachline.Contains("database.url"))
    {
       
        $update=$readeachline.Substring(0,12)+" = "+$connectionString
        $data +=$update
        $eachlinenumber++
        
    }
    elseif($readeachline.Contains(".driver"))
   {
        $readeachline.Remove(0)
        $update ="database.driver = "+$driverName
        $data +=$update
        $eachlinenumber++
    
    }
    else{

        $data +=$readeachline
        $eachlinenumber++
     }
}
$newstreamreader.dispose()
 
$data | Out-File -FilePath $PropertyfilePath 

解决方法

您的属性文件应采用ISO-8859-1(latin1)编码。

尝试将您的代码更改为:

$server="Localhost"
$PropertyfilePath = "C:\Program Files\Mirth Connect\conf\mirth.properties"
$connectionString = "jdbc:sqlserver://$($server):1433;instanceName=$($server);databaseName=Mydb;integratedSecurity=true" 
$driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
$data= @()
Copy-Item $PropertyfilePath "D:\Mirthbackup" -force
$encoding = [System.Text.Encoding]::GetEncoding('iso-8859-1'))
$newstreamreader = New-Object System.IO.StreamReader($PropertyfilePath,$encoding)
[int]$eachlinenumber = 1
while (($readeachline = $newstreamreader.ReadLine()) -ne $null)
{
  # if statements left out
}
$newstreamreader.Dispose()

[System.IO.File]::WriteAllLines($PropertyfilePath,$data,$encoding)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...