使用PowerShell从参数获取变量类型

使用PowerShell从参数获取变量类型,powershell,Powershell,如何使用PowerShell从参数中获取变量的类型 如果TypeOf(xyz)是字符串,则效果为;如果TypeOf(xyz)是整数,则效果为 出于我的目的,我想检查它是字符串还是securestring。我想使用带有参数的单个函数。不是两个单独的函数,一个用于securestring,另一个用于string。您的问题的直接答案是使用: 然而,深入挖掘: 我想使用带有参数的单个函数。不是两个单独的函数,一个用于securestring,另一个用于string 您可以使用单个函数来区分使用的版本:

如何使用PowerShell从参数中获取变量的类型

如果TypeOf(xyz)是字符串,则效果为;如果TypeOf(xyz)是整数,则效果为


出于我的目的,我想检查它是字符串还是securestring。我想使用带有参数的单个函数。不是两个单独的函数,一个用于securestring,另一个用于string。

您的问题的直接答案是使用:

然而,深入挖掘:

我想使用带有参数的单个函数。不是两个单独的函数,一个用于securestring,另一个用于string

您可以使用单个函数来区分使用的版本:

function Do-Thing {
[CmdletBinding()]
param(
    [Parameter(
        ParameterSetName = 'Secure',
        Mandatory = $true
    )]
    [SecureString]
    $SecureString ,

    [Parameter(
        ParameterSetName = 'Plain',
        Mandatory = $true
    )]
    [String]
    $String
)

    switch ($PSCmdlet.ParameterSetName)
    {
        'Plain' {
            # do plain string stuff
        }

        'Secure' {
            # do secure stuff
        }
    }
}
继续运行该示例定义,然后查看帮助:

Get-Help Do-Thing
您将看到生成的参数集,它显示了调用它的两种方式。每种方式都有一个相互排斥的参数

名称
做事
语法
Do Thing-SecureString[]
Do Thing-String[]

你好,布莱安斯特。如果我使用:
If($xyz-is[String]){}
If($xyz-is[bool]){}
If($xyz-is[int]){}
。如果我使用:
If($xyz-is[SecureString]){}
。它作为PSOBject或PSCustomObject获取pickeup。我该怎么处理呢?@CostaZachariou我不知道,因为我看不到你代码中分配
$xyz
的部分。
$xyz.GetType().FullName
的输出是什么?感谢您之前的帮助。我认为这是因为它返回了一个null,并且正在更改为PSCustomObject的默认对象。这似乎正在起作用。正在创建另一个问题以返回SecureString。
Get-Help Do-Thing
NAME
    Do-Thing

SYNTAX
    Do-Thing -SecureString <securestring>  [<CommonParameters>]

    Do-Thing -String <string>  [<CommonParameters>]