如何将参数传递给PowerShell中的函数

时间:2017-02-21 12:21:00

标签: function powershell powershell-v3.0

我有以下PowerShell脚本

Function Publish
{
    Param(
        [parameter(Mandatory=$true)]
        [String]
        $RELEASEDIR,

        [parameter(Mandatory=$true)]
        [String]
        $SERVICENAME,

        [parameter(Mandatory=$true)]
        [String]
        $SERVER
    )

    Get-ChildItem "$RELEASEDIR\*"
    $service = Get-Service -Name $SERVICENAME -Computername $SERVER -ErrorAction SilentlyContinue
    $service.Status
}
Publish

我如何执行此操作:

PS C:\Release\RPCPS> .\RPCPublish.ps1 -RELEASEDIR "C:\Location" -SERVICENAME "value" -SERVER "server"
cmdlet Publish at command pipeline position 1
Supply values for the following parameters:
RELEASEDIR:

即使在执行过程中传递参数,脚本也会再次期待它。我在这里做错了什么?

4 个答案:

答案 0 :(得分:5)

如果您想通过调用示例中的.ps1来执行脚本,则无需使用函数。您的脚本应该如下所示:

Param(
    [parameter(Mandatory=$true)]
    [String]
    $RELEASEDIR,
    [parameter(Mandatory=$true)]
    [String]
    $SERVICENAME,
    [parameter(Mandatory=$true)]
    [String]
    $SERVER
    )
Get-ChildItem "$RELEASEDIR\*"
$service = Get-Service -Name $SERVICENAME -Computername $SERVER -ErrorAction SilentlyContinue
$service.Status

参数直接传递给脚本,可以在那里使用。

另一方面,如果要建立(可重用)函数,只需从脚本中删除最后一行,该行调用不带参数的函数(这就是为什么每次都要求强制参数)。 / p>

如果删除最后一行,则可以不带参数调用脚本一次。之后,您在当前会话中有一个新功能Publish,然后可以使用

进行调用
Publish -RELEASEDIR "C:\Release\Batchfile" -SERVICENAME "AmazonSSMAgent" -SERVER "10.0.1.91"

独立于脚本文件。

答案 1 :(得分:1)

您的脚本正在创建一个功能,“发布”,(第1-17行),然后在没有参数的情况下调用它(第18行)。由于您已将参数定义为必需参数(第4,7,10行),因此在调用函数时无法提供参数(第18行)会导致PowerShell请求未提供参数的值。

向脚本文件本身提供参数没有帮助;没有机制可以“自动”将这些参数传递给脚本中的任何内容(您必须为此明确编写脚本代码)。

正如Matt在评论中建议的那样,在删除第18行后点源你的脚本,然后显式调用你的函数,传递参数(publish -RELEASEDIR "C:\Release\Batchfile" -SERVICENAME "AmazonSSMAgent" -SERVER "10.0.1.91")。

答案 2 :(得分:0)

根据我的理解,您的要求是运行 功能 ,您还必须在Jenkins中编译脚本。

您可以这样做:

假设您的脚本名称为 RPCPublish.ps1 ,路径为 D:\ Folder

我可以看到您的功能名称是 发布

所以在你的情况下,

powershell -command "& { D:\folder\RPCPublish.ps1; Publish }"

您可以在脚本块中传递此后的参数。

答案 3 :(得分:0)

我使用了PowerShell插件( PowerShell )并执行了相同的操作。

. "C:\Release\RPCPS\RPCPublish.ps1"
FUunctionName -RELEASEDIR "C:\bin\Release" -SERVICENAME "Service" -SERVER "$env:SERVER" -DISPLAYNAME "Services Air" -BINPATH "D:\Build\Project.exe" -DESCRIPTION "This service hosts Air service" -DESTINATION "d$\Build\"