Daur ulang kumpulan aplikasi IIS jarak jauh dari baris perintah?

26

Apakah mungkin untuk mendaur ulang kumpulan aplikasi IIS7 dari baris perintah, pada mesin yang berbeda?

Saya telah menemukan APPCMD ( appcmd recycle apppool my-app-pool), tetapi hanya beroperasi pada host yang dijalankan, AFAICT.

Saya mendengar desas-desus bahwa mungkin ada cara untuk melakukannya dengan Powershell, tetapi saya tidak tahu apa-apa tentang itu, dan saya tampaknya tidak pandai googling untuk itu.

Saya menggunakan Vista / Server 2008, jika itu penting.

EDIT: Saya menemukan sesuatu yang disebut WinRM yang diklaim seseorang dapat menjalankan APPCMD sendiri, tetapi saya belum tahu pasti bagaimana caranya.


sumber

Jawaban:

28

Ken, jika ini dijalankan dari CMD Anda bisa melakukannya dengan PSExec . Ini tidak memerlukan instalasi di server yang ingin Anda akses.

Cukup salin isi zip ke file System32 Anda (jangan menyertakan ELUA atau file DLL) dari komputer yang Anda ingin remote DARI.
Kemudian masukkan
tipe CMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Jika Anda tidak berada di domain yang sama pada akun admin domain, Anda harus memasukkan kredensial untuk akses administratif. Untuk informasi lebih lanjut cukup ketik psexec di baris perintah tanpa argumen.

Jeff
sumber
4
Lokasi AppCmd.exe (% systemroot% \ system32 \ inetsrv) bukan bagian dari PATH secara otomatis. Anda dapat menambahkannya ke jalur Anda atau menjalankan appcmd dengan: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
Anda tidak mengutip perintah jarak jauh untuk PsExec; Anda mengirim nama perintah diikuti oleh argumen yang dipisahkan oleh spasi. Jadi perintahnya adalah:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G
6

Untuk melakukannya dari jarak jauh dari PowerShell, Anda harus menggunakan PowerShell remoting, atau menggunakan WMI.

Ini sebenarnya sangat sederhana menggunakan cmdlet Invoke-WMIMethod PowerShell, tetapi Anda harus menentukan -Authentication PacketPrivacy ... dan jika Anda perlu menentukan kredensial yang berbeda, Anda dapat melakukannya dengan parameter -Credential (Get-Credential)... berikut ini contohnya:

$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

Saya menulis fungsi yang bagus untuk menyelesaikan semuanya: http://poshcode.org/2466

Jaykul
sumber
3
Anda mungkin perlu mengaktifkan "Kompatibilitas IIS 6 WMI" di IIS7 agar root \ MicrosoftIISv2 namespace tersedia. forums.iis.net/t/1158882.aspx
Brian Low
3

Jika baris perintah adalah pilihan Anda, PsExec tampaknya menjadi solusi, tetapi untuk tugas-tugas penting misi saya tidak akan merekomendasikannya. Alasannya adalah sebagai berikut: PsExec memiliki masalah dengan beberapa kali proses.

Saya lebih suka menggunakan API untuk tujuan seperti itu.

  1. WMI akan melakukan pekerjaan seperti yang dijelaskan di sini (solusi favorit saya).
  2. Atau Anda dapat menggunakan ServerManager API. Ini memungkinkan untuk mengelola kumpulan aplikasi pada mesin jarak jauh jika Anda menjalankan kode Anda dengan kredensial yang sesuai.
Eugene
sumber
2

Mirip dengan jawaban @ Jeff, dengan Powershell remoting akan menjadi:

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

Kemudian di sesi interaktif, lalu:

appcmd recycle apppool my-app-pool

untuk memulai kembali kumpulan aplikasi.

Faktor Mystic
sumber
0

Daur ulang AppPool di PowerShell

Dalam contoh ini: MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()
u-it
sumber