รีไซเคิลพูลแอป IIS ระยะไกลจากบรรทัดคำสั่งหรือไม่


26

เป็นไปได้ไหมที่จะรีไซเคิลแอพพูล IIS7 จากบรรทัดคำสั่งบนเครื่องอื่นหรือไม่?

ฉันพบ APPCMD ( appcmd recycle apppool my-app-pool) แต่ทำงานบนโฮสต์ที่ทำงานอยู่เท่านั้น AFAICT

ฉันได้ยินข่าวลือว่าอาจมีวิธีที่จะทำกับ Powershell แต่ฉันไม่รู้อะไรเกี่ยวกับเรื่องนั้นและดูเหมือนว่าฉันจะไม่ค่อยเก่งในเรื่องนี้

ฉันใช้ Vista / Server 2008 ถ้าเป็นเช่นนั้น

แก้ไข: ฉันพบสิ่งที่เรียกว่าWinRMที่บางคนอ้างว่าสามารถเรียกใช้ APPCMD ได้ แต่ฉันยังไม่แน่ใจอย่างแน่นอน

คำตอบ:


28

เคนถ้ามีการเรียกใช้จาก CMD คุณสามารถทำมันด้วยPSExec สิ่งนี้ไม่จำเป็นต้องติดตั้งบนเซิร์ฟเวอร์ที่คุณต้องการเข้าถึง

เพียงคัดลอกเนื้อหาของไฟล์ zipไปยังไฟล์ System32 ของคุณ (ไม่รวมไฟล์ ELUA หรือไฟล์ DLL) ของคอมพิวเตอร์ที่คุณต้องการจากระยะไกล
จากนั้นป้อน
ประเภทCMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

หากคุณไม่ได้อยู่ในโดเมนเดียวกันในบัญชีผู้ดูแลโดเมนคุณจะต้องป้อนข้อมูลรับรองสำหรับการเข้าถึงระดับผู้ดูแลระบบ สำหรับข้อมูลเพิ่มเติมเพียงพิมพ์ psexec ในบรรทัดคำสั่งโดยไม่มีอาร์กิวเมนต์


4
ตำแหน่ง AppCmd.exe (% systemroot% \ system32 \ inetsrv) ไม่ได้เป็นส่วนหนึ่งของ PATH โดยอัตโนมัติ คุณสามารถเพิ่มลงในพา ธ ของคุณหรือเรียกใช้ appcmd ด้วย: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium

1
คุณไม่ได้อ้างคำสั่งระยะไกลสำหรับ PsExec คุณส่งในชื่อคำสั่งตามด้วยข้อโต้แย้งทั้งหมดคั่นด้วยช่องว่าง ดังนั้นคำสั่งควรเป็น:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G

6

หากต้องการทำจาก PowerShell จากระยะไกลคุณต้องใช้ PowerShell remoting หรือใช้ WMI

จริงๆแล้วมันง่ายมากโดยใช้ Invoke-WMIMethod PowerShell cmdlet แต่คุณต้องระบุ-Authentication PacketPrivacy ... และถ้าคุณต้องการระบุหนังสือรับรองที่แตกต่างกันคุณสามารถทำได้โดยใช้พารามิเตอร์-Credential (Get-Credential)... นี่เป็นตัวอย่าง:

$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

ฉันเขียนฟังก์ชั่นที่ดีในการห่อสิ่งนั้นทั้งหมด: http://poshcode.org/2466


3
คุณอาจต้องเปิดใช้งาน "IIS 6 WMI Compatibility" บน IIS7 เพื่อให้สามารถใช้ namespace ของ root \ MicrosoftIISv2 ได้ Forums.iis.net/t/1158882.aspx
Brian Low

3

ถ้าบรรทัดคำสั่งคือตัวเลือกของคุณPsExecน่าจะเป็นทางออก แต่สำหรับภารกิจสำคัญที่ต้องทำภารกิจฉันไม่แนะนำ เหตุผลมีดังต่อไปนี้: PsExec มีปัญหากับการทำงานหลายครั้ง

ฉันต้องการใช้ API เพื่อวัตถุประสงค์ดังกล่าว

  1. WMI จะทำงานตามที่อธิบายไว้ที่นี่ (โซลูชันโปรดของฉัน)
  2. หรือคุณสามารถใช้ServerManager API จะช่วยให้การจัดการกลุ่มแอพลิเคชันบนเครื่องระยะไกลหากคุณเรียกใช้รหัสของคุณด้วยข้อมูลประจำตัวที่สอดคล้องกัน

2

คล้ายกับคำตอบของ @ Jeff โดยใช้ Powershell remoting มันจะเป็น:

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

จากนั้นในเซสชันโต้ตอบจากนั้น:

appcmd recycle apppool my-app-pool

เพื่อรีสตาร์ตแอป


0

รีไซเคิล AppPool ใน PowerShell

ในตัวอย่างนี้: MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.