كيف يمكنني تمرير معلمات سلسلة متعددة إلى برنامج PowerShell النصي؟

StackOverflow https://stackoverflow.com/questions/22732

سؤال

أحاول القيام ببعض تسلسل/تنسيق السلسلة، ولكنني أضع جميع المعلمات في العنصر النائب الأول.

شفرة

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، لا يتم وضع معلمات الوظيفة بين قوسين.(لا تزال معلمات الطريقة موجودة.)
كان مكالمتك الأولية مجرد تمرير مصفوفة واحدة كبيرة إلى الوظيفة، بدلاً من المعلمات الثلاثة المنفصلة التي تريدها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top