gpt4 book ai didi

json - Powershell:使用来自 json 的值作为参数默认值

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

我想编写一个带有参数的脚本,其中这些参数的默认值存储在一个 json 文件中。不幸的是,如果 param() 不是脚本中的第一行代码,Powershell 无法识别它。

当然,如果是脚本的第一行,它不能提前加载配置并使用它的值作为默认值。所以我在anpickle。

config.json:

{"defaultValue":"Default"}

powershell 脚本:

$configPath = "config.json"
$configPath = Join-Path $PSScriptRoot $configPath

# read config
$config = Get-Content $configPath | ConvertFrom-Json

write-host $config.defaultValue

param($myparam = $config.defaultValue)

write-host $myparam

我是 powershell 新手,有没有办法在脚本后面设置参数的默认值?或者,稍后将参数读入脚本?

最佳答案

假设您的 config.json 如下所示:

{
"Name": "Earthling",
"Color": "Pink"
}

根据您的实际情况,您可以将 config.json 的路径作为参数传递,并将所有其他参数设为可选。

在脚本中加载配置并为脚本调用中未设置的所有参数提供默认值:

[CmdletBinding()]
param (
[Parameter()]
[string]
$Name,

[Parameter()]
[string]
$Color,

[Parameter()]
[string]
$ConfigPath
)

if ($ConfigPath -in $PSBoundParameters.Keys) {

$config = Get-Content $ConfigPath | ConvertFrom-Json

if ('Name' -notin $PSBoundParameters.Keys) {
$Name = $config.Name
}
if ('Color' -notin $PSBoundParameters.Keys) {
$Color = $config.Color
}
}

Write-Host "$Name your favourite color is $Color"

你可以这样调用脚本:

PS> ./script.ps1  -ConfigPath ./config.json -Color Blue

Earthling your favourite color is Blue

这有一个缺点,您不能将参数声明为强制性的。允许将参数声明为强制的另一种方法是将配置通过管道传输到您的脚本中:

[CmdletBinding()]
param (
[Parameter(ValueFromPipelineByPropertyName,Mandatory)]
[string]
$Name,

[Parameter(ValueFromPipelineByPropertyName,Mandatory)]
[string]
$Color
)

Write-Host "$Name your favourite color is $Color"

然后调用将是:

PS> Get-Content ./params.json | ConvertFrom-Json | ./script.ps1 -Color Red

Earthling your favourite color is Red

关于json - Powershell:使用来自 json 的值作为参数默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68033727/

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