如何将多个字符串参数传递给 PowerShell 脚本?

Posted

技术标签:

【中文标题】如何将多个字符串参数传递给 PowerShell 脚本?【英文标题】:How do I pass multiple string parameters to a PowerShell script? 【发布时间】:2010-09-06 13:39:01 【问题描述】:

我正在尝试进行一些字符串连接/格式化,但它会将所有参数放入第一个占位符中。

代码

function CreateAppPoolScript([string]$AppPoolName, [string]$AppPoolUser, [string]$AppPoolPass)

    # Command to create an IIS application pool
    $AppPoolScript = "cscript adsutil.vbs CREATE ""w3svc/AppPools/$AppPoolName"" IIsApplicationPool`n"
    $AppPoolScript += "cscript adsutil.vbs SET ""w3svc/AppPools/$AppPoolName/WamUserName"" ""$AppPoolUser""`n"
    $AppPoolScript += "cscript adsutil.vbs SET ""w3svc/AppPools/$AppPoolName/WamUserPass"" ""$AppPoolPass""`n"
    $AppPoolScript += "cscript adsutil.vbs SET ""w3svc/AppPools/$AppPoolName/AppPoolIdentityType"" 3"

    return $AppPoolScript

$s = CreateAppPoolScript("name", "user", "pass")
write-host $s

输出

cscript adsutil.vbs CREATE "w3svc/AppPools/name user pass" IIsApplicationPool
cscript adsutil.vbs SET "w3svc/AppPools/name user pass/WamUserName" ""
cscript adsutil.vbs SET "w3svc/AppPools/name user pass/WamUserPass" ""
cscript adsutil.vbs SET "w3svc/AppPools/name user pass/AppPoolIdentityType" 3

【问题讨论】:

【参考方案1】:

去掉括号和逗号。

调用你的函数为:

$s = CreateAppPoolScript "name" "user" "pass"

给予:

cscript adsutil.vbs CREATE "w3svc/AppPools/name" IIsApplicationPool
cscript adsutil.vbs SET "w3svc/AppPools/name/WamUserName" "user"
cscript adsutil.vbs SET "w3svc/AppPools/name/WamUserPass" "pass"
cscript adsutil.vbs SET "w3svc/AppPools/name/AppPoolIdentityType" 3

【讨论】:

【参考方案2】:

顺便说一句,使用 PowerShell here-string 也可能使您的函数更易于阅读,因为您不需要将所有 " 标记加倍:

function CreateAppPoolScript([string]$AppPoolName, [string]$AppPoolUser, [string]$AppPoolPass)

  # Command to create an IIS application pool
  return @"
cscript adsutil.vbs CREATE "w3svc/AppPools/$AppPoolName" IIsApplicationPool
cscript adsutil.vbs SET "w3svc/AppPools/$AppPoolName/WamUserName" "$AppPoolUser"
cscript adsutil.vbs SET "w3svc/AppPools/$AppPoolName/WamUserPass" "$AppPoolPass"
cscript adsutil.vbs SET "w3svc/AppPools/$AppPoolName/AppPoolIdentityType" 3
"@

【讨论】:

【参考方案3】:

保罗是对的。 在 PowerShell 中,函数参数不包含在括号中。 (方法参数仍然是。) 您最初的调用只是将一个大数组传递给函数,而不是您想要的三个单独的参数。

【讨论】:

以上是关于如何将多个字符串参数传递给 PowerShell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将开关参数传递给另一个 PowerShell 脚本?

如何使用 Terraform local-exec 将命名参数传递给 powershell 脚本?

如何将命令行参数传递给 PowerShell ps1 文件

如何将空参数传递给 msdeploy powershell deploy 命令

如何将所需的参数传递给 Powershell ISE 中的脚本?

PowerShell 将命名参数传递给 ArgumentList