Conditions

This page shows available conditions in the FastTrack language. Refer to the Getting Started Guide for more information.

Conditions syntax

Conditions Reference
Active Directory - Computers

If [Not] ComputerEnabled <ComputerName> Then

Tests if the specified Active Directory computer account is enabled. If no computername is specified, executing computer is assumed. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<ComputerName>.
Example: If ComputerEnabled Acme0334 Then

If [Not] ComputerExists <ComputerName> Then

Tests if the specified Active Directory computer account exists. If no computername is specified, executing computer is assumed. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<ComputerName>.
Example: If ComputerExists Acme0334 Then
Active Directory - Groups - Computers

If [Not] ComputerIsMemberOf <GroupName> Then
If [Not] ComputerIsMemberOf <GroupName>, <ComputerName> Then

Tests if the computer is member of the Active Directory group or any nested sub group. A nested group is for instance when a computer is member of 'Sales Florida Computers' and 'Sales Florida Computers' is a member of 'Sales America Computers', then the computer is also implicitly a member of 'Sales America Computers' and the condition is true for both. If no computer is specified, the executing computer is assumed. If domain is different than the current users' domain, use <Domain>\<GroupName> and/or <Domain>\<ComputerName>. Note that cross-domain checks are slower than checking within the same domain. Checks within the same domain are extremely fast.
Example: If ComputerIsMemberOf Acme Sales Computers Then ConnectShare J:,\\AcmeServer\SalesShare

If [Not] ComputerPrimaryGroupIs <GroupName> Then

Tests if the specified group is the computer's primary group.
Active Directory - Groups - Users

If [Not] UserIsMemberOf <DomainGroupName> Then
If [Not] UserIsMemberOf <DomainGroupName>, <UserName> Then

Tests if the user is a member of the specified Active Directory group directly or through nested groups. A nested group is for instance when a user is member of 'Sales Florida Users' and 'Sales Florida Users' is a member of 'Sales America Users', then the user is also implicitly a member of 'Sales America Users' and the condition is true for both. If no user is specified, the currently logged on user is assumed. If domain is different than the current users' domain, use <Domain>\<GroupName> and/or <Domain>\<UserName>. Note that cross-domain checks are slower than checking within the same domain.
Example: If UserIsMemberOf SalesStaff Then ConnectShare J:,\\AcmeServer\SalesShare

If [Not] UserPrimaryGroupIs <GroupName> Then

Tests if the specified group is the user's primary group.
Active Directory - Groups

If [Not] GroupExists <GroupName> Then

Tests if the specified Active Directory group exists. If domain is different than the domain of the executing user, specify group as <Domain>\<GroupName>.
Example: If GroupExists AcmeGroup Then

If [Not] GroupIsMemberOf <GroupName>, <GroupName> Then

Tests if the first Active Directory group is member of the second Active Directory group or any nested sub group. If domain is different than the current users' domain, specify domain group(s) as <Domain>\<GroupName>. Note that cross-domain checks are slower than checking within the same domain. Checks within the same domain are extremely fast.
Example: If GroupIsMemberOf Acme Sales Florida Users,Acme Sales Users Then
Active Directory - Organizational Units - Computers

If [Not] ComputerIsInOU <OUName> Then
If [Not] ComputerIsInOU <OUName>, <ComputerName> Then

Tests if the computer is in the Organizational Unit in the Active Directory or any Organizational Unit below. If multiple OUs matches, the condition if true, if the computer is in any of them. If the command DisableOURecursion has been issued, the condition does not look in sub-OUs. If no computername is specified, the executing computer is assumed. The domain is, by default, the domain of the logged-on user. To specify another domain, use: <Domain>\<OUName>. An OU can be located by either its name (if unique), distinguished name or a special FastTrack slash notation. If the name of an OU is unique, simply use the name and it will automatically be found. If the name might be ambiguous, a slash notation from the root can be used instead of full distinguished name. For example an OU "Sales" under a root OU "America" would have a distinguished name of for example OU=Sales,OU=America,DC=ACME,DC=COM. Simply use America/Sales for simpler syntax instead. If the OU actually contains a slash, use double slash to escape.
Example: If ComputerIsInOU ShopComputers Then ConnectShare J:,\\AcmeServer\ShopShare
Active Directory - Organizational Units - Groups

If [Not] GroupIsInOU <GroupName>, <OUName> Then

Tests if the group is in the Organizational Unit in the Active Directory or any Organizational Unit below. If multiple OUs matches, the condition if true, if the group is in any of them. If the command DisableOURecursion has been issued, the condition does not look in sub-OUs. The domain is, by default, the domain of the logged-on user. To specify another domain, use: <Domain>\<OUName>. An OU can be located by either its name (if unique), distinguished name or a special FastTrack slash notation. If the name of an OU is unique, simply use the name and it will automatically be found. If the name might be ambiguous, a slash notation from the root can be used instead of full distinguished name. For example an OU "Sales" under a root OU "America" would have a distinguished name of for example OU=Sales,OU=America,DC=ACME,DC=COM. Simply use America/Sales for simpler syntax instead. If the OU actually contains a slash, use double slash to escape.
Active Directory - Organizational Units - Users

If [Not] UserIsInOU <OUName> Then
If [Not] UserIsInOU <OUName>, <UserName> Then

Tests if the user is a in the Organizational Unit from the Active Directory or any Organizational Unit below. If multiple OUs matches, the condition if true, if the user is in any of them. If the command DisableOURecursion has been issued, the condition does not look in sub-OUs. The domain is, by default, the domain of the logged-on user. To specify another domain, use: <Domain>\<OUName>. An OU can be located by either its name (if unique), distinguished name or a special FastTrack slash notation. If the name of an OU is unique, simply use the name and it will automatically be found. If the name might be ambiguous, a slash notation from the root can be used instead of full distinguished name. For example an OU "Sales" under a root OU "America" would have a distinguished name of for example OU=Sales,OU=America,DC=ACME,DC=COM. Simply use America/Sales for simpler syntax instead. If the OU actually contains a slash, use double slash to escape.
Example: If UserIsInOU SalesStaff Then ConnectShare J:,\\AcmeServer\SalesShare
Active Directory - Organizational Units

If [Not] OUExists <OUName> Then

Tests if the specified Active Directory organizational unit exists. The domain is, by default, the domain of the logged-on user. To specify another domain, use: <Domain>\<OUName>. An OU can be located by either its name (if unique), distinguished name or a special FastTrack slash notation. If the name of an OU is unique, simply use the name and it will automatically be found. If the name might be ambiguous, a slash notation from the root can be used instead of full distinguished name. For example an OU "Sales" under a root OU "America" would have a distinguished name of for example OU=Sales,OU=America,DC=ACME,DC=COM. Simply use America/Sales for simpler syntax instead. If the OU actually contains a slash, use double slash to escape.
Example: If Not OUExists Acme Sales America Then CreateOU Acme Sales America,Acme Sales Global

