2013-02-26 34 views
7

Tôi đang tìm một cái gì đó giống như một kịch bản Powershell để kiểm tra nếu msdeploy được cài đặt và nếu có, phiên bảnCách tìm hiểu phiên bản webdeploy/msdeploy hiện đang được cài đặt là gì?

Tôi đã xem xét kiểm tra "c: \ Program Files \ IIS" và kiểm tra cài đặt MSDeploy ở đó, nhưng điều này luôn được đảm bảo là vị trí cài đặt?

Tôi cần điều này để hoạt động trên bất kỳ máy chủ nhất định nào

+0

'msdeploy | tìm "Phiên bản"? –

+0

@JoachimIsaksson điều này sẽ chỉ hoạt động nếu nó được thiết lập trong các biến PATH – EdmundYeung99

Trả lời

8

Khi msdeploy được cài đặt (bất kể ở đâu trong hệ thống tệp), nó sẽ thêm đường dẫn cài đặt của nó vào sổ đăng ký tại;

HKLM\Software\Microsoft\IIS Extensions\MSDeploy\<version>\InstallPath 

và thông tin phiên bản của nó;

HKLM\Software\Microsoft\IIS Extensions\MSDeploy\<version>\Version 

... trong đó <version> hiện đang 1, 2 hoặc 3 tùy thuộc vào phiên bản WebDeploy bạn đã cài đặt.

+2

Lưu ý rằng 'InstallPath' và' Version' không phải là khóa con, mà đúng hơn là các giá trị trên khóa ''. (Quan trọng nếu bạn đang xem chương trình này.) – jpmc26

4

Phụ thuộc vào những gì bạn xem là "phiên bản". Bởi tên thư mục "c: \ Program Files \ IIS \ Microsoft Web triển khai V3", phiên bản là 3, nhưng nếu bạn chạy msdeploy.exe, phiên bản là 7.X

0

Bạn có thể sử dụng PowerShell sau đoạn mã:

$installPath = $env:msdeployinstallpath 
if(!$installPath){ 
    $keysToCheck = @('hklm:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\3','hklm:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\2','hklm:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\1') 
    foreach($keyToCheck in $keysToCheck) { 
     if(Test-Path $keyToCheck){ 
      $installPath = (Get-itemproperty $keyToCheck -Name InstallPath -ErrorAction SilentlyContinue | select -ExpandProperty InstallPath -ErrorAction SilentlyContinue) 
     } 
     if($installPath) { 
      break; 
     } 
    } 
} 

Nếu bạn quấn nó vào khối kịch bản sau đó bạn có thể gọi nó trong phiên từ xa.

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