39 lines
1.0 KiB
PowerShell
39 lines
1.0 KiB
PowerShell
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
|
|
}
|