【问题标题】:How do I pass multiple string parameters to a PowerShell script?如何将多个字符串参数传递给 PowerShell 脚本?
【发布时间】: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

【问题讨论】:

    标签: string powershell parameters arguments


    【解决方案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 中,函数参数不包含在括号中。 (方法参数仍然是。)
        您最初的调用只是将一个大数组传递给函数,而不是您想要的三个单独的参数。

        【讨论】:

          猜你喜欢
          • 2021-01-15
          • 2017-05-08
          • 1970-01-01
          • 2019-07-07
          • 2011-08-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-18
          相关资源
          最近更新 更多