我有一个这样的脚本:
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$Message
)
Write-Host "Hello, $Message!"
但我想提供一种允许用户点源脚本的方法。最初,我只是想将整个脚本包装在一个函数中以允许点源:
function Hello
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$Message
)
Write-Host "Hello, $Message!"
}
这个问题是,如果我这样做,它会破坏一些以旧方式使用它的人的脚本。是否可以返回一个与脚本具有相同功能的对象,或者是否可以按原样点源脚本(上面的第一个例子)?
答案 0 :(得分:3)
我建议使用[{1}}:
进行拼接$PSBoundParameters
或者:代替点源,只需从现有脚本创建函数:
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$Message
)
function Hello
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$Message
)
Write-Host "Hello, $Message!"
}
Hello @PSBoundParameters
答案 1 :(得分:0)
在function Hello
结束时,您必须触发它以模拟旧行为。因此,如果脚本用于从命令行获取参数,请说c:\scripts\hello.ps1 bob
,您可以这样做:
function Hello
{
...
}
if($args.Count -eq 0){
Hello $null
}
else{
Hello $args
}
如果您在没有参数的情况下运行$args
,而不是之前没有传递任何值的c:\scripts\newhello.ps1
,那么 $null
将是一个空数组。因此,我们在使用正确的参数触发函数之前检查$args.Count
。