The PSADT has several internal variables which can be used in your script. Outlined below are each of them:
Variable Description
Toolkit Name
variable | Description |
---|---|
$appDeployToolkitName | Short name of toolkit without spaces |
$appDeployMainScriptFriendlyName | Full name of toolkit including spaces |
Script Info
Variable | Description |
---|---|
$appDeployMainScriptVersion | Version number of the toolkit |
$appDeployMainScriptMinimumConfigVersion | Minimum version of the config XML file required by the toolkit |
$appDeployMainScriptDate | Date toolkit was last modified |
$appDeployMainScriptParameters | Contains all parameters and values specified when toolkit was launched |
DateTime And Culture
Variable | Description |
---|---|
$currentDateTime | Current date & time when the toolkit was launched |
$currentTime | Current time when toolkit was launched |
$currentDate | Current date when toolkit was launched |
$currentTimeZoneBias | Time Zone bias based on the current date/time |
$culture | Object which contains all of the current Windows culture settings |
$currentLanguage | Current Windows two letter ISO language name (e.g. EN, FR, DE, JA) |
$currentUILanguage | Current Windows two letter UI ISO language name (e.g. EN, FR, DE, JA) |
Environment Variables (path examples are for Windows 7 and higher)
Variable | Description |
---|---|
$envHost | Object that contains details about the current PowerShell console |
$envShellFolders | Object that contains properties from registry path: HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders |
$envAllUsersProfile | %ALLUSERSPROFILE% (e.g. C:\ProgramData) |
$envAppData | %APPDATA% (e.g. C:\Users{username}\AppData\Roaming) |
$envArchitecture | %PROCESSOR_ARCHITECTURE% (e.g. AMD64/IA64/x86). This doesn’t tell you the architecture of the processor but only of the current process, so it returns “x86” for a 32-bit WOW process running on 64-bit Windows. |
$envCommonProgramFiles | %COMMONPROGRAMFILES% (e.g. C:\Program Files\Common Files) |
$envCommonProgramFilesX86 | %COMMONPROGRAMFILES(x86)% (e.g. C:\Program Files (x86)\Common Files) |
$envCommonDesktop | e.g. C:\Users\Public\Desktop |
$envCommonDocuments | e.g. C:\Users\Public\Documents |
$envCommonStartMenuPrograms | e.g. C:\ProgramData\Microsoft\Windows\Start Menu\Programs |
$envCommonStartMenu | e.g. C:\ProgramData\Microsoft\Windows\Start Menu |
$envCommonStartUp | e.g. C:\ProgramData\Microsoft\Windows\Start Menu |
$envCommonTemplates | e.g. C:\ProgramData\Microsoft\Windows\Templates |
$envComputerName | $COMPUTERNAME% (e.g. computer1) |
$envComputerNameFQDN | Fully qualified computer name (e.g. computer1.conto.contoso.com) |
$envHomeDrive | %HOMEDRIVE% (e.g. C:) |
$envHomePath | %HOMEPATH% (e.g. \Users{username}) |
$envHomeShare | %HOMESHARE% Used instead of HOMEDRIVE if the home directory uses UNC paths. |
$envLocalAppData | %LOCALAPPDATA% (e.g. C:\Users{username}\AppData\Local) |
$envLogicalDrives | An array containing all of the logical drives on the system. |
$envProgramFiles | %PROGRAMFILES% (e.g. C:\Program Files) |
$envProgramFilesX86 | %ProgramFiles(x86)% (e.g. C:\Program Files (x86). Only on 64-bit systems, is used to store 32 bit programs. |
$envProgramData | %PROGRAMDATA% (e.g. C:\ProgramData) |
$envPublic | %PUBLIC% (e.g. C:\Users\Public) |
$envSystemDrive | %SYSTEMDRIVE% (e.g. C:) |
$envSystemRAM | System RAM as an integer |
$envSystemRoot | %SYSTEMROOT% (e.g. C:\Windows) |
$envTemp | Checks for the existence of environment variables in the following order and uses the first path found: - The path specified by the TMP environment variable. - The path specified by the TEMP (e.g. C:\Users{Username}\AppData\Local\Temp) environment variable. - The path specified by the USERPROFILE environment variable. - The Windows root (C:\Windows) directory. |
$envUserCookies | C:\Users{username}\AppData\Local\Microsoft\Windows\INetCookies |
$envUserDesktop | C:\Users{username}\Desktop |
$envUserFavorites | C:\Users{username}\Favorites |
$envUserInternetCache | C:\Users{username}\AppData\Local\Microsoft\Windows\INetCache |
$envUserInternetHistory | C:\Users{username}\AppData\Local\Microsoft\Windows\History |
$envUserMyDocuments | C:\Users{username}\Documents |
$envUserName | %USERNAME% (e.g. {username}) |
$envUserProfile | %USERPROFILE% (e.g. %SystemDrive%\Users{username}) |
$envUserSendTo | C:\Users{username}\AppData\Roaming\Microsoft\Windows\SendTo |
$envUserStartMenu | C:\Users{username}\AppData\Roaming\Microsoft\Windows\Start Menu |
$envUserStartMenuPrograms | C:\Users{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs |
$envUserStartUp | C:\Users{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
$envSystem32Directory | C:\WINDOWS\system32 |
$envWinDir | %WINDIR% (e.g. C:\Windows) |
Domain Membership
Variable | Description |
---|---|
$IsMachinePartOfDomain | Is machine joined to a domain (e.g. $true/$false) |
$envMachineWorkgroup | If machine not joined to domain, what is the WORKGROUP it belongs to? |
$envMachineADDomain | Root AD domain name for machine (e.g. |
$envLogonServer | FQDN of %LOGONSERVER% used for authenticating logged in user |
$MachineDomainController | FQDN of an AD domain controller used for authentication |
$envMachineDNSDomain | Full Domain name for machine (e.g. |
$envUserDNSDomain | %USERDNSDOMAIN%. Root AD domain name for user (e.g. |
$envUserDomain | %USERDOMAIN% (e.g. |
Operating System
Variable | Description |
---|---|
$envOS | Object that contains details about the operating system |
$envOSName | Name of the operating system (e.g. Microsoft Windows 8.1 Pro) |
$envOSServicePack | Latest service pack installed on the system (e.g. Service Pack 3) |
$envOSVersion | Full version number of the OS (e.g. {major}.{minor}.{build}.{revision}) |
$envOSVersionMajor | Major portion of the OS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envOSVersionMinor | Minor portion of the OS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envOSVersionBuild | Build portion of the OS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envOSVersionRevision | Revision portion of the OS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envOSProductType | OS product type represented as an integer (e.g. 1/2/3) |
$IsServerOS | Is server OS? (e.g. $true/$false) |
$IsDomainControllerOS | Is domain controller OS? (e.g. $true/$false) |
$IsWorkStationOS | Is workstation OS? (e.g. $true/$false) |
$envOSProductTypeName | OS product type name (e.g. Server/Domain Controller/Workstation/Unknown) |
$Is64Bit | Is this a 64-bit OS? (e.g. $true/$false) |
$envOSArchitecture | Represents the OS architecture (e.g. 32-Bit/64-Bit) |
Current Process Architecture
Variable | Description |
---|---|
$Is64BitProcess | Is the current process 64-bits? (e.g. $true/$false) |
$psArchitecture | Represents the current process architecture (e.g. x86/x64) |
PowerShell And CLR (.NET) Versions
Variable | Description |
---|---|
$envPSVersionTable | Object containing PowerShell version details from PS variable $PSVersionTable |
$envPSVersion | Full version number of PS (e.g. {major}.{minor}.{build}.{revision}) |
$envPSVersionMajor | Major portion of PS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envPSVersionMinor | Minor portion of PS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envPSVersionBuild | Build portion of PS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envPSVersionRevision | Revision portion of PS version number (e.g. {major}.{minor}.{build}.{revision}) |
$envCLRVersion | Full version number of .NET used by PS (e.g. {major}.{minor}.{build}.{revision}) |
$envCLRVersionMajor | Major portion of PS .NET version number (e.g. {major}.{minor}.{build}.{revision}) |
$envCLRVersionMinor | Minor portion of PS .NET version number (e.g. {major}.{minor}.{build}.{revision}) |
$envCLRVersionBuild | Build portion of PS .NET version number (e.g. {major}.{minor}.{build}.{revision}) |
$envCLRVersionRevision | Revision portion of PS .NET version number (e.g. {major}.{minor}.{build}.{revision}) |
Permissions/Accounts
Variable | Description |
---|---|
$CurrentProcessToken | Object that represents the current processes Windows Identity user token. Contains all details regarding user permissions |
$CurrentProcessSID | Object that represents the current process account SID (e.g. S-1-5-32-544) |
$ProcessNTAccount | Current process NT Account (e.g. NT AUTHORITY\SYSTEM) |
$ProcessNTAccountSID | Current process account SID (e.g. S-1-5-32-544) |
$IsAdmin | Is the current process running with elevated admin privileges? (e.g. $true/$false) |
$IsLocalSystemAccount | Is the current process running under the SYSTEM account? (e.g. $true/$false) |
$IsLocalServiceAccount | Is the current process running under LOCAL SERVICE account? (e.g. $true/$false) |
$IsNetworkServiceAccount | Is the current process running under the NETWORK SERVICE account? (e.g. $true/$false) |
$IsServiceAccount | Is the current process running as a service? (e.g. $true/$false) |
$IsProcessUserInteractive | Is the current process able to display a user interface? |
$LocalSystemNTAccount | Localized NT account name of the SYSTEM account (e.g. NT AUTHORITY\SYSTEM) |
$SessionZero | Is the current process currently in session zero? In session zero isolation, process is not able to display a user interface. (e.g. $true/$false) |
Script Name and Script Paths
Variable | Description |
---|---|
$scriptPath | Fully qualified path of the toolkit (e.g. C:\Testing\AppDeployToolkit\AppDeployToolkitMain.ps1) |
$scriptName | Name of toolkit without file extension (e.g. AppDeployToolkitMain) |
$scriptFileName | Name of toolkit file (e.g. AppDeployToolkitMain.ps1) |
$scriptRoot | Folder that the toolkit is located in. (e.g. C:\Testing\AppDeployToolkit) |
$invokingScript | Fully qualified path of the script that invoked the toolkit (e.g. C:\Testing\Deploy-Application.ps1) |
$scriptParentPath | If toolkit was invoked by another script: contains folder that the invoking script is located in. If toolkit was not invoked by another script: contains parent folder of the toolkit |
App Deploy Script Dependency Files
Variable | Description |
---|---|
$appDeployLogoIcon | Path to the logo icon file for the toolkit (e.g. $scriptRoot\AppDeployToolkitLogo.ico) |
$appDeployLogoBanner | Path to the logo banner file for the toolkit (e.g. $scriptRoot\AppDeployToolkitBanner.png) |
$appDeployConfigFile | Path to the config XML file for the toolkit (e.g. $scriptRoot\AppDeployToolkitConfig.xml) |
$appDeployToolkitDotSourceExtensions | Name of the optional extensions file for the toolkit (e.g. AppDeployToolkitExtensions.ps1) |
$xmlConfigFile | Contains the entire contents of the XML config file |
$configConfigVersion | Version number of the config XML file |
$configConfigDate | Last modified date of the config XML file |
Script Directories
Variable | Description |
---|---|
$dirFiles | “Files” sub-directory of the toolkit |
$dirSupportFiles | “SupportFiles” sub-directory of the toolkit |
$dirAppDeployTemp | Toolkit temp directory. Configured in XML Config file option “Toolkit_TempPath”. (e.g. Toolkit_TempPath$appDeployToolkitName) |
Script Naming Convention
Variable | Description |
---|---|
$appVendor | Name of the manufacturer that created the package being deployed (e.g. Microsoft) |
$appName | Name of the application being packaged (e.g. Office 2010) |
$appVersion | Version number of the application being packaged (e.g. 14.0) |
$appLang | UI language of the application being packaged (e.g. EN) |
$appRevision | Revision number of the package (e.g. 01) |
$appArch | Architecture of the application being packaged (e.g. x86/x64) |
$installTitle | Combination of the most important details about the application being packaged (e.g. “$appVendor $appName $appVersion”) |
$installName | Combination of any of the following details which were provided: $appVendor + ‘’ + $appName + ‘’ + $appVersion + ‘’ + $appArch + ‘’ + $appLang + ‘_’ + $appRevision |
Executables
Variable | Description |
---|---|
$exeWusa | Name of system utility that installs Standalone Windows Updates (e.g. wusa.exe) |
$exeMsiexec | Name of system utility that install Windows Installer files (e.g. msiexec.exe) |
$exeSchTasks | Path of system utility that allows management of scheduled tasks (e.g. $envWinDir\System32\schtasks.exe) |
Regex Patterns
Variable | Description |
---|---|
$MSIProductCodeRegExPattern | Contains the regex pattern used to detect a MSI product code. |
Registry Keys
Variable | Description |
---|---|
$regKeyApplications | Array containing the path to the 32-bit and 64-bit portions of the registry that contain information about programs installed on the system. ‘HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall’,‘HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall’ |
$regKeyLotusNotes | Contains the registry path that stores information about a Lotus Notes installation.‘HKLM:SOFTWARE\Lotus\Notes’,‘HKLM:SOFTWARE\Wow6432Node\Lotus\Notes’ |
$regKeyAppExecution | Contains the registry path where application execution can be blocked by configuring the ‘Debugger’ value.‘HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options’ |
$regKeyDeferHistory | The path in the registry where the defer history for the package being installed is stored."$configToolkitRegPath$appDeployToolkitName\DeferHistory$installName" |
COM Objects
Variable | Description |
---|---|
$Shell | Represents and allows use of the WScript.Shell COM object. |
$ShellApp | Represents and allows use of the Shell.Application COM object. |
Log File
Variable | Description |
---|---|
$logName | Name of the script log file: $installName + ‘’ + $appDeployToolkitName + ‘’ + $deploymentType + ‘.log’ |
$logTempFolder | Temporary log file directory used if the option to compress log files was selected in the config XML file: $envTemp$Temporary log file directory used if the option to compress log files was selected in the config XML file: $installName |
$configToolkitLogDir | Path to log directory defined in XML config file |
$DisableScriptLogging | Dot source this ScriptBlock to disable logging messages to the log file |
$RevertScriptLogging | Dot source this ScriptBlock to revert script logging back to its original setting |
Script Parameters
Variable | Description |
---|---|
$deployAppScriptParameters | Non-default parameters that Deploy-Application.ps1 was launched with. |
$appDeployMainScriptParameters | Non-default parameters that AppDeployToolkitMain.ps1 was launched with. |
$appDeployExtScriptParameters | Non-default parameters that AppDeployToolkitExtensions.ps1 was launched with. |
Logged On Users
Variable | Description |
---|---|
$LoggedOnUserSessions | Object that contains account and session details for all users |
$usersLoggedOn | Array that contains all of the NTAccount names of logged in users |
$CurrentLoggedOnUserSession | Object that contains account and session details for the current process if it is running as a logged in user. This is the object from $LoggedOnUserSessions where the IsCurrentSession property is $true |
$CurrentConsoleUserSession | Objects that contains the account and session details of the console user (user with control of the physical monitor, keyboard, and mouse). This is the object from $LoggedOnUserSessions where the IsConsoleSession property is $true |
$RunAsActiveUser | The active console user. If no console user exists but users are logged in, such as on terminal servers, then the first logged-in non-console user |
Miscellaneous
Variable | Description |
---|---|
$dpiPixels | DPI Scale (property only exists if DPI scaling has been changed on the system at least once) |
$runningTaskSequence | Is the current process running in a SCCM task sequence? (e.g. $true/$false) |
$IsTaskSchedulerHealthy | Are the task scheduler services in a healthy state? (e.g. $true/$false) |
$invalidFileNameChars | Array of all invalid file name characters used to sanitize variables which may be used to create file names |
$useDefaultMsi | A Zero-Config MSI installation was detected. |