powershell:带有变量参数的脚本

发布于 2024-09-12 07:04:36 字数 374 浏览 6 评论 0原文

我想从另一个脚本中启动 script1.ps1 ,并将参数存储在变量中。

$para = "-Name name -GUI -desc ""这是描述"" -dryrun"
。 .\script1.ps1 $para

我在 script1.ps1 中获得的参数如下所示:

args[0]: -Name name -GUI -desc "这是描述" -dryrun

所以这不是我想要得到的。 有谁知道如何解决这个问题?
thx lepi

PS:不确定该变量将包含多少个参数以及它们将如何排名。

I want to start a script1.ps1 out of an other script with arguments stored in a variable.

$para = "-Name name -GUI -desc ""this is the description"" -dryrun"
. .\script1.ps1 $para

The args I get in script1.ps1 looks like:

args[0]: -Name name -GUI -desc "this is the description" -dryrun

so this is not what I wanted to get.
Has anyone a idea how to solve this problem?
thx lepi

PS: It is not sure how many arguments the variable will contain and how they are going to be ranked.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅浅 2024-09-19 07:04:36

您需要使用splatting 运算符。查看 powershell 团队博客 或访问 stackoverflow.com

这是一个示例:

@'
param(
  [string]$Name,
  [string]$Street,
  [string]$FavouriteColor
)
write-host name $name
write-host Street $Street
write-host FavouriteColor $FavouriteColor
'@ | Set-Content splatting.ps1

# you may pass an array (parameters are bound by position)
$x = 'my name','Corner'
.\splatting.ps1 @x

# or hashtable, basically the same as .\splatting -favouritecolor blue -name 'my name'
$x = @{FavouriteColor='blue'
  Name='my name'
}
.\splatting.ps1 @x

在您的情况下,您需要这样调用它:

$para = @{Name='name'; GUI=$true; desc='this is the description'; dryrun=$true}
. .\script1.ps1 @para

You need to use splatting operator. Look at powershell team blog or here at stackoverflow.com.

Here is an example:

@'
param(
  [string]$Name,
  [string]$Street,
  [string]$FavouriteColor
)
write-host name $name
write-host Street $Street
write-host FavouriteColor $FavouriteColor
'@ | Set-Content splatting.ps1

# you may pass an array (parameters are bound by position)
$x = 'my name','Corner'
.\splatting.ps1 @x

# or hashtable, basically the same as .\splatting -favouritecolor blue -name 'my name'
$x = @{FavouriteColor='blue'
  Name='my name'
}
.\splatting.ps1 @x

In your case you need to call it like this:

$para = @{Name='name'; GUI=$true; desc='this is the description'; dryrun=$true}
. .\script1.ps1 @para
耶耶耶 2024-09-19 07:04:36

使用 Invoke-Expression 是另一种选择:

$para = '-Name name -GUI -desc "this is the description" -dryrun'
Invoke-Expression -Command ".\script1.ps1 $para"

Using Invoke-Expression is another aternative:

$para = '-Name name -GUI -desc "this is the description" -dryrun'
Invoke-Expression -Command ".\script1.ps1 $para"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文