Ste*_*ski 2 powershell metaprogramming powershell-2.0
我正在尝试以编程方式为函数创建一个参数块(沿着这篇博文的内容).
我开始使用CommandMetadata对象(来自现有函数).我可以创建ParameterMetadata对象并设置类似ParameterType,名称以及一些属性的内容.
我遇到的问题是,当我使用ProxyCommand类的GetParamBlock方法时,我没有生成我在ParameterMetadata的Attributes集合中设置的任何属性.
这导致的问题是,当调用GetParamBlock时,新参数不会使用适当的Parameter属性进行注释.
例:
function test
{
[CmdletBinding()]
param (
[Parameter()]
$InitialParameter)
Write-Host "I don't matter."
}
$MetaData = New-Object System.Management.Automation.CommandMetaData (get-command test)
$NewParameter = New-Object System.Management.Automation.ParameterMetadata 'NewParameter'
$NewParameter.ParameterType = [string[]]
$Attribute = New-Object System.Management.Automation.ParameterAttribute
$Attribute.Position = 1
$Attribute.Mandatory = $true
$Attribute.ValueFromPipeline = $true
$NewParameter.Attributes.Add($Attribute)
$MetaData.Parameters.Add('NewParameter', $NewParameter)
[System.Management.Automation.ProxyCommand]::GetParamBlock($MetaData)
Run Code Online (Sandbox Code Playgroud)
function test
{
[CmdletBinding()]
param (
[Parameter()]
$InitialParameter)
Write-Host "I don't matter."
}
$MetaData = New-Object System.Management.Automation.CommandMetaData (get-command test)
$NewParameter = New-Object System.Management.Automation.ParameterMetadata 'NewParameter'
$NewParameter.ParameterType = [string[]]
$Attribute = New-Object System.Management.Automation.ParameterAttribute
$Attribute.Position = 1
$Attribute.Mandatory = $true
$Attribute.ValueFromPipeline = $true
$NewParameter.Attributes.Add($Attribute)
$MetaData.Parameters.Add('NewParameter', $NewParameter)
$ParameterSetMetadata = "System.Management.Automation.ParameterSetMetadata"
$ParameterSetInfo = new-object psobject -Property @{
Position=[Int]::MinValue
Flags=3
HelpMessage="Please Enter a Value"
} | ForEach {
$_.PSTypeNames.Add("Deserialized.$ParameterSetMetadata")
write-Output $_
}
$converter = new-object Microsoft.PowerShell.DeserializingTypeConverter
$ConvertedSet = $converter.ConvertFrom($ParameterSetInfo,$ParameterSetMetadata, $null, $true)
$NewParameter.ParameterSets.Add('__AllParameterSets', $ConvertedSet )
[System.Management.Automation.ProxyCommand]::GetParamBlock($MetaData)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |