2016-12-16 49 views
0

得到了以下腳本,我認爲它們會愉快地更新每個C:\users\*\AppData\Local\Greeentram文件夾中的指定.ini文件。對所有c: users * AppData Local執行函數

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" 
} 
+0

'results = @(); gci c:\ users \ * -Directory | %{$ results + =「$($ _。FullName)\ AppData \ Local \ Greentram \ SDA_Apps.ini」}您可能還想排除某些文件夾,如「Default」或「Allusers」 – 4c74356b41

回答

1

您的功能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}管道對象列表。

相關問題