Powershell参数替换最后一个输入

o2gm4chl  于 2023-04-06  发布在  Shell
关注(0)|答案(1)|浏览(133)

我写了下面的代码,当我使用cmd
./generate.ps1 -name  'Test' -class 'first' -subject 'Maths'生成一个名为Control.ps1的文件,输出如下

$name = "Test"
$class = "first"
$subject = "Maths"

但当我将命令更改为
./generate.ps1 -name  'Test' -class 'first' -subject 'Maths', 'English'
最后一个值替换了N-1值。我尝试使用foreach循环,它仍然替换了N-1值
我的预期输出如下

$name = "Test"
$class = "first"
$subject = "Maths"
$subject = "English"

也请让我知道,如果这个代码可以优化到更好的标准

param(
$name,
$class,
$subject)

MyFunction
$Script:name = $name
$Script:class = $class
$Script:subject = $subject

$ControlFile = "D:\Users\Downloads\Control.ps1"
function WriteParameterFile    
{
    New-Item -Path $ControlFile -ItemType File -Force | Out-Null                

    Add-Content -Path $ControlFile -Value ('${0} = "{1}"' -f @("name",$name))
    Add-Content -Path $ControlFile -Value ('${0} = "{1}"' -f @("class",$class))
    Add-Content -Path $ControlFile -Value ('${0} = "{1}"' -f @("subject",$subject))

}

WriteParameterFile $ControlFile
juud5qan

juud5qan1#

以下是如何使用$PSBoundParameters使代码更具动态性。这将能够处理向param块添加更多参数以及将参数类型从[string]更改为[string[]]

param(
    [string] $Name,
    [string] $Class,
    [string[]] $Subject
)

$PSBoundParameters.GetEnumerator() | ForEach-Object {
    if($_.Value -is [string[]]) {
        foreach($val in $_.Value) {
            '${0} = "{1}"' -f $_.Key, $val
        }
        return
    }
    '${0} = "{1}"' -f $_.Key, $_.Value
} | Set-Content "D:\Users\Downloads\Control.ps1"

相关问题