我有以下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:
即使在执行过程中传递参数,脚本也会再次期待它。我在这里做错了什么?
答案 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\"