Skype for Desktop – 8.51.0.86

email me

Download

New Skype for Desktop (Windows) is available here:

https://go.skype.com/windows.desktop.download mirror

 

Size

65.4 MB


Silent Install

setup.exe /VERYSILENT /SP- /NOCANCEL /NORESTART /SUPPRESSMSGBOXES /NOLAUNCH -ms


Install Location (32 Folders, 152 Files, 239 MB)

C:\Program Files (x86)\Microsoft\Skype for Desktop


Silent Uninstall

“C:\Program Files (x86)\Microsoft\Skype for Desktop\unins000.exe” /SILENT


Registry

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Skype_is1]
“Inno Setup: Setup Version”=”5.6.1 (u)”
“Inno Setup: App Path”=”C:\\Program Files (x86)\\Microsoft\\Skype for Desktop”
“InstallLocation”=”C:\\Program Files (x86)\\Microsoft\\Skype for Desktop\\”
“Inno Setup: Icon Group”=”Skype”
“Inno Setup: User”=”Demo99”
“Inno Setup: Language”=”en”
“DisplayName”=”Skype version 8.51”
“DisplayIcon”=”C:\\Program Files (x86)\\Microsoft\\Skype for Desktop\\Skype.exe”
“UninstallString”=”\”C:\\Program Files (x86)\\Microsoft\\Skype for Desktop\\unins000.exe\””
“QuietUninstallString”=”\”C:\\Program Files (x86)\\Microsoft\\Skype for Desktop\\unins000.exe\” /SILENT”
“DisplayVersion”=”8.51”
“Publisher”=”Skype Technologies S.A.”
“URLInfoAbout”=”http://www.skype.com/”
“HelpLink”=”https://support.skype.com/”
“URLUpdateInfo”=”www.skype.com/download-skype/”
“NoModify”=dword:00000001
“NoRepair”=dword:00000001
“InstallDate”=”20190820”
“MajorVersion”=dword:00000008
“MinorVersion”=dword:00000033
“VersionMajor”=dword:00000008
“VersionMinor”=dword:00000033
“EstimatedSize”=dword:0003603d

 

Notes

Download Skype for Mac


Disable Skype auto updates (for Windows and Macs)


Skype uses asar compression

C:\Program Files (x86)\Microsoft\Skype for Desktop\resources\app.asar

 

tags: MrNetTek

VLC Player – 3.0.8

email me

Download

A new VLC Player is available here:

https://get.videolan.org/vlc/3.0.8/win64/vlc-3.0.8-win64.exe  |  all


Size

40.1 MB


Silent Install

setup.exe /S /V/qn


Install Location (244 Folders, 579 Files, 169 MB)

C:\Program Files\VideoLAN\VLC


Silent Uninstall

“C:\Program Files\VideoLAN\VLC\uninstall.exe” /S /V/qn