If [Not] OUIsInOU <OUName>, <OUName> Then

Tests if the Organizational Unit (first parameter) is in the Organizational Unit (second parameter) in the Active Directory or any Organizational Unit below. If multiple OUs matches, the condition if true, if the OU is in any of them. If the command DisableOURecursion has been issued, the condition does not look in sub-OUs. The domain is, by default, the domain of the logged-on user. To specify another domain, use: <Domain>\<OUName>. An OU can be located by either its name (if unique), distinguished name or a special FastTrack slash notation. If the name of an OU is unique, simply use the name and it will automatically be found. If the name might be ambiguous, a slash notation from the root can be used instead of full distinguished name. For example an OU "Sales" under a root OU "America" would have a distinguished name of for example OU=Sales,OU=America,DC=ACME,DC=COM. Simply use America/Sales for simpler syntax instead. If the OU actually contains a slash, use double slash to escape.
Active Directory - Users - Password

If [Not] UserCanChangePassword Then
If [Not] UserCanChangePassword <UserName> Then

Tests if the specified Active Directory user can change password. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserCanChangePassword Then

If [Not] UserHasPasswordExpiry Then
If [Not] UserHasPasswordExpiry <UserName> Then

Tests if the specified Active Directory user's password can expire. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserHasPasswordExpiry Then

If [Not] UserMustChangePassword Then
If [Not] UserMustChangePassword <UserName> Then

Tests if the specified Active Directory user is forced to change password at next logon. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserMustChangePassword Then

If [Not] UserMustChangePasswordSoon Then
If [Not] UserMustChangePasswordSoon <Days> Then
If [Not] UserMustChangePasswordSoon <Days>, <UserName> Then

Tests if the specified Active Directory user is forced to change password within the next 'Days' number of days. If no 'Days' is specified, 7 days is assumed. Useful to detect when the user password will expire soon. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserMustChangePasswordSoon Then ShowMessage "Your password will expire with a week. Please change your password or log out within the next week."
Active Directory - Users

If [Not] UserDomainIs <Domain> Then

Tests if current user is member of the specified domain.

If [Not] UserEnabled <UserName> Then

Tests if the specified Active Directory user account is enabled. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserEnabled AcmeUser Then

If [Not] UserExists <UserName> Then

Tests if the specified Active Directory user account exists. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserExists AcmeUser Then

If [Not] UserExpiresSoon Then
If [Not] UserExpiresSoon <Days> Then
If [Not] UserExpiresSoon <Days>, <UserName> Then

Tests if the specified Active Directory user account expires within the next 'Days' number of days. If no 'Days' is specified, 7 days is assumed. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserExpiresSoon Then ShowMessage "Your account will expire with a week. Please contact your system administrator, if you need an extension."

If [Not] UserHasImage Then
If [Not] UserHasImage <UserName> Then
If [Not] UserHasImage <UserName>, <PropertyName> Then

Test if the Active Directory user has a user photo. The default attribute is "thumbnailPhoto", but other attributes can be specified, such as "jpegPhoto". If no username is specified, current user is assumed. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserHasImage Then CopyUserImage [UserName],W:\Photos\[UserName].png

If [Not] UserIsAdmin Then

Tests if current user is a domain administrator. Use UserIsLocalAdmin to test for local administrator.
Example: If UserIsAdmin Then

If [Not] UserIsInDomain Then

Tests if the current user is a domain user.
Example: If UserIsInDomain Then

If [Not] UserIsLocalAdmin Then
If [Not] UserIsLocalAdmin <UserName> Then

Tests if current user is local administrator. Use UserIsAdmin to test for domain administrator. If no user is specified, the currently logged on user is assumed. If domain is different than the current users' domain, specify user as <Domain>\<UserName>.
Example: If UserIsLocalAdmin Then

If [Not] UserNameIs <UserName> Then

Tests if current user is the same as the condition user. Username means account name.

If [Not] UserProfileIsRoaming Then
If [Not] UserProfileIsRoaming <UserName> Then

Tests if the users is roaming its profile. If no username is specified, current user is assumed. Domain is by default the domain of the logged on user, to specify another domain, use <Domain>\<UserName>.
Example: If UserProfileIsRoaming Then
Azure Active Directory

If [Not] AzureComputerExists <DeiceName> Then

Tests if the specified Azure Active Directory device account exists.
Example: If AzureUserExists AcmeUser Then

If [Not] AzureComputerIsMemberOf <GroupName> Then
If [Not] AzureComputerIsMemberOf <GroupName>, <DeviceName> Then

Tests if the specified Azure Active Directory device is member of a group.
Example: If AzureIsMemberOf AcmeGroup Then

If [Not] AzureGroupExists <GroupName> Then

Tests if the specified Azure Active Directory group exists.
Example: If AzureGroupExists AcmeGroup Then

If [Not] AzureUser Then

Tests if the current user is logged on to an Azure Active Directory (Windows 10+ feature).

If [Not] AzureUserExists <UserName> Then

Tests if the specified Azure Active Directory user account exists.
Example: If AzureUserExists AcmeUser Then

If [Not] AzureUserIsMemberOf <GroupName> Then
If [Not] AzureUserIsMemberOf <GroupName>, <UserName> Then

Tests if the specified Azure Active Directory user is member of a group.
Example: If AzureIsMemberOf AcmeGroup Then
Backup and Replication

If [Not] LastSyncWasCancelled Then

Tests if the last SyncDir or SyncDirSecure operation was cancelled. The cancel button can be removed using the DisableSyncCancel command.
Citrix - Client

If [Not] IcaClientInstalled Then

Tests if Citrix Receiver is installed.
Example: If Not IcaClientInstalled Then Exit

If [Not] LastIcaSessionFailed Then

Tests if the last executed Citrix ICA session failed. Use the LastIcaError function to get the last error and the LastExitCode function to get the Citrix error code.
Citrix - Server

If [Not] IcaSession Then

Tests if the script is running inside a Citrix ICA session. Useful for stopping or controlling logon script execution on ICA sessions. Use the RdpSession condition to test for Remote Desktop Services or the RemoteSession condition to test for either.
Example: If IcaSession Then Exit
COM Automation

If [Not] ObjectExists <COMInterface> Then

Determines if the specified COM object or COM server exists. Useful for determining if an object exists before using CreateObject.
Example: If ObjectExists Excel.Application Then ShowMessage You have excel version [ObjectValue CreateObject(Excel.Application).Version]
Computer Name

If [Not] ComputerNameIs <ComputerName> Then

Tests if the computername is the same as the condition name.
Custom Collections

If [Not] CollectionContains <CollectionName>, <SearchItem> Then

