某些文本文件 (pfile.ora) 的一部分如下所示:
fubar.__db_cache_size=1040187392
fubar.__pga_aggregate_target=1291845632
*.audit_file_dest='C:\app\oracle\admin\fubar\adump'
*.db_recovery_file_dest='\\nas3\backup\SRV07\fast_recovery_area\fubar'
*.db_recovery_file_dest_size=42949672960
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fubarXDB)'
在该文件中,需要更新 1 个参数。我在某个地方找到了这个函数来读取和解析文件:
function Parse-IniFile ($file) {
$ini = @{}
switch -regex -file $file {
"^\s*([^#].+?)\s*=\s*(.*)" {
$name,$value = $matches[1..2]
$ini[$name] = $value.trim()
}
}
$ini
}
结果存储在变量 $aLines 中:
$aLines = Parse-IniFile ('pfile.ora');
更新参数后:
$aLines.'*.db_recovery_file_dest' = "'\\nas4\backup\SRV07\fast_recovery_area\fubar'";
...显示 $aLines 的内容会导致:
Name Value
---- -----
*.db_recovery_file_dest '\\nas3\backup\SRV07\fast_recovery_area\fubar'
fubar.__db_cache_size 1040187392
fubar.__pga_aggregate_target 1291845632
*.audit_file_dest 'C:\app\oracle\admin\fubar\adump'
etc...
元素都是完全无序的!我需要按原样订购它们。后:
$sOut = "";
foreach($oLine in $aLines.GetEnumerator() ) {
$sOut += $oLine.name + "=" + $oLine.value +"`r`n";
}
并将 $sOut 写入文件,不再有任何行位于其原始位置。
长话短说,一个简单的问题:我如何让结果恢复原样,仍然能够轻松更改其中一个参数?
任何帮助将不胜感激!