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

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中有另一种方法来进行字符串插值?

最佳答案

您没有做任何愚蠢的事情,但是您正在将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

07-24 09:38
查看更多