Types/OpenPackage.Part/ReadPowerShellData.ps1
|
<# .SYNOPSIS Reads Part Content as PowerShell Data .DESCRIPTION Reads Package Part Content as a PowerShell Data block #> [Reflection.AssemblyMetadata( # This should automatically apply to .txt files 'FilePattern', '\.psd1$' )] param( # An optional input object # If provided, content will be read from this object. # If not provided, content will be read from this part. [Alias('Input')] [PSObject]$InputObject = $null, # Any options used to read the data. [Alias('Options')] [Collections.IDictionary]$Option = [Ordered]@{} ) if (-not $this.ReadText) { return } $supportedCommands = @( if ($option.SupportedCommand) { $option.SupportedCommand } if ($option.SupportedCommands) { $option.SupportedCommands } ) $datablock = [ScriptBlock]::Create("data $( if ($supportedCommands) { '-supportedCommand' "'$($supportedCommands -replace "'","''" -join "','")'" } ) {$( $this.ReadText($InputObject, $Option) )}") if ($datablock.Ast.EndBlock.Statements.Count -gt 1) { return } if ($datablock.Ast.EndBlock.Statements[0] -isnot [Management.Automation.Language.DataStatementAst] ) { return } if ($datablock.Ast.EndBlock.Statements[0].CommandsAllowed) { foreach ($commandMaybeAllowed in $datablock.Ast.EndBlock.Statements[0].CommandsAllowed) { if (-not $commandMaybeAllowed) { continue } if ($supportedCommands -notcontains "$commandMaybeAllowed") { Write-Warning "Unsupported command $commandMaybeAllowed" return } } } & $datablock |