我正在尝试在PowerShell中编写一个包装器函数,它基本上评估第一个参数,并基于它在计算机上运行程序.然后,包装函数的所有剩余参数都应传递给运行的程序.
所以看起来应该是这样的:
function test ( [string] $option )
{
if ( $option -eq 'A' )
{
Write-Host $args
}
elseif ( $option -eq 'B' )
{
. 'C:\Program Files\some\program.exe' $args
}
}
Run Code Online (Sandbox Code Playgroud)
现在只是添加$args不起作用,所以我需要做些什么来使它工作?另一种选择可能是使用Invoke-Expression,但感觉有点像eval我想尽可能避免,此外我认为这样做会限制我只对字符串参数吧?如果可能的话,我希望得到对包装程序/ cmdlet的完全支持 - 基本上就像动态别名一样.这甚至可能吗?
我正在尝试创建Get-Command cmdlet的别名(命名为which),如果我不发送任何参数,它就不会运行(因为如果它在没有参数的情况下运行,它会输出所有可用的命令) .
我知道这可以使用函数来完成,但我想保留选项卡完成功能,而不必编写一个相当大的函数来放入我的$PROFILE 中。
简而言之,我只希望别名在传递参数时起作用。
我是 PowerShell 的新手。在 Msys2(或 Lnux)中,我定义了一个函数npp
npp ()
{
${NPP_PATH} "$@"
}
Run Code Online (Sandbox Code Playgroud)
这样,如果我从命令提示符调用,npp它会启动 Notepad++(如 中所定义${NPP_PATH})。如果我调用npp "mydir/stage 1/a.txt"它会打开该文件进行编辑。一般来说,它允许:
PowerShell 中的等价物是什么?
我想在 PS 我也应该去寻找一个函数来获得类似的行为。到目前为止,我可以接收未定义数量的参数,并在foreach循环中使用它们,请参阅下面的代码。但是我找不到简单的等价物"$@"来传递接收到的所有参数。此外,如果我在其中一个参数中使用引号,它们将被删除,因此文件路径可能会出现问题,包括空格。
function multi_params {
param(
[Parameter(
ValueFromRemainingArguments=$true
)][string[]]
$listArgs
)
$count = 0
foreach($listArg in $listArgs) {
'$listArgs[{0}]: {1}' -f $count, $listArg
$count++
}
}
Run Code Online (Sandbox Code Playgroud)