将字符串的默认参数值转换为类型数组

DarkLite1

假设您具有以下功能:

Function Test-Function {
    Param (
        [String[]]$ComputerNames = @($env:COMPUTERNAME, 'PC2'),
        [String]$PaperSize = 'A4'
    )
}

Get-DefaultParameterValuesHC -Path 'Test-Function'

现在,要获取函数参数中的默认值,可以使用AST:

Function Get-DefaultParameterValuesHC {
    [OutputType([hashtable])]
    Param (
        [Parameter(Mandatory)]$Path
    )
    $ast = (Get-Command $Path).ScriptBlock.Ast
        
    $selectParams = @{
        Property = @{ 
            Name       = 'Name'; 
            Expression = { $_.Name.VariablePath.UserPath } 
        },
        @{ 
            Name       = 'Value'; 
            Expression = { $_.DefaultValue.Extent.Text -replace "`"|'" }
        }
    }
        
    $result = @{ }

    $defaultValueParameters = @($ast.FindAll( { 
                $args[0] -is [System.Management.Automation.Language.ParameterAst] }
            , $true) | 
        Where-Object { $_.DefaultValue } | 
        Select-Object @selectParams)
            
    foreach ($d in $defaultValueParameters) {
        $result[$d.Name] = foreach ($value in $d.Value) {
            $ExecutionContext.InvokeCommand.ExpandString($value)
        }
    }
    $result
}

这里的问题是for的参数$ComputerNames被读了一段string时间,实际上它是一个数组string

PowerShell是否可以将字符串转换为数组?甚至更好的是,首先正确读取值?

您需要更深入地研究AST结构...
我建议您使用此PowerShell:AST Explorer GUI

在此处输入图片说明

对于您的特定示例:

Function Test-Function {
    Param (
        [String[]]$ComputerNames = @($env:COMPUTERNAME, 'PC2'),
        [String]$PaperSize = 'A4'
    )
}

$FunctionDefinitionAst = (Get-Command 'Test-Function').ScriptBlock.Ast
$Body = $FunctionDefinitionAst.Body
$ParamBlock = $Body.ParamBlock
$CNParameter = $ParamBlock.Parameters | Where-Object { $_.Name.VariablePath.UserPath -eq 'ComputerNames' }
$DefaultValue = $CNParameter.DefaultValue
$DefaultValue.SubExpression.Statements.PipelineElements.Expression.Elements

VariablePath : env:COMPUTERNAME
Splatted     : False
StaticType   : System.Object
Extent       : $env:COMPUTERNAME
Parent       : $env:COMPUTERNAME, 'PC2'

StringConstantType : SingleQuoted
Value              : PC2
StaticType         : System.String
Extent             : 'PC2'
Parent             : $env:COMPUTERNAME, 'PC2'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将字符串的默认参数值转换为类型数组

来自分类Dev

将参数值从字符串转换为DateTime?

来自分类Dev

无法将参数值从SqlParameter转换为字符串

来自分类Dev

无法将参数值从DropDownList转换为字符串

来自分类Dev

无法将参数值从字符串转换为字节[]

来自分类Dev

将字符串数组转换为其他类型

来自分类Dev

将任何类型的任何数组转换为字符串

来自分类Dev

无法将“字符串”类型的值转换为预期的参数类型“绑定<字符串>”

来自分类Dev

使用子字符串转换将数据类型varchar转换为数值时出错

来自分类Dev

如何将数值数组作为字符串转换为字节数组?

来自分类Dev

VBA ByRef参数类型将字符串不匹配转换为字符串

来自分类Dev

VBA ByRef参数类型将字符串不匹配转换为字符串

来自分类Dev

无法将参数值从字符串转换为十进制。C#?

来自分类Dev

无法将参数值从字符串转换为Int32错误

来自分类Dev

ASP.NET无法将参数值从字符串转换为DateTime

来自分类Dev

无法将参数值从字符串转换为十进制vb.net

来自分类Dev

错误(无法将参数值从字符串转换为日期时间)

来自分类Dev

将字符串转换为 IF 参数

来自分类Dev

将字符串转换为命令行参数的字符串数组

来自分类Dev

如何将字符串的打字稿类型转换为字符串数组?

来自分类Dev

是否可以将字符串数组转换为字符串文字联合类型?

来自分类Dev

如何在将非数组和数组都用作类的通用类型参数的同时将字符串数组转换为通用数组类型?

来自分类Dev

将数组转换为字符串

来自分类Dev

将字符串转换为数组

来自分类Dev

将数组转换为字符串

来自分类Dev

Perl Chomp将字符串转换为数值

来自分类Dev

如何将货币字符串转换为数值?

来自分类Dev

将字符串转换为R中的数值

来自分类Dev

gremlin将字符串属性转换为数值属性

Related 相关文章

  1. 1

    将字符串的默认参数值转换为类型数组

  2. 2

    将参数值从字符串转换为DateTime?

  3. 3

    无法将参数值从SqlParameter转换为字符串

  4. 4

    无法将参数值从DropDownList转换为字符串

  5. 5

    无法将参数值从字符串转换为字节[]

  6. 6

    将字符串数组转换为其他类型

  7. 7

    将任何类型的任何数组转换为字符串

  8. 8

    无法将“字符串”类型的值转换为预期的参数类型“绑定<字符串>”

  9. 9

    使用子字符串转换将数据类型varchar转换为数值时出错

  10. 10

    如何将数值数组作为字符串转换为字节数组?

  11. 11

    VBA ByRef参数类型将字符串不匹配转换为字符串

  12. 12

    VBA ByRef参数类型将字符串不匹配转换为字符串

  13. 13

    无法将参数值从字符串转换为十进制。C#?

  14. 14

    无法将参数值从字符串转换为Int32错误

  15. 15

    ASP.NET无法将参数值从字符串转换为DateTime

  16. 16

    无法将参数值从字符串转换为十进制vb.net

  17. 17

    错误(无法将参数值从字符串转换为日期时间)

  18. 18

    将字符串转换为 IF 参数

  19. 19

    将字符串转换为命令行参数的字符串数组

  20. 20

    如何将字符串的打字稿类型转换为字符串数组?

  21. 21

    是否可以将字符串数组转换为字符串文字联合类型?

  22. 22

    如何在将非数组和数组都用作类的通用类型参数的同时将字符串数组转换为通用数组类型?

  23. 23

    将数组转换为字符串

  24. 24

    将字符串转换为数组

  25. 25

    将数组转换为字符串

  26. 26

    Perl Chomp将字符串转换为数值

  27. 27

    如何将货币字符串转换为数值?

  28. 28

    将字符串转换为R中的数值

  29. 29

    gremlin将字符串属性转换为数值属性

热门标签

归档