2017-02-21 71 views
1

下面我有PS腳本如何傳遞參數的功能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

。\ RPCPublish.ps1 =/=你的函數'publish' – Matt

+0

聽不懂 – Kally

+0

[dotsource(https://ss64.com/ps/source.html)腳本,做'發佈-arg1 -arg2 -arg3',並且考慮將函數名改爲動詞 - 名詞格式 – 4c74356b41

回答

5

如果你想通過調用.ps1來執行腳本,就不需要使用函數。你的腳本應該看起來就像這樣:

​​

參數直接傳遞給腳本,可以在那裏使用。另一方面,如果你想建立一個(可重用的)函數,只需從你的腳本中刪除最後一行,它不帶參數調用該函數(這就是爲什麼它每次都要求強制參數)。

如果刪除最後一行,則可以在不帶參數的情況下調用腳本一次。之後,你必須在當前會話的新功能Publish,然後你就可以用

Publish -RELEASEDIR "C:\Release\Batchfile" -SERVICENAME "AmazonSSMAgent" -SERVER "10.0.1.91" 

獨立腳本文件的調用。

+0

如何在Jenkins中執行相同的操作 – Kally

+0

不知道,我不會做Jenkins。也許這會有所幫助:https://hodgkins.io/automating-with-jenkins-and-powershell-on-windows-part-1 – TToni

1

你的腳本創建函數「發佈」(1-17行),然後不帶參數(18行)調用它。由於您已將參數定義爲強制參數(第4,7,10行),因此在調用函數(第18行)時未能提供參數會導致PowerShell爲未應用的參數請求值。

向腳本文件本身提供參數並沒有幫助;沒有「自動」將這些參數傳遞給腳本中的任何內容的機制(您必須明確地爲腳本編寫代碼)。

馬特在評論中,點源建議刪除第18行後,你的腳本,然後調用你的函數明確地傳遞參數(publish -RELEASEDIR "C:\Release\Batchfile" -SERVICENAME "AmazonSSMAgent" -SERVER "10.0.1.91")。

0

所以,按我的理解你的要求是運行功能,你也必須編譯腳本詹金斯。

你可以做這樣的事情:

比方說你的腳本名稱是RPCPublish.ps1和路徑是d:\文件夾

我可以看到你的功能名稱是發佈

你的情況

所以,

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

可以在腳本塊後,這個傳遞的參數。

希望你理解我的做法。

我相信你現在可以整合這些東西。

0

我用PS插件並執行相同的操作。

. "C:\Release\RPCPS\RPCPublish.ps1" 
FUunctionName -RELEASEDIR "C:\Air\BTP\src\Fortius.Services.Air\Fortius.Services.Air.RPC.Host\bin\Release" -SERVICENAME "ServicesAirWindowsService" -SERVER "$env:SERVER" -DISPLAYNAME "Fortius Services Air RPC Service" -BINPATH "D:\Build\RPC\Fortius.RPC.Air\WorldVentures.Fortius.Services.Air.RPC.Host.exe" -DESCRIPTION "This service hosts Fortius Services Air RPC service" -DESTINATION "d$\Build\RPC\Fortius.RPC.Air"