Uriにエンコードを停止させようとしています'/'ここで説明されているように: URLエンコードされたスラッシュでURLを取得する
しかし、PowerShellで同じことを実現するにはどうすればよいですか?
私有財産にアクセスしてその値を変更するルートをたどろうとしていますが、機能させることができません。
[Uri].GetProperties([System.Reflection.BindingFlags]::NonPublic)
-何も返しません
何か案は?
Uriにエンコードを停止させようとしています'/'ここで説明されているように: URLエンコードされたスラッシュでURLを取得する
しかし、PowerShellで同じことを実現するにはどうすればよいですか?
私有財産にアクセスしてその値を変更するルートをたどろうとしていますが、機能させることができません。
[Uri].GetProperties([System.Reflection.BindingFlags]::NonPublic)
-何も返しません
何か案は?
これは 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
google-api-dotnet-clientパスのおかげで:-) .net 2.0 とは若干の違いがあることに注意してflagsValue
ください[Int32]
。[Uint64]
)
これを試してください(リンクのように):
$uri.GetType().GetField("m_Flags", [System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic)
非公開プロパティを取得するには:
$uri.GetType().GetProperties( [System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic )
その他の投稿を必要なものとして取ると、これが必要になります:
$uri = [uri]"http://example.com/%2F"
$f = [uri].getfield("m_Flags", "nonpublic,instance")
$v = [int]($f.getvalue($uri))
$f.setvalue($uri, [uint64]($v -band (-bnot 0x30)))
PowerShell-bnot
と-band
ビット単位の演算子は、それより大きい型では機能しないため、上記のケースではオーバーフローしない型[int]
にダウンキャストし[int]
ています (つまり、フラグ値を超える値[int]::maxvalue
は存在しません)。
$uri.GetType().GetProperties('Instance,NonPublic')