Registry

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player]
“DisplayName”=”VLC media player”
“UninstallString”=”\”C:\\Program Files\\VideoLAN\\VLC\\uninstall.exe\””
“InstallLocation”=”C:\\Program Files\\VideoLAN\\VLC”
“DisplayIcon”=”C:\\Program Files\\VideoLAN\\VLC\\vlc.exe”
“DisplayVersion”=”3.0.8”
“URLInfoAbout”=”https://www.videolan.org/”
“Publisher”=”VideoLAN”
“VersionMajor”=”3”
“VersionMinor”=”0”
“MementoSectionUsed”=””
“MementoSection_SEC01″=dword:00000001
“MementoSection_SEC02a”=dword:00000001
“MementoSection_SEC02b”=dword:00000001
“MementoSection_SEC03″=dword:00000001
“MementoSection_SEC04″=dword:00000001
“MementoSection_SEC05″=dword:00000001
“MementoSection_SEC_EXT_Audio_.3ga”=dword:00000001
“MementoSection_SEC_EXT_Audio_.669″=dword:00000001
“MementoSection_SEC_EXT_Audio_.a52″=dword:00000001
“MementoSection_SEC_EXT_Audio_.aac”=dword:00000001
“MementoSection_SEC_EXT_Audio_.ac3″=dword:00000001
“MementoSection_SEC_EXT_Audio_.adt”=dword:00000001
“MementoSection_SEC_EXT_Audio_.adts”=dword:00000001
“MementoSection_SEC_EXT_Audio_.aif”=dword:00000001
“MementoSection_SEC_EXT_Audio_.aifc”=dword:00000001
“MementoSection_SEC_EXT_Audio_.aiff”=dword:00000001
“MementoSection_SEC_EXT_Audio_.au”=dword:00000001
“MementoSection_SEC_EXT_Audio_.amr”=dword:00000001
“MementoSection_SEC_EXT_Audio_.aob”=dword:00000001
“MementoSection_SEC_EXT_Audio_.ape”=dword:00000001
“MementoSection_SEC_EXT_Audio_.caf”=dword:00000001
“MementoSection_SEC_EXT_Audio_.cda”=dword:00000001
“MementoSection_SEC_EXT_Audio_.dts”=dword:00000001
“MementoSection_SEC_EXT_Audio_.flac”=dword:00000001
“MementoSection_SEC_EXT_Audio_.it”=dword:00000001
“MementoSection_SEC_EXT_Audio_.m4a”=dword:00000001
“MementoSection_SEC_EXT_Audio_.m4p”=dword:00000001
“MementoSection_SEC_EXT_Audio_.mid”=dword:00000001
“MementoSection_SEC_EXT_Audio_.mka”=dword:00000001
“MementoSection_SEC_EXT_Audio_.mlp”=dword:00000001
“MementoSection_SEC_EXT_Audio_.mod”=dword:00000001
“MementoSection_SEC_EXT_Audio_.mp1″=dword:00000001
“MementoSection_SEC_EXT_Audio_.mp2″=dword:00000001
“MementoSection_SEC_EXT_Audio_.mp3″=dword:00000001
“MementoSection_SEC_EXT_Audio_.mpc”=dword:00000001
“MementoSection_SEC_EXT_Audio_.mpga”=dword:00000001
“MementoSection_SEC_EXT_Audio_.oga”=dword:00000001
“MementoSection_SEC_EXT_Audio_.oma”=dword:00000001
“MementoSection_SEC_EXT_Audio_.opus”=dword:00000001
“MementoSection_SEC_EXT_Audio_.qcp”=dword:00000001
“MementoSection_SEC_EXT_Audio_.ra”=dword:00000001
“MementoSection_SEC_EXT_Audio_.rmi”=dword:00000001
“MementoSection_SEC_EXT_Audio_.snd”=dword:00000001
“MementoSection_SEC_EXT_Audio_.s3m”=dword:00000001
“MementoSection_SEC_EXT_Audio_.spx”=dword:00000001
“MementoSection_SEC_EXT_Audio_.tta”=dword:00000001
“MementoSection_SEC_EXT_Audio_.voc”=dword:00000001
“MementoSection_SEC_EXT_Audio_.vqf”=dword:00000001
“MementoSection_SEC_EXT_Audio_.w64″=dword:00000001
“MementoSection_SEC_EXT_Audio_.wav”=dword:00000001
“MementoSection_SEC_EXT_Audio_.wma”=dword:00000001
“MementoSection_SEC_EXT_Audio_.wv”=dword:00000001
“MementoSection_SEC_EXT_Audio_.xa”=dword:00000001
“MementoSection_SEC_EXT_Audio_.xm”=dword:00000001
“MementoSection_SEC_EXT_Video_.3g2″=dword:00000001
“MementoSection_SEC_EXT_Video_.3gp”=dword:00000001
“MementoSection_SEC_EXT_Video_.3gp2″=dword:00000001
“MementoSection_SEC_EXT_Video_.3gpp”=dword:00000001
“MementoSection_SEC_EXT_Video_.amv”=dword:00000001
“MementoSection_SEC_EXT_Video_.asf”=dword:00000001
“MementoSection_SEC_EXT_Video_.avi”=dword:00000001
“MementoSection_SEC_EXT_Video_.bik”=dword:00000001
“MementoSection_SEC_EXT_Video_.divx”=dword:00000001
“MementoSection_SEC_EXT_Video_.drc”=dword:00000001
“MementoSection_SEC_EXT_Video_.dv”=dword:00000001
“MementoSection_SEC_EXT_Video_.dvr-ms”=dword:00000001
“MementoSection_SEC_EXT_Video_.evo”=dword:00000001
“MementoSection_SEC_EXT_Video_.f4v”=dword:00000001
“MementoSection_SEC_EXT_Video_.flv”=dword:00000001
“MementoSection_SEC_EXT_Video_.gvi”=dword:00000001
“MementoSection_SEC_EXT_Video_.gxf”=dword:00000001
“MementoSection_SEC_EXT_Video_.m1v”=dword:00000001
“MementoSection_SEC_EXT_Video_.m2t”=dword:00000001
“MementoSection_SEC_EXT_Video_.m2v”=dword:00000001
“MementoSection_SEC_EXT_Video_.m2ts”=dword:00000001
“MementoSection_SEC_EXT_Video_.m4v”=dword:00000001
“MementoSection_SEC_EXT_Video_.mkv”=dword:00000001
“MementoSection_SEC_EXT_Video_.mov”=dword:00000001
“MementoSection_SEC_EXT_Video_.mp2v”=dword:00000001
“MementoSection_SEC_EXT_Video_.mp4″=dword:00000001
“MementoSection_SEC_EXT_Video_.mp4v”=dword:00000001
“MementoSection_SEC_EXT_Video_.mpa”=dword:00000001
“MementoSection_SEC_EXT_Video_.mpe”=dword:00000001
“MementoSection_SEC_EXT_Video_.mpeg”=dword:00000001
“MementoSection_SEC_EXT_Video_.mpeg1″=dword:00000001
“MementoSection_SEC_EXT_Video_.mpeg2″=dword:00000001
“MementoSection_SEC_EXT_Video_.mpeg4″=dword:00000001
“MementoSection_SEC_EXT_Video_.mpg”=dword:00000001
“MementoSection_SEC_EXT_Video_.mpv2″=dword:00000001
“MementoSection_SEC_EXT_Video_.mts”=dword:00000001
“MementoSection_SEC_EXT_Video_.mtv”=dword:00000001
“MementoSection_SEC_EXT_Video_.mxf”=dword:00000001
“MementoSection_SEC_EXT_Video_.nsv”=dword:00000001
“MementoSection_SEC_EXT_Video_.nuv”=dword:00000001
“MementoSection_SEC_EXT_Video_.ogg”=dword:00000001
“MementoSection_SEC_EXT_Video_.ogm”=dword:00000001
“MementoSection_SEC_EXT_Video_.ogx”=dword:00000001
“MementoSection_SEC_EXT_Video_.ogv”=dword:00000001
“MementoSection_SEC_EXT_Video_.rec”=dword:00000001
“MementoSection_SEC_EXT_Video_.rm”=dword:00000001
“MementoSection_SEC_EXT_Video_.rmvb”=dword:00000001
“MementoSection_SEC_EXT_Video_.rpl”=dword:00000001
“MementoSection_SEC_EXT_Video_.thp”=dword:00000001
“MementoSection_SEC_EXT_Video_.tod”=dword:00000001
“MementoSection_SEC_EXT_Video_.tp”=dword:00000001
“MementoSection_SEC_EXT_Video_.ts”=dword:00000001
“MementoSection_SEC_EXT_Video_.tts”=dword:00000001
“MementoSection_SEC_EXT_Video_.vob”=dword:00000001
“MementoSection_SEC_EXT_Video_.vro”=dword:00000001
“MementoSection_SEC_EXT_Video_.webm”=dword:00000001
“MementoSection_SEC_EXT_Video_.wmv”=dword:00000001
“MementoSection_SEC_EXT_Video_.wtv”=dword:00000001
“MementoSection_SEC_EXT_Video_.xesc”=dword:00000001
“MementoSection_SEC_EXT_Other_.asx”=dword:00000001
“MementoSection_SEC_EXT_Other_.b4s”=dword:00000001
“MementoSection_SEC_EXT_Other_.cue”=dword:00000001
“MementoSection_SEC_EXT_Other_.ifo”=dword:00000001
“MementoSection_SEC_EXT_Other_.m3u”=dword:00000001
“MementoSection_SEC_EXT_Other_.m3u8″=dword:00000001
“MementoSection_SEC_EXT_Other_.pls”=dword:00000001
“MementoSection_SEC_EXT_Other_.ram”=dword:00000001
“MementoSection_SEC_EXT_Other_.sdp”=dword:00000001
“MementoSection_SEC_EXT_Other_.vlc”=dword:00000001
“MementoSection_SEC_EXT_Other_.wvx”=dword:00000001
“MementoSection_SEC_EXT_Other_.xspf”=dword:00000001
“MementoSection_SEC_EXT_SKIN_.vlt”=dword:00000000
“MementoSection_SEC_EXT_SKIN_.wsz”=dword:00000000
“MementoSection_SEC_EXT_Other_.iso”=dword:00000000
“MementoSection_SEC_EXT_Other_.zip”=dword:00000000
“MementoSection_SEC_EXT_Other_.rar”=dword:00000000
“MementoSection_SEC07″=dword:00000001
“MementoSection_SEC08″=dword:00000000


Inside the setup EXE
(using 7zip)

 

 

Notes

Download VLC for Mac

https://wiki.videolan.org/Documentation:Documentation

/L=1033 – Set language to English

/S – Install silently

/NCRC – Skip CRC Check

 

 

Use VLC as a Video Downloader for YouTube

1. Click on Media > Open Network stream.

2. Paste the YouTube URL and click the Play button in the player.

3. VLC Media Player starts streaming the video. Click Tools > Codec Information > at the bottom of the window you will see a Location box.

4. Copy the long URL in the box and paste this into your browser’s address bar. The browser will now start playing the video file. You can download the video file to your desktop by doing a Save video as with a right-click on the video.

 

tags: VLC automation, MrNetTek

Adobe Acrobat Reader – 19.012.20036

email me

Download

Enterprise download requires free Adobe registration: AcroRdrDC1901220036_en_US.exe


Size

166 MB


Silent Install

Extract contents of AcroRdrDC1901220036_en_US.exe using 7zip

Use Acrobat Customization Wizard DC to create custom setup

Package and run: setup.exe

* packaging can be as simple as adding source files to a self-extracting EXE (using WinRar)

 

Install Location (1475 Folders, 2641 Files, 509 MB)

C:\Program Files (x86)\Adobe\Acrobat Reader DC


Silent Uninstall

MsiExec.exe /x{AC76BA86-7AD7-1033-7B44-AC0F074E4100} /qn /norestart


Registry

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{AC76BA86-7AD7-1033-7B44-AC0F074E4100}]
“AuthorizedCDFPrefix”=””
“Comments”=”

“Contact”=”Customer Support”
“DisplayVersion”=”19.012.20036”
“HelpLink”=hex(2):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,77,00,77,00,77,00,\
2e,00,61,00,64,00,6f,00,62,00,65,00,2e,00,63,00,6f,00,6d,00,2f,00,73,00,75,\
00,70,00,70,00,6f,00,72,00,74,00,2f,00,6d,00,61,00,69,00,6e,00,2e,00,68,00,\
74,00,6d,00,6c,00,00,00
“HelpTelephone”=””
“InstallDate”=”20190816”
“InstallLocation”=”C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\”
“InstallSource”=”c:\\setup\\”
“ModifyPath”=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,78,\
00,65,00,20,00,2f,00,49,00,7b,00,41,00,43,00,37,00,36,00,42,00,41,00,38,00,\
36,00,2d,00,37,00,41,00,44,00,37,00,2d,00,31,00,30,00,33,00,33,00,2d,00,37,\
00,42,00,34,00,34,00,2d,00,41,00,43,00,30,00,46,00,30,00,37,00,34,00,45,00,\
34,00,31,00,30,00,30,00,7d,00,00,00
“NoRepair”=dword:00000001
“Publisher”=”Adobe Systems Incorporated”
“Readme”=hex(2):43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,20,\
00,46,00,69,00,6c,00,65,00,73,00,20,00,28,00,78,00,38,00,36,00,29,00,5c,00,\
41,00,64,00,6f,00,62,00,65,00,5c,00,41,00,63,00,72,00,6f,00,62,00,61,00,74,\
00,20,00,52,00,65,00,61,00,64,00,65,00,72,00,20,00,44,00,43,00,5c,00,52,00,\
65,00,61,00,64,00,6d,00,65,00,2e,00,68,00,74,00,6d,00,00,00
“Size”=””
“EstimatedSize”=dword:0007fd49
“UninstallString”=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,\
78,00,65,00,20,00,2f,00,49,00,7b,00,41,00,43,00,37,00,36,00,42,00,41,00,38,\
00,36,00,2d,00,37,00,41,00,44,00,37,00,2d,00,31,00,30,00,33,00,33,00,2d,00,\
37,00,42,00,34,00,34,00,2d,00,41,00,43,00,30,00,46,00,30,00,37,00,34,00,45,\
00,34,00,31,00,30,00,30,00,7d,00,00,00
“URLInfoAbout”=”http://www.adobe.com”
“URLUpdateInfo”=”http://helpx.adobe.com/reader.html”
“VersionMajor”=dword:00000013
“VersionMinor”=dword:0000000c
“WindowsInstaller”=dword:00000001
“Version”=dword:130c4e44
“Language”=dword:00000409
“DisplayName”=”Adobe Acrobat Reader DC”

 

Notes

AcroRdrDCUpd1901220036.msp

 

Adobe MSI and Cmd-line examples

 

tags: MrNetTek

Amazon Workspaces Client – 2.5.9

email me

Description

Amazon WorkSpaces enables you to provision virtual, cloud-based Microsoft Windows or Amazon Linux desktops for your users, known as WorkSpaces. Amazon WorkSpaces eliminates the need to procure and deploy hardware or install complex software. You can quickly add or remove users as your needs change. Users can access their virtual desktops from multiple devices or web browsers. Access your personal Windows environment from your computer using the Amazon Workspaces Client. more…


Download

New Amazon Workspaces is available here:

https://d2td7dqidlhjx7.cloudfront.net/prod/global/windows/Amazon+WorkSpaces.msi mirror

 

Size

40.9 MB


Silent Install

setup.msi /quiet /norestart


Install Location (10 folders, 113 files, 98.7 MB)

C:\Program Files (x86)\Amazon Web Services, Inc\Amazon WorkSpaces\


Silent Uninstall

msiexec /x{04104EB8-125A-4640-9414-ECC098361F94} /qn /norestart


Registry

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{04104EB8-125A-4640-9414-ECC098361F94}]
“AuthorizedCDFPrefix”=””
“Comments”=””
“Contact”=””
“DisplayVersion”=”2.5.9”
“HelpLink”=””
“HelpTelephone”=””
“InstallDate”=”20190816”
“InstallLocation”=””
“InstallSource”=”C:\\Users\\Demo99\\Downloads\\”
“ModifyPath”=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,78,\
00,65,00,20,00,2f,00,58,00,7b,00,30,00,34,00,31,00,30,00,34,00,45,00,42,00,\
38,00,2d,00,31,00,32,00,35,00,41,00,2d,00,34,00,36,00,34,00,30,00,2d,00,39,\
00,34,00,31,00,34,00,2d,00,45,00,43,00,43,00,30,00,39,00,38,00,33,00,36,00,\
31,00,46,00,39,00,34,00,7d,00,00,00
“NoModify”=dword:00000001
“Publisher”=”Amazon Web Services, Inc”
“Readme”=””
“Size”=””
“EstimatedSize”=dword:00018b03
“UninstallString”=hex(2):4d,00,73,00,69,00,45,00,78,00,65,00,63,00,2e,00,65,00,\
78,00,65,00,20,00,2f,00,58,00,7b,00,30,00,34,00,31,00,30,00,34,00,45,00,42,\
00,38,00,2d,00,31,00,32,00,35,00,41,00,2d,00,34,00,36,00,34,00,30,00,2d,00,\
39,00,34,00,31,00,34,00,2d,00,45,00,43,00,43,00,30,00,39,00,38,00,33,00,36,\
00,31,00,46,00,39,00,34,00,7d,00,00,00
“URLInfoAbout”=””
“URLUpdateInfo”=””
“VersionMajor”=dword:00000002
“VersionMinor”=dword:00000005
“WindowsInstaller”=dword:00000001
“Version”=dword:02050009
“Language”=dword:00000409
“DisplayName”=”Amazon WorkSpaces”


App GUID

{04104EB8-125A-4640-9414-ECC098361F94}


MSI Property Table

UpgradeCode                          {CB7B8EA8-3D5A-4233-A9CB-31A692E24E62}
WixUIRMOption                      UseRM
WixAppFolder                          WixPerMachineFolder
WIXUI_INSTALLDIR                 APPLICATIONFOLDER
ALLUSERS                                 2
ARPNOMODIFY                       1
ARPPRODUCTICON                 WORKSPACESICON.ICO
ApplicationFolderName         Amazon Web Services, Inc\Amazon WorkSpaces
DISABLEADVTSHORTCUTS    1
REINSTALLMODE                   amus
MSIINSTALLPERUSER            {}
INSTALL_USB                          1
Manufacturer                         Amazon Web Services, Inc
ProductCode                         {04104EB8-125A-4640-9414-ECC098361F94}
ProductLanguage                 1033
ProductName                        Amazon WorkSpaces
ProductVersion                     2.5.9
DefaultUIFont                        WixUI_Font_Normal
WixUI_Mode                          Advanced
ErrorDialog                            ErrorDlg
SecureCustomProperties    ALLUSERS;MSIINSTALLPERUSER;WIX_DOWNGRADE_DETECTED;WIX_UPGRADE_DETECTED

 

Notes

Download Amazon Workspaces Client for Mac

 

tags: MrNetTek

Firefox – 68.0.2

email me

Description

Mozilla Firefox, or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, Mozilla Corporation. more…


Download

New Firefox is available here:

https://ftp.mozilla.org/pub/firefox/releases/68.0.2/win64/en-US/  all


Size

45.9 MB


Silent install

setup.exe -ms


Install Location (9 Folders, 88 Files, 181 MB)

C:\Program Files\Mozilla Firefox


Silent uninstall

“C:\Program Files\Mozilla Firefox\uninstall\helper.exe” /s


Registry

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mozilla Firefox 68.0.2 (x64 en-US)]
“Comments”=”Mozilla Firefox 68.0.2 (x64 en-US)”
“DisplayIcon”=”C:\\Program Files\\Mozilla Firefox\\firefox.exe,0”
“DisplayName”=”Mozilla Firefox 68.0.2 (x64 en-US)”
“DisplayVersion”=”68.0.2”
“HelpLink”=”https://support.mozilla.org”
“InstallLocation”=”C:\\Program Files\\Mozilla Firefox”
“Publisher”=”Mozilla”
“UninstallString”=”\”C:\\Program Files\\Mozilla Firefox\\uninstall\\helper.exe\””
“URLUpdateInfo”=”https://www.mozilla.org/firefox/68.0.2/releasenotes”
“URLInfoAbout”=”https://www.mozilla.org”
“NoModify”=dword:00000001
“NoRepair”=dword:00000001
“EstimatedSize”=dword:0002d555


Notes

Download Firefox for Mac

Version 68.0.2, first offered to Release channel users on August 14, 2019

Security vulnerabilities fixed in Firefox 68

What’s in the latest Firefox update? Mozilla pitches add-ons, new enterprise group policies

Advisories


MSI Property Table

 

tags: MrNetTek

Mac – Bash – Parallels Agent Install Script

email me

The Parallels Management Agent shell script—InstallAgentUnattend.sh—is used to automate the Parallels Mac Management Agent installation.

This works great for on site computers, or with machines connected to VPN.

