2011-03-24 31 views
12

Tôi đã thử mã này và nó có vẻ hoạt động tốt. Tuy nhiên, tôi nhận thấy nếu bạn chỉ định tên người dùng và mật khẩu cho một tài khoản không tồn tại mã tiếp tục mà không có vấn đề. Ngoài ra, nếu bạn gán một tài khoản không hợp lệ và gọi stop() và sau đó bắt đầu() IIS pool thực sự dừng lại và bắt đầu !! Hơn nữa, khi tôi đi đến InetMgr và bắt đầu, dừng lại hoặc recylce hồ bơi nó cũng dừng lại và bắt đầu mà không phàn nàn!Chỉ định Người dùng vào IIS AppPool qua Powershell

Tôi hy vọng rằng việc thêm tài khoản không hợp lệ sẽ khiến lỗi có hiệu lực cho phép tôi kiểm tra tính hợp lệ của tài khoản. Tại sao nó cư xử theo cách này?

$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

Câu hỏi chính nó là một câu trả lời tuyệt vời cho "làm thế nào để gán tên người dùng và mật khẩu cho một hồ bơi appplication sử dụng powershell." – sfuqua

Trả lời

7

Bạn phải luôn xác thực thông tin xác thực trước khi đặt nhận dạng hồ bơi. Điều này có thể được thực hiện thông qua lớp PrincipalContext .NET - đặc biệt xem xét PrincipalContext.ValidateCredentials (người dùng, mật khẩu).

mẫu:

#-- 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") 

Nếu tài khoản của địa phương thay đổi $ ct để 'Máy' contextType.

4

Bắt đầuDừng là một cái gì đó của một cái tên nhầm lẫn. Chúng thực sự phải được đặt tên là BậtTắt.

Quy trình công nhân cho hồ bơi sẽ không thực sự "bắt đầu" cho đến khi cần phục vụ yêu cầu.

Việc xác thực điểm đó diễn ra. Nếu tên người dùng và mật khẩu không hợp lệ thì bạn sẽ nhận được một phản hồi không có sẵn dịch vụ 503 và ba sự kiện (5021, 5057 và 5059) được ghi bởi WAS trong Nhật ký sự kiện hệ thống.

Không có kiểm tra trước về tính hợp lệ của danh tính của hồ bơi khi sử dụng API. Chỉ bàn điều khiển quản lý IIS thực hiện các kiểm tra này.

Các vấn đề liên quan