簡體   English   中英

如何在PowerShell中將參數傳遞給嵌入式腳本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM