- INIファイル を PowerShell と C# を使って読み書きする。
settings.ini
[section1]
Key1=Value1
Key2=Value2
Key3=Value3
; ...
次の Win32API の力を借りる。
-
まず C# で上記の関数をラップする。
- GetPrivateProfileString → ReadFromIniFile
- WritePrivateProfileString → WriteToIniFile
IniFileManager.csusing System.Runtime.InteropServices; using System.Text; public class IniFileManager { [DllImport("KERNEL32.DLL")] private static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL")] private static extern uint WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName); public static string ReadFromIniFile(string iniFilePath, string appName, string key) { StringBuilder sb = new StringBuilder(1024); GetPrivateProfileString(appName, key, null, sb, (uint)sb.Capacity, iniFilePath); return sb.ToString(); } public static void WriteToIniFile(string iniFilePath, string appName, string key, string value) { WritePrivateProfileString(appName, key, value, iniFilePath); } }
-
PowerShell からこれを使う。
Add-Type -Path IniFileManager.cs
-
INIファイル (settings.ini) に書き込む
[IniFileManager]::WriteToIniFile("C:\Path\to\settings.ini", "ThisApplication", "SomeKey", "SomeValue")
結果(settings.ini)[ThisApplication] SomeKey=SomeValue
-
INIファイルから読み込む
[IniFileManager]::ReadFromIniFile("C:\Path\to\settings.ini", "ThisApplication", "SomeKey")
結果SomeValue
-
追記
単に読み込むだけなら、ConvertFrom-StringData
を使ったほうがお手軽かもしれない。
Get-Content settings.ini | where { $_ -match ".*=.*" } | ConvertFrom-StringData
結果
Name Value
---- -----
SomeKey SomeValue