Fileset Scripts
- Fileset Scripts Overview
- Fileset / Payload Script Exit Code Status
- Windows Requirement Script Examples
Fileset Scripts Overview
FileWave 11+ provides the ability to run a script at any of seven stages of Fileset deployment (called Activation States):
- Requirements
- Preflight
- Activation
- Postflight
- Verification
- Pre-Uninstallation
- Post-Uninstallation
In FileWave Admin, while in the Filesets view, the toolbar now contains a Scripts icon.
When you select a given Fileset, then click on the Scripts icon, the Scripts dialog opens
The dialog shows the scripts that will be executed for the given Fileset and the activation state in which they will be executed. The order in which scripts of the same activation state and Fileset are executed is the same as they appear in the list (i.e. from top to bottom). You can drag & drop scripts in order to change the execution order.
You can create and import scripts by clicking the corresponding buttons. Editing a script is also possible, so is dragging and dropping a script from Finder in order to import it.
Any changes to the Fileset will be applied when you click OK. If you click Cancel, the current changes will be lost and the Fileset will not be modified.
Scripts in the list can be double-clicked, which causes the file property dialog to appear. You can change most of the attributes of the script in the same way as in the open Fileset dialog. There are, however, certain attributes you cannot change. For instance, you cannot unset the Execute flag; therefore, it is disabled. For requirement scripts, it is not possible to change the interactive/non-interactive option, since the exit code of the script is required to decide whether the Fileset should be downloaded. Therefore, this field is also disabled.
The checkbox "Re-run requirement scripts on change and uninstall active Fileset if they failed" controls the same internal setting as the checkbox "Evaluate requirements on change and uninstall active Fileset if they failed" in the Requirements tab of the Fileset properties. If checked, when a Fileset needs to be updated, the Client checks the requirements of the Fileset again. This includes executing requirement scripts. If any of the requirements or requirement scripts fail, the Fileset will be uninstalled.
Fileset Scripts Types
- Requirements Scripts – A requirements script checks the requirement on the Fileset before any dependencies are downloaded. If any requirement script fails (return non-zero), then the Fileset and its dependencies will not be downloaded nor installed.
- Preflight Scripts – A preflight script checks the needs of the Fileset before the Fileset downloads, but after dependencies have been installed. If any preflight script fails (returns non-zero), then the Fileset won't be downloaded or installed.
- Activation Scripts – An activation script is executed upon activation of the Fileset.
- Postflight Scripts – A postflight script is executed after the installation of the Fileset has completed.
- Verification Scripts – A verification script is executed after postflight scripts and upon every "verification of the Fileset."
- Pre-Uninstallation Scripts – A pre-uninstallation script is executed on inactivation of a Fileset and right before a Fileset is uninstalled. (Useful if the script needs to reference a file that will subsequently be removed due to self-healing).
- Post-Uninstallation Scripts – A post-uninstallation script is executed right after uninstalling/removing the Fileset from a client and its dependencies.
Related Content
Fileset / Payload Script Exit Code Status
Script Exit Codes
Status Value
|
Status Description
|
Severity
|
Status Details
|
---|---|---|---|
220 | Failed! (Will Not Retry) | ERROR | Script exited with a failure, do not automatically retry |
210 | Success (Skipped Install) | ERROR | Script exited successfully, report fileset as installed but skip actual installation |
0 | Success | OK | Script exited successfully |
-1000 | Crashed | ERROR | Script crashed during execution |
-1001 | Time Out Exceeded | ERROR | Script execution time took longer than Get Info > Executable > 'Wait for executable to finish' > 'Wait for:' |
-1002 | No Logged In User | ERROR | Script could not run - no user currently logged in |
-1003 | Failed To Start | ERROR | Script could not run - failure to start the script |
Expected behavior
Requirements scripts processing rules
- If any of the requirements scripts returns 220, we stop executing scripts and also stop trying to install the fileset. No further action will be done, unless manually requested by an administrator, or unless a newer version of the fileset is available. The fileset status will be reported as "Requirements Not Met: Will Not Retry".
- If any of the scripts returns non-zero and ≠210, we stop executing scripts. Requirement scripts will be executed again 2 minutes later.
- If any of the scripts returns 210 when all other scripts return 0, the fileset status will be reported as "Skipped". The fileset will not be installed.
- Only if all scripts return 0, then we will install the fileset.
Kiosk
If a requirements script returns 210 or 220, the fileset will not be available in Kiosk.
If the dependency of a fileset has a requirements script that returns 210, it will not affect the availability of the main fileset. However, if it returns 220, the dependencies will fail so the main fileset will not be available in Kiosk.
Dependencies
- If the main fileset is at "Skipped" state, its dependencies will still be processed and installed.
- If a dependency is at "Requirements Not Met: Will Not Retry", that does not propagate up the tree. This means the installation of the main fileset will still fail due to failed requirements, but the main fileset will simply be reported as Download/Activation/Update of dependency fileset failure.
Other scripts
Whenever a requirements script returns 210 or 220, the fileset does not get installed, so other types of scripts (preflight, activation, etc) will not be executed. Only in case the requirements scripts are run again and they change, then the fileset might get installed and in that case other types of scripts will get run as usual.
Inventory
- Filesets in "Skipped" status are reported to inventory, like if they were actually installed.
- Filesets in "Requirements Not Met: Will Not Retry" status are not reported to inventory at all.
Windows Requirement Script Examples
Requirement scripts are executed on client devices with each tickle interval, 2 minutes by default, to check if the installation conditions outlined have been met. For example, it can used to verify if some file, registry key, service, or process is or is not present and decide whether to proceed with fileset activation or not, because you may want to
- Block redundant installations if the app is already present or
- Ensure prerequisites are present or
- Enforce a particular installation order.
If the requirement script returns any other exit code but 0 (e.g. 1 or -1) it is considered a failure and will be reported as a "Requirements Failure: Script" in the Client Info window and Fileset Report. This prevents the contents of the fileset from downloading and installing. As mentioned previously, requirement scripts will be executed every tickle interval and the fileset will be installed only when they all return 0. To check for multiple conditions simply specify multiple requirement scripts.
Below are some sample requirement scripts for Windows that can be customized for your own use. If you want the opposite condition, then flip the exit error codes in the examples.
Install if registry key present
::Replace HKLM\path\to\registry\key with the actual path to the registry key, e.g. HKLM\SOFTWARE\Macromedia\FlashPlayer
reg query "HKLM\path\to\registry\key"
if %ERRORLEVEL% EQU 0 (
exit 0
) else (
exit 1
)
Install if registry value present
::Replace HKLM\path\to\registry\key with the actual path to the registry key containing your value, e.g. HKLM\SOFTWARE\Macromedia\FlashPlayer
::Replace <value> with the actual name of the value, e.g. CurrentVersion in this example
reg query "HKLM\path\to\registry\key" /v <value>
if %ERRORLEVEL% EQU 0 (
exit 0
) else (
exit 1
)
Install if file or folder present
::Replace <drive>:\path\to\file\or\folder with the actual path to the file or folder, e.g. %ProgramFiles(x86)%\Mozilla Firefox\firefox.exe
if exist "<drive>:\path\to\file\or\folder" (
exit 0
) else (
exit 1
)
Install if application present in Programs & Features
::Replace <AppName> with the name of your app, e.g. Adobe Acrobat Reader DC
::Be as specific as possible because partial app names may provide a match when you don't necessarily want it to, e.g. Adobe will match both Adobe Acrobat Reader DC and Adobe Flash
reg export HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall %temp%\applist1.txt
reg export HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall %temp%\applist2.txt
copy %temp%\applist1.txt + %temp%\applist2.txt %temp%\applisttemp.txt
find "DisplayName" %temp%\applisttemp.txt > %temp%\applist.txt
find "<AppName>" %temp%\applist.txt
if %ERRORLEVEL% EQU 0 (
del %temp%\applist*
exit 0
) else (
del %temp%\applist*
exit 1
)
Install if service present
::Replace <service> with the name of your service from the Services control panel, e.g. Adobe Acrobat Update Service
::Be as specific as possible because partial service names may provide a match when you don't necessarily want it to, e.g. FileWave will match both FileWave Client and FileWave UltraVNC Server
sc query | find "DISPLAY_NAME" | find "<service>"
if %ERRORLEVEL% EQU 0 (
exit 0
) else (
exit 1
)
Install if process present
::Replace <process> with the name of your process, e.g. notepad.exe
tasklist /FI "IMAGENAME eq <process>" 2>NUL | find /I /N "<process>"
if %ERRORLEVEL% EQU 0 (
exit 0
) else (
exit 1
)
If you find that you need to delete a requirement script for any reason, right-click that script and choose Reveal in Fileset. That will open the Fileset Contents window with the script file highlighted. Click the Delete icon in the toolbar to delete your script.
Remember to always test your requirement scripts locally first before adding them to a fileset. With the above building blocks as examples, you'll quickly be on your way to taking advantage of requirements scripts for providing conditional intelligence to your Windows filesets.