2011-03-24 16 views
12

के माध्यम से IIS AppPool को उपयोगकर्ता को असाइन करें मैंने इस कोड को आजमाया और यह ठीक काम करता प्रतीत होता है। हालांकि, मैंने देखा है कि यदि आप किसी ऐसे खाते में उपयोगकर्ता नाम और पासवर्ड असाइन करते हैं जो कोड मौजूद नहीं है, तो कोड बिना किसी समस्या के जारी रहता है। इसके अतिरिक्त, यदि आप एक अमान्य खाता असाइन करते हैं और कॉल रोकते हैं() और फिर शुरू करें() IIS पूल वास्तव में बंद हो जाता है और शुरू होता है !! इसके अलावा, जब मैं InetMgr पर जाता हूं और शुरू करता हूं, पूल को रोकता हूं या फिर से चिपकाता हूं तो यह भी बंद हो जाता है और शिकायत किए बिना शुरू होता है!पावरहेल

मैं उम्मीद कर रहा था कि एक अमान्य खाता जोड़ने से मुझे एक खाते की वैधता का परीक्षण करने की अनुमति मिल जाएगी। यह इस तरह से क्यों व्यवहार करता है?

$loginfile = "d:\temp\Logins.csv" 
$csv = Import-Csv -path $loginfile 
ForEach($line in $csv){ 

    $poolid = "MyDomain\" + $line.Login; 
    Write-Host "Assigning User to Pool:" $poolid; 

    $testpool = get-item iis:\apppools\test; 
    $testpool.processModel.userName = $poolid; 
    $testpool.processModel.password = $line.Pwd; 
    $testpool.processModel.identityType = 3; 
    $testpool | Set-Item 
    $testpool.Stop(); 
    $testpool.Start(); 
    Write-Host "IIS Recycled"; 

    $testpool = get-item iis:\apppools\test; 
    write-host "New Pool User: " $testpool.processModel.userName; 
    write-host "New Pool PWd: " $testpool.processModel.password; 
} 
+5

प्रश्न स्वयं ही एक शानदार जवाब है "मैं शक्तियों का उपयोग करके एक एप्लिकेशन पूल में उपयोगकर्ता नाम और पासवर्ड कैसे असाइन करूं।" – sfuqua

उत्तर

7

पूल पहचान सेट करने से पहले आपको हमेशा अपने प्रमाण-पत्रों को सत्यापित करना चाहिए। इसे प्रिंसिपल कॉन्टेक्स्ट .NET क्लास के माध्यम से पूरा किया जा सकता है - विशेष रूप से प्रिंसिपल कॉन्टेक्स्ट। वैलिडेट क्रेडेंशियल (उपयोगकर्ता, पासवर्ड) देखें।

नमूना:

#-- Make sure the proper Assembly is loaded 
[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement") | out-null 

#-- Code to check user credentials -- put in function but here are the guts 
#-- Recommend you use SecureStrings and convert where needed 
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain 
$pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ct,"domainname" 
$isValid = $pc.ValidateCredentials("myuser","mypassword") 

स्थानीय खाता 'मशीन' ContextType करने के लिए $ सीटी को बदलते हैं।

4

प्रारंभ और बंद करो एक मिथ्या नाम के कुछ कर रहे हैं। उन्हें वास्तव में नामित किया जाना चाहिए और अक्षम करें।

पूल के लिए कार्यकर्ता प्रक्रिया वास्तव में "प्रारंभ" नहीं होगी जब तक कि उसे अनुरोध करने की आवश्यकता न हो।

यह उस समय प्रमाणीकरण होता है। यदि उपयोगकर्ता नाम और पासवर्ड अमान्य हैं तो आपको सिस्टम इवेंट लॉग में WAS द्वारा लॉग इन 503 सेवा अनुपलब्ध प्रतिक्रिया और तीन ईवेंट (5021, 5057 और 5059) मिलेगा।

एपीआई का उपयोग करते समय पूल की पहचान की वैधता की कोई आगे की जांच नहीं है। केवल आईआईएस प्रबंधन कंसोल इन चेक करता है।