Powershell 为所有c:\users\*\AppData\Local执行函数

Powershell 为所有c:\users\*\AppData\Local执行函数,powershell,Powershell,获得了以下脚本,我认为该脚本会很高兴地分别更新每个C:\users\*\AppData\Local\Greeentram文件夹中指定的.ini文件 function Set-OrAddIniValue { Param( [string]$FilePath, [hashtable]$keyValueList ) $content = Get-Content $FilePath $keyValueList.GetEnumerator

获得了以下脚本,我认为该脚本会很高兴地分别更新每个
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\u 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"
}

函数
Set或addinivalue
不处理路径中的通配符

$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$\psicontainer}
results=@();gci c:\users\*-Directory |%{$results+=“$($)\uU3.FullName)\AppData\Local\Greentram\SDA_Apps.ini”}
您可能还希望排除某些文件夹,如“Default”或“alluser”