Tests if the search item is present in the collection.
Example: If Not CollectionContains [UserName] Then Exit

If [Not] CollectionIsEmpty <CollectionName> Then

Tests if a custom collection is empty.
Example: If CollectionIsEmpty MyUsers Then Exit
Date And Time

If [Not] Friday Then

Tests if the day of the week is Friday.

If [Not] Monday Then

Tests if the day of the week is monday.

If [Not] Saturday Then

Tests if the day of the week is Saturday.

If [Not] Sunday Then

Tests if the day of the week is Sunday.

If [Not] Thursday Then

Tests if the day of the week is Thursday.

If [Not] Tuesday Then

Tests if the day of the week is Tuesday.

If [Not] Wednesday Then

Tests if the day of the week is Wednesday.
Directories - Attributes

If [Not] DirHasSystemAttrib <Directory> Then

Tests if the specified directory has the system attribute set.

If [Not] DirIsArchived <Directory> Then

Tests if the specified directory has the archive attribute set.

If [Not] DirIsCompressed <Directory> Then

Tests if the specified directory is compressed.

If [Not] DirIsEncrypted <Directory> Then

Tests if the specified directory is encrypted.

If [Not] DirIsHidden <Directory> Then

Tests if the specified directory is hidden.

If [Not] DirIsReadOnly <Directory> Then

Tests if the specified directory is read-only.

If [Not] DirIsReparsePoint <Directory> Then

Tests if the specified directory is a reparse point (redirected folder).
Directories - Permissions

If [Not] DirReadable <Path> Then

Tests if the current user can read from the directory. If the directory does not exist, the condition will be false.
Example: If DirectoryReadable O:\Archive Then
Directories

If [Not] DirectoryExists <Path> Then

Tests if the specified directory exists.
Example: If Not DirectoryExists [UserDocumentsDir]\AcmeFiles Then MakeDir [UserDocumentsDir]\AcmeFiles

If [Not] DirectoryIsEmpty <Path> Then

Tests if the specified directory is empty.
Drivers

If [Not] DriverInstalled <InfFile> Then
If [Not] DriverInstalled <InfFile>, <InfFile32Bit> Then

Determines if the specified inf file is already installed in the Windows driver store. If your environment is mixed between 32 and 64 bit and the drivers are different, use the last parameter to point to 32-bit driver to be used for 32-bit machines only.
FastTrack Engine

If [Not] Always Then

Always returns true.

If [Not] Never Then

Always returns false.
Files - Attributes

If [Not] FileHasSystemAttrib <File> Then

Tests if the specified file has the system attribute set.

If [Not] FileIsArchived <File> Then

Tests if the specified file has the archive attribute set.

If [Not] FileIsCompressed <File> Then

Tests if the specified file is compressed.

If [Not] FileIsEncrypted <File> Then

Tests if the specified file is encrypted.

If [Not] FileIsHidden <File> Then

Tests if the specified file is hidden.

If [Not] FileIsReadOnly <File> Then

Tests if the specified file is read-only.
Files

If [Not] FileContains <File>, <SearchText> Then

Tests if the specified file contains the search text.
Example: If FileContains MyLog.txt,[UserName] Then

If [Not] FileExists <File> Then

Tests if the specified file exists.
Example: If FileExists [UserHomeDir]\DocumentsBackup.zip Then UnZip [UserHomeDir]\DocumentsBackup.zip,[UserDocumentsDir]\Restore

If [Not] FileIs32Bit <File> Then

Tests if the specified file is 32 bit or not. If the file does not have execution bit information, the condition is false.

If [Not] FileIs64Bit <File> Then

Tests if the specified execution file is 64 bit or not. If the file does not have execution bit information, the condition is false.

If [Not] FileIsTrusted <File> Then

Tests if the specified file is authenticode trusted.
FTP - Directories

If [Not] FTPDirectoryExists <FTPAddress> Then
If [Not] FTPDirectoryExists <FTPAddress>, <FTPUserName>, <EncryptedPassword> Then

Checks if an FTP directory exists on an FTP server. Password must be encrypted in the editor using Tools->Encrypt Password or by using the EncryptPassword function.
Example: If FTPDirectoryExists ftp://10.10.10.10/Backups Then
FTP - Files

If [Not] FTPFileExists <FTPAddress> Then
If [Not] FTPFileExists <FTPAddress>, <FTPUserName>, <EncryptedPassword> Then

Checks if an FTP file exists on an FTP server. Password must be encrypted in the editor using Tools->Encrypt Password or by using the EncryptPassword function.
Example: If FTPFileExists ftp://10.10.10.10/Backups/Latest.Zip Then

If [Not] LastFTPWasCancelled Then

Tests if the last CopyFTPFile, CopyFTPDir or SyncFTPDir was cancelled. The cancel button can be removed using the DisableFTPCancel command.
Graphical User Interfaces - Progress Screens

If [Not] CountDown Then
If [Not] CountDown <Seconds> Then
If [Not] CountDown <Seconds>, <Message> Then
If [Not] CountDown <Seconds>, <Message>, <HeaderText> Then
If [Not] CountDown <Seconds>, <Message>, <HeaderText>, <IconName> Then
If [Not] CountDown <Seconds>, <Message>, <HeaderText>, <IconName>, <ButtonText> Then

Displays a window with a progress screen and a cancel button. If the user cancels before the number of seconds is reached, the condition is false. Useful for forced reboots. The WaitForAcceptance command is the same, except that it does not allow cancel and is therefor not a a function. The following settings commands have effect on the window: SetScreenPos, SetBodyFont, SetBodyColor, SetHeaderFont, SetHeaderColor, SetBackgroundImage, ResetBackgroundImage, SetScaling, EnableTopMost/DisableTopMost and the visual effects commands. If you do not specify a message, a standard reboot message is assumed. If you do not specify seconds, 2 minutes is assumed. You can use [Return] function to make the message appear in multiple lines. IconName refers to an internal icon name of icons listed in the "Icon Explorer" in the script editor. Further icons can added with the AddCustomIcon command. You also point directly to an image file preferably by in png format.
Example: If CountDown 120,A forced system restart is needed.[Return][Return]Save open documents within 2 minutes,Warning! Then RebootForced
Graphical User Interfaces - Questions

If [Not] Ask <Message> Then
If [Not] Ask <Message>, <HeaderText> Then
If [Not] Ask <Message>, <HeaderText>, <IconName> Then
If [Not] Ask <Message>, <HeaderText>, <IconName>, <YesButtonText>, <NoButtonText> Then

Asks for message and enters the loop is answer is positive. You can use [Return] function to make the message appear in multiple lines. Use the SetAskTimeout command to set a timeout, where the Yes button is automatically clicked, if the user does not react. The following settings commands have effect on the window: SetBodyFont, SetBodyColor, SetHeaderFont, SetHeaderColor, SetBackgroundImage, ResetBackgroundImage, SetScaling, EnableTopMost/DisableTopMost and the visual effects commands. IconName refers to an internal icon name of icons listed in the "Icon Explorer" in the script editor. Further icons can added with the AddCustomIcon command. You also point directly to an image file preferably by in png format.
Example: If Ask "Do you want to empty your recycle bin?" Then EmptyRecycleBin

If [Not] AskWin <Message> Then
If [Not] AskWin <Message>, <HeaderText> Then

Asks for message in regular Windows style and enters the loop is the answer is positive. You can use [Return] function to make the message appear in multiple lines.
Example: If AskWin "Do you want to empty your recycle bin?" Then EmptyRecycleBin
Graphical User Interfaces - Textual Input

If [Not] MultiInputCancelled Then

True if the user clicked the cancel button on the last shown MultiInput command window.
Hardware - Battery

If [Not] RunningOnBatteries Then

Tests if the computer is running on batteries (not plugged into A/C).
Example: If Not RunningOnBatteries Then RunScript \\AcmeServer\Installers$\Office2007\Install.fsh,Acme\Installer,<EncryptedPassword>
Hardware

If [Not] Desktop Then

Tests if the computer is a desktop (assumed if there are no batteries).
Example: If Not Desktop Then SyncDir [UserDocumentsDir],[UserHomeDir]\DocumentsBackup

If [Not] Laptop Then

You typically need to use the "Portable" condition instead of this condition, as this condition excludes tablets. It tests if the computer is a laptop without touch capability or tablet components installed.

If [Not] ManufacturerIs <Manufacturer> Then
If [Not] ManufacturerIs <Manufacturer>, <RemoteComputerName> Then
If [Not] ManufacturerIs <Manufacturer>, <RemoteComputerName>, <UserName>, <EncryptedPassword> Then

Test is the system manufacturer is s specific manufacturer, e.g. 'HP', 'Lenovo' or 'Dell'. The check tests if the manufacturer starts with the specified model (for example the manufacturer string of Dell computers is actually "Dell Inc"). T The manufacturer of a machine can be found be typing "wmic computersystem get manufacturer" in a command prompt. Remote computer queries require you to open the firewall rule "WMI" on the remote computer. Use <Domain>\<UserName> to specify domain for the remote connection user. Password must be encrypted in the editor using Tools->Encrypt Password or by using the EncryptPassword function.

If [Not] ModelIs <Model> Then
If [Not] ModelIs <Model>, <RemoteComputerName> Then
If [Not] ModelIs <Model>, <RemoteComputerName>, <UserName>, <EncryptedPassword> Then

Tests if the system model is a specific, such as 'XPS 15'. The check tests if the model starts with the specified model. The model of a machine can be found be typing "wmic computersystem get model" in a command prompt. Remote computer queries require you to open the firewall rule "WMI" on the remote computer. Use <Domain>\<UserName> to specify domain for the remote connection user. Password must be encrypted in the editor using Tools->Encrypt Password or by using the EncryptPassword function.

If [Not] Portable Then

Tests if the computer is a portable (assumed if there is a battery, meaning a laptop, tablet, etc). The laptop and tablet conditions are further break-downs of this condition.
Example: If Portable Then SyncDir [UserDocumentsDir],[UserHomeDir]\DocumentsBackup

If [Not] Tablet Then

Tests if the computer is a tablet. A tablet means a portable device that has touch capability and tablet components installed. It is a hardware detection of capability, not a test for use of tablet-mode. This means that for example a Surface Book is always a tablet, regardless of it running in tablet mode or not.
Hypervisors

If [Not] HyperV Then

True if the machine is virtual and running under the Hyper-V hypervisor.

If [Not] VirtualMachine Then

True if the machine is virtual and running under either the Hyper-V, VmWare or Xen hypervisor.

If [Not] VMware Then

True if the machine is virtual and running under the VMware hypervisor.

If [Not] Xen Then

True if the machine is virtual and running under the Xen hypervisor.
Installations - Internal FastTrack Registration

If [Not] Installed <ApplicationName> Then

Tests if the specified FastTrack scripted application is installed.
Example: If Installed Microsoft Office Then WriteRegistry HKCU\Software\Microsoft\Office\Common\UserInfo\Company,Acme Corp

If [Not] InstalledBuild <ApplicationName>, <Build> Then

Tests if the specified application is installed in the specific build.
Example: If InstalledBuild Microsoft Office,3 Then WriteRegistry HKCU\Software\Microsoft\Office\Common\UserInfo\Company,Acme Corp

If [Not] InstalledVersion <ApplicationName>, <Version> Then

Tests if the specified application is installed in the specific version.
Example: If InstalledVersion Microsoft Office,2007 Then WriteRegistry HKCU\Software\Microsoft\Office\Common\UserInfo\Company,Acme Corp

If [Not] UserSettingsOnce <ApplicationName> Then

Only true once per user on a machine that has a registered installation (RegisterInstallation command). Used to set the user settings part for installations.
Example: If UserSettingsOnce Microsoft Office Then Include Settings\OfficeSettings.fsh

If [Not] UserSettingsOnceABuild <ApplicationName> Then

True once every time the build number installed (RegisterInstallation command) is different than the build number when user settings was applied last time or user settings have never been applied. Always false if the application is not installed.
Example: If UserSettingsOnceABuild Microsoft Office Then Include Settings\OfficeSettings.fsh

If [Not] UserSettingsOnceAVersion <ApplicationName> Then

True once every time the version number installed (RegisterInstallation command) is different than the version number when user settings was applied last time or user settings have never been applied. Always false if the application is not installed.
Example: If UserSettingsOnceAVersion Microsoft Office Then Include Settings\OfficeSettings.fsh
Installations - Windows Program List

If [Not] ProgramInstalled <ProgramName> Then

Tests if the specified program is installed, as shown in the Windows installed programs list. Program names can be found in the installed programs list in the control panel or on your inventory website, if you use inventory. You can specify the left-most part, but the full name must be preferred. Some programs like Adobe Reader postfixes the version number in the application name, in which case, this can easily be factored in by using "Adobe Reader" as program name. However using for example "Microsoft Office" instead of the full program name to detect an office installation is not a good idea, because you can get a positive unintentional hit on "Microsoft Office Outlook Connector" for example. As a general rule of thumb, use the longest possible left-most part.
Example: If ProgramInstalled Microsoft Office Standard 2010 Then

If [Not] ProgramInstalledVersion <ProgramName>, <Version> Then

