代码之家  ›  专栏  ›  技术社区  ›  Brian Lyttle

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

  •  32
  • Brian Lyttle  · 技术社区  · 16 年前

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

    代码

    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
    
    3 回复  |  直到 8 年前
        1
  •  44
  •   Paul Roub jim    8 年前

    去掉括号和逗号。

    将函数调用为:

    $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
  •  4
  •   Emperor XLII    16 年前

    顺便说一下,使用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
  •  3
  •   Steven Murawski    16 年前

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