[英]How to pass arguments to an inline script in PowerShell?
我是PowerShell腳本的新手。 我想知道是否有一種方法可以直接調用腳本而不創建新的.ps1
文件並將參數傳遞給它,例如
powershell -command "echo `$args[0]" 123 456
我希望echo $args[0]
作為腳本,而123 456
作為參數,但是PowerShell似乎將123 456
解釋為腳本的一部分(好像我寫了"echo `$args[0] 123 456"
)並打印
123
456
是否可以解決此問題而無需在磁盤上創建新的PowerShell腳本?
到目前為止,您已經看到了一些答案和評論,向您展示了如何按照您的要求去做。 但是我必須回應@BillStewart的評論:您的真正目的是什么?
如果要能夠執行字符串中包含的任意PowerShell,您肯定可以調用powershell.exe,就像在幾個答案和注釋中看到的那樣。 但是,如果這樣做,請確保包括-noprofile
參數以提高效率。 為了獲得更高的效率,您可以使用Invoke-Command
而不必啟動整個單獨的PowerShell環境,例如
Invoke-Command -ScriptBlock ([Scriptblock]::Create('echo $args[0]')) -arg 123, 456
另一方面,如果您想執行大塊的PowerShell( 不在字符串中,而是出於某種原因而在腳本中單獨執行),則可以簡化為:
Invoke-Command -ScriptBlock {echo $args[0]} -arg 123, 456
不過,只要有選擇,就避免將字符串作為可執行代碼 (任何語言)進行處理! 在Powershell中執行此操作的常用方法是Invoke-Expression
,我只想向您指出啟發性的文章Invoke-Expression被認為是有害的 。
這符合我的要求:
powershell -command "& {write-host `$args[0] - `$args[1] - `$args[2]}" 123 456 789
$ args數組的每個元素都是一個不同的參數,因此要訪問三個參數,您需要$ args [0],$ args [1]和$ args [2]。
您還可以使用param語句並獲取命名參數:
powershell -command "& {param(`$x,`$y); write-host `$x - `$y}" -x 123 -y 456
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.