我在使用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)
答案 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")