Tests if the specified program is installed in the specific version, as shown in the Windows installed programs list. You can compare the function by using a simple condition - for example "If [ProgramVersion TeamViewer]<10.2 Then". Program names can be found in the installed programs list in the control panel or on your inventory website, if you use inventory. You can specify the left-most part, but the full name must be preferred. Some programs like Adobe Reader postfixes the version number in the application name, in which case, this can easily be factored in by using "Adobe Reader" as program name. However using for example "Microsoft Office" instead of the full program name to detect an office installation is not a good idea, because you can get a positive unintentional hit on "Microsoft Office Outlook Connector" for example. As a general rule of thumb, use the longest possible left-most part.
Example: If ProgramInstalledVersion Google Chrome,21.0.1180.83 Then

If [Not] ProgramIs32Bit <ProgramName> Then

Tests if the specified program is installed, shown in the Windows installed programs list and is a 32-bit installation. If the program is not installed, the condition is false; use ProgramInstalled to test whether the program is installed at all. Program names can be found in the installed programs list in the control panel or on your inventory website, if you use inventory. You can specify the left-most part, but the full name must be preferred. Some programs like Adobe Reader postfixes the version number in the application name, in which case, this can easily be factored in by using "Adobe Reader" as program name. However using for example "Microsoft Office" instead of the full program name to detect an office installation is not a good idea, because you can get a positive unintentional hit on "Microsoft Office Outlook Connector" for example. As a general rule of thumb, use the longest possible left-most part.
Example: If ProgramIs32Bit Microsoft Office Standard 2010 Then

If [Not] ProgramIs64Bit <ProgramName> Then

Tests if the specified program is installed, shown in the Windows installed programs list and is a 64-bit installation. If the program is not installed, the condition is false; use ProgramInstalled to test whether the program is installed at all. Program names can be found in the installed programs list in the control panel or on your inventory website, if you use inventory. You can specify the left-most part, but the full name must be preferred. Some programs like Adobe Reader postfixes the version number in the application name, in which case, this can easily be factored in by using "Adobe Reader" as program name. However using for example "Microsoft Office" instead of the full program name to detect an office installation is not a good idea, because you can get a positive unintentional hit on "Microsoft Office Outlook Connector" for example. As a general rule of thumb, use the longest possible left-most part.
Example: If ProgramIs64Bit Microsoft Office Standard 2010 Then

If [Not] ProgramIsUserInstalled <ProgramName> Then

Tests if the specified program is installed, shown in the Windows installed programs list and is a per-user installation. If the program is not installed, the condition is false; use ProgramInstalled to test whether the program is installed at all. Program names can be found in the installed programs list in the control panel or on your inventory website, if you use inventory. You can specify the left-most part, but the full name must be preferred. Some programs like Adobe Reader postfixes the version number in the application name, in which case, this can easily be factored in by using "Adobe Reader" as program name. However using for example "Microsoft Office" instead of the full program name to detect an office installation is not a good idea, because you can get a positive unintentional hit on "Microsoft Office Outlook Connector" for example. As a general rule of thumb, use the longest possible left-most part.
Example: If ProgramIsUserInstalled Microsoft Office Standard 2010 Then

If [Not] UserSettingsProgramOnce <ApplicationName> Then

Same as UserSettingsOnce, except it is for a program listed in Windows installed programs list. You can specify the left-most part, meaning you can use "Microsoft Office" instead of the full name to check for any version.

If [Not] UserSettingsProgramOnceAVersion <ApplicationName> Then

Same as UserSettingsOnceAVersion, except it is for a program listed in Windows installed programs list. You can specify the left-most part, meaning you can use "Microsoft Office" instead of the full name to check for any version.
Intervals

If [Not] Once <GlobalIDKey> Then

True only once for the executing computer, use UserOnce for per-user intervals. A globally unique key must be provided that is not used in any other script. To trigger a re-run on all executing computers, change the globally unique key.
Example: If Once InitialMachineModding Then Include SetupScripts\InitialSetup.fsh

If [Not] OnceADay Then
If [Not] OnceADay <NoDays> Then

True only once a day for the machine, which is useful for cleanups; use UserOnceADay for a per-user intervals. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.
Example: If OnceADay Then Include DailyCleanup.fsh

If [Not] OnceAMinute Then
If [Not] OnceAMinute <NoMinutes> Then

True only once a minute for the machine; use UserOnceAMinute for a per-user intervals. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.

If [Not] OnceAMonth Then
If [Not] OnceAMonth <NoMonths> Then

True only once a month for the machine, which is useful for cleanups; use UserOnceAMonth for a per-user intervals. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.
Example: If OnceAMonth Then Include MonthlyCleanup.fsh

If [Not] OnceAnHour Then
If [Not] OnceAnHour <NoHours> Then

True only once an hour for the machine; use UserOnceAnHour for a per-user intervals. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.

If [Not] OnceASecond Then
If [Not] OnceASecond <NoSeconds> Then

True only once a second for the machine; use UserOnceASecond for a per-user intervals. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.

If [Not] OnceAWeek Then
If [Not] OnceAWeek <NoWeeks> Then

True only once a week for the machine, which is useful for cleanups; use UserOnceAWeek for a per-user intervals. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.
Example: If OnceAWeek Then Include WeeklyCleanup.fsh

If [Not] UserOnce <GlobalIDKey> Then

True only once for the current user; useful for for instance welcome information. A globally unique key must be provided that is not used in any other script. To trigger a re-run on all users, change the globally unique key.
Example: If UserOnce ShowWelcome Then ShowWebPage http://intra.acme.com/Welcome,Welcome to Acme

If [Not] UserOnceADay Then
If [Not] UserOnceADay <NoDays> Then

True only once a day for the current user. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.
Example: If UserOnceADay Then Include DailyCleanup.fsh

If [Not] UserOnceAMinute Then
If [Not] UserOnceAMinute <NoMinutes> Then

True only once a minute for the current user. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.

If [Not] UserOnceAMonth Then
If [Not] UserOnceAMonth <NoMonths> Then

True only once a month for the current user. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.
Example: If UserOnceAMonth Then Include MonthlyCleanup.fsh

If [Not] UserOnceAnHour Then
If [Not] UserOnceAnHour <NoHours> Then

True only once an hour for the current user. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.

If [Not] UserOnceASecond Then
If [Not] UserOnceASecond <NoSeconds> Then

True only once a second for the current user. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.

If [Not] UserOnceAWeek Then
If [Not] UserOnceAWeek <NoWeeks> Then

True only once a week for the current user. If the script is modified, intervals are automatically reset, which means that the condition will automatically be true at next execution.
Example: If UserOnceAWeek Then Include WeeklyCleanup.fsh
Local Users and Groups - Groups

If [Not] ComputerIsLocalMemberOf <ComputerName>, <LocalGroupName> Then
If [Not] ComputerIsLocalMemberOf <ComputerName>, <LocalGroupName>, <RemoteComputerName> Then

