【问题标题】:Replace or add .INI file content替换或添加 .INI 文件内容
【发布时间】:2016-12-14 14:55:05
【问题描述】:

需要跨多台计算机更新 .INI 文件并更改内容。我有以下有效的脚本:

(Get-Content SDA_Apps.ini) | Foreach-Object {
$_ -replace "UserName=.+", "UserName=Test" `
   -replace "UserEmail=.+", "UserEmail=test@test.com" `
   -replace "UserNo=.+", "UserNo=1234" `
   -replace "UserKey=.+", "UserKey=^%&$*$778-" `
   -replace "KEM=.+", "KEM=H10" 
} | Set-Content SDA_Apps.ini

有时这些文本行不存在,我需要添加文本而不是替换它。

这是我的尝试——没有成功:

function setConfig( $file, $key1, $value1, $key2, $value2 ) {
    $content = Get-Content $file
    if ( $content -match "^$key\s*=" ) {
        $content $_ -replace "^$key1\s*=.*", "$key1=$value1" -replace "^$key2\s*=.*", "$key2=$value2"|
        Set-Content $file     
    } else {
        Add-Content $file "$key1 = $value1"
        Add-Content $file "$key2 = $value2"
    }
}

setConfig "SDA_Apps.ini" "UserName" "Test"  "UserEmail" "test@test.com"

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我重写了你的函数并将其重命名以反映它的实际作用Set-OrAddIniValue

    function Set-OrAddIniValue
    {
        Param(
            [string]$FilePath,
            [hashtable]$keyValueList
        )
    
        $content = Get-Content $FilePath
    
        $keyValueList.GetEnumerator() | ForEach-Object {
            if ($content -match "^$($_.Key)=")
            {
                $content= $content -replace "^$($_.Key)=(.*)", "$($_.Key)=$($_.Value)"
            }
            else
            {
                $content += "$($_.Key)=$($_.Value)"
            }
        }
    
        $content | Set-Content $FilePath
    }
    

    此函数的好处是您可以将键值列表作为哈希表传递给它。它只读取一次 ini 文件,更新内容并将其保存回来。这是一个使用示例:

    Set-OrAddIniValue -FilePath "c:\yourinipath.ini"  -keyValueList @{
        UserName = "myName"
        UserEmail = "myEmail"
        UserNewField = "SeemsToWork"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2013-07-16
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多