从powershell访问私有成员

Jam*_*mes 6 powershell

我试图让Uri停止编码'/'如下所述: 使用URL编码的斜杠获取URL

但是如何在PowerShell中实现同样的目标呢?

我试图遵循访问私有财产的路线并改变它的价值,但我无法让它发挥作用.

[Uri].GetProperties([System.Reflection.BindingFlags]::NonPublic) - 什么都不返回

有任何想法吗?

Boo*_*Boo 6

这是PowerShell的有效解决方案:

$uri = [Uri]"http://example.com/%2F"
# access the .PathAndQuery field to initialize the Uri object
$pathAndQuery = $uri.PathAndQuery
$flagsField = $uri.GetType().GetField("m_Flags", [Reflection.BindingFlags]::NonPublic -bor [Reflection.BindingFlags]::Instance)
$flagsValue = [UInt64]$flagsField.GetValue($uri)
# remove flags Flags.PathNotCanonical and Flags.QueryNotCanonical
$flagsValue = [UInt64]($flagsValue -band (-bnot 0x30));
$flagsField.SetValue($uri, $flagsValue)
Write-Host $uri.AbsoluteUri
Run Code Online (Sandbox Code Playgroud)

感谢google-api-dotnet-client 路径 :-)请注意,与.net 2.0有一些区别,我的代码适用于> .net 2.0(对于<= 2.0版本,flagsValue对象的类型将[Int32]代替[Uint64])


CB.*_*CB. 1

试试这个(就像你的链接一样):

$uri.GetType().GetField("m_Flags", [System.Reflection.BindingFlags]::Instance -bor `
 [System.Reflection.BindingFlags]::NonPublic)
Run Code Online (Sandbox Code Playgroud)

获取非公共属性:

$uri.GetType().GetProperties( [System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic )
Run Code Online (Sandbox Code Playgroud)