gpt4 book ai didi

powershell - 将自定义 PowerShell 定义的类型用于参数类型规范

转载 作者:行者123 更新时间:2023-12-03 12:44:04 25 4
gpt4 key购买 nike

我使用 New-Object 定义了一个自定义的 PowerShell 类型。我想要一个参数是我定义的类型,是否可以以声明方式指定这种类型?以下代码给了我错误:“无法找到类型 [BuildActionContext]:确保加载了包含此类型的程序集。”

我们可以指定类型声明,还是应该只测试指定对象的类型?

不工作的代码:

$buildActionContext = New-Object -TypeName PSObject -Property @{
# Given properties
BuildAction = "Build";
}
$buildActionContext.PSObject.TypeNames.Insert(0, 'BuildActionContext')

function DoSomethingWithBuildActionContext
{
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true)][BuildActionContext]$Context
)

Write-Host "Build action: $($Context.BuildAction)"
}

DoSomethingWithBuildActionContext -Context $buildActionContext

工作代码,但可以以不同的方式完成:
$buildActionContext = New-Object -TypeName PSObject -Property @{
# Given properties
BuildAction = "Build";
}
$buildActionContext.PSObject.TypeNames.Insert(0, 'BuildActionContext')

function DoSomethingWithBuildActionContext
{
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true)]$Context
)

if ($Context.PSObject.TypeNames[0] -ne 'BuildActionContext')
{
throw "Context parameter not of type 'BuildActionContext'"
}

Write-Host "Build action: $($Context.BuildAction)"
}

DoSomethingWithBuildActionContext -Context $buildActionContext
DoSomethingWithBuildActionContext -Context "Hello world"

注意:第二次调用会给出异常消息。

最佳答案

我希望只有真正的 .NET 类型才能用于指定参数类型。根据 Essential PowerShell: Name your custom object types自定义类型名称主要用于格式化。

您可以通过 ValidateScript 手动检查类型名称。属性:

function DoSomethingWithBuildActionContext { 
param(
[Parameter()]
[ValidateScript({ $_.PSObject.TypeNames[0] -eq 'BuildActionContext' })]
$context
)
Write-Host "Build action: $($Context.BuildAction)"
}

关于powershell - 将自定义 PowerShell 定义的类型用于参数类型规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3635157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com