gpt4 book ai didi

powershell - 设置 $PSDefaultParametersValues 以在模块范围内使用

转载 作者:行者123 更新时间:2023-12-02 23:13:17 25 4
gpt4 key购买 nike

我想我只是遗漏了一些东西,但这是我的设置,我有一个具有三个测试功能的测试模块,我想设置 $PSDefaultParameterValues 以创建一个仅存在于其他 cmdlet 的公共(public)参数值说模块。这是我的代码:

测试.psm1:

$PSDefaultParameterValues.Clear()

"$(Split-Path -Path $MyInvocation.MyCommand.Path)\*.ps1" | Resolve-Path | % { . $_.ProviderPath }

在同一个目录中我有我的功能:

New-TestFunction.ps1:

Function New-TestFunction
{
[CmdletBinding()]
[OutputType([String])]

Param
(
[String]
$InputString
)

$Script:PSDefaultParameterValues.Add("Write-TestValue:OutputValue", $InputString)
}

写测试值.ps1:

Function Write-TestValue
{
[CmdletBinding()]
[OutputType()]

Param
(
[Parameter()]
[String]
$OutputValue
)

Write-Output -InputObject $OutputValue
}

所以,我应该能够做到这一点:

PS C:\> New-TestFunction -InputString 'Test String'; Write-TestValue
PS C:\> 'Test String'

但它什么都不返回,$OutputValue 仍然是 $null。我让它工作的唯一方法是使用 $Global: 范围,我宁愿不这样做。我觉得在 Module 作用域下导入的函数应该看到 $Script: 变量作用域。我写了一个小测试函数:

编写脚本PSDefaultParameterValues.ps1

Function Write-ScriptPSDefaultParameterValues
{
[CmdletBinding()]
[OutputType()]

Param
(
)

Write-Output -InputObject $Script:PSDefaultParameterValues
}

这有效:

PS C:\>  New-TestFunction -InputString 'Test String'; Write-ScriptPSDefaultParameterValues
Name Value
---- -----
Write-TestValue:OutputValue Test String

所以从函数内部来看,$Script 作用域存在,只是不在参数中。也许我只是不明白示波器是如何完全工作的,感谢您的帮助和/或澄清。

最佳答案

$PSDefaultParameterValues 从发生调用的范围读取,而不是从定义函数的范围读取。

New-Module {
$PSDefaultParameterValues=@{'F:Value'=10}
function F{
[CmdletBinding()]
param(
$Value
)
"F:`$Value:$Value"
}
function G{
[CmdletBinding()]
param(
$Value
)
"G:`$Value:$Value"
}
function Invoke-F{
F
}
function Invoke-G{
G
}
}|Out-Null
$PSDefaultParameterValues=@{'G:Value'=20}
F
G
Invoke-F
Invoke-G

结果:

F:$Value:
G:$Value:20
F:$Value:10
G:$Value:

因此,当从全局范围执行函数时,将读取全局 $PSDefaultParameterValues。当函数从其他模块函数执行时,模块 $PSDefaultParameterValues 被读取。

关于powershell - 设置 $PSDefaultParametersValues 以在模块范围内使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30427110/

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