What needs more research, is line 247 in the script: pma_agent_registrator (this file is responsible for the registration portion of the setup process). I would like to figure out how to pass the web enrollment URL (example: https://DMZ.DOMAIN.COM/ParallelsMacManagement.Enrollment) to automatically enroll off site, non-VPN machines.

Expand>

 

But…for the connected machines, the script downloads the DMG, mounts the DMG, installs the agent, enrolls the Mac, and dismounts the DMG. Honestly, it’s all pretty cool. If you decide to embed the credentials, I do recommend creating a PKG.

When the script runs, you should see this at the end:

If you have any issues, such as KDC and KRBv5 errors, check to make sure ports 8760 and 8761 are open (check your AV and firewalls)

How to test port: terminal > telnet 11.11.11.11 8760 (where the IP is your internal proxy server)

http://kb.parallels.com/en/124318 http://kb.parallels.com/en/122879 http://kb.parallels.com/en/124306


Script

#!/usr/bin/env bash

################################################################
#
# Parallels Mac Management for SCCM
# Mac Client Unattended Installation Script
# Tested: 8/21/2019, High Sierra, Mojave
#
################################################################

# Administrator Settings

# PMA Agent installer image download URL
PMA_AGENT_DMG_DOWNLOAD_URL=http://www.YOURWEBSITE/pma_agent.dmg

# Dedicated PMA Agent registration user credentials
# to authenticate with Active Directory
export PMA_AGENT_REGISTRATION_USERNAME=YourUsername
export PMA_AGENT_REGISTRATION_PASSWORD=YourPassword
export PMA_AGENT_REGISTRATION_DOMAIN=YourDomain.com

################################################################

PMA_AGENT_DMG_LOCAL_FILENAME=/tmp/pma_agent.$RANDOM.dmg

clear && printf '\e[3J'

VER_PRODUCTNAME_STR="Parallels Mac Management for Microsoft SCCM"

MAGT_INSTALL_DIR="/Library/Parallels"
MAGT_PLIST_ID="com.parallels.pma.agent"
MAGT_LAUNCHDAEMON_PLISTFILE="/Library/LaunchDaemons/com.parallels.pma.agent.launchdaemon.plist"
MAGT_LAUNCHAGENT_PLISTFILE="/Library/LaunchAgents/com.parallels.pma.agent.launchagent.plist"
MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE="/Library/LaunchDaemons/com.parallels.pma.agent.launch.appindex.daemon.plist"
MAGT_LAUNCH_CEP_DAEMON_PLISTFILE="/Library/LaunchDaemons/com.parallels.pma.agent.launchcep.plist"
MAGT_UNATTENDED_INSTALLATION_FLAG_FILE="/tmp/pma_agent.installing.unattended"

if [ $PARALLELS_INTERNAL ]; then
ALLOW_UNTRUSTED_FLAG="-allowUntrusted"
fi

Cleanup()
{
hdiutil detach "/Volumes/$VER_PRODUCTNAME_STR"
rm -f $PMA_AGENT_DMG_LOCAL_FILENAME
rm -f $MAGT_UNATTENDED_INSTALLATION_FLAG_FILE
}

Log()
{
echo "$@"
}

LogError()
{
echo >&2 "Error: $@"
}

IsSystemAtLeast()
{
if [ -z "$SYSTEM_VERSION" ]; then
local sysVerPlist="/System/Library/CoreServices/SystemVersion.plist"
SYSTEM_VERSION=$(/usr/libexec/PlistBuddy -c "Print :ProductVersion" "$sysVerPlist")
fi

local minVer=$(printf "%04d%04d%04d%04d" $(echo "$1" | tr '.' '\n' | head -n 4))
local curVer=$(printf "%04d%04d%04d%04d" $(echo "$SYSTEM_VERSION" | tr '.' '\n' | head -n 4))

if [ $minVer -le $curVer ]; then
echo YES
return 0
else
echo ''
return 1
fi
}

GetFinderPid()
{
local userName="$1"
local output
local rv

output=$(ps -xo user,pid,comm -u "$userName" | grep -E "^.*/Finder.app/.*/Finder(?:\s+.*)*$" | head -n 1)
test "$output" || { echo "Cannot find Finder for ${userName}."; return 1; }

output=$(echo "$output" | tr -s ' ' | cut -d ' ' -f 2)
test "$output" || { echo "Cannot get Finder PID for ${userName}."; return 1; }

echo "$output"
return 0
}

LaunchctlLoad()
{
local jobPlist="$1"
local userName="$2"

local bootstrapPid
local jobLabel
local output
local userID

jobLabel=$(/usr/libexec/PlistBuddy -c "Print :Label" "$jobPlist" 2>&1)
(( $? )) && { LogError "Cannot read job label from $jobPlist"; LogError "$jobLabel"; return 1; }

(( $EUID )) && { LogError "You must be root to perform this operation."; return 1; }

if [ -z "$userName" ]; then
Log "Loading $jobLabel for system..."
else
Log "Loading $jobLabel for user '$userName'..."
fi

test "$DRY_RUN" && return 0

if [ $(IsSystemAtLeast "10.11") ]; then
if [ -z "$userName" ]; then
output=$(launchctl bootstrap system "$jobPlist" 2>&1)
else
userID=$(id -u "$userName" 2>&1)
(( $? )) && { LogError "$userID"; return 1; }
output=$(launchctl bootstrap gui/$userID "$jobPlist" 2>&1)
fi
else
if [ -z "$userName" ]; then
output=$(launchctl load "$jobPlist" 2>&1)
else
bootstrapPid=$(GetFinderPid $userName)
(( $? )) && { LogError "$bootstrapPid"; return 1; }
output=$(launchctl bsexec "$bootstrapPid" sudo -u "$userName" launchctl load "$jobPlist" 2>&1)
fi
fi

(( $? )) && { LogError "$output"; return 1; }

Log "Job $jobLabel loaded successfully"
return 0
}

LaunchctlUnload()
{
local jobPlist="$1"
local userName="$2"

local bootstrapPid
local jobLabel
local output
local userID

jobLabel=$(/usr/libexec/PlistBuddy -c "Print :Label" "$jobPlist" 2>&1)
(( $? )) && { LogError "Cannot read job label from $jobPlist"; LogError "$jobLabel"; return 1; }

(( $EUID )) && { LogError "You must be root to perform this operation."; return 1; }

if [ -z "$userName" ]; then
Log "Unloading $jobLabel for system..."
else
Log "Unloading $jobLabel for user '$userName'..."
fi

test "$DRY_RUN" && return 0

if [ $(IsSystemAtLeast "10.11") ]; then
if [ -z "$userName" ]; then
output=$(launchctl bootout system "$jobPlist" 2>&1)
else
userID=$(id -u "$userName" 2>&1)
(( $? )) && { LogError "$userID"; return 1; }
output=$(launchctl bootout gui/$userID "$jobPlist" 2>&1)
fi
else
if [ -z "$userName" ]; then
output=$(launchctl unload "$jobPlist" 2>&1)
else
bootstrapPid=$(GetFinderPid $userName)
(( $? )) && { LogError "$bootstrapPid"; return 1; }
output=$(launchctl bsexec "$bootstrapPid" sudo -u "$userName" launchctl unload "$jobPlist" 2>&1)
fi
fi

(( $? )) && { LogError "$output"; return 1; }

Log "Job $jobLabel unloaded successfully"
return 0
}

StopAgents()
{
local users

users=$(ps -xao user,comm | grep -E "^.*/pma_agent.app/.*/pma_agent_ui(?:\s+.*)*$" | tr -s ' ' | cut -d ' ' -f 1)
for user in $users
do
LaunchctlUnload "$MAGT_LAUNCHAGENT_PLISTFILE" "$user"
done
}

StartAgents()
{
local users

users=$(ps -xao user,comm | grep -E "^.*/Finder.app/.*/Finder$" | grep -v grep | awk '{print $1}')
for user in $users
do
LaunchctlLoad "$MAGT_LAUNCHAGENT_PLISTFILE" "$user"
done
}

###############################################################################
# Main
###############################################################################

trap Cleanup EXIT
trap "exit 1" SIGHUP SIGINT SIGTERM SIGQUIT

# Create flag file and fill with random content
echo $PMA_AGENT_DMG_LOCAL_FILENAME > $MAGT_UNATTENDED_INSTALLATION_FLAG_FILE
if [ $? -ne 0 ]; then
LogError "Cannot create flag file '$MAGT_UNATTENDED_INSTALLATION_FLAG_FILE'"
exit 1
fi

Log "Downloading Mac Client installation image to $PMA_AGENT_DMG_LOCAL_FILENAME..."
curl -# -o "$PMA_AGENT_DMG_LOCAL_FILENAME" "$PMA_AGENT_DMG_DOWNLOAD_URL" || exit 1

Log "Installing Mac Client..."
hdiutil attach "$PMA_AGENT_DMG_LOCAL_FILENAME" || exit 1
installer -verbose -pkg "/Volumes/$VER_PRODUCTNAME_STR/$VER_PRODUCTNAME_STR.pkg" -target / ${ALLOW_UNTRUSTED_FLAG} || exit 1

Log "Waiting for postinstall script completion..."
while [ -n "$(ps aux | grep "$VER_PRODUCTNAME_STR" | grep postinstall | grep -v grep)" ]; do sleep 0.1; done

Log "Stop components..."
test -f "$MAGT_LAUNCHAGENT_PLISTFILE" && StopAgents
test -f "$MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE" && LaunchctlUnload "$MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE"
test -f "$MAGT_LAUNCH_CEP_DAEMON_PLISTFILE" && LaunchctlUnload "$MAGT_LAUNCH_CEP_DAEMON_PLISTFILE"
test -f "$MAGT_LAUNCHDAEMON_PLISTFILE" && LaunchctlUnload "$MAGT_LAUNCHDAEMON_PLISTFILE"

Log "Register Mac Client..."
"$MAGT_INSTALL_DIR/pma_agent.app/Contents/MacOS/pma_agent_registrator" || exit 1

Log "Start components..."
LaunchctlLoad "$MAGT_LAUNCHDAEMON_PLISTFILE" || { Log "STOP"; exit 1; }
LaunchctlLoad "$MAGT_LAUNCH_CEP_DAEMON_PLISTFILE"
LaunchctlLoad "$MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE"
StartAgents

Log "Mac Client successfully installed"

 

 

Notes

User Guide (PDF)

Parallels Mac Management Technical Documentation

Required Ports

Mac SEP Uninstall Script

 

Some Install Paths:


Agent Cache:

Library > Caches > com.parallels.pma.agent

Keychain Access:
Library > Keychains > pmm-client.keychain

1 plist in Library > LaunchAgents
— com.parallels.pma.agent.launchagent.plist

3 plist in Library > LaunchDaemons
— com.parallels.pma.agent.appindex.daemon.plist
— com.parallels.pma.agent.launchcep.plist
— com.parallels.pma.agent.launchdaemon.plist

6 files in Library > Preferences
— com.parallels.pma.agent.cert.pem
— com.parallels.pma.agent.pkey.pem
— com.parallels.pma.agent.pki.cert.pem
— com.parallels.pma.agent.pki.pkey.pem
— com.parallels.pma.agent.plist {this data shows up in System Preferences > Parallels}
— com.parallels.pma.agent.sccmproxy.cert.pem

PMA Settings Location:
/Library/Application Support/Parallels/PMA_Agent

PMA APP Location:
/Library/Parallels/pma_agent.app
— Contents
—— MacOS
——— authhelper
——— pma_agent
——— pma_agent_registrator
——— pma_agent_ui
——— pma_agent_uninstaller
——— pma_crash_monitor
——— pma_fdehelper
——— pma_forwarding
——— pma_installer_helper
——— pma_report_tool
——— pmm_app_portal
——— pmm_appindex_agent
——— pmm_cep_service
——— pmmctl

Scripted unattend, by passing values into parameters:
sudo ./InstallAgentUnattended.sh http://dmz.domain.com/pma_agent.dmg UserName UserPassword UserDomain

Get Policies: /Library/Parallels/pma_agent.app/Contents/MacOS
pmmctl get-policies

Scan Updates: /Library/Parallels/pma_agent.app/Contents/MacOS
pmmctl scan-updates

Send Inventory: /Library/Parallels/pma_agent.app/Contents/MacOS
pmmctl report-hv-inventory

Uninstall PMA by APP: /Library/Parallels/pma_agent.app/Contents/MacOS/
pma_agent_uninstaller.app

or

Uninstall PMA by Shell Script:
sudo /bin/bash –с /Library/Parallels/pma_agent.app/Contents/MacOS/pma_agent_uninstaller.app/Contents/Resources/UninstallAgentScript.sh

or

#! /bin/bash

VER_SHORTPRODUCTNAME_STR="Parallels Mac Management"
VER_FULL_BUILD_NUMBER_STR="7.3.3.5"
MAGT_LAUNCHAGENT_PLISTFILE="/Library/LaunchAgents/com.parallels.pma.agent.launchagent.plist"
MAGT_LAUNCHDAEMON_PLISTFILE="/Library/LaunchDaemons/com.parallels.pma.agent.launchdaemon.plist"
MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE="/Library/LaunchDaemons/com.parallels.pma.agent.launch.appindex.daemon.plist"
MAGT_LAUNCH_CEP_DAEMON_PLISTFILE="/Library/LaunchDaemons/com.parallels.pma.agent.launchcep.plist"
MAGT_PLISTFILE="/Library/Preferences/com.parallels.pma.agent.plist"
MAGT_SUPPORT_DIR="/Library/Application Support/Parallels/PMA_Agent"
MAGT_KEYCHAIN_FILE="/Library/Keychains/pmm-client.keychain"
MAGT_CACHE_DIR="/Library/Caches/com.parallels.pma.agent"
MAGT_INSTALL_DIR="/Library/Parallels"
MAGT_APP_PORTAL_INSTALL_DIR="/Applications"
MAGT_APP_PORTAL_BUNDLE_NAME="Parallels Application Portal.app"
MAC_AGENT_SUCATALOG_URL="SuCatalogUrl"
PMM_CLIENT_BUNDLE_NAME="pma_agent.app"
SOFTWARE_UPDATE_TOOL_PATH="/usr/sbin/softwareupdate"
SOFTWARE_UPDATE_PREFERENCES_PLIST="/Library/Preferences/com.apple.SoftwareUpdate.plist"
PMM_PREFERENCE_PANE_PATH="/Library/PreferencePanes/PRLPmmPreferencePane.prefPane"
MAGT_PROBLEM_REPORTS_DIR="/Users/Shared/Parallels/Problem Reports"
DSCL_USERS_CACHE_PATH="/var/db/dslocal/nodes/Default/users"

SCRIPT_NAME=`basename "${0}"`
SCRIPT_DIR=`dirname "${0}"`
SCRIPT_TITLE="$VER_SHORTPRODUCTNAME_STR v$VER_FULL_BUILD_NUMBER_STR - Uninstall Mac Client"

Log()
{
echo "${SCRIPT_NAME%.*}: $@"
test -z "$ROOT_PATH" && logger -p install.info -t "$VER_SHORTPRODUCTNAME_STR" "$@"
return 0
}

LogError()
{
echo >&2 "${SCRIPT_NAME%.*}:Error: $@"
test -z "$ROOT_PATH" && logger -p install.info -t "$VER_SHORTPRODUCTNAME_STR" "Error: $@"
return 0
}

RemoveFile()
{
local path="$(CleanPath "$ROOT_PATH/$1")"
local fileName="$(basename "$path")"
local dirPath="$(dirname "$path")"

while IFS= read -r -d '' file; do
Log "Removing file $file..."

test "$DRY_RUN" && continue

local output=$(rm -f "$file" 2>&1)
if [ $? -ne 0 ]; then
LogError "Cannot delete file: $file"
LogError "$output"
fi
done < <(find "$dirPath" -maxdepth 1 -type f -name "$fileName" -print0 2>/dev/null)

return 0
}

RemoveDir()
{
local path="$(CleanPath "$ROOT_PATH/$1")"
local fileName="$(basename "$path")"
local dirPath="$(dirname "$path")"

while IFS= read -r -d '' file; do
Log "Removing directory $file..."

test "$DRY_RUN" && continue

local output=$(rm -rf "$file" 2>&1)
if [ $? -ne 0 ]; then
LogError "Cannot delete file: $file"
LogError "$output"
fi
done < <(find "$dirPath" -maxdepth 1 -type d -name "$fileName" -print0 2>/dev/null)

return 0
}

#
# Checks is specified directory empty. Ignores .DS_Store file.
#
IsDirEmpty()
{
local path="$(CleanPath "$ROOT_PATH/$1")"

test ! -d "$path" && return 1

find "$path" -maxdepth 1 -mindepth 1 -not -name ".DS_Store" &>/dev/null
if [ $? -eq 0 ]; then
echo YES
return 0
else
echo ''
return 1
fi
}

#
# Removes all redundant '/' from path
#
CleanPath()
{
shopt -s extglob
echo "${1//+(\/)//}"
shopt -u extglob
}

#
# Prints script usage information
#
PrintUsage()
{
read -d '' help <<- EOF
Usage: $SCRIPT_NAME [--root <path>] [--dry-run]
EOF

LogError "$help"
}

IsSystemAtLeast()
{
if [ -z "$SYSTEM_VERSION" ]; then
SYSTEM_VERSION=$(/usr/bin/sw_vers -productVersion)
fi

local minVer=$(printf "%04d%04d%04d%04d" $(echo "$1" | tr '.' '\n' | head -n 4))
local curVer=$(printf "%04d%04d%04d%04d" $(echo "$SYSTEM_VERSION" | tr '.' '\n' | head -n 4))

if [ $minVer -le $curVer ]; then
echo YES
return 0
else
echo ''
return 1
fi
}

# Source launchctl helpers
. "$SCRIPT_DIR/launchctl_utils.sh"

###############################################################################
# Main
###############################################################################

Log "${SCRIPT_TITLE} ("`date`")"

#
# Parse command line arguments
#
while [[ $# > 0 ]]
do
key="$1"
case $key in

--root)
ROOT_PATH="$2"
shift
;;

--dry-run)
DRY_RUN="yes"
;;

*)
LogError "Unrecognized argument \"$key\""
PrintUsage
exit 1
;;
esac
shift
done

