繁体   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