使用命名参数的PowerShell脚本字符串插值不起作用

时间:2014-07-31 18:17:26

标签: powershell string-interpolation

我有以下功能(我只是将其粘贴到命令行中):

function Test ($url, $interface, $method)
{
   Write-Host "http://$url/$interface/$method"
}

然后我称之为:

Test("localhost:90", "IService", "TestMethod")

我明白了:

http://localhost:90 IService TestMethod//

我希望得到:

http://localhost:90/IService/TestMethod

如果我首先将结果设置为变量,则会发生同样的事情:

$res = "http://$url/$interface/$method"
Write-Host $res

我也不认为这是Write-Host引起的,因为如果我将此字符串传递给.NET对象,我会得到同样的错误。

如果我只是定义每个变量,那么的工作会让我感到困惑。因此,它与这些是函数参数的事实有关。我可以从命令行执行此操作:

PS C:\> $url = "localhost:90"
PS C:\> $interface = "IService"
PS C:\> $method = "TestMethod"
PS C:\> Write-Host "http://$url/$interface/$method"
http://localhost:90/IService/TestMethod
PS C:\>

我是在做傻事,还是在PowerShell中有另一种方法进行字符串插值?

1 个答案:

答案 0 :(得分:4)

你并没有做任何愚蠢的事情,但是你正在将PowerShell与Python混为一谈。

当我这样做时:

Function Count-Args
{
    $args.count
}

Count-args($var1, $var2, $var3)

我得到1的计数,你放入()的所有三个变量都被转换成$args的单个数组。

只需将您调用该函数的方式更改为test mysite myinterface mymethod即可。请注意ss64 site advice

Don't add brackets around the function parameters:

$result = Add-Numbers (5, 10) --Wrong!
$result = Add-Numbers 5 10    --Right