Tests if the domain computer is a member of the local group. If domain is different than the current users' domain, specify group as <Domain>\<GlobalGroupName>.
Example: If ComputerIsLocalMemberOf AcmeMgmt01,Administrators Then

If [Not] GroupIsLocalMemberOf <DomainGroupName>, <LocalGroupName> Then
If [Not] GroupIsLocalMemberOf <DomainGroupName>, <LocalGroupName>, <RemoteComputerName> Then

Tests if the domain group is a member of the local group. If domain is different than the current users' domain, specify group as <Domain>\<GlobalGroupName>.
Example: If GroupIsLocalMemberOf [DomainAdminsGroup],Administrators Then

If [Not] LocalGroupExists <LocalGroupName> Then
If [Not] LocalGroupExists <LocalGroupName>, <RemoteComputerName> Then

Tests if the specified local group exists.
Example: If LocalGroupExists AcmeGroup Then

If [Not] LocalUserIsLocalMemberOf <LocalGroupName> Then
If [Not] LocalUserIsLocalMemberOf <LocalGroupName>, <LocalUserName> Then
If [Not] LocalUserIsLocalMemberOf <LocalGroupName>, <LocalUserName>, <RemoteComputerName> Then

Tests if the local user is a member of the local group. If no username is specified, logged on local user is assumed.
Example: If LocalUserIsLocalMemberOf AcmeUser,Administrators Then

If [Not] UserIsLocalMemberOf <LocalGroupName> Then
If [Not] UserIsLocalMemberOf <LocalGroupName>, <DomainUserName> Then
If [Not] UserIsLocalMemberOf <GroupName>, <DomainUserName>, <RemoteComputerName> Then

Tests if the Active Directory user is a member of the local group directly or through nested domain groups inside the local group. A nested membership is for instance when a user is member of Domain Admins and Domain Admins is a member of the local Administrators group, then the user is implicitly a member of Administrators and the conditions is true. If no user is specified, the currently logged on user is assumed. If domain is different than the current users' domain, specify user as <Domain>\<UserName>.
Example: If UserIsLocalMemberOf Administrators Then
Local Users and Groups - Users

If [Not] LocalUserCanChangePassword Then
If [Not] LocalUserCanChangePassword <LocalUserName> Then
If [Not] LocalUserCanChangePassword <LocalUserName>, <RemoteComputerName> Then

Tests if the specified local user can change password. If no user is specified, locally logged on user is assumed.
Example: If LocalUserCanChangePassword Then

If [Not] LocalUserEnabled <LocalUserName> Then
If [Not] LocalUserEnabled <LocalUserName>, <RemoteComputerName> Then

Tests if the specified local user account is enabled.
Example: If LocalUserEnabled AcmeUser Then

If [Not] LocalUserExists <LocalUserName> Then
If [Not] LocalUserExists <LocalUserName>, <RemoteComputerName> Then

Tests if the specified local user account exists.
Example: If LocalUserExists AcmeUser Then

If [Not] LocalUserHasPasswordExpiry Then
If [Not] LocalUserHasPasswordExpiry <LocalUserName> Then
If [Not] LocalUserHasPasswordExpiry <LocalUserName>, <RemoteComputerName> Then

Tests if the specified local user's password can expire. If no user is specified, locally logged on user is assumed.
Example: If LocalUserHasPasswordExpiry Then

If [Not] LocalUserIsLocalAdmin Then
If [Not] LocalUserIsLocalAdmin <LocalUserName> Then

Tests if the local user is local administrator. If no user is specified, locally logged on user is assumed.
Example: If LocalUserIsLocalAdmin Then

If [Not] LocalUserMustChangePassword Then
If [Not] LocalUserMustChangePassword <LocalUserName> Then
If [Not] LocalUserMustChangePassword <LocalUserName>, <RemoteComputerName> Then

Tests if the specified local user is forced to change password at next logon. If no user is specified, locally logged on user is assumed.
Example: If LocalUserMustChangePassword Then
Microsoft Office - Installation Status

If [Not] ExcelInstalled Then

Tests if Microsoft Excel is installed or not.

If [Not] OutlookInstalled Then

Tests if Microsoft Outlook is installed or not.

If [Not] WordInstalled Then

Tests if Microsoft Word is installed or not.
Microsoft Outlook - Signatures

If [Not] SignatureExists <SignatureName> Then

Determines if the specified Outlook Signature exists.
Network - Adapters - Wireless

If [Not] WirelessConnection Then
If [Not] WirelessConnection <ConnectionName> Then

Tests if the a connection is wireless. If no adapter is specified, the fastest connection is used to determine the connection type.
Network

If [Not] Alive <RemoteComputerName> Then

Tests if the specified machine or ip is reachable by sending a ping request. The targeting machine has 3 seconds (3000 ms) to respond to the ping request.
Example: If Alive AcmeProxy Then SetProxyServer AcmeProxy,8080

If [Not] ComputerDomainIs <Domain> Then

Tests if the computer is member of the specifies domain.

If [Not] ComputerIsInDomain Then
If [Not] ComputerIsInDomain <RemoteComputerName> Then

Tests if the computer is member of a domain. If no computername has been specified, the executing computer is assumed.
Example: If ComputerIsInDomain Then

If [Not] InClientIpScope <StartIP>, <EndIP> Then

Tests if the client executing a Remote Desktop Services or Citrix ICA session has an IP address between the start IP address and the end IP address, both inclusive. In scenarios without remote sessions, use the InIpScope condition. The ip address of the client running a Remote Desktop Services or Citrix ICA Session will be used. If the session is not a remote session, the result is the same as using InIpScope, where it is checked, if any active network adapter's IP address is between the start IP address and the end IP address, both inclusive. Use the "RemoteSession" condition to detect a remote session.
Example: If InClientIpScope 192.168.0.0,192.168.255.255 Then ConnectPrinter \\AcmePrtSvr\AcmePrt031

If [Not] InIpScope <StartIP>, <EndIP> Then
If [Not] InIpScope <StartIP>, <EndIP>, <HostOrConnectionName> Then

Tests if any active network adapter's IP address is between the start IP address and the end IP address, both inclusive.
Example: If InIpScope 192.168.0.0,192.168.255.255 Then DisableProxyServer

If [Not] IPAddressChanged Then

Tests if the list of IP addresses has changed from last time, the condition was used. The state is persisted.

If [Not] NetworkPresent Then

Tests if a network is present.

If [Not] Offsite Then

Returns true, if the computer is NOT on the corporate network. The condition determines if the Active Directory is unavailable. When the condition is true, it may take 10-15 seconds to determine unavailability, if the computer is joined to a domain.

If [Not] Onsite Then

Returns true, if the computer is on the corporate network. The condition determines whether the Active Directory is available. When the condition is false, it may take 10-15 seconds to determine unavailability, if the computer is joined to a domain.

If [Not] RASConnection Then

