TTAPSModuleBuilder.psm1
function Get-PowerShellAst { [CmdletBinding( DefaultParameterSetName='File' )] Param ( [Parameter( ParameterSetName='File', Position=0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName )] [Alias('FullName')] [String] $Path, [Parameter( ParameterSetName='ScriptBlock', Position=0, Mandatory, ValueFromPipeline )] [ScriptBlock] $Code, [ArgumentCompleter({ Param( $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters ) [PSObject].Assembly.GetTypes().Where{$_.Name.EndsWith('Ast')}.Name | Sort-Object | Where-Object { $_.LogName -like "$wordToComplete*" } | Foreach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_) } })] $AstType = '*', [Switch] $NoRecursion ) Begin { $predicate = { Param( $astObject ) $astObject.GetType().Name -like $AstType } } Process { $errors = $null $ast = switch ($PSCmdlet.ParameterSetName) { 'File' { $_file = (Resolve-Path $File).Path [System.Management.Automation.Language.Parser]::ParseFile($_file, [ref]$null, [ref]$errors) } 'Code' { [System.Management.Automation.Language.Parser]::ParseInput($Code, [ref]$null, [ref]$errors) } } if ($errors) { throw [System.InvalidCastException]::new("Submitted text could not be converted to PowerShell because it contains syntax errors: $($errors | Out-String)") } $ast.FindAll($predicate, !$NoRecursion) | Add-Member -MemberType ScriptProperty -Name Type -Value { $this.GetType().Name } -PassThru } } function Invoke-ModuleBuilder { [CmdletBinding()] Param( ) } function Get-PowerShellAst { [CmdletBinding( DefaultParameterSetName='File' )] Param ( [Parameter( ParameterSetName='File', Position=0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName )] [Alias('FullName')] [String] $Path, [Parameter( ParameterSetName='ScriptBlock', Position=0, Mandatory, ValueFromPipeline )] [ScriptBlock] $Code, [ArgumentCompleter({ Param( $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters ) [PSObject].Assembly.GetTypes().Where{$_.Name.EndsWith('Ast')}.Name | Sort-Object | Where-Object { $_.LogName -like "$wordToComplete*" } | Foreach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_) } })] $AstType = '*', [Switch] $NoRecursion ) Begin { $predicate = { Param( $astObject ) $astObject.GetType().Name -like $AstType } } Process { $errors = $null $ast = switch ($PSCmdlet.ParameterSetName) { 'File' { $_file = (Resolve-Path $File).Path [System.Management.Automation.Language.Parser]::ParseFile($_file, [ref]$null, [ref]$errors) } 'Code' { [System.Management.Automation.Language.Parser]::ParseInput($Code, [ref]$null, [ref]$errors) } } if ($errors) { throw [System.InvalidCastException]::new("Submitted text could not be converted to PowerShell because it contains syntax errors: $($errors | Out-String)") } $ast.FindAll($predicate, !$NoRecursion) | Add-Member -MemberType ScriptProperty -Name Type -Value { $this.GetType().Name } -PassThru } } function Invoke-ModuleBuilder { [CmdletBinding()] Param( ) } |