2017-08-02 118 views
0

cmd中,我可以編寫像這樣的批處理文件,它將爲可執行文件提供別名。使用可空參數包裝可執行文件

SuperUtil.bat

call Mine.Library.SuperUtil.exe %* 

所以我可以打電話

SuperUtil -t SomeParam 

這是我的等效

Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args 

然而,當我把它稱爲不帶參數,我得到一個PowerShell的嘗試一個錯誤。

啓動過程:無法驗證參數'ArgumentList'上的參數。 參數爲空,空或參數集合 中的元素包含空值。提供一個不包含任何 空值的集合,然後再次嘗試該命令。

我試過以下,但不傳遞參數,再加上它是相當冗長:

if ($args -ne $Null) 
{ 
    Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args -Wait 
} 
else 
{ 
    Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait 
} 

所以我想可選的傳入參數與否,以探討在命令行選項。

回答

3

使用splatting如果要提供可選的參數參數:

$params = @{} 
if($args){ 
    $params['ArgumentList'] = $args 
} 
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait @params 

如果$params哈希表是由時間Start-Process空被調用時,它會簡單地忽略。

還能夠壓制其他參數參數到哈希表,如果你想:

$params = @{ 
    FilePath = 'Mine.Library.SuperUtil.exe' 
    NoNewWindow = $true 
    Wait  = $true 
} 
if($args){ 
    $params['ArgumentList'] = $args 
} 
Start-Process @params 

使腳本容易(但顯然還是相當冗長相比批處理文件替代)

+0

它可能的維護是冗長的,但也很清楚。我喜歡!謝謝! – wonea

1

About Automatic Variables

$ ARGS
包含未申報參數和/或參數值傳遞給函數,腳本或腳本 塊的陣列。

因此,檢查if ($args.Count -ne 0)而非if ($args -ne $Null)作爲自動可變$args始終是一個陣列(永不$Null)。

相關問題