- Overview
- App Events
- Flowchart Builder
- Callout
- Complex Scenarios
- Credentials
- Data Service
- About the Data Service activity package
- Project compatibility
- Create Entity Record
- Update Entity Record
- Delete Entity Record
- Get Entity Record by Id
- Query Entity Records
- Query Multiple Entity Records
- Upload File to Record Field
- Download File from Record Field
- Delete File from Record Field
- Create Multiple Entity Records
- Update Multiple Entity Records
- Delete Multiple Entity Records
- Form
- Release notes
- Project compatibility
- Real Time Forms
- Updating form data
- Running forms using JavaScript
- Customizing Forms Using CSS
- Conditional components
- Adding multiple components on the same row in Columns
- Using the Data Table component
- Get File/Folder path
- Reading cell values from a Data Grid component
- Displaying PDF files
- Displaying images in forms
- Scrolling through Data Grids
- Using Dev Tools with forms
- Calculate form component values
- Managing dates in forms
- Opening hyperlinks inside forms
- Displaying a default tab in forms
- Displaying the full label of a component
- Searching long strings in drop-down lists
- Dynamically set form values
- About the pre 23.4 Form experience
- Project Compatibility
- Real Time Forms
- Dynamic Checkboxes
- Conditional Dropdowns
- Displaying a Default Tab
- Displaying Images
- Displaying PDF Files
- Displaying the Full Label
- Dynamic HTML Elements
- Managing Dates
- Searching Long Strings in Drop-downs
- Customizing Forms Using Local CSS Files
- Executing Do Block On Checkbox Change
- Customizing Columns Width
- Updating Form Data
- Resetting Collection Data
- Advanced Logic
- Executing Do Block on Dropdown Option Change
- Reading Cell Values From a Data Grid Component
- Conditional Components
- Scrolling Through Data Grid Components
- Using the Grid Component
- Dev Tools
- Calculated Value
- Dynamic Dropdowns
- Switching Tabs With Button Click
- Opening Hyperlinks Inside Form
- FTP
- IPC
- Automation Ops Pipelines
- Release notes
- About the Pipelines activity package
- Project compatibility
- Activate Solution Deployment
- Analyze
- Build
- Clone
- Delete Solution Package
- Deploy Solution
- Download Package
- Download Solution Package
- Download Solution Package Configuration
- Publish Package
- Publish Solution Package
- Re-sync Solution Project
- Run Existing Test Set
- Run Tests
- Stage
- Uninstall Solution
- Update Process
- Upload Solution Package
- Persistence
- Release notes
- Project compatibility
- Bulk Form Designer
- Start Job And Get Reference
- Wait For Job And Resume
- Add Queue Item And Get Reference
- Wait For Queue Item And Resume
- Wait For Form Task And Resume
- Resume After Delay
- Assign Tasks
- Create External Task
- Wait For External Task And Resume
- Complete Task
- Forward Task
- Get Form Tasks
- Get Task Data
- Get App Tasks
- Add Task Comment
- Update Task Labels
- Create App Task
- Wait For App Task And Resume
- Configure task timer
- Working with App tasks
- Building Your First Form Action
- Advanced Controls for Drop-downs
- Embedding Objects in Form Actions
- Allowing Users to Upload Files to the Storage Bucket
- Adding Advanced Logic Using Java Script
- Setting a Default Tab
- Removing the Delete button from Edit Grid using custom CSS
- Customizing Edit Grid templates
- Using buttons to trigger custom logic
- Using an External Form Layout
- Dynamically expanding form components at runtime
- Aligning the content of a form component from left to right using JSON attributes
- Sample Workflows
- System
- Release notes
- Project compatibility
- Supported character encoding
- RegEx Builder Wizard
- Add Data Column
- Add Data Row
- Add Log Fields
- Add or Subtract from Date
- Add Transaction Item
- Add Queue Item
- Append Item to Collection
- Append Item to List
- Append Line
- Beep
- Break / Exit Loop
- Browse for File
- Browse for Folder
- Build Collection
- Build Data Table
- Bulk Add Queue Items
- Change Case for Text
- Change Type
- Check False
- Check True
- Clear Data Table
- Collection to Data Table
- Comment
- Compress/Zip Files
- Copy File
- Copy Folder
- Combine text
- Comment Out / Disabled Activities
- Continue / Skip Current
- Create File
- Create Folder
- Create List
- Custom Input
- Delete
- Delete File
- Delete Folder
- Delete Storage File
- Delete Queue Items
- Disable Local Trigger
- Do While
- Download file from URL
- Download Storage File
- Enable Local Trigger
- Evaluate Business Rule
- Exists in Collection
- Extract/Unzip Files
- Extract Date and Time from Text
- Extract Text
- File Change Trigger
- File Exists
- Filter Collection
- Filter Data Table
- Folder Exists
- For Each
- For Each File in Folder
- File Change Trigger V3
- Find and Replace
- Find Matching Patterns
- For Each Folder in Folder
- For Each Row in Data Table
- Format Date as Text
- Format Value
- Generate Data Table From Text
- Get Asset
- Get Credential / Get Orchestrator Credential
- Get Current Job Info
- Get Environment Folder
- Get Environment Variable
- Get File Info
- Get Folder Info
- Get Jobs
- Get Processes
- Get Row Item
- Get Secret
- Get Transaction Item
- Get Username/Password
- Get Queue Items
- Global Variable Changed Trigger
- Input Dialog
- Invoke Code
- Invoke Com Method
- Invoke Power Shell
- Invoke Process
- Invoke VBScript
- Invoke Workflow File
- Is Text Matching
- Join Data Tables
- Kill Process
- Launch Workflow Interactive
- List Storage Files
- Log Message
- Lookup Data Table
- Manual Trigger
- Merge Collections
- Merge Data Table
- Message Box
- Modify Date
- Modify Text
- Move File
- Move Folder
- Multiple Assign
- New Item Added to Queue
- Notify Global Variable Changed
- Orchestrator HTTP Request
- Output Data Table
- Parallel
- Parallel for each
- Path Exists
- Postpone Transaction Item
- Process End Trigger
- Process Start Trigger
- Process Tracking Scope
- Raise Alert
- Read List Item
- Read Text File
- Read Storage Text
- Remove Data Column
- Remove Data Row
- Remove Duplicate Rows
- Remove From Collection
- Remove Log Fields
- Replace Matching Patterns
- Repeat Number of Times
- Repeat Trigger
- Rename File
- Rename Folder
- Report Status
- Reset Timer
- Resume Timer
- Retry Scope
- Return
- Run Local Triggers
- Run Agent
- Run Job
- Run Parallel Process
- Set Asset
- Send Email Notification
- Set Credential
- Set Environment Variable
- Set Secret
- Set Task Status
- Set Trace Status
- Set Transaction Progress
- Set Transaction Status
- Should Stop
- Split Text
- Sort Data Table
- Start Timer
- Start Job
- Stop Job
- Stop Local Triggers
- Stop Timer
- Text to Left/Right
- Text to Upper/Lowercase
- Time Trigger
- Trigger Scope
- Track Object
- Timeout Scope
- Update Row Item
- Update List Item
- Upload Storage File
- Wait for Download
- Wait Queue Item
- While
- Workflow Placeholder
- Write Storage Text
- Write Text File
- AddDataRow
- AddQueueItem
- AddTransactionItem
- AppendLine
- BulkAddQueueItems
- ClearDataTable
- CompressZipFiles
- CopyFile
- CreateFile
- CreateFolder
- DeleteFileOrFolder
- DeleteQueueItems
- DeleteStorageFile
- DownloadStorageFile
- ExtractUnzipFiles
- FilterDataTable
- GetAsset
- GetCredential
- GetJobs
- GetQueueItem
- GetQueueItems
- GetResourceForLocalPath
- GetRowItem
- GetTransactionItem
- InvokeProcess
- JoinDataTables
- ListStorageFiles
- LookUpDataTable
- MergeDataTable
- MoveFile
- OrchestratorHTTPRequest
- OutputDataTable
- PathExists
- PostponeTransactionItem
- ReadStorageText
- ReadTextFile
- RemoveDataColumn
- RemoveDuplicateRows
- Replace
- SetAsset
- SetCredential
- SetTransactionProgress
- SetTransactionStatus
- SortDataTable
- StartJob
- StopJob
- UpdateRowItem
- UploadStorageFile
- WaitQueueItem
- WriteStorageText
- WriteTextFile
- Testing
- Release notes
- About the Testing activity package
- Project compatibility
- Project Settings
- Add Test Data Queue Item
- Attach Document
- Bulk Add Test Data Queue Items
- Create Comparison Rule
- Compare PDF Documents
- Compare Text
- Delete Test Data Queue Items
- Generate Address
- Generate Given Name
- Generate Last Name
- Generate Random Date
- Generate Random Number
- Generate Random String
- Generate Random Value
- Get Test Data Queue Item
- Get Test Data Queue Items
- Verify Control Attribute
- Verify Expression
- Verify Expression With Operator
- Verify Range
- Address
- AddTestDataQueueItem
- AttachDocument
- BulkAddTestDataQueueItems
- DeleteTestDataQueueItems
- GetTestDataQueueItem
- GetTestDataQueueItems
- GivenName
- LastName
- RandomDate
- RandomNumber
- RandomString
- RandomValue
- VerifyAreEqual
- VerifyAreNotEqual
- VerifyContains
- VerifyExpression
- VerifyExpressionWithOperator
- VerifyIsGreater
- VerifyIsGreaterOrEqual
- VerifyIsLess
- VerifyIsLessOrEqual
- VerifyIsRegexMatch
- VerifyRange
- Workflow Foundation