#
# Check required arguments
#
if [ "${ROOT_PATH+yes}" ]; then
if [ -z "$ROOT_PATH" ]; then
LogError "Argument --root cannot be empty"
exit 1
elif [ ! -d "$ROOT_PATH" ]; then
LogError "Directory not found: $ROOT_PATH"
exit 1
fi
fi

if [ "$EUID" -ne 0 ]; then
LogError "Requires admin privileges, please re-run as root via sudo"
exit 1
fi

#
# Stop services
#
if [ -z "$ROOT_PATH" ]; then

if [ -f "$MAGT_LAUNCHAGENT_PLISTFILE" ]; then
# Stop all instances of MacClient agent
for userName in $(ps -xao user,comm | grep -E "^.*/pma_agent.app/.*/pma_agent_ui(?:\s+.*)*$" | tr -s ' ' | cut -d ' ' -f 1)
do
LaunchctlUnload "$MAGT_LAUNCHAGENT_PLISTFILE" "$userName"
done
fi

test -f "$MAGT_LAUNCHDAEMON_PLISTFILE" && LaunchctlUnload "$MAGT_LAUNCHDAEMON_PLISTFILE"
test -f "$MAGT_LAUNCH_CEP_DAEMON_PLISTFILE" && LaunchctlUnload "$MAGT_LAUNCH_CEP_DAEMON_PLISTFILE"
test -f "$MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE" && LaunchctlUnload "$MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE"
fi