Tests if at least one RAS connection is present. Useful for testing VPN connectivity.
Operating System

If [Not] Server Then

True if operating system is a server version of Windows. Can be used for instance to stop a logon script execution on a server.
Example: If Server Then Exit

If [Not] Windows10 Then

True if the operating system is Windows 10.

If [Not] Windows2000 Then

True if operating system is Windows 2000.

If [Not] Windows2003 Then

True if the operating system is Windows 2003 Server (can be both R1 and R2).

If [Not] Windows2008 Then

True if the operating system is Windows 2008 Server (combine with the OperatingSystemVersionMinor function to determine R1 or R2).

If [Not] Windows2012 Then

True if operating system is Windows 2012 Server (combine with the OperatingSystemVersionMinor function to determine R1 or R2).

If [Not] Windows2016 Then

True if operating system is Windows 2016 Server.

If [Not] Windows2019 Then

True if operating system is Windows 2019 Server.

If [Not] Windows32Bit Then

True if operating system is a 32 bit version of Windows.

If [Not] Windows64Bit Then

True if operating system is a 64 bit version of Windows.

If [Not] Windows7 Then

True if operating system is Windows 7.

If [Not] Windows8 Then

True if the operating system is Windows 8.0 or Windows 8.1. To determine if the operating system is Windows 8.0 or Windows 8.1, use the Windows8 condition and check if the function OperatingSystemVersionMinor returns 2 (Windows 8.0 = Windows Version 6.2) or 3 (Windows 8.1 = Windows Version 6.3).

If [Not] WindowsNT4 Then

True if operating system is Windows NT 4.

If [Not] WindowsVista Then

True if operating system is Windows Vista.

If [Not] WindowsXP Then

True if operating system is Windows XP.

If [Not] Workstation Then

True if operating system is a workstation version of Windows.
Printers - Locations

If [Not] PrinterLocationSelected Then

Returns true if a valid printer location is selected using the printer location menu. Useful for asking once for printer location.
Printers

If [Not] PrinterConnected <UNCPath> Then

Detects if the specified network printer is connected or not.
Processes - User Processes

If [Not] UserProcessRunning <ProcessName> Then

Tests if the specified process is running for the current user. Processes running under other accounts are ignored, which is useful for Remote Desktop Services user scripts.
Example: If UserProcessRunning Acme.Exe Then KillProcess Acme.Exe
Processes - Windows

If [Not] WindowOpen <Caption> Then

Tests if the specified window is open by the current user. The caption can be partial.
Example: If WindowOpen Notepad Then
Processes

If [Not] ProcessRunning <ProcessName> Then
If [Not] ProcessRunning <ProcessName>, <RemoteComputerName> Then

Tests if the specified process is running for any user.
Example: If ProcessRunning Acme.Exe Then KillProcess Acme.Exe
Registry - 32 Bit

If [Not] RegistryKeyExistsx86 <RegistryKey> Then

Tests if the specified registry key exists. HKey_Local_Machine, HKey_Current_User and HKey_Classes_Root can be abbreviated to HKLM, HKCU and HKCR. Key is checked in the redirected registry for 32-bit applications on a 64-bit operating system. Works the same as RegistryKeyExists on a 32-bit operating system or non-redirected keys.
Example: If RegistryKeyExistsx86 HKCU\Software\Acme Then

If [Not] RegistryValueExistsx86 <RegistryKey>, <Value> Then

Tests if the specified registry value exists. To test the content of the value, use the RegistryValuex86 function instead, for instance "If Not [RegistryValuex86 HKCU\Control Panel\Desktop\WallPaper]=[WinDir]\Acme.png Then". Value is checked in the redirected registry for 32-bit applications on a 64-bit operating system. Works the same as RegistryValueExists on a 32-bit operating system or non-redirected keys. HKey_Local_Machine, HKey_Current_User and HKey_Classes_Root can be abbreviated to HKLM, HKCU and HKCR.
Example: If RegistryValueExistsx86 HKCU\Software\Acme,Setup Then
Registry

If [Not] RegistryKeyExists <RegistryKey> Then

Tests if the specified registry key exists. HKey_Local_Machine, HKey_Current_User and HKey_Classes_Root can be abbreviated to HKLM, HKCU and HKCR.
Example: If RegistryKeyExists HKCU\Software\Acme Then

If [Not] RegistryValueExists <RegistryKey>, <Value> Then

Tests if the specified registry value exists. To test the content of the value, use the RegistryValue function instead, for instance "If Not [RegistryValue HKCU\Control Panel\Desktop\WallPaper]=[WinDir]\Acme.png Then". HKey_Local_Machine, HKey_Current_User and HKey_Classes_Root can be abbreviated to HKLM, HKCU and HKCR.
Example: If RegistryValueExists HKCU\Software\Acme,Setup Then
Remote Desktop Services - Client

If [Not] LastRdpSessionFailed Then

Tests if the last executed Remote Desktop Services client session failed.

If [Not] RdpClientInstalled Then

Tests if a Remote Desktop Services client is installed.
Example: If Not RdpClientInstalled Then Exit
Remote Desktop Services - Server

If [Not] RdpSession Then

Tests if the session is running through Remote Desktop Services. Useful for stopping or controlling logon script execution on Remote Desktop Services. To test for both Remote Desktop Services and ICA sessions at the same time, use the "RemoteSession" condition.
Example: If RdpSession Then Exit

If [Not] RemoteAppSession Then

Tests if the session is running as a Microsoft RemoteApp (versus full remote desktop or citrix) in a Remote Desktop Services session. Use the RemoteSession condition to test for for both RemoteApp and full desktop sessions (and citrix sessions). Useful for stopping or controlling logon script execution.
Example: If RemoteAppSession Then Exit

If [Not] RemoteSession Then

Tests if the session is running either as a Remote Desktop Services session or a Citrix ICA session. Useful for stopping or controlling logon script execution on remote sessions.
Example: If RemoteSession Then Exit

If [Not] TerminalServer Then

Tests if the session is on terminal server. Useful for stopping logon script execution on Remote Desktop Services.
Example: If TerminalServer Then Exit

If [Not] UserLoggedOn Then
If [Not] UserLoggedOn <RemoteComputerName> Then

Tests if at least one user is logged on to the machine. Useful for Remote Desktop Services tasks.
Example: If UserLoggedOn Then Exit
SCCM

If [Not] InTaskSequence Then

Determines if the script is running in an SCCM Task Sequence.
Example: If InTaskSequence And TaskVarExists InstallFolder Then SyncDir Bin,[TaskVar InstallFolder]

If [Not] LastTaskActionFailed Then

Determines if the previous Task Sequence action failed (same as reading the _SMSTSLastActionSucceeded variable).

If [Not] SCCMClientInstalled Then

