function Invoke-ConfigurationDataExpressionArgument { [CmdletBinding()] Param( [AllowNull()] [string] $Argument, [Parameter(Mandatory=$true)] $Context ) if($null -eq $Argument){ return $null } $Argument = $Argument.Trim() if($Argument -match "^'(.*)'$"){ return $Matches[1] } if($Argument -match "^-?\d+$"){ return [int]$Argument } if($Argument -match "^(?i:true|false)$"){ return [bool]::Parse($Argument) } if($Argument -match "^[A-Za-z][A-Za-z0-9]*\(.*\)$"){ return Invoke-ConfigurationDataExpression -Expression $Argument -Context $Context } return $Argument }