2013-08-13 26 views
9

Tôi đang cố gắng viết kịch bản với PowerShell hành động thêm người dùng IIS AppPool \ ASP.NET v4.0 vào Người dùng theo dõi hiệu suất nhóm , để có thể sử dụng các bộ đếm hiệu suất tùy chỉnh từ một ứng dụng ASP.NET. Nhưng, tôi không thể tìm ra cách để giải quyết người dùng ASP.NET được tạo tự động bằng cách sử dụng ADSI.Thêm IIS AppPool ASP.NET v4.0 vào nhóm cửa sổ cục bộ

này làm việc cho tôi:

$computer = $env:COMPUTERNAME; 

$user = [ADSI]"WinNT://$computer/Administrator,user" 
$groupToAddTo = "TestGroup" 

$parent = [ADSI]"WinNT://$computer/$groupToAddTo,group" 
$parent.Add($user.Path) 

Tuy nhiên, tôi không thể tìm ra cách để tìm người sử dụng ASP.NET v4.0:

$computer = $env:COMPUTERNAME; 
# $user = [ADSI]"WinNT://$computer/IIS AppPool/ASP.NET v4.0,user" # <-- Doesn't work 

$groupToAddTo = "TestGroup" 

$parent = [ADSI]"WinNT://$computer/$groupToAddTo,group" 
$parent.Add($user.Path) 

Bất kỳ manh mối về cách giải quyết mà sử dụng ADSI? Hoặc, bất kỳ cách nào tuyệt vời khác để đạt được những gì tôi muốn bằng cách sử dụng Powershell hoặc các công cụ dòng lệnh khác? GUI hoạt động tốt, tuy nhiên, tự động hóa là chìa khóa ở đây.

+3

Nó không phải là powerhell, nhưng sau đây hoạt động từ một dòng lệnh: 'net localgroup" Performance Monitor Người dùng "" IIS AppPool \ ASP.NET v4.0 "/ ADD' – Artomegus

+0

Tất nhiên! Cảm ơn rất nhiều. Tôi biết điều này, tại sao tôi không nghĩ về nó? Tôi vẫn muốn biết làm thế nào để làm điều đó với ADSI tinh khiết, nhưng điều này giải quyết vấn đề hiện tại của tôi ngay bây giờ. –

+1

Thật không may "net localgroup" chỉ hoạt động nếu tên nhóm ứng dụng là 20 ký tự trở xuống. Tôi cho rằng điều này là do độ dài tối đa của tên người dùng thông thường là 20 ký tự. Nếu tên hồ bơi dài hơn, nó sẽ hiển thị hướng dẫn sử dụng và không làm gì cả. Nếu bạn cố gắng chỉ cung cấp 20 ký tự đầu tiên của tên nhóm, nó sẽ cho bạn biết người dùng hoặc nhóm không tồn tại. –

Trả lời

12

Các kịch bản PowerShell sau sẽ bổ sung các hồ bơi ứng dụng "ASP.NET v4.0" vào nhóm "Người dùng Performance Monitor"

$group = [ADSI]"WinNT://$Env:ComputerName/Performance Monitor Users,group" 
$ntAccount = New-Object System.Security.Principal.NTAccount("IIS APPPOOL\ASP.NET v4.0") 
$strSID = $ntAccount.Translate([System.Security.Principal.SecurityIdentifier]) 
$user = [ADSI]"WinNT://$strSID" 
$group.Add($user.Path) 

Không giống như các lệnh net localgroup, kịch bản này sẽ làm việc tốt với những cái tên hồ bơi ứng dụng dài hơn 20 ký tự.

+2

Điều này sẽ được chấp nhận làm câu trả lời. – JamesQMurphy

+0

@ErikABrandstadmoen Bạn có thể chấp nhận điều này làm câu trả lời không? Cảm ơn. –