Determines if the SCCM client is installed or not.
Example: If Not SCCMClientInstalled Then Exit

If [Not] TaskSequenceIsUserStarted Then

Determines if the Task Sequence was initiated by a user (same as reading the _SMSTSUserStarted variable).

If [Not] TaskVarExists <VariableName> Then

Determines if the SCCM Task Sequence variable exists.
Example: If TaskVarExists InstallFolder Then SyncDir Bin,[TSValue InstallFolder]
Script Control

If [Not] HasFailed Then

Tests if the current script has failed at least once. The script must be in error-resume mode to be executing at all after an error occurs, either by using the /IE command-line switch or the ResumeOnError command.
Example: If HasFailed Then ShowMessage "The script has failed:[Return][Return][LastError]",Execution error

If [Not] LastLineFailed Then

Tests if the previous non-empty script line failed. Useful for showing custom errors to users, when certain operations fail. The script must be in error-resume mode to be executing at all after an error occurs, either by using the /IE command-line switch or the ResumeOnError command.
Example: If LastLineFailed Then ShowMessage There was a problem backing up your personal files. Please contact your administrator,Backup error
Security

If [Not] BitLockerEnabled Then
If [Not] BitLockerEnabled <DriveLetter> Then

Tests if BitLocker is enabled on a drive. Default is the system drive. Admin rights are required.
Services

If [Not] ServiceInstalled <ServiceName> Then

Tests if the service is installed. Both ServiceName and DisplayName can be used.
Example: If ServiceInstalled MSSQL$SQLEXPRESS Then

If [Not] ServiceRunning <ServiceName> Then

Tests if the service is in a running state. Both ServiceName and DisplayName can be used.
Example: If ServiceRunning MSSQL$SQLEXPRESS Then
SharePoint

If [Not] SharePointLoginCancelled Then

Tests if the last login attempt to Office 365 was cancelled using the ConnectSharePoint or ConnectOneDrive commands.
Shares

If [Not] ShareExists <UNCPath> Then

Tests if the specified share exists.
Example: If ShareExists \\[ComputerName]\WinShared$ Then SetSharePermissions \\[ComputerName]\WinShared$,Acme\Domain Users:Read,Acme\Domain Admins:Full Control
Strings

If [Not] Contains <String>, <SearchString> Then

Tests if the string contains the search string.
Example: If Contains [Var LastServer],AcmeServer01 Then

If [Not] Digits <String> Then

Tests if all characters in the string are numbers (0-9).

If [Not] Empty <String> Then

Tests if the string is empty. Useful for testing when functions return an empty string. Testing for empty variables can be written in a shorter form using the VarIsEmpty condition.
Example: If Not Empty [Env LastServer] Then

If [Not] EndsWith <String>, <SearchString> Then

Tests if the string ends with the search string.
Example: If EndsWith [Var Directory],.profile Then

If [Not] Letters <String> Then

Tests if all characters in the string are letters (A-Z).

If [Not] LettersOrDigits <Char> Then

Tests if all characters in the string are letters (A-Z) or digits (0-9).

If [Not] LowerCase <String> Then

Tests if all characters in the string are lower case.

If [Not] Number <String> Then

Tests if the string is a number.

If [Not] SafePassword <String> Then

Tests if the string is a strong password. The condition is false, if there are less than 6 characters, special characters, missing mixed casing or missing mix of letters and numbers.
Example: If Not SafePassword [Var Password] Then ShowErrorMessage The password does not meet the criteria for a safe password.

If [Not] StartsWith <String>, <SearchString> Then

Tests if the string starts with the search string.
Example: If StartsWith [Var File],Log_ Then

If [Not] UpperCase <String> Then

Tests if all characters in the string are upper case.
TeamViewer

If [Not] TeamViewerInstalled Then

Tests if TeamViewer is installed.
User Change

If [Not] ScriptIsElevated Then

Determines if the executing user is running in an elevated User Account Control state. If UAC is not enabled, the condition returns whether or not the executing user is local administrator.
Example: If Not ScriptIsElevated Then Exit

If [Not] UACEnabled Then

Determines if User Account Control (UAC) is enabled or not. Will return false on operating systems prior to Windows Vista.
Example: If Not UACEnabled Then Exit
Variables

If [Not] VarIsEmpty <Variable> Then

Tests if the variable is empty or not.
Example: If VarIsEmpty MyVar Then Exit
Web

If [Not] WebAlive <Url> Then

Tests if the server behind the url is alive by checking, if the url returns a valid http response.
Example: If Not WebAlive www.acme.com Then Exit
Windows Installer - FastTrack MSI

If [Not] MSIInstallContext Then

Determines if the current execution context is executing a script that must install an application inside an MSI file build with FastTrack. Use MSIUninstallContext to determine uninstallation.
Example: If MSIInstallContext Then Run Setup.Exe,/S

If [Not] MSIUninstallContext Then

Determines if the current execution context is a script that must un-install an applicationinside an MSI file build with FastTrack. Use MSIInstallContext to determine installation.
Example: If MSIUninstallContext Then Run Setup.Exe,/S /U
Windows Installer

If [Not] MSIFileInstalled <MSIFile> Then

Determines if a Windows Installer MSI file is already installed.

If [Not] MSIInstalled Then

Determines if Windows Installer is installed.
Example: If MSIInstalled Then InstallMSI AcroRead.msi

If [Not] MSIRebootRequired Then

Determines if a Windows Installer reboot is necessary to perform further installations.
Example: If MSIRebootRequired Then RebootForced
XML

If [Not] XMLNodeExists <XML>, <XmlPath> Then
If [Not] XMLNodeExists <File>, <XmlPath> Then

Tests if the node exist in the xml.


Rating: 5 out of 5

"Use this as a replacement for VBScript and PowerShell"

"It's easy to include attractive GUI elements in FastTrack scripts, beyond the basic dialog boxes and text input that VBScript offers ... Another powerful feature is the ability to distribute scripts as Windows Installer (.msi) or standard .exe files. Although interesting in its own right, this ability results in a much more intriguing capability: to repackage -- or wrap -- software installers as .msi files without using snapshots. If you've ever created an .msi installer file from before-and-after system snapshots, for use with a software distribution system such as Group Policy or SCCM, then you know how hit-and-miss the results can be."

Read full review


Rating: 8 out of 10

"Faster than the rest"

"We found the FastTrack syntax to be more transparent and easier to learn than Microsoft's PowerShell – the editor in particular provided good support in this regard. the Script Editor offers a large number of options from the command set through to simple output of graphical elements, which cannot be achieved at all with PowerShell or other solutions or only with a significantly greater level of effort."

"Anyone wanting to tackle the many hurdles in everyday admin and especially anyone for whom logon scripts and client automation is a priority will benefit from the variety of functions offered by FastTrack."

Review in English      Review in German