2017-10-07 54 views
1

我對powershell瞭解不多,但我想從powershell運行另一個腳本,並傳遞所有未使用的參數。在bash我這樣做(簡化):

MY_PARAM=$1 
shift 
python otherscript.py "[email protected]" 

我已經嘗試了很多東西在PowerShell中,但沒有任何工作。在我的python腳本中,我收到了「System.Object[]」(或「System.Collections.Generic.List`1[System.Object]」)或包含在單個字符串中的所有參數作爲第一個參數(當然還有各種錯誤消息)。我曾嘗試:

  • python otherscript.py $args
  • Invoke-Expression "python otherscript.py $args"
  • 而代替$args我也使用$MyInvocation.Line$MyInvocation.UnboundArguments

,這是什麼正確的語法試過嗎?

更新1

由於Mathias R. Jessen意見,從「全球範圍內」與python otherscript.py $args作品調用python腳本,因爲我期望的那樣。

什麼其實我試圖做的,是從一個函數中調用我的Python腳本:

param (
    [string]$command = "" 
) 

function Invoke-Other() { 
    python otherscript.py $args 
} 

switch ($command) { 
    "foo" { 
     Invoke-Other $args 
    } 
} 

這是設置,當我得到一個單一的,「包裝」的說法「欄巴茲」,當我用.\myscript.ps1 foo bar baz調用我的powershell腳本。

+1

'蟒蛇otherscript.py $ args'從PowerShell的(PS 5.1,蟒蛇3.6調用時,我的偉大工程,Win10)。你如何調用PowerShell腳本和你傳遞給它的參數? –

回答

1

當您調用Invoke-Other $args時,參數列表作爲單個(數組)參數傳遞,因此所有腳本參數在函數內部以$args[0]的嵌套數組結尾。您可以通過檢查函數內部和外部的值$args.Count來驗證。當您使用函數的參數列表調用Python腳本時,嵌套數組隨後會變成一個字符串。

使用splatting有作爲單獨的參數傳遞給函數腳本的參數列表:

Invoke-Other @args