Scripts and Guide by Soren Birk
This guide is for PuTTY 0.62.
PuTTY normally saves its sessions to the Registry, but there are too many registry keys to create them directly in the script.
I have therefore downloaded PuTTY Portable from http://www.portableapps.com so i can create some pre-configured sessions.
You need to add some product properties to the control-file, before you can select the configs in opsi-configed.
Tested with:
Instructions:
Tree:
CLIENT_DATA ├ setup32.ins ├ uninstall32.ins ├ delsub32.ins ├ puttylogo.png ├ PuTTY_noconf │ └ putty.exe ├ PuTTY_conf1 │ ├ App │ ├ Data │ ├ Other │ └ PuTTYPortable.exe └ PuTTY_conf2 └ <same folder-structure as PuTTY_conf1>
You should rename the “conf1, conf2” to something that makes sense to you. For example “Net1 Servers”, “Net2 Servers” and so on.
[Package] version: 1 depends: incremental: False [Product] type: localboot id: putty name: PuTTY description: Terminal emulator advice: version: 0.62 priority: 0 licenseRequired: False productClasses: setupScript: setup32.ins uninstallScript: uninstall32.ins updateScript: alwaysScript: onceScript: customScript: userLoginScript: [ProductProperty] type: unicode name: configuration multivalue: False editable: True description: Choose your configuration values: ["none", "conf1", "conf2"] default: ["none"]
; Author Soren Birk [Actions] requiredWinstVersion >= "4.11.2.6" DefVar $LogDir$ DefVar $ProductId$ DefVar $MinimumSpace$ DefVar $InstallDir$ DefVar $ExitCode$ DefVar $LicenseRequired$ DefVar $LicenseKey$ DefVar $LicensePool$ DefVar $Konfiguration$ Set $LogDir$ = "%SystemDrive%\tmp" Set $Konfiguration$ = GetProductProperty("configuration", "none") ; ---------------------------------------------------------------- ; - Please edit the following values - ; ---------------------------------------------------------------- Set $ProductId$ = "putty" Set $MinimumSpace$ = "5 MB" Set $InstallDir$ = "%ProgramFiles32Dir%\PuTTY" Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$)) LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$ isFatalError "Not enough space" else comment "Display product logo" ShowBitmap "%ScriptPath%\puttylogo.png" $ProductId$ if FileExists("%ScriptPath%\delsub32.ins") comment "Start uninstall sub section" Sub "%ScriptPath%\delsub32.ins" endif Message "Installing " + $ProductId$ + " ..." if $LicenseRequired$ = "true" comment "Licensing required, reserve license and get license key" Sub_get_licensekey endif if ($Konfiguration$ = "conf1") comment "Copying Files" Files_install_unv comment "Creating Shortcuts" LinkFolder_install_konf endif if ($Konfiguration$ = "conf2") comment "Copying Files" Files_install_adm comment "Creating Shortcuts" LinkFolder_install_konf endif if ($Konfiguration$ = "none") comment "Copying Files" Files_install /32Bit comment "Creating Shortcuts" LinkFolder_install endif endif [Files_install] copy -s "%ScriptPath%\PuTTYnone\*.*" "$InstallDir$" [Files_install_unv] copy -s "%ScriptPath%\PUTTYconf1\*.*" "$InstallDir$" [Files_install_adm] copy -s "%ScriptPath%\PUTTYconf2\*.*" "$InstallDir$" [LinkFolder_install] set_basefolder common_programs set_subfolder "PuTTY" set_link name: "PuTTY" target: "$InstallDir$\putty.exe" parameters: working_dir: $InstallDir$ icon_file: "$InstallDir$\putty.exe" icon_index: end_link set_basefolder common_desktopdirectory set_subfolder "" set_link name: "PuTTY" target: "$InstallDir$\putty.exe" parameters: working_dir: $InstallDir$ icon_file: "$InstallDir$\putty.exe" icon_index: end_link [LinkFolder_install_konf] set_basefolder common_programs set_subfolder "PuTTY" set_link name: "PuTTY" target: "$InstallDir$\PuTTYPortable.exe" parameters: working_dir: $InstallDir$ icon_file: "$InstallDir$\App\putty\putty.exe" icon_index: end_link set_basefolder common_desktopdirectory set_subfolder "" set_link name: "PuTTY" target: "$InstallDir$\PuTTYPortable.exe" parameters: working_dir: $InstallDir$ icon_file: "$InstallDir$\App\putty\putty.exe" icon_index: end_link [Sub_get_licensekey] if opsiLicenseManagementEnabled comment "License management is enabled and will be used" comment "Trying to get a license key" Set $LicenseKey$ = demandLicenseKey ($LicensePool$) ; If there is an assignment of exactly one licensepool to the product the following call is possible: ; Set $LicenseKey$ = demandLicenseKey ("", $ProductId$) ; ; If there is an assignment of a license pool to a windows software id, it is possible to use: ; DefVar $WindowsSoftwareId$ ; $WindowsSoftwareId$ = "..." ; Set $LicenseKey$ = demandLicenseKey ("", "", $WindowsSoftwareId$) DefVar $ServiceErrorClass$ set $ServiceErrorClass$ = getLastServiceErrorClass comment "Error class: " + $ServiceErrorClass$ if $ServiceErrorClass$ = "None" comment "Everything fine, we got the license key '" + $LicenseKey$ + "'" else if $ServiceErrorClass$ = "LicenseConfigurationError" LogError "Fatal: license configuration must be corrected" LogError getLastServiceErrorMessage isFatalError else if $ServiceErrorClass$ = "LicenseMissingError" LogError "Fatal: required license is not supplied" isFatalError endif endif endif else LogError "Fatal: license required, but license management not enabled" isFatalError endif [Sub_check_exitcode] comment "Test for installation success via exit code" set $ExitCode$ = getLastExitCode ; informations to exit codes see ; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx ; http://msdn.microsoft.com/en-us/library/aa368542.aspx if ($ExitCode$ = "0") comment "Looks good: setup program gives exitcode zero" else comment "Setup program gives a exitcode unequal zero: " + $ExitCode$ if ($ExitCode$ = "1605") comment "ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed." comment "Uninstall of a not installed product failed - no problem" else if ($ExitCode$ = "1641") comment "looks good: setup program gives exitcode 1641" comment "ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success." else if ($ExitCode$ = "3010") comment "looks good: setup program gives exitcode 3010" comment "ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success." else logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$ isFatalError endif endif endif endif
; Author Soren Birk [Actions] requiredWinstVersion >= "4.11.2.6" DefVar $LogDir$ DefVar $ExitCode$ DefVar $ProductId$ DefVar $InstallDir$ DefVar $LicenseRequired$ DefVar $LicensePool$ Set $LogDir$ = "%SystemDrive%\tmp" ; ---------------------------------------------------------------- ; - Please edit the following values - ; ---------------------------------------------------------------- Set $ProductId$ = "putty" Set $InstallDir$ = "%ProgramFiles32Dir%\PuTTY" Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- comment "Display product logo" ShowBitmap "%ScriptPath%\puttylogo.png" $ProductId$ Message "Uninstalling " + $ProductId$ + " ..." if FileExists("%ScriptPath%\delsub32.ins") comment "Start uninstall sub section" Sub "%ScriptPath%\delsub32.ins" endif if $LicenseRequired$ = "true" comment "Licensing required, free license used" Sub_free_license endif [Sub_free_license] comment "License management is enabled and will be used" comment "Trying to free license used for the product" DefVar $result$ Set $result$ = FreeLicense($LicensePool$) ; If there is an assignment of a license pool to the product, it is possible to use ; Set $result$ = FreeLicense("", $ProductId$) ; ; If there is an assignment of a license pool to a windows software id, it is possible to use ; DefVar $WindowsSoftwareId$ ; $WindowsSoftwareId$ = "..." ; set $result$ = FreeLicense("", "", $WindowsSoftwareId$)
; Author Soren Birk Message "Uninstalling " + $ProductId$ + " ..." if FileExists("%ProgramFiles32Dir%\PuTTY") comment "Uninstall program found, starting uninstall" comment "Deleting shortcuts" LinkFolder_uninstall comment "Deleting files" Files_uninstall /32Bit comment "Cleaning the Registry" Registry_uninstall endif [LinkFolder_uninstall] set_basefolder common_programs delete_subfolder "PuTTY" set_basefolder common_desktopdirectory set_subfolder "" delete_element "PuTTY" [Files_uninstall] del -sf "$InstallDir$\" [Registry_uninstall] deletekey [HKCU\Software\SimonTatham] [Sub_check_exitcode] comment "Test for installation success via exit code" set $ExitCode$ = getLastExitCode ; informations to exit codes see ; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx ; http://msdn.microsoft.com/en-us/library/aa368542.aspx if ($ExitCode$ = "0") comment "Looks good: setup program gives exitcode zero" else comment "Setup program gives a exitcode unequal zero: " + $ExitCode$ if ($ExitCode$ = "1605") comment "ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed." comment "Uninstall of a not installed product failed - no problem" else if ($ExitCode$ = "1641") comment "looks good: setup program gives exitcode 1641" comment "ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success." else if ($ExitCode$ = "3010") comment "looks good: setup program gives exitcode 3010" comment "ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success." else logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$ isFatalError endif endif endif endif