使用Powershell和kernel32.dll删除INI部分

时间:2015-02-17 15:25:07

标签: powershell ini kernel32

我在使用Powershell删除INI文件部分时遇到问题。我在kernel32.dll中调用WritePrivateProfileString,其中包含键和值的空字符串。这是"之前"的一个例子。 INI:

[Section1]
Setting1=Value1
[Section2]
Setting2=Value2

现在我使用导入的kernel32.dll(下面的完整代码)调用WritePrivateProfileString:

$Kernel32::WritePrivateProfileString("Section2", "", "", "MyIniFile.ini")

我希望这会删除Section2,但我得到了这个:

[Section1]
Setting1=Value1
[Section2]
Setting2=Value2
=

显然空字符串没有被底层代码识别出来。可能是空字符串定义的差异?任何帮助,将不胜感激。这是定义$ Kernel32:

的代码
$Signature = @’ 
[DllImport("kernel32.dll")] 
public static extern bool WritePrivateProfileString(
    string lpAppName, 
    string lpKeyName, 
    string lpString, 
    string lpFileName); 
‘@ 

$Kernel32 = Add-Type -MemberDefinition $Signature -Name Win32Utils -Namespace WritePrivateProfileString -Using System.Text -PassThru 
$Kernel32::WritePrivateProfileString($Section, $Key, $Value, $File)

1 个答案:

答案 0 :(得分:3)

使用[NullString]::Value。资料来源:Possible to pass null from Powershell to a .Net API that expects a string?

示例:

$Kernel32::WritePrivateProfileString("Section2", [NullString]::Value, [NullString]::Value, "MyIniFile.ini")