2008-08-22 33 views
29

Tôi đang cố gắng làm một số chuỗi nối/định dạng, nhưng nó đặt tất cả các tham số vào phần giữ chỗ đầu tiên.Làm cách nào để chuyển nhiều tham số chuỗi cho tập lệnh PowerShell?

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 

Trả lời

38

Thua các dấu ngoặc đơn và dấu phẩy.

Gọi chức năng của bạn như:

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

cho: right

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

Đây là, tình cờ, số lượng ngôn ngữ lập trình hoạt động như thế nào (O'Caml, Haskell). – yfeldblum

3

Paul.
Trong PowerShell, tham số chức năng không được đính kèm trong dấu ngoặc đơn. (Các thông số phương pháp vẫn còn.)
Cuộc gọi ban đầu của bạn vừa chuyển một mảng lớn đến hàm, thay vì ba tham số riêng biệt mà bạn muốn.

4

Bằng cách này, sử dụng một PowerShell here-string có thể làm cho chức năng của bạn dễ dàng hơn một chút để đọc là tốt, vì bạn sẽ không cần phải tăng gấp đôi lên tất cả các " -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 
"@ 
} 
Các vấn đề liên quan