How do I pass multiple string parameters to a PowerShell script?

75,721

Solution 1

Lose the parentheses and commas.

Calling your function as:

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

gives:

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

Solution 2

By the way, using a PowerShell here-string might make your function a little easier to read as well, since you won't need to double up all the "-marks:

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
"@
}

Solution 3

Paul's right.
In PowerShell, function parameters are not enclosed in parenthesis. (Method parameters still are.)
Your initial call was just passing one big array to the function, rather than the three separate parameters you wanted.

Share:
75,721
Brian Lyttle
Author by

Brian Lyttle

Northern Irish expatriate living and working near Philadelphia. I'm an Escalation Engineer at Yammer which is part of the Microsoft Office Division.

Updated on November 30, 2020

Comments

  • Brian Lyttle
    Brian Lyttle over 3 years

    I am trying to do some string concatenation/formatting, but it's putting all the parameters into the first placeholder.

    Code

    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
    

    Output

    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