#
# Remove services configuration plists
#
RemoveFile "$MAGT_LAUNCHDAEMON_PLISTFILE"
RemoveFile "$MAGT_LAUNCHAGENT_PLISTFILE"
RemoveFile "$MAGT_LAUNCH_APPINDEX_DAEMON_PLISTFILE"
RemoveFile "$MAGT_LAUNCH_CEP_DAEMON_PLISTFILE"

#
# Remove Application Support data
#
RemoveDir "$MAGT_SUPPORT_DIR"

#
# Remove per-user Application Support data
#
for userPlist in "$(CleanPath "$ROOT_PATH/$DSCL_USERS_CACHE_PATH")"/[!_]*.plist
do
test -e "$userPlist" || break

userName=$(/usr/libexec/PlistBuddy -c "Print :name:0" "$userPlist" 2>&1)
if [ $? -ne 0 ]; then
LogError "$userName"
continue
fi

userUid=$(/usr/libexec/PlistBuddy -c "Print :uid:0" "$userPlist" 2>&1)
if [ $? -ne 0 ]; then continue; fi

# Local user has UIDs in range (500;1000) or 0 (root)
if [[ "$userUid" != 0 && ( "$userUid" -le 500 || "$userUid" -ge 1000 ) ]]; then continue; fi

userHome=$(/usr/libexec/PlistBuddy -c "Print :home:0" "$userPlist" 2>&1)
if [ $? -ne 0 ]; then continue; fi

