function Invoke-ConfigurationDataExpression { [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [string] $Expression, [Parameter(Mandatory=$true)] $Context ) $Expression = $Expression.Trim() if($Expression -match "^'(.*)'$"){ return $Matches[1] } if($Expression -match "^-?\d+$"){ return [int]$Expression } if($Expression -match "^(?i:true|false)$"){ return [bool]::Parse($Expression) } if($Expression -notmatch "^([A-Za-z][A-Za-z0-9]*)\((.*)\)$"){ throw "Invalid configuration data expression [$Expression]." } $FunctionName = $Matches[1] $ArgumentText = $Matches[2] $Arguments = @() foreach($Argument in @(Split-ConfigurationDataExpressionArguments -ArgumentText $ArgumentText)){ $Arguments += ,(Invoke-ConfigurationDataExpressionArgument -Argument $Argument -Context $Context) } return Invoke-ConfigurationDataExpressionFunction -Name $FunctionName -Arguments $Arguments -Context $Context }