Tái chế nhóm ứng dụng IIS từ xa từ dòng lệnh?


26

Có thể tái chế nhóm ứng dụng IIS7 từ dòng lệnh trên một máy khác không?

Tôi đã tìm thấy APPCMD ( appcmd recycle apppool my-app-pool), nhưng nó chỉ hoạt động trên máy chủ mà nó chạy, AFAICT.

Tôi đã nghe một tin đồn có thể có một cách để làm điều đó với Powershell, nhưng tôi không biết gì về điều đó, và rõ ràng là tôi không giỏi trong việc googling cho nó.

Tôi đang sử dụng Vista / Server 2008, nếu có vấn đề.

EDIT: Tôi đã tìm thấy một thứ gọi là WinRM mà ai đó tuyên bố có thể tự chạy APPCMD, nhưng tôi không chắc chắn chính xác như thế nào.

Câu trả lời:


28

Ken, nếu điều này được chạy từ CMD, bạn có thể làm điều đó với PSExec . Điều này không yêu cầu cài đặt trên máy chủ bạn muốn truy cập.

Chỉ cần sao chép nội dung của zip vào tệp System32 của bạn (không bao gồm ELUA hoặc tệp DLL) của máy tính bạn muốn điều khiển từ xa TỪ.
Sau đó nhập
loại CMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Nếu bạn không ở cùng tên miền trên tài khoản quản trị viên tên miền, bạn sẽ cần nhập thông tin đăng nhập để truy cập quản trị. Để biết thêm thông tin, chỉ cần nhập psexec trong một dòng lệnh không có đối số.


4
Vị trí AppCmd.exe (% systemroot% \ system32 \ inetsrv) không phải là một phần của PATH tự động. Bạn có thể thêm nó vào đường dẫn của mình hoặc chạy appcmd với: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium

1
Bạn không trích dẫn lệnh từ xa cho PsExec; bạn gửi tên lệnh theo sau là các đối số được phân tách bằng dấu cách. Vì vậy, lệnh phải là:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G

6

Để thực hiện điều đó từ PowerShell, bạn cần sử dụng từ xa PowerShell hoặc sử dụng WMI.

Thực sự rất đơn giản khi sử dụng lệnh ghép ngắn Invoke-WMIMethod PowerShell, nhưng bạn phải chỉ định -Authentication PacketPrivacy ... và nếu bạn cần chỉ định thông tin đăng nhập khác nhau, bạn có thể làm điều đó với tham số -Credential (Get-Credential)... đây là một ví dụ:

$pc = "serverName"

## List the app pools, note the __RELPATH of the one you want to kill:
Get-WMIObject IISApplicationPool 
              -Computer $pc 
              -Namespace root\MicrosoftIISv2 
              -Authentication PacketPrivacy 

## Recycle a specific one:
$Name = "W3SVC/APPPOOLS/ASP.NET v4.0 Classic"  ## This is the Name from above
$Path = "IISApplicationPool.Name='$Name'"      ## This is the __RELPATH

Invoke-WMIMethod Recycle 
                 -Path $Path 
                 -Computer $pc 
                 -Namespace root\MicrosoftIISv2 
                 -Authentication PacketPrivacy

Tôi đã viết một chức năng hay để gói tất cả những thứ đó lên: http://posehcode.org/2466


3
Bạn có thể cần bật "Tương thích WMI IIS 6" trên IIS7 để có sẵn không gian tên root \ MicrosoftIISv2. forum.iis.net/t/1158882.aspx
Brian Low

3

Nếu dòng lệnh là lựa chọn của bạn, PsExec dường như là giải pháp, nhưng đối với các nhiệm vụ quan trọng, tôi sẽ không đề xuất nó. Lý do là như sau: PsExec có vấn đề với nhiều lần chạy.

Tôi thích sử dụng API cho các mục đích như vậy.

  1. WMI sẽ thực hiện công việc như được mô tả ở đây (giải pháp yêu thích của tôi).
  2. Ngoài ra, bạn có thể sử dụng API ServerManager . Nó cho phép quản lý nhóm ứng dụng trên máy từ xa nếu bạn chạy mã của mình với thông tin đăng nhập tương ứng.

2

Tương tự như câu trả lời của @ Jeff, với việc từ xa Powershell sẽ là:

Enter-PSSession -ComputerName <your server> -Credential <username, or (Get-Credential)>

Sau đó, trong phiên tương tác, sau đó:

appcmd recycle apppool my-app-pool

để khởi động lại nhóm ứng dụng.


0

Tái chế AppPool trong PowerShell

Trong ví dụ này: MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.