执行所有c:\ users \ * \ AppData \ Local

时间:2016-12-16 11:34:31

标签: powershell

获得以下脚本,我认为可以高兴地分别更新每个C:\users\*\AppData\Local\Greeentram文件夹中指定的.ini文件。

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
}

Set-OrAddIniValue -FilePath "C:\Users\*\AppData\Local\Greentram\SDA_Apps.ini"  -keyValueList @{
    UserName = "Dcebtcv7[[G"
    UserEmail = "x}tpwpjmkxmvkYjmklzmx7zv7lr"
    UserNo = "*++*(+"
    UserKey = "^X(_0[*_/0L)\_0,U,-"
    KEM = "H10"
}

它似乎正在做的是以某种方式将所有.INI文件组合在一起并为每个用户创建一个新的.INI文件。

我错误地认为C:\Users\*\AppData\Local\Greentram\SDA_Apps.ini会起作用。

我只想更新或将这些特定值添加到每个.INI文件中。

Set-OrAddIniValue -FilePath "C:\Users\*\AppData\Local\Greentram\SDA_Apps.ini"  -keyValueList @{
    UserName = "Dcebtcv7[[G"
    UserEmail = "x}tpwpjmkxmvkYjmklzmx7zv7lr"
    UserNo = "*++*(+"
    UserKey = "^X(_0[*_/0L)\_0,U,-"
    KEM = "H10"
}

1 个答案:

答案 0 :(得分:2)

您的函数Set-OrAddIniValue无法处理路径中的通配符。

$content = Get-Content $FilePath
...
$content | Set-Content $FilePath

第一个语句将所有匹配文件的内容读入单个数组。然后,第二个语句将整个修改后的内容写入所有匹配的文件。 (它将如何决定哪个内容属于哪个文件?)

您可以单独为每个文件调用函数:

Get-ChildItem "C:\Users\*\AppData\Local\Greentram\SDA_Apps.ini" | ForEach-Object {
    Set-OrAddIniValue -FilePath $_.FullName -keyValueList ...
}

或更改您的函数,以便它在内部进行枚举:

function Set-OrAddIniValue {
    Param(
        [string]$FilePath,
        [hashtable]$keyValueList
    )

    Get-ChildItem $FilePath | Where-Object {
        -not $_.PSIsContainer   # process only files
    } | ForEach-Object {
        $file = $_.FullName
        $content = Get-Content $file
        ...
        $content | Set-Content $file
    }
}

在PowerShell v3及更新版本上,您可以使用Get-ChildItem -File而不是通过Where-Object {-not $_.PSIsContainer}管道对象列表。