여러 문자열 매개 변수를 PowerShell 스크립트에 어떻게 전달하나요?
-
09-06-2019 - |
문제
일부 문자열 연결/형식 지정을 시도 중인데 모든 매개변수가 첫 번째 자리 표시자에 배치됩니다.
암호
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
해결책
괄호와 쉼표를 잃습니다.
다음과 같이 함수를 호출합니다.
$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
다른 팁
그건 그렇고, PowerShell을 사용하여 여기 문자열 모든 함수를 두 배로 늘릴 필요가 없기 때문에 함수를 좀 더 읽기 쉽게 만들 수도 있습니다. "
-점수:
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
"@
}
폴의 말이 맞아요.
PowerShell에서는 함수 매개변수를 괄호로 묶지 않습니다.(메서드 매개변수는 그대로 유지됩니다.)
초기 호출은 원하는 세 개의 개별 매개변수가 아닌 하나의 큰 배열을 함수에 전달하는 것이었습니다.
제휴하지 않습니다 StackOverflow