Workflow activities
Get Environment Variable
UiPath.Core.Activities.GetEnvironmentVariable
Use this activity to retrieve the value of an environment variable by providing its name. Understanding the platform-specific retrieval behavior is essential for building reliable cross-platform automation workflows.
On Windows, this activity retrieves variables from User Environment Variables with fallback to Process Environment Variables. On cross-platform projects, it retrieves Process Environment Variables only. Understanding how environment variables are loaded from Machine and User levels into the Process scope is crucial for comprehending the Windows and cross-platform behavior differences of the Get Environment Variable and Set Environment Variable activities.
Properties
Common
- DisplayName - The display name of the activity. This field supports only
StringsorStringvariables.
Input
- Variable - The name of the environment variable whose value is to be retrieved. This field supports only
StringsorStringvariables.
Output
- VariableValue - The value of the selected environment variable.
Misc
- Private - If selected, the values of variables and arguments are no longer logged at Verbose level.
Platform-specific behavior
Windows environment
When running on Windows (default configuration):
- The activity first attempts to retrieve the variable from the User level (
EnvironmentVariableTarget.User). - If not found at the User level, it falls back to the Process level environment variables.
- This fallback mechanism ensures that both user-specific and process-specific variables are accessible.
- System properties exposed through
System.Environment(e.g.,MachineName,OSVersion,UserName) are always checked first regardless of scope.
Cross-platform environment
When running on cross-platform systems (Linux, macOS):
- The activity retrieves variables only from the Process level (
EnvironmentVariableTarget.Process). - This includes variables inherited from the parent process and any set during the current process execution.
- No fallback mechanism is used since User-level variables are Windows-specific.
- System properties exposed through
System.Environmentare still prioritized and accessible.
Retrieval priority
The activity follows this retrieval order:
1. System.Environment Properties (all platforms)
- First checks if the requested variable name matches a built-in .NET property (e.g.,
CurrentDirectory,MachineName,ProcessorCount). - If matched, returns the property value directly.
2. Environment Variables
- Windows: Checks User level first, then falls back to Process level.
- Cross-Platform: Checks Process level only.
Technical details
The activity uses an internal TargetFramework property to determine the execution context:
- "windows" - Uses
EnvironmentVariableTarget.Userwith Process-level fallback. - "portable" - Uses
EnvironmentVariableTarget.Processonly.
This behavior is determined automatically by the UiPath runtime based on the execution environment and cannot be manually configured through the activity properties.
Behavioral differences
Variable persistence
- Windows: Can retrieve persistent user-level variables set through Windows system settings or by the Set Environment Variable activity.
- Cross-Platform: Only retrieves variables available in the current process scope (inherited from shell or set during execution).
Variable scope
- Windows: Has access to a wider scope of variables (User + Process).
- Cross-Platform: Has access to a narrower scope (Process only).
Best practices
- For Windows workflows, you can rely on user-level environment variables for configuration. The automatic fallback ensures process-level variables are still accessible.
- For cross-platform workflows, only rely on environment variables passed to the process or set during execution. Do not depend on user-level variables as they won't be available. Consider passing required configuration through process arguments or configuration files.
- For portable workflows, design workflows assuming Process-level scope only to ensure consistent behavior across platforms. Test that all required variables are available at process startup and document any environment prerequisites clearly.
- System properties: Prefer using .NET's built-in
System.Environmentproperties (likeMachineName,UserName) when available, as they work consistently across platforms.
Return value
- Returns the environment variable value as a string.
- Returns empty string or null if the variable is not found (behavior may vary by platform and .NET version).
- System property values are returned as strings using
.ToString().
Example scenarios
Scenario 1: Reading PATH variable
- Windows: Successfully retrieves from User or Process scope.
- Linux/macOS: Successfully retrieves from Process scope.
Scenario 2: Reading a user-specific custom variable set via Windows System Properties
- Windows: Successfully retrieves the value.
- Linux/macOS: Returns empty/null (user-level variables don't exist).
Scenario 3: Reading MachineName
- All Platforms: Successfully retrieves from
System.Environment.MachineNameproperty.
- Properties
- Platform-specific behavior
- Windows environment
- Cross-platform environment
- Retrieval priority
- 1. System.Environment Properties (all platforms)
- 2. Environment Variables
- Technical details
- Behavioral differences
- Variable persistence
- Variable scope
- Best practices
- Return value
- Example scenarios
- Scenario 1: Reading PATH variable
- Scenario 2: Reading a user-specific custom variable set via Windows System Properties
- Scenario 3: Reading MachineName