2008-08-22 15 views
29

Ich versuche, einige Zeichenfolge Verkettung/Formatierung zu tun, aber es setzt alle Parameter in den ersten Platzhalter.Wie übergebe ich mehrere String-Parameter an ein PowerShell-Skript?

-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 

Ausgabe

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 

Antwort

38

verlieren die Klammern und Kommata.

Aufruf Ihrer Funktion als:

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

gibt:

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 
+1

Dies, zufällig ist, wie eine ganze Reihe von Programmiersprachen funktionieren (O'Caml, Haskell). – yfeldblum

3

Paul hat recht.
In PowerShell sind Funktionsparameter nicht in Klammern eingeschlossen. (Die Methodenparameter sind immer noch vorhanden.)
Bei Ihrem ersten Aufruf wurde nur ein großes Array an die Funktion übergeben und nicht die drei separaten Parameter, die Sie haben wollten.

4

By the way, ein Powershell mit here-string könnte Ihre Funktion ein wenig leichter zu lesen als auch machen, da Sie alle " -Marken verdoppeln werden nicht benötigt:

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