Tôi muốn cài đặt một bộ ứng dụng: .NET 4, snap-in, ASP.NET MVC 3, vv Làm cách nào để các ứng dụng cài đặt và trả lại giá trị xác định xem cài đặt có thành công hay không?Làm cách nào để chạy trình cài đặt Windows và nhận giá trị thành công/thất bại trong PowerShell?
Trả lời
Tùy thuộc. MSIs có thể được cài đặt bằng WMI. Đối với exes và các phương thức khác, bạn có thể sử dụng Start-Process và kiểm tra ProcessCode Process.
msi cũng có thể được cài đặt bằng msiexec.exe, MSU có thể được cài đặt bằng Wusa.exe, cả hai đều có một công tắc /quiet
, /norestart
và /forcerestart
tắc và một lựa chọn /log
để đăng nhập (ghi rõ tên tập tin).
Bạn có thể đọc thêm về các tùy chọn nếu bạn gọi họ bằng /?
Lưu ý: wusa không âm thầm khi họ thất bại, vì vậy bạn phải kiểm tra các tập tin đăng nhập hoặc eventlog để xác định thành công.
Tôi đã triển khai chính xác những gì bạn đang tìm kiếm tại dự án hiện tại của tôi. Chúng tôi cần phải tự động triển khai và instillation của n số ứng dụng trên nhiều môi trường và trung tâm dữ liệu. Các kịch bản này được sửa đổi đôi chút so với phiên bản gốc để đơn giản vì mã hoàn chỉnh của tôi đạt tới 1000 dòng nhưng chức năng cốt lõi vẫn còn nguyên vẹn. Tôi hy vọng điều này làm những gì bạn đang yêu cầu.
Chức năng PS này kéo tất cả ứng dụng từ sổ đăng ký (thêm/xóa chương trình đọc) và sau đó tìm kiếm tên ứng dụng và phiên bản hiển thị được cung cấp. Trong mã của tôi (PSM1), tôi chạy chức năng này trước khi cài đặt cho dù đó có phải là của họ và sau đó là lời nói sau để xác minh rằng nó đã được cài đặt…. Tất cả điều này có thể được gói trong một chức năng chính để quản lý kiểm soát dòng chảy.
function Confirm-AppInstall{
param($AppName,$AppVersion)
$Apps = Get-ItemProperty Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*|?{$_.DisplayName -ne $Null}|?{$_.DisplayName -ne ""}
$Apps += Get-ItemProperty Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*|?{$_.DisplayName -ne $Null}|?{$_.DisplayName -ne ""}
$Installed = $Apps|?{$_.DisplayName -eq ""}|?{$_.DisplayVersion -eq ""}|select -First 1
if($Installed -ne $null){return $true}else{return $false}
}
Hàm PS này sẽ tải tệp txt có lệnh cài đặt sẵn (một dòng trên mỗi dòng). và chạy từng dòng một cách vô tình và chờ quá trình cài đặt hoàn tất trước khi chuyển sang bước tiếp theo.
function Install-Application{
param($InstallList = "C:\Install_Apps_CMDS.txt")
$list = gc -Path $InstallList
foreach ($Command in $list){
Write-Output ("[{0}]{1}" -f (Get-Date -Format G),$call)
#Make install process wait for exit before continuing.
$p = [diagnostics.process]::Start("powershell.exe","-NoProfile -NoLogo -Command $Command")
$p.WaitForExit()
Start-Sleep -Seconds 2
#Searches for the installer exe or msi that was directly opened by powershell and gets the process id.
$ProcessID = (gwmi -Query ("select ProcessId from Win32_Process WHERE ParentProcessID = {0} AND Name = '{1}'" -f $p.Id,$ParentProcessFile)|select ProcessId).ProcessId
#waits for the exe or msi to finish installing
while ((Get-Process -Id $ProcessID -ea 0) -ne $null){
Start-Sleep -Seconds 2
$ElapsedTime = [int](New-TimeSpan -Start $P.StartTime -End (Get-Date)|select TotalSeconds).TotalSeconds
#install times out after 1000 seconds so it dosent just sit their forever this can be changed
if(2000 -lt $ElapsedTime){
Write-Output ('[{0}] The application "{1}" timed out during instilation and was forcfully exited after {2} seconds.' -f (Get-Date -Format G),$App.Name,(([int]$App.InstallTimeOut) * 60))
break
}
}
#clean up any old or hung install proccess that should not be running at this point.
Stop-Process -Name $ParentProcessName -ea 0 -Force
Stop-Process -Name msiexec -ea 0 -Force
}
}
Tệp TXT phải được định dạng như vậy ... bạn sẽ cần phải nghiên cứu cách cài đặt từng ứng dụng. một nguồn lực tốt là appdeploy.com
C:\Install.exe /q
C:\install.msi /qn TRANSFORMS='C:\transform.mst'
C:\install2.msi /qn /norestart
C:\install3.exe /quiet
Hãy cho tôi biết nếu có bất kỳ lỗi tôi đã phải sửa đổi mã hiện tại của tôi để loại bỏ các giá trị độc quyền và thực hiện điều này một chút đơn giản hơn. Tôi đang kéo các giá trị của mình từ một bảng câu trả lời XML tùy chỉnh. Nhưng mã này sẽ hoạt động như tôi đã cung cấp nó.
Nếu bạn muốn tôi thảo luận thêm về triển khai của tôi, hãy cho tôi biết và tôi có thể giải thích chi tiết hơn và cũng thêm nhiều chức năng hỗ trợ mà tôi đã triển khai.
Những câu trả lời này dường như quá phức tạp hoặc chưa hoàn chỉnh. Chạy trình cài đặt trong bảng điều khiển PowerShell có một số vấn đề. Một MSI được chạy trong Windows subsystem, vì vậy bạn không thể chỉ gọi chúng (Invoke-Expression
hoặc &
). Một số người yêu cầu để có được các lệnh đó hoạt động bằng cách đường ống đến Out-Null
hoặc Out-Host
, nhưng tôi đã không quan sát thấy rằng để hoạt động.
Phương pháp phù hợp với tôi là Start-Process
với thông số cài đặt im lặng là msiexec
.
$list =
@(
"/I `"$msi`"", # Install this MSI
"/QN", # Quietly, without a UI
"/L*V `"$ENV:TEMP\$name.log`"" # Verbose output to this log
)
Start-Process -FilePath "msiexec" -ArgumentList $list -Wait
Bạn có thể nhận được exit code từ lệnh Start-Process
và kiểm tra giá trị vượt qua/lỗi. (và đây là số exit code reference)
$p = Start-Process -FilePath "msiexec" -ArgumentList $list -Wait -PassThru
if($p.ExitCode -ne 0)
{
throw "Installation process returned error code: $($p.ExitCode)"
}
- 1. Làm thế nào để cài đặt và chạy lessc trên đầu trang của node.js và Windows?
- 2. Làm cách nào để in giá trị của cài đặt cấu hình git (core.autocrlf) trên Windows?
- 3. Cài đặt Inno: Cách đặt trình cài đặt "Chạy với tư cách quản trị viên"?
- 4. Cách cài đặt và cấu hình PowerShell?
- 5. Làm thế nào để cài đặt calabash trong windows?
- 6. Làm cách nào để đặt/baseaddress thành giá trị "tốt"?
- 7. Làm cách nào để thay đổi giá trị của giá trị Cài đặt.settings
- 8. Làm thế nào để gỡ lỗi "Cài đặt Kiểm tra thất bại" lỗi trong Mac App Pkg trình cài đặt?
- 9. Cách nhận giá trị từ các cài đặt ứng dụng?
- 10. Làm cách nào để bạn đặt giá trị kép thành "không có giá trị"
- 11. Làm thế nào để cài đặt ant contrib trong Windows?
- 12. Làm thế nào để cài đặt Flask trên Windows?
- 13. Chạy trình cài đặt khác trong cài đặt Inno Setup
- 14. Làm cách nào để cài đặt Chạy với tư cách quản trị viên
- 15. Làm cách nào để nhận giá trị biến vị trí% '% APPDATA' của Windows trong Java?
- 16. Cách đặt PATH thành giá trị biến khác với dấu cách trong tệp lô Windows
- 17. Làm cách nào để đặt cài đặt ứng dụng tại thời điểm cài đặt (thông qua lớp trình cài đặt)
- 18. Gọi exe từ PowerShell và nhận phản hồi về thành công hay thất bại
- 19. Làm cách nào để đọc giá trị app.config và đặt thuộc tính trong Wix
- 20. Làm cách nào để xử lý mở rộng biến Windows PATH khi được đặt từ PowerShell?
- 21. Không thể cài đặt Powershell Snap-in
- 22. Làm cách nào để cài đặt Windows Update để không bao giờ kiểm tra các bản cập nhật với PowerShell?
- 23. Làm cách nào để cài đặt jython trên Windows 7?
- 24. Chạy "gói cài đặt" không thành công và yêu cầu tôi chạy "gói cài đặt"
- 25. Làm thế nào để bạn chạy Vim trong Windows?
- 26. Làm cách nào để chạy tập lệnh PowerShell?
- 27. Giá trị cài đặt jQuery .offset y giá trị
- 28. Làm cách nào để đặt phiên bản trình cài đặt WiX thành phiên bản hiện tại?
- 29. Làm cách nào để cài đặt dịch vụ C# Windows mà không cần tạo trình cài đặt?
- 30. Làm thế nào để cài đặt gevent trên Windows?