[ パラメータ ]
target
対象のスクリプトブロック。
paramName
取得するパラメータの名前。
省略した場合は全てのパラメータを取得。
[ 戻り値 ]
スクリプトブロックのパラメータ情報。
[ Get-Parameter ]
function Get-Parameter
{
param ([ScriptBlock]$target, [string]$paramName)
trap { break; }
if ($() -eq $target) { throw New-Object "ArgumentException" @("target"); }
$parameterMetadataProperty = [ScriptBlock].GetProperty("ParameterMetadata", [System.Reflection.BindingFlags]"NonPublic, Instance");
$parameterMetadata = $parameterMetadataProperty.GetValue($target, $());
$bindableParametersProperty = $parameterMetadata.GetType().GetProperty("BindableParameters", [System.Reflection.BindingFlags]"NonPublic, Instance");
$bindableParameters = $bindableParametersProperty.GetValue($parameterMetadata, $());
$compiledCommandParameterType = [Type]::GetType("System.Management.Automation.CompiledCommandParameter");
$typeProperty = $compiledCommandParameterType.GetProperty("Type", [System.Reflection.BindingFlags]"NonPublic, Instance");
$result =
$bindableParameters.GetEnumerator() |
? { (("$paramName" -eq "") -or ($_.Key -eq $paramName)); } |
% {
$paramInfo = New-Object "PSObject";
Add-Member -InputObject $paramInfo -Name "Name" -Value $_.Key -MemberType "NoteProperty";
Add-Member -InputObject $paramInfo -Name "Type" -Value $typeProperty.GetValue($_.Value, $()) -MemberType "NoteProperty";
return $paramInfo;
};
return $result;
}
[ 使用例 ]
Get-Parameter ${function:Get-Parameter};
Get-Parameter ${function:Get-Parameter} "paramName";
【 ダウンロード 】
自作の PowerShell 関数は、以下の記事からまとめてダウンロードできます。
YokoKen.PowerShell.Scripts
トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/217-a8496001