RemoveDir "$userHome/$MAGT_SUPPORT_DIR"
done

#
# Revert Software Update catalog URL if need
#
if [ -z "$ROOT_PATH" ]; then
expectedURL=$(/usr/libexec/PlistBuddy -c "Print :$MAC_AGENT_SUCATALOG_URL" "$MAGT_PLISTFILE" 2>/dev/null)
actualURL=$(/usr/libexec/PlistBuddy -c "Print :CatalogURL" "$SOFTWARE_UPDATE_PREFERENCES_PLIST" 2>/dev/null)
if [[ "$actualURL" && "$actualURL" == "$expectedURL" ]]; then
if [ $(IsSystemAtLeast "10.9") ]; then
$($SOFTWARE_UPDATE_TOOL_PATH --clear-catalog)
else
$(/usr/libexec/PlistBuddy -c "Delete :CatalogURL" "$SOFTWARE_UPDATE_PREFERENCES_PLIST")
fi
fi
fi

# Remove preferences
RemoveFile "${MAGT_PLISTFILE/%plist/*}"

# Remove keychain file
RemoveFile "$MAGT_KEYCHAIN_FILE"

# Remove cache directory
RemoveDir "$MAGT_CACHE_DIR"

# Remove problem reports
RemoveFile "$MAGT_PROBLEM_REPORTS_DIR/PmaProblemReport*"
# TODO: remove dirs up to "/Users/Shared/Parallels" if empty

# Remove MacClient bundle
RemoveDir "$MAGT_INSTALL_DIR/$PMM_CLIENT_BUNDLE_NAME"
if [ $(IsDirEmpty "$MAGT_INSTALL_DIR") ]; then
RemoveDir "$MAGT_INSTALL_DIR"
fi

# Remove AppPortal bundle
RemoveDir "$MAGT_APP_PORTAL_INSTALL_DIR/$MAGT_APP_PORTAL_BUNDLE_NAME"

# Remove Preferences Pane bundle
RemoveDir "$PMM_PREFERENCE_PANE_PATH"

# Remove install info
RemoveFile "/var/db/receipts/com.parallels.pkg.pma.agent.*"

Log "Completed"

 

echo $TMPDIR

 

The Parallels Mac Management log files are located in the following directories:

• Windows computer running Parallels Configuration Manager Proxy: %Windir%\Logs; %Windir%\Logs\pmm

• Windows computer running Parallels OS X Software Update Point: %Windir%\Logs\pmm

• Windows computer running Configuration Manager console: %Windir%\Logs

• OS X (Parallels Mac Client): /Library/Logs/

 

tags: MrNetTek

Mac – Bash – Office 2019 Apps Will Not Open

email me

Problem:

  • Show Document Gallery when opening Word is selected


Solution:

  • Open terminal
  • Type: defaults write com.microsoft.office ShowDocStageOnLaunch FALSE
  • Open Office App

 

This works by changing the Show Document Gallery when opening Word from selected, to not selected. The command could also be added to your scripts in packaging, which would look something like this:

#!/bin/bash
sudo installer -pkg "serializer.pkg" -target / -verbose >> log.txt
sudo installer -pkg "office.pkg" -target / -verbose >> log.txt
defaults write com.microsoft.office ShowDocStageOnLaunch FALSE

 

Notes

Other Preferences

 

tags: MrNetTek