diff --git a/Build/Export-WebsiteArtifacts.ps1 b/Build/Export-WebsiteArtifacts.ps1 index 8d999c90..3d404226 100644 --- a/Build/Export-WebsiteArtifacts.ps1 +++ b/Build/Export-WebsiteArtifacts.ps1 @@ -181,6 +181,22 @@ try { $apiRoot = Join-Path $ArtifactsRoot 'apidocs\powershell' New-Item -ItemType Directory -Path $apiRoot -Force | Out-Null +$sourceExamplesRoot = Join-Path $RepositoryRoot 'Examples' +$apiExamplesRoot = Join-Path $apiRoot 'examples' +$artifactsBoundary = [System.IO.Path]::GetFullPath($ArtifactsRoot).TrimEnd( + [System.IO.Path]::DirectorySeparatorChar, + [System.IO.Path]::AltDirectorySeparatorChar) + [System.IO.Path]::DirectorySeparatorChar +$resolvedExamplesRoot = [System.IO.Path]::GetFullPath($apiExamplesRoot) +if (-not $resolvedExamplesRoot.StartsWith($artifactsBoundary, [System.StringComparison]::OrdinalIgnoreCase)) { + throw "Refusing to refresh examples outside the website artifacts root: $resolvedExamplesRoot" +} +if (Test-Path -LiteralPath $apiExamplesRoot -PathType Container) { + [System.IO.Directory]::Delete($resolvedExamplesRoot, $true) +} +New-Item -ItemType Directory -Path $apiExamplesRoot -Force | Out-Null +Get-ChildItem -LiteralPath $sourceExamplesRoot -Force | + Copy-Item -Destination $apiExamplesRoot -Recurse -Force + $apiHelpPath = Join-Path $apiRoot "$moduleName-help.xml" $docsHelpPath = Join-Path $RepositoryRoot "Docs\Generated\$moduleName-help.xml" New-Item -ItemType Directory -Path (Split-Path -Parent $docsHelpPath) -Force | Out-Null diff --git a/Build/Export-WebsiteDocumentationCatalog.ps1 b/Build/Export-WebsiteDocumentationCatalog.ps1 index 25985572..ab43c3bb 100644 --- a/Build/Export-WebsiteDocumentationCatalog.ps1 +++ b/Build/Export-WebsiteDocumentationCatalog.ps1 @@ -48,13 +48,13 @@ $familyDefinitions = @( id = 'pdf'; title = 'PDF'; description = 'Author, inspect, transform, sign, annotate, extract, preflight, and combine PDF files.' docs = 'pdf'; api = '/api/powershell/'; examples = 'https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Pdf' samples = @('New-OfficePdf', 'Join-OfficePdf', 'Get-OfficePdfPreflight', 'Set-OfficePdfSignature') - match = { param($name) $name -match 'OfficePdf' } + match = { param($name) $name -match 'OfficePdf|OfficeDocumentPdf' } } [ordered]@{ id = 'reader'; title = 'Reader and extraction'; description = 'Detect formats and extract normalized documents, chunks, tables, visuals, assets, and ingest results.' docs = 'reader'; api = '/api/powershell/'; examples = 'https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Reader' samples = @('New-OfficeDocumentReader', 'Get-OfficeDocumentChunk', 'Get-OfficeDocumentTable', 'Search-OfficeDocument') - match = { param($name) $name -match 'OfficeDocument' -and $name -ne 'Get-OfficeDocumentPageMarkdown' } + match = { param($name) ($name -match 'OfficeDocument' -and $name -notin 'Get-OfficeDocumentPageMarkdown', 'Export-OfficeDocumentPdf') -or $name -match 'OfficeReader' } } [ordered]@{ id = 'confluence'; title = 'Confluence Cloud'; description = 'Plan and publish pages, preserve managed sections, and transfer attachments through OfficeIMO.Confluence.' @@ -87,9 +87,9 @@ $familyDefinitions = @( match = { param($name) $name -match 'OfficeCsv' } } [ordered]@{ - id = 'open-document'; title = 'OpenDocument'; description = 'Create, read, and save ODT, ODS, and ODP workflows.' + id = 'open-document'; title = 'OpenDocument'; description = 'Compose, read, convert, and save ODT, ODS, and ODP workflows.' docs = 'open-text-formats'; api = '/api/powershell/'; examples = 'https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples' - samples = @('New-OfficeOpenDocument', 'Get-OfficeOpenDocument', 'Save-OfficeOpenDocument') + samples = @('New-OfficeOpenDocument', 'Add-OfficeOpenDocumentParagraph', 'Set-OfficeOpenDocumentCell', 'Save-OfficeOpenDocument') match = { param($name) $name -match 'OfficeOpenDocument' } } [ordered]@{ @@ -114,7 +114,7 @@ $familyDefinitions = @( id = 'html'; title = 'HTML assets'; description = 'Export images and review surfaces used by document-to-HTML workflows.' docs = 'open-text-formats'; api = '/api/powershell/'; examples = 'https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples' samples = @('Export-OfficeHtmlImage') - match = { param($name) $name -eq 'Export-OfficeHtmlImage' } + match = { param($name) $name -match 'OfficeHtml' } } [ordered]@{ id = 'visuals'; title = 'Cross-format visuals'; description = 'Convert reusable visual artifacts for Word, Excel, PowerPoint, and PDF placement.' diff --git a/Docs/Add-OfficeExcelAutoFilter.md b/Docs/Add-OfficeExcelAutoFilter.md index 77f4b8c0..e373af17 100644 --- a/Docs/Add-OfficeExcelAutoFilter.md +++ b/Docs/Add-OfficeExcelAutoFilter.md @@ -11,12 +11,12 @@ Adds an AutoFilter to the current worksheet. ## SYNTAX ### Context (Default) ```powershell -Add-OfficeExcelAutoFilter [-Range] [-Criteria ] [] +Add-OfficeExcelAutoFilter [-Range] [-Criteria ] [-PassThru] [] ``` ### Document ```powershell -Add-OfficeExcelAutoFilter [-Range] -Document [-Sheet ] [-SheetIndex ] [-Criteria ] [] +Add-OfficeExcelAutoFilter [-Range] -Document [-Sheet ] [-SheetIndex ] [-Criteria ] [-PassThru] [] ``` ## DESCRIPTION @@ -72,6 +72,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Context, Document +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Range A1 range to apply AutoFilter. diff --git a/Docs/Add-OfficeExcelPackageMetadata.md b/Docs/Add-OfficeExcelPackageMetadata.md index 1ea282c4..6a0380ad 100644 --- a/Docs/Add-OfficeExcelPackageMetadata.md +++ b/Docs/Add-OfficeExcelPackageMetadata.md @@ -16,7 +16,7 @@ Add-OfficeExcelPackageMetadata -Kind -Xml [-WorksheetName -Kind -Xml [-WorksheetName ] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelPackageMetadata [-Path] -Kind -Xml [-WorksheetName ] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -55,22 +55,6 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -Kind Metadata kind to add. @@ -103,6 +87,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Workbook path to update. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -WorksheetName Worksheet for query-table metadata. Defaults to the current DSL sheet, or the first worksheet outside the DSL. diff --git a/Docs/Add-OfficeExcelPageBreak.md b/Docs/Add-OfficeExcelPageBreak.md index 933e729f..b313b0b2 100644 --- a/Docs/Add-OfficeExcelPageBreak.md +++ b/Docs/Add-OfficeExcelPageBreak.md @@ -16,7 +16,7 @@ Add-OfficeExcelPageBreak [-Sheet ] [-SheetIndex ] [-Row ] ### Path ```powershell -Add-OfficeExcelPageBreak [-InputPath] [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelPageBreak [-Path] [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -70,33 +70,33 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. +### -PassThru +Emit page-break records after adding them. ```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath +Type: SwitchParameter +Parameter Sets: Context, Path, Document +Aliases: None Possible values: -Required: True -Position: 0 +Required: False +Position: named Default value: None Accept pipeline input: False Accept wildcard characters: False ``` -### -PassThru -Emit page-break records after adding them. +### -Path +Workbook path to update. ```yaml -Type: SwitchParameter -Parameter Sets: Context, Path, Document -Aliases: None +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath Possible values: -Required: False -Position: named +Required: True +Position: 0 Default value: None Accept pipeline input: False Accept wildcard characters: False diff --git a/Docs/Add-OfficeExcelPowerQueryMetadata.md b/Docs/Add-OfficeExcelPowerQueryMetadata.md index 18684cf2..7f371189 100644 --- a/Docs/Add-OfficeExcelPowerQueryMetadata.md +++ b/Docs/Add-OfficeExcelPowerQueryMetadata.md @@ -16,7 +16,7 @@ Add-OfficeExcelPowerQueryMetadata -Name [-WorksheetName ] [-Que ### Path ```powershell -Add-OfficeExcelPowerQueryMetadata [-InputPath] -Name [-WorksheetName ] [-QueryTableName ] [-Description ] [-CommandText ] [-RefreshOnOpen] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelPowerQueryMetadata [-Path] -Name [-WorksheetName ] [-QueryTableName ] [-Description ] [-CommandText ] [-RefreshOnOpen] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -92,22 +92,6 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -Name Connection name stored in workbook metadata. @@ -140,6 +124,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Workbook path to update. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -QueryTableName Optional query-table name. diff --git a/Docs/Add-OfficeExcelReportCallout.md b/Docs/Add-OfficeExcelReportCallout.md index 9f0fc27f..4efc5f8f 100644 --- a/Docs/Add-OfficeExcelReportCallout.md +++ b/Docs/Add-OfficeExcelReportCallout.md @@ -11,7 +11,7 @@ Adds a colored callout block to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportCallout [[-Kind] ] [-Title] [-Body] [-WidthColumns ] [] +Add-OfficeExcelReportCallout [[-Kind] ] [-Title] [-Body] [-WidthColumns ] [-PassThru] [] ``` ## DESCRIPTION @@ -64,6 +64,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Title Callout title. diff --git a/Docs/Add-OfficeExcelReportKpiRow.md b/Docs/Add-OfficeExcelReportKpiRow.md index cda90afd..02c98589 100644 --- a/Docs/Add-OfficeExcelReportKpiRow.md +++ b/Docs/Add-OfficeExcelReportKpiRow.md @@ -11,7 +11,7 @@ Adds a KPI row to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportKpiRow [-InputObject] [-PerRow ] [-LabelFillColor ] [] +Add-OfficeExcelReportKpiRow [-InputObject] [-PerRow ] [-LabelFillColor ] [-PassThru] [] ``` ## DESCRIPTION @@ -64,6 +64,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PerRow Number of KPI cards per rendered row. diff --git a/Docs/Add-OfficeExcelReportLegend.md b/Docs/Add-OfficeExcelReportLegend.md index 9924b2b3..1407221c 100644 --- a/Docs/Add-OfficeExcelReportLegend.md +++ b/Docs/Add-OfficeExcelReportLegend.md @@ -11,7 +11,7 @@ Adds a legend table to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportLegend [[-Title] ] -Header -InputObject [-FirstColumnFillByValue ] [-HeaderFillColor ] [-CaseSensitive] [] +Add-OfficeExcelReportLegend [[-Title] ] -Header -InputObject [-FirstColumnFillByValue ] [-HeaderFillColor ] [-CaseSensitive] [-PassThru] [] ``` ## DESCRIPTION @@ -116,6 +116,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Title Optional legend title. diff --git a/Docs/Add-OfficeExcelReportParagraph.md b/Docs/Add-OfficeExcelReportParagraph.md index 2b7f889e..a9cfbafd 100644 --- a/Docs/Add-OfficeExcelReportParagraph.md +++ b/Docs/Add-OfficeExcelReportParagraph.md @@ -11,7 +11,7 @@ Adds a paragraph line to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportParagraph [-Text] [] +Add-OfficeExcelReportParagraph [-Text] [-PassThru] [] ``` ## DESCRIPTION @@ -33,6 +33,22 @@ Adds prose to an OfficeIMO-composed Excel report sheet. ## PARAMETERS +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Text Paragraph text. diff --git a/Docs/Add-OfficeExcelReportSection.md b/Docs/Add-OfficeExcelReportSection.md index 8a9b4ce2..12442fdb 100644 --- a/Docs/Add-OfficeExcelReportSection.md +++ b/Docs/Add-OfficeExcelReportSection.md @@ -11,7 +11,7 @@ Adds a section heading to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportSection [-Text] [] +Add-OfficeExcelReportSection [-Text] [-PassThru] [] ``` ## DESCRIPTION @@ -33,6 +33,22 @@ Uses the report composer to add a section heading and narrative text. ## PARAMETERS +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Text Section heading text. diff --git a/Docs/Add-OfficeExcelReportSpacer.md b/Docs/Add-OfficeExcelReportSpacer.md index 17d85403..ed2803ae 100644 --- a/Docs/Add-OfficeExcelReportSpacer.md +++ b/Docs/Add-OfficeExcelReportSpacer.md @@ -11,7 +11,7 @@ Adds vertical spacing to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportSpacer [[-Rows] ] [] +Add-OfficeExcelReportSpacer [[-Rows] ] [-PassThru] [] ``` ## DESCRIPTION @@ -34,6 +34,22 @@ Advances the composer cursor before adding the next report block. ## PARAMETERS +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Rows Rows to advance. Defaults to the composer theme spacing. diff --git a/Docs/Add-OfficeExcelReportTitle.md b/Docs/Add-OfficeExcelReportTitle.md index d26397ab..9eb1644a 100644 --- a/Docs/Add-OfficeExcelReportTitle.md +++ b/Docs/Add-OfficeExcelReportTitle.md @@ -11,7 +11,7 @@ Adds a title block to the current Excel report sheet. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelReportTitle [-Title] [[-Subtitle] ] [] +Add-OfficeExcelReportTitle [-Title] [[-Subtitle] ] [-PassThru] [] ``` ## DESCRIPTION @@ -33,6 +33,22 @@ Uses the OfficeIMO sheet composer through PSWriteOffice's thin report-block wrap ## PARAMETERS +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Subtitle Optional subtitle text. diff --git a/Docs/Add-OfficeExcelSlicer.md b/Docs/Add-OfficeExcelSlicer.md index db5976e6..e6fca8c5 100644 --- a/Docs/Add-OfficeExcelSlicer.md +++ b/Docs/Add-OfficeExcelSlicer.md @@ -16,7 +16,7 @@ Add-OfficeExcelSlicer -Name [-SourceName ] [-PivotTableName -Name [-SourceName ] [-PivotTableName ] [-Xml ] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelSlicer [-Path] -Name [-SourceName ] [-PivotTableName ] [-Xml ] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -56,22 +56,6 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -Name Slicer cache name. @@ -104,6 +88,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Workbook path to update. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PivotTableName Pivot table name the slicer is intended to filter. diff --git a/Docs/Add-OfficeExcelTableOfContents.md b/Docs/Add-OfficeExcelTableOfContents.md index 7b7fa736..3688a370 100644 --- a/Docs/Add-OfficeExcelTableOfContents.md +++ b/Docs/Add-OfficeExcelTableOfContents.md @@ -16,7 +16,7 @@ Add-OfficeExcelTableOfContents [-SheetName ] [-DoNotPlaceFirst] [-NoHype ### Path ```powershell -Add-OfficeExcelTableOfContents [-InputPath] [-SheetName ] [-DoNotPlaceFirst] [-NoHyperlinks] [-IncludeNamedRanges] [-IncludeHiddenNamedRanges] [-NoStyle] [-AddBackLinks] [-BackLinkRow ] [-BackLinkColumn ] [-BackLinkText ] [-Open] [-PassThru] [] +Add-OfficeExcelTableOfContents [-Path] [-SheetName ] [-DoNotPlaceFirst] [-NoHyperlinks] [-IncludeNamedRanges] [-IncludeHiddenNamedRanges] [-NoStyle] [-AddBackLinks] [-BackLinkRow ] [-BackLinkColumn ] [-BackLinkText ] [-Open] [-PassThru] [] ``` ### Document @@ -171,22 +171,6 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath -Path to the workbook to update in place. - -```yaml -Type: String -Parameter Sets: Path -Aliases: FilePath, Path -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -NoHyperlinks Disable internal hyperlinks in the TOC sheet. @@ -220,7 +204,7 @@ Accept wildcard characters: False ``` ### -Open -Open the workbook after saving when InputPath is used. +Open the workbook after saving when Path is used. ```yaml Type: SwitchParameter @@ -251,6 +235,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Path to the workbook to update in place. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -SheetName Name of the TOC sheet. diff --git a/Docs/Add-OfficeExcelTableRow.md b/Docs/Add-OfficeExcelTableRow.md index 84e0d86d..3ab25040 100644 --- a/Docs/Add-OfficeExcelTableRow.md +++ b/Docs/Add-OfficeExcelTableRow.md @@ -11,7 +11,7 @@ Appends one or more data rows to an existing Excel table. ## SYNTAX ### Path (Default) ```powershell -Add-OfficeExcelTableRow [-InputPath] [-InputObject] -TableName [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelTableRow [-Path] [-InputObject] -TableName [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -91,34 +91,34 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to open, update, save, and close. +### -PassThru +Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command, +so they do not emit a live table wrapper. ```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath +Type: SwitchParameter +Parameter Sets: Path, Document, Table +Aliases: None Possible values: -Required: True -Position: 0 +Required: False +Position: named Default value: None Accept pipeline input: False Accept wildcard characters: False ``` -### -PassThru -Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command, -so they do not emit a live table wrapper. +### -Path +Workbook path to open, update, save, and close. ```yaml -Type: SwitchParameter -Parameter Sets: Path, Document, Table -Aliases: None +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath Possible values: -Required: False -Position: named +Required: True +Position: 0 Default value: None Accept pipeline input: False Accept wildcard characters: False diff --git a/Docs/Add-OfficeExcelThreadedComment.md b/Docs/Add-OfficeExcelThreadedComment.md index d5e81b48..d6c7191e 100644 --- a/Docs/Add-OfficeExcelThreadedComment.md +++ b/Docs/Add-OfficeExcelThreadedComment.md @@ -16,7 +16,7 @@ Add-OfficeExcelThreadedComment -Address -Text [-Author -Address -Text [-Sheet ] [-SheetIndex ] [-Author ] [-ParentId ] [-Id ] [-Date ] [-Done] [-NoSave] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelThreadedComment [-Path] -Address -Text [-Sheet ] [-SheetIndex ] [-Author ] [-ParentId ] [-Id ] [-Date ] [-Done] [-NoSave] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -137,22 +137,6 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -NoSave Do not save when operating on a path-owned workbook. @@ -201,6 +185,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Workbook path to update. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Sheet Worksheet name when using path or document input. diff --git a/Docs/Add-OfficeExcelTimeline.md b/Docs/Add-OfficeExcelTimeline.md index 7ecf35dc..cdda7d9c 100644 --- a/Docs/Add-OfficeExcelTimeline.md +++ b/Docs/Add-OfficeExcelTimeline.md @@ -16,7 +16,7 @@ Add-OfficeExcelTimeline -Name [-SourceName ] [-PivotTableName < ### Path ```powershell -Add-OfficeExcelTimeline [-InputPath] -Name [-SourceName ] [-PivotTableName ] [-Xml ] [-PassThru] [-WhatIf] [-Confirm] [] +Add-OfficeExcelTimeline [-Path] -Name [-SourceName ] [-PivotTableName ] [-Xml ] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -56,22 +56,6 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -Name Timeline cache name. @@ -104,6 +88,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Workbook path to update. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PivotTableName Pivot table name the timeline is intended to filter. diff --git a/Docs/Add-OfficeExcelVisual.md b/Docs/Add-OfficeExcelVisual.md index 4c1025d0..db4afcd3 100644 --- a/Docs/Add-OfficeExcelVisual.md +++ b/Docs/Add-OfficeExcelVisual.md @@ -11,7 +11,7 @@ Adds a ChartForgeX artifact, portable SVG, or converted Office visual to an Exce ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeExcelVisual [-InputObject] [-Worksheet ] [-Row ] [-Column ] [-Address ] [-OffsetX ] [-OffsetY ] [-SvgPolicy ] [-Width ] [-Height ] [-PointsPerPixel ] [-MaximumSvgElements ] [-MaximumSvgViewportDimension ] [-MaximumSvgViewportPixels ] [-Id ] [-Title ] [-AlternativeText ] [] +Add-OfficeExcelVisual [-InputObject] [-Worksheet ] [-Row ] [-Column ] [-Address ] [-OffsetX ] [-OffsetY ] [-PassThru] [-SvgPolicy ] [-Width ] [-Height ] [-PointsPerPixel ] [-MaximumSvgElements ] [-MaximumSvgViewportDimension ] [-MaximumSvgViewportPixels ] [-Id ] [-Title ] [-AlternativeText ] [] ``` ## DESCRIPTION @@ -203,6 +203,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the image added to the worksheet. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PointsPerPixel Conversion factor from ChartForgeX pixels to Office points. diff --git a/Docs/Add-OfficeOpenDocumentHeading.md b/Docs/Add-OfficeOpenDocumentHeading.md new file mode 100644 index 00000000..7ffc9030 --- /dev/null +++ b/Docs/Add-OfficeOpenDocumentHeading.md @@ -0,0 +1,107 @@ +--- +external help file: PSWriteOffice-help.xml +Module Name: PSWriteOffice +online version: https://github.com/EvotecIT/PSWriteOffice +schema: 2.0.0 +--- +# Add-OfficeOpenDocumentHeading +## SYNOPSIS +Adds a heading to an OpenDocument text document. + +## SYNTAX +### __AllParameterSets +```powershell +Add-OfficeOpenDocumentHeading [-Text] [-Document ] [-Level ] [-PassThru] [] +``` + +## DESCRIPTION +Adds a heading to an OpenDocument text document. + +## EXAMPLES + +### EXAMPLE 1 +```powershell +PS> Add-OfficeOpenDocumentHeading -Text 'Results' -Level 2 +``` + + +## PARAMETERS + +### -Document +OpenDocument text document. Omit inside New-OfficeOpenDocument -Content. + +```yaml +Type: OdtDocument +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -Level +Heading level from 1 through 10. + +```yaml +Type: Int32 +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -PassThru +Emit the created heading paragraph. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Text +Heading text. + +```yaml +Type: String +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +- `OfficeIMO.OpenDocument.OdtDocument` + +## OUTPUTS + +- `OfficeIMO.OpenDocument.OdtParagraph` + +## RELATED LINKS + +- None diff --git a/Docs/Add-OfficeOpenDocumentParagraph.md b/Docs/Add-OfficeOpenDocumentParagraph.md new file mode 100644 index 00000000..714206bf --- /dev/null +++ b/Docs/Add-OfficeOpenDocumentParagraph.md @@ -0,0 +1,91 @@ +--- +external help file: PSWriteOffice-help.xml +Module Name: PSWriteOffice +online version: https://github.com/EvotecIT/PSWriteOffice +schema: 2.0.0 +--- +# Add-OfficeOpenDocumentParagraph +## SYNOPSIS +Adds a paragraph to an OpenDocument text document. + +## SYNTAX +### __AllParameterSets +```powershell +Add-OfficeOpenDocumentParagraph [-Text] [-Document ] [-PassThru] [] +``` + +## DESCRIPTION +Adds a paragraph to an OpenDocument text document. + +## EXAMPLES + +### EXAMPLE 1 +```powershell +PS> New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content { Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice' } +``` + + +## PARAMETERS + +### -Document +OpenDocument text document. Omit inside New-OfficeOpenDocument -Content. + +```yaml +Type: OdtDocument +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -PassThru +Emit the created paragraph. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Text +Paragraph text. + +```yaml +Type: String +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +- `OfficeIMO.OpenDocument.OdtDocument` + +## OUTPUTS + +- `OfficeIMO.OpenDocument.OdtParagraph` + +## RELATED LINKS + +- None diff --git a/Docs/Add-OfficeOpenDocumentSheet.md b/Docs/Add-OfficeOpenDocumentSheet.md new file mode 100644 index 00000000..46ee7a96 --- /dev/null +++ b/Docs/Add-OfficeOpenDocumentSheet.md @@ -0,0 +1,109 @@ +--- +external help file: PSWriteOffice-help.xml +Module Name: PSWriteOffice +online version: https://github.com/EvotecIT/PSWriteOffice +schema: 2.0.0 +--- +# Add-OfficeOpenDocumentSheet +## SYNOPSIS +Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content. + +## SYNTAX +### __AllParameterSets +```powershell +Add-OfficeOpenDocumentSheet [-Name] [[-Content] ] [-Document ] [-PassThru] [] +``` + +## DESCRIPTION +Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content. + +## EXAMPLES + +### EXAMPLE 1 +```powershell +PS> Add-OfficeOpenDocumentSheet -Name 'Data' -Content { + Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Status' +} +``` + + +## PARAMETERS + +### -Content +Nested cell commands that use this worksheet as their current target. + +```yaml +Type: ScriptBlock +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Document +OpenDocument spreadsheet. Omit inside New-OfficeOpenDocument -Content. + +```yaml +Type: OdsDocument +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -Name +Worksheet name. + +```yaml +Type: String +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -PassThru +Emit the created worksheet. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +- `OfficeIMO.OpenDocument.OdsDocument` + +## OUTPUTS + +- `OfficeIMO.OpenDocument.OdsSheet` + +## RELATED LINKS + +- None diff --git a/Docs/Add-OfficeOpenDocumentSlide.md b/Docs/Add-OfficeOpenDocumentSlide.md new file mode 100644 index 00000000..e9aa1a82 --- /dev/null +++ b/Docs/Add-OfficeOpenDocumentSlide.md @@ -0,0 +1,109 @@ +--- +external help file: PSWriteOffice-help.xml +Module Name: PSWriteOffice +online version: https://github.com/EvotecIT/PSWriteOffice +schema: 2.0.0 +--- +# Add-OfficeOpenDocumentSlide +## SYNOPSIS +Adds a slide to an OpenDocument presentation and optionally runs nested slide content. + +## SYNTAX +### __AllParameterSets +```powershell +Add-OfficeOpenDocumentSlide [[-Name] ] [[-Content] ] [-Document ] [-PassThru] [] +``` + +## DESCRIPTION +Adds a slide to an OpenDocument presentation and optionally runs nested slide content. + +## EXAMPLES + +### EXAMPLE 1 +```powershell +PS> Add-OfficeOpenDocumentSlide -Name 'Summary' -Content { + Add-OfficeOpenDocumentTextBox -Text 'Quarterly summary' -X 2 -Y 2 -Width 20 -Height 3 +} +``` + + +## PARAMETERS + +### -Content +Nested slide commands that use this slide as their current target. + +```yaml +Type: ScriptBlock +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Document +OpenDocument presentation. Omit inside New-OfficeOpenDocument -Content. + +```yaml +Type: OdpPresentation +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -Name +Optional unique slide name. + +```yaml +Type: String +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -PassThru +Emit the created slide. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +- `OfficeIMO.OpenDocument.OdpPresentation` + +## OUTPUTS + +- `OfficeIMO.OpenDocument.OdpSlide` + +## RELATED LINKS + +- None diff --git a/Docs/Add-OfficeOpenDocumentTextBox.md b/Docs/Add-OfficeOpenDocumentTextBox.md new file mode 100644 index 00000000..25454363 --- /dev/null +++ b/Docs/Add-OfficeOpenDocumentTextBox.md @@ -0,0 +1,171 @@ +--- +external help file: PSWriteOffice-help.xml +Module Name: PSWriteOffice +online version: https://github.com/EvotecIT/PSWriteOffice +schema: 2.0.0 +--- +# Add-OfficeOpenDocumentTextBox +## SYNOPSIS +Adds a positioned text box to an OpenDocument presentation slide. + +## SYNTAX +### __AllParameterSets +```powershell +Add-OfficeOpenDocumentTextBox [-Text] [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [-Name ] [-PassThru] [] +``` + +## DESCRIPTION +Adds a positioned text box to an OpenDocument presentation slide. + +## EXAMPLES + +### EXAMPLE 1 +```powershell +PS> Add-OfficeOpenDocumentTextBox -Text 'Approved' -X 18 -Y 12 -Width 6 -Height 2 +``` + + +## PARAMETERS + +### -Height +Height in centimeters. + +```yaml +Type: Double +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Name +Optional shape name. + +```yaml +Type: String +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -PassThru +Emit the created text box. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Slide +Slide target. Omit inside Add-OfficeOpenDocumentSlide -Content. + +```yaml +Type: OdpSlide +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -Text +Text box content. + +```yaml +Type: String +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Width +Width in centimeters. + +```yaml +Type: Double +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -X +Horizontal position in centimeters. + +```yaml +Type: Double +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Y +Vertical position in centimeters. + +```yaml +Type: Double +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +- `OfficeIMO.OpenDocument.OdpSlide` + +## OUTPUTS + +- `OfficeIMO.OpenDocument.OdpTextBox` + +## RELATED LINKS + +- None diff --git a/Docs/Add-OfficePdfCanvas.md b/Docs/Add-OfficePdfCanvas.md index 87b258d6..da8312a0 100644 --- a/Docs/Add-OfficePdfCanvas.md +++ b/Docs/Add-OfficePdfCanvas.md @@ -11,7 +11,7 @@ Draws arbitrary visual canvas content on existing PDF pages. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePdfCanvas [-Content] -Path -OutputPath [-PageRange ] [-BehindContent] [-Opacity ] [-ConfigureRendering ] [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] [] +Add-OfficePdfCanvas [-Content] -Path -OutputPath [-PageRange ] [-BehindContent] [-Opacity ] [-ConfigureRendering ] [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -146,6 +146,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Password Password used to authenticate an encrypted input PDF. diff --git a/Docs/Add-OfficePdfCanvasText.md b/Docs/Add-OfficePdfCanvasText.md index d0967256..06eb8740 100644 --- a/Docs/Add-OfficePdfCanvasText.md +++ b/Docs/Add-OfficePdfCanvasText.md @@ -11,12 +11,12 @@ Adds PowerShell-friendly text or rich text runs to the active fixed-position PDF ## SYNTAX ### Text (Default) ```powershell -Add-OfficePdfCanvasText [-Text] -X -Y [-Width ] [-Height ] [-Color ] [-Align ] [-FontSize ] [-LineHeight ] [-Bold] [-Italic] [-Underline] [-Strike] [-BackgroundColor ] [-Font ] [-Baseline ] [] +Add-OfficePdfCanvasText [-Text] -X -Y [-Width ] [-Height ] [-Color ] [-Align ] [-FontSize ] [-LineHeight ] [-Bold] [-Italic] [-Underline] [-Strike] [-BackgroundColor ] [-Font ] [-Baseline ] [-PassThru] [] ``` ### Run ```powershell -Add-OfficePdfCanvasText -Run -X -Y [-Width ] [-Height ] [-Color ] [-Align ] [-FontSize ] [-LineHeight ] [] +Add-OfficePdfCanvasText -Run -X -Y [-Width ] [-Height ] [-Color ] [-Align ] [-FontSize ] [-LineHeight ] [-PassThru] [] ``` ## DESCRIPTION @@ -202,6 +202,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Text, Run +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Run Rich run specifications created with TextRun or supplied as hashtables or objects. Link targets are not supported. diff --git a/Docs/Add-OfficePdfPageOverlay.md b/Docs/Add-OfficePdfPageOverlay.md index e3ee407f..c84705d5 100644 --- a/Docs/Add-OfficePdfPageOverlay.md +++ b/Docs/Add-OfficePdfPageOverlay.md @@ -11,7 +11,7 @@ Overlays or underlays one source PDF page on selected pages of another PDF. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePdfPageOverlay -Path -SourcePath -OutputPath [-SourcePageNumber ] [-PageRange ] [-Fit ] [-HorizontalAlign ] [-VerticalAlign ] [-X ] [-Y ] [-Width ] [-Height ] [-Opacity ] [-Underlay] [-ReadOptions ] [-Password ] [-IgnorePermissionRestrictions] [-SourcePassword ] [-IgnoreSourcePermissionRestrictions] [-SourceReadOptions ] [-WhatIf] [-Confirm] [] +Add-OfficePdfPageOverlay -Path -SourcePath -OutputPath [-SourcePageNumber ] [-PageRange ] [-Fit ] [-HorizontalAlign ] [-VerticalAlign ] [-X ] [-Y ] [-Width ] [-Height ] [-Opacity ] [-Underlay] [-ReadOptions ] [-Password ] [-IgnorePermissionRestrictions] [-SourcePassword ] [-IgnoreSourcePermissionRestrictions] [-SourceReadOptions ] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -157,6 +157,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Password Password used to authenticate the target PDF. diff --git a/Docs/Add-OfficePdfStamp.md b/Docs/Add-OfficePdfStamp.md index cb7f673d..24653f87 100644 --- a/Docs/Add-OfficePdfStamp.md +++ b/Docs/Add-OfficePdfStamp.md @@ -11,12 +11,12 @@ Adds a text or image stamp to an existing PDF. ## SYNTAX ### Text (Default) ```powershell -Add-OfficePdfStamp -Path -OutputPath -Text [-Password ] [-IgnorePermissionRestrictions] [-PageRange ] [-X ] [-Y ] [-FontSize ] [-Color ] [-Rotation ] [-Watermark] [-WhatIf] [-Confirm] [] +Add-OfficePdfStamp -Path -OutputPath -Text [-Password ] [-IgnorePermissionRestrictions] [-PageRange ] [-X ] [-Y ] [-FontSize ] [-Color ] [-Rotation ] [-Watermark] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Image ```powershell -Add-OfficePdfStamp -Path -OutputPath -Image [-Password ] [-IgnorePermissionRestrictions] [-PageRange ] [-X ] [-Y ] [-Width ] [-Height ] [-Rotation ] [-Watermark] [-WhatIf] [-Confirm] [] +Add-OfficePdfStamp -Path -OutputPath -Image [-Password ] [-IgnorePermissionRestrictions] [-PageRange ] [-X ] [-Y ] [-Width ] [-Height ] [-Rotation ] [-Watermark] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -159,6 +159,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Text, Image +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Password Password used to authenticate an encrypted input PDF. diff --git a/Docs/Add-OfficePowerPointBullets.md b/Docs/Add-OfficePowerPointBullets.md index 01cf14c4..4c4863e7 100644 --- a/Docs/Add-OfficePowerPointBullets.md +++ b/Docs/Add-OfficePowerPointBullets.md @@ -11,7 +11,7 @@ Adds a bulleted list to a PowerPoint slide. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePowerPointBullets [-Bullets] [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [-Level ] [-BulletChar ] [] +Add-OfficePowerPointBullets [-Bullets] [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [-Level ] [-BulletChar ] [-PassThru] [] ``` ## DESCRIPTION @@ -22,7 +22,7 @@ Creates a textbox and populates it with bullet paragraphs. ### EXAMPLE 1 ```powershell PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointBullets.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Delivery update' Add-OfficePowerPointBullets -Slide $slide -Bullets 'Wins','Risks','Next steps' -X 60 -Y 120 -Width 420 -Height 180 } @@ -96,6 +96,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Slide Target slide that will receive the bullet list (optional inside DSL). diff --git a/Docs/Add-OfficePowerPointChart.md b/Docs/Add-OfficePowerPointChart.md index a1022010..2d5bbcab 100644 --- a/Docs/Add-OfficePowerPointChart.md +++ b/Docs/Add-OfficePowerPointChart.md @@ -11,17 +11,17 @@ Adds a chart to a PowerPoint slide. ## SYNTAX ### Default (Default) ```powershell -Add-OfficePowerPointChart [-Slide ] [-Type ] [-X ] [-Y ] [-Width ] [-Height ] [-Title ] [] +Add-OfficePowerPointChart [-Slide ] [-Type ] [-X ] [-Y ] [-Width ] [-Height ] [-Title ] [-PassThru] [] ``` ### Categorical ```powershell -Add-OfficePowerPointChart -InputObject -CategoryProperty -SeriesProperty [-Slide ] [-Type ] [-X ] [-Y ] [-Width ] [-Height ] [-Title ] [] +Add-OfficePowerPointChart -InputObject -CategoryProperty -SeriesProperty [-Slide ] [-Type ] [-X ] [-Y ] [-Width ] [-Height ] [-Title ] [-PassThru] [] ``` ### Scatter ```powershell -Add-OfficePowerPointChart -InputObject -XProperty -YProperty [-Slide ] [-Type ] [-X ] [-Y ] [-Width ] [-Height ] [-Title ] [] +Add-OfficePowerPointChart -InputObject -XProperty -YProperty [-Slide ] [-Type ] [-X ] [-Y ] [-Width ] [-Height ] [-Title ] [-PassThru] [] ``` ## DESCRIPTION @@ -36,7 +36,7 @@ PS> $rows = @( [pscustomobject]@{ Month = 'Feb'; Sales = 55; Profit = 13 } ) New-OfficePowerPoint -Path .\Examples\Documents\PowerPointChart.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Add-OfficePowerPointChart -Slide $slide -InputObject $rows -CategoryProperty Month -SeriesProperty Sales,Profit -Title 'Monthly performance' } ``` @@ -50,7 +50,7 @@ PS> $rows = @( [pscustomobject]@{ Quarter = 2; Revenue = 34 } ) New-OfficePowerPoint -Path .\Examples\Documents\PowerPointScatter.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Add-OfficePowerPointChart -Slide $slide -Type Scatter -InputObject $rows -XProperty Quarter -YProperty Revenue -Title 'Revenue trend' } ``` @@ -107,6 +107,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Default, Categorical, Scatter +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -SeriesProperty Property names used as numeric series on standard charts. diff --git a/Docs/Add-OfficePowerPointImage.md b/Docs/Add-OfficePowerPointImage.md index 3c8c9537..3675d3e5 100644 --- a/Docs/Add-OfficePowerPointImage.md +++ b/Docs/Add-OfficePowerPointImage.md @@ -11,7 +11,7 @@ Adds an image to a PowerPoint slide. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePowerPointImage [-Path] [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [] +Add-OfficePowerPointImage [-Path] [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [-PassThru] [] ``` ## DESCRIPTION @@ -23,7 +23,7 @@ Places the picture at the requested coordinates using point measurements. ```powershell PS> $image = '.\Tests\Assets\CellImage.png' New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImage.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Evidence' Add-OfficePowerPointImage -Slide $slide -Path $image -X 60 -Y 130 -Width 180 -Height 120 } @@ -49,6 +49,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Path Path to the image file. diff --git a/Docs/Add-OfficePowerPointSection.md b/Docs/Add-OfficePowerPointSection.md index c0392271..9016dc87 100644 --- a/Docs/Add-OfficePowerPointSection.md +++ b/Docs/Add-OfficePowerPointSection.md @@ -11,7 +11,7 @@ Adds a section to a PowerPoint presentation. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePowerPointSection -Name [-Presentation ] [-StartSlideIndex ] [] +Add-OfficePowerPointSection -Name [-Presentation ] [-StartSlideIndex ] [-PassThru] [] ``` ## DESCRIPTION @@ -22,8 +22,8 @@ Creates a new section starting at the requested slide index or at the current sl ### EXAMPLE 1 ```powershell PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSections.pptx { - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Overview' - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Results' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Overview' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Results' Add-OfficePowerPointSection -Name 'Results' -StartSlideIndex 1 } ``` @@ -48,6 +48,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Presentation Presentation to update (optional inside DSL). diff --git a/Docs/Add-OfficePowerPointShape.md b/Docs/Add-OfficePowerPointShape.md index db259163..39b87f3b 100644 --- a/Docs/Add-OfficePowerPointShape.md +++ b/Docs/Add-OfficePowerPointShape.md @@ -11,7 +11,7 @@ Adds a basic shape to a slide. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePowerPointShape [-Slide ] [-ShapeType ] [-X ] [-Y ] [-Width ] [-Height ] [-Name ] [-FillColor ] [-OutlineColor ] [-OutlineWidth ] [] +Add-OfficePowerPointShape [-Slide ] [-ShapeType ] [-X ] [-Y ] [-Width ] [-Height ] [-Name ] [-FillColor ] [-OutlineColor ] [-OutlineWidth ] [-PassThru] [] ``` ## DESCRIPTION @@ -22,7 +22,7 @@ Creates an auto shape at the requested coordinates and applies optional fill and ### EXAMPLE 1 ```powershell PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointShape.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Add-OfficePowerPointShape -Slide $slide -ShapeType Rectangle -X 60 -Y 120 -Width 220 -Height 90 -FillColor '#DDEEFF' -OutlineColor '#2563EB' -OutlineWidth 1 Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlighted status' -X 80 -Y 145 -Width 180 -Height 32 } @@ -112,6 +112,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -ShapeType Shape geometry preset name (e.g., Rectangle, Ellipse, Line). diff --git a/Docs/Add-OfficePowerPointSlide.md b/Docs/Add-OfficePowerPointSlide.md index 4285407d..f2043555 100644 --- a/Docs/Add-OfficePowerPointSlide.md +++ b/Docs/Add-OfficePowerPointSlide.md @@ -11,17 +11,17 @@ Adds a new slide to a PowerPoint presentation. ## SYNTAX ### Index (Default) ```powershell -Add-OfficePowerPointSlide [[-Content] ] [-Presentation ] [-Master ] [-Layout ] [] +Add-OfficePowerPointSlide [[-Content] ] [-Presentation ] [-Master ] [-Layout ] [-PassThru] [] ``` ### Name ```powershell -Add-OfficePowerPointSlide [[-Content] ] -LayoutName [-Presentation ] [-Master ] [-CaseSensitive] [] +Add-OfficePowerPointSlide [[-Content] ] -LayoutName [-Presentation ] [-Master ] [-CaseSensitive] [-PassThru] [] ``` ### Type ```powershell -Add-OfficePowerPointSlide [[-Content] ] -LayoutType [-Presentation ] [-Master ] [] +Add-OfficePowerPointSlide [[-Content] ] -LayoutType [-Presentation ] [-Master ] [-PassThru] [] ``` ## DESCRIPTION @@ -31,7 +31,9 @@ Creates a slide using OfficeIMO master/layout indexes and can execute nested DSL ### EXAMPLE 1 ```powershell -PS> $ppt = New-OfficePowerPoint -FilePath .\deck.pptx; Add-OfficePowerPointSlide -Presentation $ppt +PS> $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave +Add-OfficePowerPointSlide -Presentation $ppt +$ppt | Close-OfficePowerPoint -Save ``` Creates a deck and appends a new slide at the end. @@ -141,6 +143,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Index, Name, Type +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Presentation Presentation to update (optional inside New-OfficePowerPoint). diff --git a/Docs/Add-OfficePowerPointTable.md b/Docs/Add-OfficePowerPointTable.md index f914a9e4..4e1278f4 100644 --- a/Docs/Add-OfficePowerPointTable.md +++ b/Docs/Add-OfficePowerPointTable.md @@ -11,12 +11,12 @@ Adds a table to a PowerPoint slide. ## SYNTAX ### InputObject (Default) ```powershell -Add-OfficePowerPointTable [[-Slide] ] [-InputObject] [-Header ] [-NoHeader] [-View ] [-CollectionSeparator ] [-DictionaryEntrySeparator ] [-DictionaryKeyValueSeparator ] [-MaxCollectionItems ] [-MaxNestingDepth ] [-X ] [-Y ] [-Width ] [-Height ] [-StyleId ] [] +Add-OfficePowerPointTable [[-Slide] ] [-InputObject] [-Header ] [-NoHeader] [-View ] [-CollectionSeparator ] [-DictionaryEntrySeparator ] [-DictionaryKeyValueSeparator ] [-MaxCollectionItems ] [-MaxNestingDepth ] [-X ] [-Y ] [-Width ] [-Height ] [-StyleId ] [-PassThru] [] ``` ### Size ```powershell -Add-OfficePowerPointTable [[-Slide] ] -Rows -Columns [-X ] [-Y ] [-Width ] [-Height ] [-StyleId ] [] +Add-OfficePowerPointTable [[-Slide] ] -Rows -Columns [-X ] [-Y ] [-Width ] [-Height ] [-StyleId ] [-PassThru] [] ``` ## DESCRIPTION @@ -194,6 +194,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: InputObject, Size +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Rows Row count for an empty table. diff --git a/Docs/Add-OfficePowerPointTextBox.md b/Docs/Add-OfficePowerPointTextBox.md index 3b0cfa94..26cfb5b8 100644 --- a/Docs/Add-OfficePowerPointTextBox.md +++ b/Docs/Add-OfficePowerPointTextBox.md @@ -11,12 +11,12 @@ Adds a text box to a slide. ## SYNTAX ### Text (Default) ```powershell -Add-OfficePowerPointTextBox -Text [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [] +Add-OfficePowerPointTextBox -Text [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [-PassThru] [] ``` ### Run ```powershell -Add-OfficePowerPointTextBox -Run [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [] +Add-OfficePowerPointTextBox -Run [-Slide ] [-X ] [-Y ] [-Width ] [-Height ] [-PassThru] [] ``` ## DESCRIPTION @@ -27,7 +27,7 @@ Creates a rectangle at the requested coordinates and assigns the supplied text. ### EXAMPLE 1 ```powershell PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointTextBox.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Add-OfficePowerPointTextBox -Slide $slide -Text 'Quarterly overview' -X 80 -Y 150 -Width 320 -Height 50 Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated by PSWriteOffice' -X 80 -Y 210 -Width 320 -Height 35 } @@ -53,6 +53,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Text, Run +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Run Rich text runs. Each run can be created with TextRun/PowerPointTextRun or provided as a hashtable/object. diff --git a/Docs/Add-OfficePowerPointVisual.md b/Docs/Add-OfficePowerPointVisual.md index e2936590..158c4052 100644 --- a/Docs/Add-OfficePowerPointVisual.md +++ b/Docs/Add-OfficePowerPointVisual.md @@ -11,7 +11,7 @@ Adds a ChartForgeX artifact, portable SVG, or converted Office visual to a Power ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficePowerPointVisual [-InputObject] [-Slide ] [-X ] [-Y ] [-SvgPolicy ] [-Width ] [-Height ] [-PointsPerPixel ] [-MaximumSvgElements ] [-MaximumSvgViewportDimension ] [-MaximumSvgViewportPixels ] [-Id ] [-Title ] [-AlternativeText ] [] +Add-OfficePowerPointVisual [-InputObject] [-Slide ] [-X ] [-Y ] [-PassThru] [-SvgPolicy ] [-Width ] [-Height ] [-PointsPerPixel ] [-MaximumSvgElements ] [-MaximumSvgViewportDimension ] [-MaximumSvgViewportPixels ] [-Id ] [-Title ] [-AlternativeText ] [] ``` ## DESCRIPTION @@ -139,6 +139,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the picture added to the slide. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PointsPerPixel Conversion factor from ChartForgeX pixels to Office points. diff --git a/Docs/Add-OfficeVisioConnector.md b/Docs/Add-OfficeVisioConnector.md index 893c2547..69eac23c 100644 --- a/Docs/Add-OfficeVisioConnector.md +++ b/Docs/Add-OfficeVisioConnector.md @@ -11,12 +11,12 @@ Adds a connector between two Visio shapes. ## SYNTAX ### ByKey (Default) ```powershell -Add-OfficeVisioConnector -From -To [-Page ] [-Kind ] [-FromSide ] [-ToSide ] [-Label ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-BeginArrow ] [-EndArrow ] [] +Add-OfficeVisioConnector -From -To [-Page ] [-Kind ] [-FromSide ] [-ToSide ] [-Label ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-BeginArrow ] [-EndArrow ] [-PassThru] [] ``` ### ByShape ```powershell -Add-OfficeVisioConnector -FromShape -ToShape [-Page ] [-Kind ] [-FromSide ] [-ToSide ] [-Label ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-BeginArrow ] [-EndArrow ] [] +Add-OfficeVisioConnector -FromShape -ToShape [-Page ] [-Kind ] [-FromSide ] [-ToSide ] [-Label ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-BeginArrow ] [-EndArrow ] [-PassThru] [] ``` ## DESCRIPTION @@ -213,6 +213,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: ByKey, ByShape +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -To Target shape key, id, or name. diff --git a/Docs/Add-OfficeVisioContainer.md b/Docs/Add-OfficeVisioContainer.md index e749c743..174eb2c8 100644 --- a/Docs/Add-OfficeVisioContainer.md +++ b/Docs/Add-OfficeVisioContainer.md @@ -11,7 +11,7 @@ Creates an OfficeIMO-authored Visio-native container around existing shapes. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeVisioContainer [[-InputObject] ] -Id [-Page ] [-ShapeId ] [-Text ] [-Margin ] [-HeadingHeight ] [-FillColor ] [-LineColor ] [-LineWeight ] [-ContainerStyle ] [-HeadingStyle ] [-Locked] [-NoAutoResize] [-NoHighlight] [-NoRibbon] [] +Add-OfficeVisioContainer [[-InputObject] ] -Id [-Page ] [-ShapeId ] [-Text ] [-Margin ] [-HeadingHeight ] [-FillColor ] [-LineColor ] [-LineWeight ] [-ContainerStyle ] [-HeadingStyle ] [-Locked] [-NoAutoResize] [-NoHighlight] [-NoRibbon] [-PassThru] [] ``` ## DESCRIPTION @@ -256,6 +256,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -ShapeId Shape keys or ids to include in the container. diff --git a/Docs/Add-OfficeVisioDiamond.md b/Docs/Add-OfficeVisioDiamond.md index ef494a02..7ade339f 100644 --- a/Docs/Add-OfficeVisioDiamond.md +++ b/Docs/Add-OfficeVisioDiamond.md @@ -11,7 +11,7 @@ Adds a diamond shape to the current Visio page. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeVisioDiamond [[-Text] ] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-FillColor ] [-LineColor ] [-LineWeight ] [] +Add-OfficeVisioDiamond [[-Text] ] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-FillColor ] [-LineColor ] [-LineWeight ] [-PassThru] [] ``` ## DESCRIPTION @@ -142,6 +142,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Text Text placed inside the shape. diff --git a/Docs/Add-OfficeVisioEllipse.md b/Docs/Add-OfficeVisioEllipse.md index 806ac6a6..9731864c 100644 --- a/Docs/Add-OfficeVisioEllipse.md +++ b/Docs/Add-OfficeVisioEllipse.md @@ -11,7 +11,7 @@ Adds an ellipse shape to the current Visio page. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeVisioEllipse [[-Text] ] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-FillColor ] [-LineColor ] [-LineWeight ] [] +Add-OfficeVisioEllipse [[-Text] ] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-FillColor ] [-LineColor ] [-LineWeight ] [-PassThru] [] ``` ## DESCRIPTION @@ -142,6 +142,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Text Text placed inside the shape. diff --git a/Docs/Add-OfficeVisioPage.md b/Docs/Add-OfficeVisioPage.md index a1189e5f..8016d75b 100644 --- a/Docs/Add-OfficeVisioPage.md +++ b/Docs/Add-OfficeVisioPage.md @@ -11,7 +11,7 @@ Adds a page to a Visio document and optionally executes nested DSL content. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeVisioPage [-Name] [[-Content] ] [-Document ] [-Width ] [-Height ] [-Unit ] [] +Add-OfficeVisioPage [-Name] [[-Content] ] [-Document ] [-Width ] [-Height ] [-Unit ] [-PassThru] [] ``` ## DESCRIPTION @@ -96,6 +96,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Unit Measurement unit for width and height. diff --git a/Docs/Add-OfficeVisioRectangle.md b/Docs/Add-OfficeVisioRectangle.md index 15647692..c87e3bc3 100644 --- a/Docs/Add-OfficeVisioRectangle.md +++ b/Docs/Add-OfficeVisioRectangle.md @@ -11,7 +11,7 @@ Adds a rectangle shape to the current Visio page. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeVisioRectangle [[-Text] ] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [] +Add-OfficeVisioRectangle [[-Text] ] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [-PassThru] [] ``` ## DESCRIPTION @@ -206,6 +206,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Text Text placed inside the shape. diff --git a/Docs/Add-OfficeVisioStencilShape.md b/Docs/Add-OfficeVisioStencilShape.md index fea8ae0d..fd7d956e 100644 --- a/Docs/Add-OfficeVisioStencilShape.md +++ b/Docs/Add-OfficeVisioStencilShape.md @@ -11,17 +11,17 @@ Adds a stencil shape to the current Visio page. ## SYNTAX ### CatalogName (Default) ```powershell -Add-OfficeVisioStencilShape [-Stencil] [[-Text] ] [-Page ] [-Catalog ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-ShapeName ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [] +Add-OfficeVisioStencilShape [-Stencil] [[-Text] ] [-Page ] [-Catalog ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-ShapeName ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [-PassThru] [] ``` ### CatalogObject ```powershell -Add-OfficeVisioStencilShape [-Stencil] [[-Text] ] -CatalogObject [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-ShapeName ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [] +Add-OfficeVisioStencilShape [-Stencil] [[-Text] ] -CatalogObject [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-ShapeName ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [-PassThru] [] ``` ### BuiltIn ```powershell -Add-OfficeVisioStencilShape [-Stencil] [[-Text] ] [-Page ] [-BuiltIn ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-ShapeName ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [] +Add-OfficeVisioStencilShape [-Stencil] [[-Text] ] [-Page ] [-BuiltIn ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-ShapeName ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-LinePattern ] [-FillPattern ] [-Angle ] [-PassThru] [] ``` ## DESCRIPTION @@ -249,6 +249,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: CatalogName, CatalogObject, BuiltIn +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -ShapeName Optional shape name. diff --git a/Docs/Add-OfficeVisioTextBox.md b/Docs/Add-OfficeVisioTextBox.md index cc9fadaa..d25fb1ac 100644 --- a/Docs/Add-OfficeVisioTextBox.md +++ b/Docs/Add-OfficeVisioTextBox.md @@ -11,7 +11,7 @@ Adds a text box to the current Visio page. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeVisioTextBox [-Text] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [] +Add-OfficeVisioTextBox [-Text] [-Page ] [-Key ] [-X ] [-Y ] [-Width ] [-Height ] [-Unit ] [-Name ] [-NameU ] [-FillColor ] [-LineColor ] [-LineWeight ] [-PassThru] [] ``` ## DESCRIPTION @@ -158,6 +158,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Text Text placed inside the text box. diff --git a/Docs/Add-OfficeWordChart.md b/Docs/Add-OfficeWordChart.md index 7a67427a..ba0495e2 100644 --- a/Docs/Add-OfficeWordChart.md +++ b/Docs/Add-OfficeWordChart.md @@ -52,7 +52,7 @@ PS> $trend = @( [pscustomobject]@{ Month = 'Feb'; Sales = 12; Profit = 5 } [pscustomobject]@{ Month = 'Mar'; Sales = 15; Profit = 7 } ) -$doc = New-OfficeWord -Path .\Trend.docx -PassThru +$doc = New-OfficeWord -Path .\Trend.docx -NoSave Add-OfficeWordChart -Document $doc -Type Line -InputObject $trend -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -Title 'Quarter trend' Save-OfficeWord -Document $doc ``` diff --git a/Docs/Add-OfficeWordFooter.md b/Docs/Add-OfficeWordFooter.md index b3213a10..3d4c0733 100644 --- a/Docs/Add-OfficeWordFooter.md +++ b/Docs/Add-OfficeWordFooter.md @@ -11,7 +11,7 @@ Adds content to a section footer. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeWordFooter [[-Content] ] [-Type ] [] +Add-OfficeWordFooter [[-Content] ] [-Type ] [-PassThru] [] ``` ## DESCRIPTION @@ -44,6 +44,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Type The footer kind (Default/First/Even). diff --git a/Docs/Add-OfficeWordHeader.md b/Docs/Add-OfficeWordHeader.md index 50964d5d..f63a3910 100644 --- a/Docs/Add-OfficeWordHeader.md +++ b/Docs/Add-OfficeWordHeader.md @@ -11,7 +11,7 @@ Adds content to a section header. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeWordHeader [[-Content] ] [-Type ] [] +Add-OfficeWordHeader [[-Content] ] [-Type ] [-PassThru] [] ``` ## DESCRIPTION @@ -44,6 +44,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Type The header type to modify. diff --git a/Docs/Add-OfficeWordList.md b/Docs/Add-OfficeWordList.md index 9a614680..da80c5ac 100644 --- a/Docs/Add-OfficeWordList.md +++ b/Docs/Add-OfficeWordList.md @@ -11,7 +11,7 @@ Starts a list inside the current section or paragraph anchor. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeWordList [[-Content] ] [[-Style] ] [] +Add-OfficeWordList [[-Content] ] [[-Style] ] [-PassThru] [] ``` ## DESCRIPTION @@ -44,6 +44,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Style Built-in list style or custom numbering scheme. diff --git a/Docs/Add-OfficeWordPageNumber.md b/Docs/Add-OfficeWordPageNumber.md index cbaa8941..596910ef 100644 --- a/Docs/Add-OfficeWordPageNumber.md +++ b/Docs/Add-OfficeWordPageNumber.md @@ -11,7 +11,7 @@ Adds a PAGE field to the current header/footer. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeWordPageNumber [-IncludeTotalPages] [] +Add-OfficeWordPageNumber [-IncludeTotalPages] [-PassThru] [] ``` ## DESCRIPTION @@ -44,6 +44,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### CommonParameters This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). diff --git a/Docs/Add-OfficeWordTableCondition.md b/Docs/Add-OfficeWordTableCondition.md index b5a652e6..9f931ffa 100644 --- a/Docs/Add-OfficeWordTableCondition.md +++ b/Docs/Add-OfficeWordTableCondition.md @@ -11,7 +11,7 @@ Attaches conditional formatting logic to the current table. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeWordTableCondition -FilterScript [-TableStyle ] [-BackgroundColor ] [] +Add-OfficeWordTableCondition -FilterScript [-TableStyle ] [-BackgroundColor ] [-PassThru] [] ``` ## DESCRIPTION @@ -60,6 +60,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -TableStyle Optional table style applied when the predicate matches. diff --git a/Docs/Add-OfficeWordVisual.md b/Docs/Add-OfficeWordVisual.md index 9d86ddee..7dfa3833 100644 --- a/Docs/Add-OfficeWordVisual.md +++ b/Docs/Add-OfficeWordVisual.md @@ -11,7 +11,7 @@ Adds a ChartForgeX artifact, portable SVG, or converted Office visual to Word. ## SYNTAX ### __AllParameterSets ```powershell -Add-OfficeWordVisual [-InputObject] [-Paragraph ] [-Wrap ] [-SvgPolicy ] [-Width ] [-Height ] [-PointsPerPixel ] [-MaximumSvgElements ] [-MaximumSvgViewportDimension ] [-MaximumSvgViewportPixels ] [-Id ] [-Title ] [-AlternativeText ] [] +Add-OfficeWordVisual [-InputObject] [-Paragraph ] [-Wrap ] [-PassThru] [-SvgPolicy ] [-Width ] [-Height ] [-PointsPerPixel ] [-MaximumSvgElements ] [-MaximumSvgViewportDimension ] [-MaximumSvgViewportPixels ] [-Id ] [-Title ] [-AlternativeText ] [] ``` ## DESCRIPTION @@ -156,6 +156,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PassThru +Emit the image added to the paragraph. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PointsPerPixel Conversion factor from ChartForgeX pixels to Office points. diff --git a/Docs/Clear-OfficeExcelAutoFilter.md b/Docs/Clear-OfficeExcelAutoFilter.md index 7e9bee23..157931c6 100644 --- a/Docs/Clear-OfficeExcelAutoFilter.md +++ b/Docs/Clear-OfficeExcelAutoFilter.md @@ -11,12 +11,12 @@ Clears any AutoFilter on the current worksheet. ## SYNTAX ### Context (Default) ```powershell -Clear-OfficeExcelAutoFilter [] +Clear-OfficeExcelAutoFilter [-PassThru] [] ``` ### Document ```powershell -Clear-OfficeExcelAutoFilter -Document [-Sheet ] [-SheetIndex ] [] +Clear-OfficeExcelAutoFilter -Document [-Sheet ] [-SheetIndex ] [-PassThru] [] ``` ## DESCRIPTION @@ -49,6 +49,22 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Context, Document +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Sheet Worksheet name when using Document. diff --git a/Docs/Clear-OfficeExcelComment.md b/Docs/Clear-OfficeExcelComment.md index cd54e91f..e4385b08 100644 --- a/Docs/Clear-OfficeExcelComment.md +++ b/Docs/Clear-OfficeExcelComment.md @@ -16,7 +16,7 @@ Clear-OfficeExcelComment [-Sheet ] [-SheetIndex ] [-Address [-Sheet ] [-SheetIndex ] [-Address ] [-Range ] [-Author ] [-TextContains ] [-All] [-PassThru] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelComment [-Path] [-Sheet ] [-SheetIndex ] [-Address ] [-Range ] [-Author ] [-TextContains ] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document @@ -104,33 +104,33 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. +### -PassThru +Returns the number of comments cleared. ```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath +Type: SwitchParameter +Parameter Sets: Context, Path, Document +Aliases: None Possible values: -Required: True -Position: 0 +Required: False +Position: named Default value: None Accept pipeline input: False Accept wildcard characters: False ``` -### -PassThru -Returns the number of comments cleared. +### -Path +Workbook path to update. ```yaml -Type: SwitchParameter -Parameter Sets: Context, Path, Document -Aliases: None +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath Possible values: -Required: False -Position: named +Required: True +Position: 0 Default value: None Accept pipeline input: False Accept wildcard characters: False diff --git a/Docs/Clear-OfficeExcelConditionalFormatting.md b/Docs/Clear-OfficeExcelConditionalFormatting.md index f4e60f04..a253019b 100644 --- a/Docs/Clear-OfficeExcelConditionalFormatting.md +++ b/Docs/Clear-OfficeExcelConditionalFormatting.md @@ -11,17 +11,17 @@ Clears conditional formatting rules from one or more Excel worksheets. ## SYNTAX ### Context (Default) ```powershell -Clear-OfficeExcelConditionalFormatting [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelConditionalFormatting [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Path ```powershell -Clear-OfficeExcelConditionalFormatting [-InputPath] [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelConditionalFormatting [-Path] [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document ```powershell -Clear-OfficeExcelConditionalFormatting -Document [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelConditionalFormatting -Document [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -104,13 +104,29 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Context, Path, Document +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Path Workbook path to update. ```yaml Type: String Parameter Sets: Path -Aliases: Path, FilePath +Aliases: InputPath, FilePath Possible values: Required: True diff --git a/Docs/Clear-OfficeExcelDataValidation.md b/Docs/Clear-OfficeExcelDataValidation.md index a40f80fe..670fee6f 100644 --- a/Docs/Clear-OfficeExcelDataValidation.md +++ b/Docs/Clear-OfficeExcelDataValidation.md @@ -11,17 +11,17 @@ Clears data validation rules from one or more Excel worksheets. ## SYNTAX ### Context (Default) ```powershell -Clear-OfficeExcelDataValidation [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelDataValidation [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Path ```powershell -Clear-OfficeExcelDataValidation [-InputPath] [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelDataValidation [-Path] [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document ```powershell -Clear-OfficeExcelDataValidation -Document [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelDataValidation -Document [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -104,13 +104,29 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Context, Path, Document +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Path Workbook path to update. ```yaml Type: String Parameter Sets: Path -Aliases: Path, FilePath +Aliases: InputPath, FilePath Possible values: Required: True diff --git a/Docs/Clear-OfficeExcelPageBreak.md b/Docs/Clear-OfficeExcelPageBreak.md index 06342e9c..d7be4ca3 100644 --- a/Docs/Clear-OfficeExcelPageBreak.md +++ b/Docs/Clear-OfficeExcelPageBreak.md @@ -11,17 +11,17 @@ Clears manual row or column page breaks from an Excel worksheet. ## SYNTAX ### Context (Default) ```powershell -Clear-OfficeExcelPageBreak [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-All] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelPageBreak [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Path ```powershell -Clear-OfficeExcelPageBreak [-InputPath] [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-All] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelPageBreak [-Path] [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document ```powershell -Clear-OfficeExcelPageBreak -Document [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-All] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelPageBreak -Document [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -88,13 +88,29 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath +### -PassThru +Emit the object created or changed by the command. + +```yaml +Type: SwitchParameter +Parameter Sets: Context, Path, Document +Aliases: None +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Path Workbook path to update. ```yaml Type: String Parameter Sets: Path -Aliases: Path, FilePath +Aliases: InputPath, FilePath Possible values: Required: True diff --git a/Docs/Clear-OfficeExcelRange.md b/Docs/Clear-OfficeExcelRange.md index fe378870..12fbb0a8 100644 --- a/Docs/Clear-OfficeExcelRange.md +++ b/Docs/Clear-OfficeExcelRange.md @@ -11,17 +11,17 @@ Clears values, formulas, styles, and range metadata from an Excel worksheet rang ## SYNTAX ### Context (Default) ```powershell -Clear-OfficeExcelRange -Range [-Sheet ] [-SheetIndex ] [-Contents] [-Values] [-Formulas] [-Styles] [-Comments] [-Hyperlinks] [-DataValidations] [-ConditionalFormatting] [-Merges] [-Sparklines] [-All] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelRange -Range [-Sheet ] [-SheetIndex ] [-Contents] [-Values] [-Formulas] [-Styles] [-Comments] [-Hyperlinks] [-DataValidations] [-ConditionalFormatting] [-Merges] [-Sparklines] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Path ```powershell -Clear-OfficeExcelRange [-InputPath] -Range [-Sheet ] [-SheetIndex ] [-Contents] [-Values] [-Formulas] [-Styles] [-Comments] [-Hyperlinks] [-DataValidations] [-ConditionalFormatting] [-Merges] [-Sparklines] [-All] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelRange [-Path] -Range [-Sheet ] [-SheetIndex ] [-Contents] [-Values] [-Formulas] [-Styles] [-Comments] [-Hyperlinks] [-DataValidations] [-ConditionalFormatting] [-Merges] [-Sparklines] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ### Document ```powershell -Clear-OfficeExcelRange -Document -Range [-Sheet ] [-SheetIndex ] [-Contents] [-Values] [-Formulas] [-Styles] [-Comments] [-Hyperlinks] [-DataValidations] [-ConditionalFormatting] [-Merges] [-Sparklines] [-All] [-WhatIf] [-Confirm] [] +Clear-OfficeExcelRange -Document -Range [-Sheet ] [-SheetIndex ] [-Contents] [-Values] [-Formulas] [-Styles] [-Comments] [-Hyperlinks] [-DataValidations] [-ConditionalFormatting] [-Merges] [-Sparklines] [-All] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -168,24 +168,24 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath -Workbook path to update. +### -Merges +Clear merged-cell definitions that overlap the selected range. ```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath +Type: SwitchParameter +Parameter Sets: Context, Path, Document +Aliases: None Possible values: -Required: True -Position: 0 +Required: False +Position: named Default value: None Accept pipeline input: False Accept wildcard characters: False ``` -### -Merges -Clear merged-cell definitions that overlap the selected range. +### -PassThru +Emit the object created or changed by the command. ```yaml Type: SwitchParameter @@ -200,6 +200,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Workbook path to update. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Range A1 range to clear. diff --git a/Docs/Close-OfficeExcel.md b/Docs/Close-OfficeExcel.md index a2ff1893..efe05ad0 100644 --- a/Docs/Close-OfficeExcel.md +++ b/Docs/Close-OfficeExcel.md @@ -11,7 +11,7 @@ Closes an Excel workbook and optionally saves it. ## SYNTAX ### __AllParameterSets ```powershell -Close-OfficeExcel -Document [-Save] [-Path ] [-Show] [-Password ] [-SafePreflight] [-SafeRepairDefinedNames] [-ValidateOpenXml] [-DisableFastPackageWriter] [-EvaluateFormulas] [-ClearCachedFormulaResults] [-MarkFormulasDirty] [-ForceFullCalculationOnOpen] [-DateSystem ] [] +Close-OfficeExcel -Document [-Save] [-Path ] [-Open] [-Password ] [-SafePreflight] [-SafeRepairDefinedNames] [-ValidateOpenXml] [-DisableFastPackageWriter] [-EvaluateFormulas] [-ClearCachedFormulaResults] [-MarkFormulasDirty] [-ForceFullCalculationOnOpen] [-DateSystem ] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -147,13 +147,13 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Password -Password used to save the workbook as an encrypted package. +### -Open +Open the workbook after saving. Requires -Save or -Path. ```yaml -Type: String +Type: SwitchParameter Parameter Sets: __AllParameterSets -Aliases: None +Aliases: Show Possible values: Required: False @@ -163,8 +163,8 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Path -Optional output path when saving. +### -Password +Password used to save the workbook as an encrypted package. ```yaml Type: String @@ -179,11 +179,11 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -SafePreflight -Run OfficeIMO worksheet preflight cleanup before saving. +### -Path +Optional output path when saving. ```yaml -Type: SwitchParameter +Type: String Parameter Sets: __AllParameterSets Aliases: None Possible values: @@ -195,8 +195,8 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -SafeRepairDefinedNames -Repair common defined-name issues before saving. +### -SafePreflight +Run OfficeIMO worksheet preflight cleanup before saving. ```yaml Type: SwitchParameter @@ -211,8 +211,8 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Save -Persist changes before closing. +### -SafeRepairDefinedNames +Repair common defined-name issues before saving. ```yaml Type: SwitchParameter @@ -227,8 +227,8 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Show -Open the workbook in Excel after saving. +### -Save +Persist changes before closing. ```yaml Type: SwitchParameter diff --git a/Docs/Close-OfficePowerPoint.md b/Docs/Close-OfficePowerPoint.md index d6f9100f..a861adb9 100644 --- a/Docs/Close-OfficePowerPoint.md +++ b/Docs/Close-OfficePowerPoint.md @@ -11,7 +11,7 @@ Closes a PowerPoint presentation and optionally saves it. ## SYNTAX ### __AllParameterSets ```powershell -Close-OfficePowerPoint -Presentation [-Save] [-Show] [-Password ] [-WhatIf] [-Confirm] [] +Close-OfficePowerPoint -Presentation [-Save] [-Path ] [-Open] [-Password ] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -21,20 +21,36 @@ Provides a cmdlet wrapper so PowerShell scripts do not need to call Dispose dire ### EXAMPLE 1 ```powershell -PS> $ppt = Get-OfficePowerPoint -FilePath .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt +PS> $ppt = Get-OfficePowerPoint -Path .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt ``` Releases the loaded presentation instance. ### EXAMPLE 2 ```powershell -PS> Close-OfficePowerPoint -Presentation $ppt -Save -Show +PS> Close-OfficePowerPoint -Presentation $ppt -Save -Open ``` Saves the presentation, opens it in PowerPoint, and releases the object. ## PARAMETERS +### -Open +Open the presentation after saving. Requires -Save or -Path. + +```yaml +Type: SwitchParameter +Parameter Sets: __AllParameterSets +Aliases: Show +Possible values: + +Required: False +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Password Password used to save the presentation as an encrypted package. @@ -51,40 +67,40 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Presentation -Presentation to close. +### -Path +Optional target path when saving. ```yaml -Type: PowerPointPresentation +Type: String Parameter Sets: __AllParameterSets -Aliases: None +Aliases: FilePath Possible values: -Required: True +Required: False Position: named Default value: None -Accept pipeline input: True (ByValue) +Accept pipeline input: False Accept wildcard characters: False ``` -### -Save -Persist changes before closing. +### -Presentation +Presentation to close. ```yaml -Type: SwitchParameter +Type: PowerPointPresentation Parameter Sets: __AllParameterSets Aliases: None Possible values: -Required: False +Required: True Position: named Default value: None -Accept pipeline input: False +Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -Show -Open the presentation in PowerPoint after saving. +### -Save +Persist changes before closing. ```yaml Type: SwitchParameter diff --git a/Docs/Close-OfficeWord.md b/Docs/Close-OfficeWord.md index c2aecced..1ea3a349 100644 --- a/Docs/Close-OfficeWord.md +++ b/Docs/Close-OfficeWord.md @@ -11,17 +11,17 @@ Closes one or more tracked Word documents, optionally saving them. ## SYNTAX ### Current (Default) ```powershell -Close-OfficeWord [-Current] [-Save] [-Path ] [-Show] [-Password ] [] +Close-OfficeWord [-Current] [-Save] [-Path ] [-Open] [-Password ] [-WhatIf] [-Confirm] [] ``` ### Document ```powershell -Close-OfficeWord [-Document] [-Save] [-Path ] [-Show] [-Password ] [] +Close-OfficeWord [-Document] [-Save] [-Path ] [-Open] [-Password ] [-WhatIf] [-Confirm] [] ``` ### All ```powershell -Close-OfficeWord -All [-Save] [-Show] [-Password ] [] +Close-OfficeWord -All [-Save] [-Open] [-Password ] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -45,7 +45,7 @@ Closes the current tracked document when a document handle is not passed explici ### EXAMPLE 3 ```powershell -PS> Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Show +PS> Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Open ``` Saves updates to Report-final.docx, opens it, and disposes the document. @@ -100,13 +100,13 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -Password -Password used to save the document as an encrypted package. +### -Open +Open the file after saving. Requires -Save or -Path. ```yaml -Type: String +Type: SwitchParameter Parameter Sets: Current, Document, All -Aliases: None +Aliases: Show Possible values: Required: False @@ -116,12 +116,12 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Path -Optional target path when saving. +### -Password +Password used to save the document as an encrypted package. ```yaml Type: String -Parameter Sets: Current, Document +Parameter Sets: Current, Document, All Aliases: None Possible values: @@ -132,12 +132,12 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Save -Persist changes before closing. +### -Path +Optional target path when saving. ```yaml -Type: SwitchParameter -Parameter Sets: Current, Document, All +Type: String +Parameter Sets: Current, Document Aliases: None Possible values: @@ -148,8 +148,8 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Show -Open the file after saving. +### -Save +Persist changes before closing. ```yaml Type: SwitchParameter diff --git a/Docs/Compare-OfficeExcelRange.md b/Docs/Compare-OfficeExcelRange.md index 85eec559..49762821 100644 --- a/Docs/Compare-OfficeExcelRange.md +++ b/Docs/Compare-OfficeExcelRange.md @@ -11,7 +11,7 @@ Compares two Excel worksheets or ranges and returns cell-level differences. ## SYNTAX ### Path (Default) ```powershell -Compare-OfficeExcelRange [-InputPath] [-RightPath ] [-LeftSheet ] [-LeftSheetIndex ] [-RightSheet ] [-RightSheetIndex ] [-LeftRange ] [-RightRange ] [-TrimStrings] [-IgnoreCase] [-StrictNullEmpty] [] +Compare-OfficeExcelRange [-Path] [-RightPath ] [-LeftSheet ] [-LeftSheetIndex ] [-RightSheet ] [-RightSheetIndex ] [-LeftRange ] [-RightRange ] [-TrimStrings] [-IgnoreCase] [-StrictNullEmpty] [] ``` ### Document @@ -73,22 +73,6 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath -Left workbook path. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path, FilePath, LeftPath -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -LeftRange Left A1 range. Defaults to the left worksheet used range. @@ -137,6 +121,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Left workbook path. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath, LeftPath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -RightDocument Optional right workbook object. Defaults to the left workbook. diff --git a/Docs/Compare-OfficeExcelWorkbook.md b/Docs/Compare-OfficeExcelWorkbook.md index 1d57e70c..85e0f5ea 100644 --- a/Docs/Compare-OfficeExcelWorkbook.md +++ b/Docs/Compare-OfficeExcelWorkbook.md @@ -11,7 +11,7 @@ Compares two workbooks by sheets, cells, formulas, styles, tables, comments, nam ## SYNTAX ### Path (Default) ```powershell -Compare-OfficeExcelWorkbook [-InputPath] [-DifferencePath] [-MaxDifferences ] [-SkipCells] [-SkipCellStyles] [-SkipNamedRanges] [-SkipTables] [-SkipWorksheetMetadata] [-SkipComments] [] +Compare-OfficeExcelWorkbook [-Path] [-DifferencePath] [-MaxDifferences ] [-SkipCells] [-SkipCellStyles] [-SkipNamedRanges] [-SkipTables] [-SkipWorksheetMetadata] [-SkipComments] [] ``` ### Document @@ -86,33 +86,33 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Workbook path. +### -MaxDifferences +Maximum number of differences to report. ```yaml -Type: String -Parameter Sets: Path -Aliases: Path, ReferencePath +Type: Int32 +Parameter Sets: Path, Document +Aliases: None Possible values: -Required: True -Position: 0 +Required: False +Position: named Default value: None Accept pipeline input: False Accept wildcard characters: False ``` -### -MaxDifferences -Maximum number of differences to report. +### -Path +Workbook path. ```yaml -Type: Int32 -Parameter Sets: Path, Document -Aliases: None +Type: String +Parameter Sets: Path +Aliases: InputPath, ReferencePath Possible values: -Required: False -Position: named +Required: True +Position: 0 Default value: None Accept pipeline input: False Accept wildcard characters: False diff --git a/Docs/Compare-OfficePdfVisual.md b/Docs/Compare-OfficePdfVisual.md index 78c4192e..46b72432 100644 --- a/Docs/Compare-OfficePdfVisual.md +++ b/Docs/Compare-OfficePdfVisual.md @@ -21,7 +21,8 @@ Compares rendered PDF pages and returns pixel-level review artifacts. ### EXAMPLE 1 ```powershell -PS> $options = [OfficeIMO.Pdf.PdfVisualComparisonOptions]::new(); $options.AllowedDifferenceRatio = 0.001; Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options +PS> $options = New-OfficePdfVisualComparisonOptions -AllowedDifferenceRatio 0.001 -ChannelTolerance 2 +Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options ``` Returns per-page difference ratios, images, and diagnostics. diff --git a/Docs/Compare-OfficeWordDocument.md b/Docs/Compare-OfficeWordDocument.md index 8e21f096..86ce8846 100644 --- a/Docs/Compare-OfficeWordDocument.md +++ b/Docs/Compare-OfficeWordDocument.md @@ -26,6 +26,13 @@ PS> $result = Compare-OfficeWordDocument -ReferencePath .\Before.docx -Differenc Returns deterministic findings and saves a Word document containing revision marks. +### EXAMPLE 2 +```powershell +PS> $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -CompareVolatileMetadata:$false +Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options +``` + + ## PARAMETERS ### -DifferencePath diff --git a/Docs/ConvertFrom-OfficeMarkdownHtml.md b/Docs/ConvertFrom-OfficeMarkdownHtml.md index fb9ac0a7..9a7028c5 100644 --- a/Docs/ConvertFrom-OfficeMarkdownHtml.md +++ b/Docs/ConvertFrom-OfficeMarkdownHtml.md @@ -16,7 +16,7 @@ ConvertFrom-OfficeMarkdownHtml [-Html] [-OutputPath ] [-AsDocum ### Path ```powershell -ConvertFrom-OfficeMarkdownHtml [-InputPath] [-OutputPath ] [-AsDocument] [-PassThru] [-Options ] [-Portable] [-BaseUri ] [-IncludeDocumentChrome] [-PreserveScriptsAndStyles] [-DropUnsupportedBlocks] [-DropUnsupportedInlineHtml] [-MaxInputCharacters ] [-Base64ImageHandling ] [-Base64ImageOutputDirectory ] [-ListingCardMetadataMode ] [-MaxTableExpandedColumns ] [-WriteOptions ] [-WriteProfile ] [-ImageRenderingMode ] [-LineEnding ] [-UnorderedListMarker ] [-WhatIf] [-Confirm] [] +ConvertFrom-OfficeMarkdownHtml [-Path] [-OutputPath ] [-AsDocument] [-PassThru] [-Options ] [-Portable] [-BaseUri ] [-IncludeDocumentChrome] [-PreserveScriptsAndStyles] [-DropUnsupportedBlocks] [-DropUnsupportedInlineHtml] [-MaxInputCharacters ] [-Base64ImageHandling ] [-Base64ImageOutputDirectory ] [-ListingCardMetadataMode ] [-MaxTableExpandedColumns ] [-WriteOptions ] [-WriteProfile ] [-ImageRenderingMode ] [-LineEnding ] [-UnorderedListMarker ] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -184,22 +184,6 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -InputPath -Path to an HTML file. - -```yaml -Type: String -Parameter Sets: Path -Aliases: FilePath, Path -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -LineEnding Markdown line ending: CRLF, LF, CR, or a literal line ending string. @@ -312,6 +296,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Path to an HTML file. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Portable Use portable Markdown output when Options is not supplied. diff --git a/Docs/ConvertFrom-OfficeOpenDocument.md b/Docs/ConvertFrom-OfficeOpenDocument.md index 01b0c853..38605c7c 100644 --- a/Docs/ConvertFrom-OfficeOpenDocument.md +++ b/Docs/ConvertFrom-OfficeOpenDocument.md @@ -21,7 +21,8 @@ Converts native ODT, ODS, or ODP content to Word, Excel, or PowerPoint with fide ### EXAMPLE 1 ```powershell -ConvertFrom-OfficeOpenDocument -Path 'C:\Path' +PS> $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumExpandedCells 250000 +ConvertFrom-OfficeOpenDocument -Path .\Status.ods -OutputPath .\Status.xlsx -ExcelOptions $options ``` diff --git a/Docs/ConvertFrom-OfficePdfHtml.md b/Docs/ConvertFrom-OfficePdfHtml.md index 7e920fc6..62bb9c73 100644 --- a/Docs/ConvertFrom-OfficePdfHtml.md +++ b/Docs/ConvertFrom-OfficePdfHtml.md @@ -16,7 +16,7 @@ ConvertFrom-OfficePdfHtml [-Html] [-OutputPath ] [-Profile [-OutputPath ] [-Profile ] [-TrustedDocumentProfile] [-BasePath ] [-StylesheetPath ] [-StylesheetContent ] [-Options ] [-Open] [-PassThru] [-WhatIf] [-Confirm] [] +ConvertFrom-OfficePdfHtml -Path [-OutputPath ] [-Profile ] [-TrustedDocumentProfile] [-BasePath ] [-StylesheetPath ] [-StylesheetContent ] [-Options ] [-Open] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -66,22 +66,6 @@ Accept pipeline input: True (ByValue) Accept wildcard characters: False ``` -### -InputPath -Path to an HTML file. - -```yaml -Type: String -Parameter Sets: Path -Aliases: FilePath, Path -Possible values: - -Required: True -Position: named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -Open Open the PDF after saving. @@ -146,6 +130,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Path to an HTML file. + +```yaml +Type: String +Parameter Sets: Path +Aliases: InputPath, FilePath +Possible values: + +Required: True +Position: named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -Profile HTML conversion profile applied before PDF rendering. diff --git a/Docs/ConvertFrom-OfficeWordHtml.md b/Docs/ConvertFrom-OfficeWordHtml.md index 02f91bf1..334b9b77 100644 --- a/Docs/ConvertFrom-OfficeWordHtml.md +++ b/Docs/ConvertFrom-OfficeWordHtml.md @@ -16,7 +16,7 @@ ConvertFrom-OfficeWordHtml [-Html] [-OutputPath ] [-FontFamily ### Path ```powershell -ConvertFrom-OfficeWordHtml [-FilePath] [-OutputPath ] [-FontFamily ] [-BasePath ] [-StylesheetPath ] [-StylesheetContent ] [-IncludeListStyles] [-ContinueNumbering] [-SupportsHeadingNumbering] [-RenderPreAsTable] [-TableCaptionPosition ] [-SectionTagHandling ] [-Open] [-PassThru] [-WhatIf] [-Confirm] [] +ConvertFrom-OfficeWordHtml [-Path] [-OutputPath ] [-FontFamily ] [-BasePath ] [-StylesheetPath ] [-StylesheetContent ] [-IncludeListStyles] [-ContinueNumbering] [-SupportsHeadingNumbering] [-RenderPreAsTable] [-TableCaptionPosition ] [-SectionTagHandling ] [-Open] [-PassThru] [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -72,22 +72,6 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -FilePath -Path to an HTML file. - -```yaml -Type: String -Parameter Sets: Path -Aliases: Path -Possible values: - -Required: True -Position: 0 -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ### -FontFamily Optional font family to apply during conversion. @@ -184,6 +168,22 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Path +Path to an HTML file. + +```yaml +Type: String +Parameter Sets: Path +Aliases: FilePath +Possible values: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -RenderPreAsTable Render
 elements as single-cell tables.
 
diff --git a/Docs/ConvertFrom-OfficeWordMarkdown.md b/Docs/ConvertFrom-OfficeWordMarkdown.md
index d98e8cbb..813c14ae 100644
--- a/Docs/ConvertFrom-OfficeWordMarkdown.md
+++ b/Docs/ConvertFrom-OfficeWordMarkdown.md
@@ -16,7 +16,7 @@ ConvertFrom-OfficeWordMarkdown [-Markdown]  [-OutputPath ] [-Tem
 
 ### Path
 ```powershell
-ConvertFrom-OfficeWordMarkdown [-FilePath]  [-OutputPath ] [-TemplatePath ] [-BookmarkName ] [-ContentControlTag ] [-ContentControlAlias ] [-KeepPlaceholder] [-RenderFrontMatter] [-FontFamily ] [-BaseUri ] [-AllowLocalImages] [-AllowedImageDirectory ] [-AllowRemoteImages] [-ReaderOptions ] [-Profile ] [-NormalizeInput ] [-Theme ] [-AllowDataUriImages ] [-MaxDataUriImageBytes ] [-PreferNarrativeSingleLineDefinitions] [-FitImagesToPageContentWidth] [-FitImagesToContextWidth] [-MaxImageWidthPixels ] [-MaxImageHeightPixels ] [-MaxImageWidthPercentOfContent ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
+ConvertFrom-OfficeWordMarkdown [-Path]  [-OutputPath ] [-TemplatePath ] [-BookmarkName ] [-ContentControlTag ] [-ContentControlAlias ] [-KeepPlaceholder] [-RenderFrontMatter] [-FontFamily ] [-BaseUri ] [-AllowLocalImages] [-AllowedImageDirectory ] [-AllowRemoteImages] [-ReaderOptions ] [-Profile ] [-NormalizeInput ] [-Theme ] [-AllowDataUriImages ] [-MaxDataUriImageBytes ] [-PreferNarrativeSingleLineDefinitions] [-FitImagesToPageContentWidth] [-FitImagesToContextWidth] [-MaxImageWidthPixels ] [-MaxImageHeightPixels ] [-MaxImageWidthPercentOfContent ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -196,22 +196,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -FilePath
-Path to a Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -FitImagesToContextWidth
 Fit Markdown images to the current content context width.
 
@@ -420,6 +404,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to a Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PreferNarrativeSingleLineDefinitions
 Prefer narrative paragraphs for isolated single-line definition-list patterns.
 
diff --git a/Docs/ConvertTo-OfficeMarkdownHtml.md b/Docs/ConvertTo-OfficeMarkdownHtml.md
index 46c66889..4835a3c8 100644
--- a/Docs/ConvertTo-OfficeMarkdownHtml.md
+++ b/Docs/ConvertTo-OfficeMarkdownHtml.md
@@ -11,7 +11,7 @@ Converts Markdown content to HTML.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-ConvertTo-OfficeMarkdownHtml [-InputPath]  [-OutputPath ] [-DocumentMode] [-Style ] [-CssDelivery ] [-AssetMode ] [-Title ] [-ReaderOptions ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-Theme ] [-RawHtmlHandling ] [-IncludeAnchorLinks] [-GitHubTaskListHtml] [-GitHubFootnoteHtml] [-ExternalLinksTargetBlank] [-ExternalLinksRel ] [-ExternalLinksReferrerPolicy ] [-RestrictHttpLinksToBaseOrigin] [-RestrictHttpImagesToBaseOrigin] [-BlockExternalHttpImages] [-ImagesLoadingLazy] [-ImagesDecodingAsync] [-ImagesReferrerPolicy ] [-AllowedHttpLinkHost ] [-AllowedHttpImageHost ] [-PassThru] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeMarkdownHtml [-Path]  [-OutputPath ] [-DocumentMode] [-Style ] [-CssDelivery ] [-AssetMode ] [-Title ] [-ReaderOptions ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-Theme ] [-RawHtmlHandling ] [-IncludeAnchorLinks] [-GitHubTaskListHtml] [-GitHubFootnoteHtml] [-ExternalLinksTargetBlank] [-ExternalLinksRel ] [-ExternalLinksReferrerPolicy ] [-RestrictHttpLinksToBaseOrigin] [-RestrictHttpImagesToBaseOrigin] [-BlockExternalHttpImages] [-ImagesLoadingLazy] [-ImagesDecodingAsync] [-ImagesReferrerPolicy ] [-AllowedHttpLinkHost ] [-AllowedHttpImageHost ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Text
@@ -397,22 +397,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MaxInputCharacters
 Maximum Markdown input length accepted by the reader.
 
@@ -477,6 +461,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Profile
 Named reader profile used when ReaderOptions is not supplied.
 
diff --git a/Docs/ConvertTo-OfficeOpenDocument.md b/Docs/ConvertTo-OfficeOpenDocument.md
index 8e732bfa..00d057cb 100644
--- a/Docs/ConvertTo-OfficeOpenDocument.md
+++ b/Docs/ConvertTo-OfficeOpenDocument.md
@@ -36,19 +36,8 @@ Converts Word, Excel, or PowerPoint content to native OpenDocument with fidelity
 
 ### EXAMPLE 1
 ```powershell
-ConvertTo-OfficeOpenDocument -Path 'C:\Path'
-```
-
-
-### EXAMPLE 2
-```powershell
-ConvertTo-OfficeOpenDocument -ExcelDocument 'Value'
-```
-
-
-### EXAMPLE 3
-```powershell
-ConvertTo-OfficeOpenDocument -PowerPointPresentation 'Value'
+PS> $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters
+ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options -FailOnLoss
 ```
 
 
diff --git a/Docs/ConvertTo-OfficeVisioPng.md b/Docs/ConvertTo-OfficeVisioPng.md
index 19e14ddd..e4751eb5 100644
--- a/Docs/ConvertTo-OfficeVisioPng.md
+++ b/Docs/ConvertTo-OfficeVisioPng.md
@@ -11,12 +11,12 @@ Exports a Visio document page to native dependency-free PNG.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-ConvertTo-OfficeVisioPng [-Path]  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-FontFilePath ] [-FontFaceName ] [-FontCollectionIndex ] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-Supersampling ] [-Show] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeVisioPng [-Path]  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-FontFilePath ] [-FontFaceName ] [-FontCollectionIndex ] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-Supersampling ] [-Open] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-ConvertTo-OfficeVisioPng -Document  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-FontFilePath ] [-FontFaceName ] [-FontCollectionIndex ] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-Supersampling ] [-Show] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeVisioPng -Document  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-FontFilePath ] [-FontFaceName ] [-FontCollectionIndex ] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-Supersampling ] [-Open] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -178,6 +178,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Open
+Open the PNG after saving.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -OutputPath
 Optional output PNG path.
 
@@ -242,22 +258,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the PNG after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: Path, Document
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Supersampling
 Supersampling factor for smoother raster output.
 
diff --git a/Docs/ConvertTo-OfficeVisioSvg.md b/Docs/ConvertTo-OfficeVisioSvg.md
index 86b6a8ca..1ad9a1d8 100644
--- a/Docs/ConvertTo-OfficeVisioSvg.md
+++ b/Docs/ConvertTo-OfficeVisioSvg.md
@@ -11,12 +11,12 @@ Exports a Visio document page to dependency-free SVG.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-ConvertTo-OfficeVisioSvg [-Path]  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-IncludeXmlDeclaration] [-Show] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeVisioSvg [-Path]  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-IncludeXmlDeclaration] [-Open] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-ConvertTo-OfficeVisioSvg -Document  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-IncludeXmlDeclaration] [-Show] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeVisioSvg -Document  [-OutputPath ] [-PageIndex ] [-PixelsPerInch ] [-BackgroundColor ] [-Transparent] [-NoText] [-NoStencilArtwork] [-NoConnectorLabels] [-NoConnectorLabelOverlapResolution] [-IncludeXmlDeclaration] [-Open] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -146,6 +146,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Open
+Open the SVG after saving.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -OutputPath
 Optional output SVG path.
 
@@ -210,22 +226,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the SVG after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: Path, Document
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Transparent
 Use transparent SVG background.
 
diff --git a/Docs/ConvertTo-OfficeWordHtml.md b/Docs/ConvertTo-OfficeWordHtml.md
index 2159cd1a..da3d1846 100644
--- a/Docs/ConvertTo-OfficeWordHtml.md
+++ b/Docs/ConvertTo-OfficeWordHtml.md
@@ -11,7 +11,7 @@ Converts a Word document to HTML.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-ConvertTo-OfficeWordHtml [-FilePath]  [-OutputPath ] [-FontFamily ] [-IncludeFontStyles] [-IncludeListStyles] [-IncludeParagraphClasses] [-IncludeRunClasses] [-IncludeDefaultCss] [-UseImagePaths] [-ExcludeFootnotes] [-PassThru] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeWordHtml [-Path]  [-OutputPath ] [-FontFamily ] [-IncludeFontStyles] [-IncludeListStyles] [-IncludeParagraphClasses] [-IncludeRunClasses] [-IncludeDefaultCss] [-UseImagePaths] [-ExcludeFootnotes] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -72,22 +72,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -FilePath
-Path to a .docx file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -FontFamily
 Optional font family to use during conversion.
 
@@ -216,6 +200,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to a .docx file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -UseImagePaths
 Store image references as file paths instead of base64 data URIs.
 
diff --git a/Docs/ConvertTo-OfficeWordMarkdown.md b/Docs/ConvertTo-OfficeWordMarkdown.md
index d0834e8a..4217058d 100644
--- a/Docs/ConvertTo-OfficeWordMarkdown.md
+++ b/Docs/ConvertTo-OfficeWordMarkdown.md
@@ -11,7 +11,7 @@ Converts a Word document to Markdown.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-ConvertTo-OfficeWordMarkdown [-FilePath]  [-OutputPath ] [-FontFamily ] [-EnableUnderline] [-EnableHighlight] [-ImageExportMode ] [-ImageDirectory ] [-PassThru] [-WhatIf] [-Confirm] []
+ConvertTo-OfficeWordMarkdown [-Path]  [-OutputPath ] [-FontFamily ] [-EnableUnderline] [-EnableHighlight] [-ImageExportMode ] [-ImageDirectory ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -88,22 +88,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -FilePath
-Path to a .docx file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -FontFamily
 Optional font family that should be treated as inline code.
 
@@ -184,6 +168,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to a .docx file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Docs/Copy-OfficeExcelSheet.md b/Docs/Copy-OfficeExcelSheet.md
index 1be1c4c1..69cc3e3f 100644
--- a/Docs/Copy-OfficeExcelSheet.md
+++ b/Docs/Copy-OfficeExcelSheet.md
@@ -11,17 +11,17 @@ Copies a worksheet within a workbook or from another workbook.
 ## SYNTAX
 ### Context (Default)
 ```powershell
-Copy-OfficeExcelSheet [[-SourceSheet] ] [-NewName]  [-SourceDocument ] [-SourcePath ] [-ValidationMode ] [-CopyMode ] [-WhatIf] [-Confirm] []
+Copy-OfficeExcelSheet [[-SourceSheet] ] [-NewName]  [-SourceDocument ] [-SourcePath ] [-ValidationMode ] [-CopyMode ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Path
 ```powershell
-Copy-OfficeExcelSheet [-InputPath]  [[-SourceSheet] ] [-NewName]  [-SourceDocument ] [-SourcePath ] [-ValidationMode ] [-CopyMode ] [-WhatIf] [-Confirm] []
+Copy-OfficeExcelSheet [-Path]  [[-SourceSheet] ] [-NewName]  [-SourceDocument ] [-SourcePath ] [-ValidationMode ] [-CopyMode ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Copy-OfficeExcelSheet [[-SourceSheet] ] [-NewName]  -Document  [-SourceDocument ] [-SourcePath ] [-ValidationMode ] [-CopyMode ] [-WhatIf] [-Confirm] []
+Copy-OfficeExcelSheet [[-SourceSheet] ] [-NewName]  -Document  [-SourceDocument ] [-SourcePath ] [-ValidationMode ] [-CopyMode ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -84,33 +84,49 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Target workbook path to update.
+### -NewName
+Name for the copied worksheet.
 
 ```yaml
 Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Parameter Sets: Context, Path, Document
+Aliases: Name, DestinationSheet
 Possible values:
 
 Required: True
-Position: 0
+Position: 2
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -NewName
-Name for the copied worksheet.
+### -PassThru
+Emit the object created or changed by the command.
 
 ```yaml
-Type: String
+Type: SwitchParameter
 Parameter Sets: Context, Path, Document
-Aliases: Name, DestinationSheet
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Path
+Target workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
-Position: 2
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Copy-OfficeExcelWorkbook.md b/Docs/Copy-OfficeExcelWorkbook.md
index bd769a47..7ead2881 100644
--- a/Docs/Copy-OfficeExcelWorkbook.md
+++ b/Docs/Copy-OfficeExcelWorkbook.md
@@ -11,7 +11,7 @@ Copies a workbook package while preserving package parts.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Copy-OfficeExcelWorkbook [-FilePath]  [-DestinationPath]  [-Force] [-PassThru] [-WhatIf] [-Confirm] []
+Copy-OfficeExcelWorkbook [-Path]  [-DestinationPath]  [-Force] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -46,24 +46,24 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -FilePath
-Source workbook or template package path.
+### -Force
+Replace an existing destination workbook.
 
 ```yaml
-Type: String
+Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: Path, InputPath, SourcePath
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Force
-Replace an existing destination workbook.
+### -PassThru
+Emit a FileInfo for the copied workbook.
 
 ```yaml
 Type: SwitchParameter
@@ -78,17 +78,17 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit a FileInfo for the copied workbook.
+### -Path
+Source workbook or template package path.
 
 ```yaml
-Type: SwitchParameter
+Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath, InputPath, SourcePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Copy-OfficePdfPage.md b/Docs/Copy-OfficePdfPage.md
index a9405b72..df003d3d 100644
--- a/Docs/Copy-OfficePdfPage.md
+++ b/Docs/Copy-OfficePdfPage.md
@@ -11,7 +11,7 @@ Copies selected PDF pages into a new PDF.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Copy-OfficePdfPage -Path  -PageRange  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] []
+Copy-OfficePdfPage -Path  -PageRange  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -80,6 +80,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/Copy-OfficePowerPointSlide.md b/Docs/Copy-OfficePowerPointSlide.md
index 171b0ab7..042645b2 100644
--- a/Docs/Copy-OfficePowerPointSlide.md
+++ b/Docs/Copy-OfficePowerPointSlide.md
@@ -11,7 +11,7 @@ Copies an existing slide within a PowerPoint presentation.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Copy-OfficePowerPointSlide -Index  [-Presentation ] [-InsertAt ] []
+Copy-OfficePowerPointSlide -Index  [-Presentation ] [-InsertAt ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -22,9 +22,9 @@ Uses OfficeIMO slide duplication so charts, notes, and shapes are preserved.
 ### EXAMPLE 1
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCopySlide.pptx {
-    $slide = Add-OfficePowerPointSlide -Layout 1
+    $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
     Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Original'
-    $copy = Copy-OfficePowerPointSlide -Index 0
+    $copy = Copy-OfficePowerPointSlide -Index 0 -PassThru
     Set-OfficePowerPointSlideTitle -Slide $copy -Title 'Copied appendix'
 }
 ```
@@ -65,6 +65,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Presentation
 Presentation to update (optional inside DSL).
 
diff --git a/Docs/Edit-OfficeExcelRow.md b/Docs/Edit-OfficeExcelRow.md
index b5937eb9..fc81c2cc 100644
--- a/Docs/Edit-OfficeExcelRow.md
+++ b/Docs/Edit-OfficeExcelRow.md
@@ -11,7 +11,7 @@ Runs a script block against editable worksheet rows.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Edit-OfficeExcelRow [-InputPath]  [-ScriptBlock]  [-Sheet ] [-SheetIndex ] [-Range ] [-NumericAsDecimal] [-PassThru] [-WhatIf] [-Confirm] []
+Edit-OfficeExcelRow [-Path]  [-ScriptBlock]  [-Sheet ] [-SheetIndex ] [-Range ] [-NumericAsDecimal] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -49,22 +49,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NumericAsDecimal
 Prefer decimals instead of doubles for numeric values.
 
@@ -97,6 +81,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Range
 A1 range to expose as editable rows. Defaults to the worksheet used range.
 
diff --git a/Docs/Export-OfficeDocumentPdf.md b/Docs/Export-OfficeDocumentPdf.md
new file mode 100644
index 00000000..d67fd0c7
--- /dev/null
+++ b/Docs/Export-OfficeDocumentPdf.md
@@ -0,0 +1,271 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# Export-OfficeDocumentPdf
+## SYNOPSIS
+Exports a Word, Excel, PowerPoint, Markdown, or RTF document to PDF.
+
+## SYNTAX
+### Document (Default)
+```powershell
+Export-OfficeDocumentPdf [-Document]  [-Path]  [-Password ] [-WordOptions ] [-ExcelOptions ] [-PowerPointOptions ] [-MarkdownOptions ] [-RtfOptions ] [-PdfWarningVariable ] [-PdfConversionReportVariable ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
+```
+
+### Path
+```powershell
+Export-OfficeDocumentPdf [-InputPath]  [-Path]  [-Password ] [-WordOptions ] [-ExcelOptions ] [-PowerPointOptions ] [-MarkdownOptions ] [-RtfOptions ] [-PdfWarningVariable ] [-PdfConversionReportVariable ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
+```
+
+## DESCRIPTION
+Accepts either a live OfficeIMO document from the pipeline or a supported source file.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $document | Export-OfficeDocumentPdf -Path .\Report.pdf
+```
+
+
+### EXAMPLE 2
+```powershell
+PS> Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -PassThru
+```
+
+
+### EXAMPLE 3
+```powershell
+PS> $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -IncludeLocalImages -BaseDirectory .\Assets
+Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options
+```
+
+The New-Office*PdfOptions commands build every format-specific options object; no hashtable or .NET constructor is required.
+
+## PARAMETERS
+
+### -Document
+Live Word, Excel, PowerPoint, Markdown, or RTF document to export. Saved FileInfo and path strings from the pipeline are opened automatically.
+
+```yaml
+Type: Object
+Parameter Sets: Document
+Aliases: None
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: True (ByValue)
+Accept wildcard characters: False
+```
+
+### -ExcelOptions
+Excel-specific PDF options.
+
+```yaml
+Type: ExcelPdfSaveOptions
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -InputPath
+Source .docx, .xlsx, .pptx, .md, .markdown, or .rtf file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: SourcePath, FullName
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: True (ByPropertyName)
+Accept wildcard characters: False
+```
+
+### -MarkdownOptions
+Markdown-specific PDF options.
+
+```yaml
+Type: MarkdownPdfSaveOptions
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Open
+Open the PDF after exporting it.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Document, Path
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PassThru
+Emit the saved PDF file.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Password
+Password used to open an encrypted Word, Excel, or PowerPoint source file.
+
+```yaml
+Type: String
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Path
+Destination PDF path.
+
+```yaml
+Type: String
+Parameter Sets: Document, Path
+Aliases: OutputPath, FilePath
+Possible values:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PdfConversionReportVariable
+Variable name that receives the structured PDF conversion report.
+
+```yaml
+Type: String
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PdfWarningVariable
+Variable name that receives structured PDF conversion warnings.
+
+```yaml
+Type: String
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PowerPointOptions
+PowerPoint-specific PDF options.
+
+```yaml
+Type: PowerPointPdfSaveOptions
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RtfOptions
+RTF-specific PDF options.
+
+```yaml
+Type: RtfPdfSaveOptions
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -WordOptions
+Word-specific PDF options.
+
+```yaml
+Type: WordPdfSaveOptions
+Parameter Sets: Document, Path
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `System.Object`
+- `System.String`
+
+## OUTPUTS
+
+- `System.IO.FileInfo`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/Export-OfficeExcelChartImage.md b/Docs/Export-OfficeExcelChartImage.md
index fcdfe438..0af5828f 100644
--- a/Docs/Export-OfficeExcelChartImage.md
+++ b/Docs/Export-OfficeExcelChartImage.md
@@ -11,12 +11,12 @@ Exports one named worksheet chart as an image file.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficeExcelChartImage [-Path]  [[-OutputPath] ] -WorksheetName  -ChartName  [-Format ] [-Options ] [-Force] [-WhatIf] [-Confirm] []
+Export-OfficeExcelChartImage [-Path]  [[-OutputPath] ] -WorksheetName  -ChartName  [-Format ] [-Options ] [-Force] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Export-OfficeExcelChartImage [[-OutputPath] ] -Document  -WorksheetName  -ChartName  [-Format ] [-Options ] [-Force] [-WhatIf] [-Confirm] []
+Export-OfficeExcelChartImage [[-OutputPath] ] -Document  -WorksheetName  -ChartName  [-Format ] [-Options ] [-Force] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -128,6 +128,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the structured image export result when a destination path is used.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to the workbook.
 
diff --git a/Docs/Export-OfficeExcelImage.md b/Docs/Export-OfficeExcelImage.md
index cebd7a65..6ed7cd43 100644
--- a/Docs/Export-OfficeExcelImage.md
+++ b/Docs/Export-OfficeExcelImage.md
@@ -11,12 +11,12 @@ Exports workbook sheets as PNG or SVG images with one result per sheet.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficeExcelImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficeExcelImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Export-OfficeExcelImage [-OutputPath]  -Document  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficeExcelImage [-OutputPath]  -Document  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -29,7 +29,7 @@ Exports workbook sheets as PNG or SVG images with one result per sheet.
 PS> Export-OfficeExcelImage -Path .\Report.xlsx -OutputPath .\Images
 ```
 
-Writes one image per selected sheet and returns OfficeImageExportResult objects.
+Writes one image per selected sheet. Add -PassThru to receive the structured export results.
 
 ## PARAMETERS
 
@@ -97,6 +97,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit one structured image export result per saved sheet.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to the workbook.
 
diff --git a/Docs/Export-OfficeExcelRangeImage.md b/Docs/Export-OfficeExcelRangeImage.md
index baaa746b..195109d8 100644
--- a/Docs/Export-OfficeExcelRangeImage.md
+++ b/Docs/Export-OfficeExcelRangeImage.md
@@ -11,12 +11,12 @@ Exports one worksheet range as an image file.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficeExcelRangeImage [-Path]  [[-OutputPath] ] -WorksheetName  -Range  [-Format ] [-Options ] [-Force] [-WhatIf] [-Confirm] []
+Export-OfficeExcelRangeImage [-Path]  [[-OutputPath] ] -WorksheetName  -Range  [-Format ] [-Options ] [-Force] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Export-OfficeExcelRangeImage [[-OutputPath] ] -Document  -WorksheetName  -Range  [-Format ] [-Options ] [-Force] [-WhatIf] [-Confirm] []
+Export-OfficeExcelRangeImage [[-OutputPath] ] -Document  -WorksheetName  -Range  [-Format ] [-Options ] [-Force] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -112,6 +112,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the structured image export result when a destination path is used.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to the workbook.
 
diff --git a/Docs/Export-OfficeHtmlImage.md b/Docs/Export-OfficeHtmlImage.md
index 92f38004..cb1118fa 100644
--- a/Docs/Export-OfficeHtmlImage.md
+++ b/Docs/Export-OfficeHtmlImage.md
@@ -11,17 +11,17 @@ Exports an HTML render surface as PNG or SVG with structured diagnostics.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficeHtmlImage [-Path]  [-OutputPath]  [-Format ] [-PageIndex ] [-DocumentOptions ] [-RenderOptions ] [-WhatIf] [-Confirm] []
+Export-OfficeHtmlImage [-Path]  [-OutputPath]  [-Format ] [-PageIndex ] [-DocumentOptions ] [-RenderOptions ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Html
 ```powershell
-Export-OfficeHtmlImage [-OutputPath]  -Html  [-Format ] [-PageIndex ] [-DocumentOptions ] [-RenderOptions ] [-WhatIf] [-Confirm] []
+Export-OfficeHtmlImage [-OutputPath]  -Html  [-Format ] [-PageIndex ] [-DocumentOptions ] [-RenderOptions ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Export-OfficeHtmlImage [-OutputPath]  -Document  [-Format ] [-PageIndex ] [-DocumentOptions ] [-RenderOptions ] [-WhatIf] [-Confirm] []
+Export-OfficeHtmlImage [-OutputPath]  -Document  [-Format ] [-PageIndex ] [-DocumentOptions ] [-RenderOptions ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -34,7 +34,7 @@ Exports an HTML render surface as PNG or SVG with structured diagnostics.
 PS> Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.png
 ```
 
-Uses the dependency-free OfficeIMO HTML renderer and returns OfficeImageExportResult.
+Uses the dependency-free OfficeIMO HTML renderer. Add -PassThru to receive the structured export result.
 
 ## PARAMETERS
 
@@ -103,7 +103,7 @@ Accept wildcard characters: False
 ```
 
 ### -OutputPath
-Destination PNG or SVG path.
+Destination PNG, JPEG, TIFF, SVG, or WebP path.
 
 ```yaml
 Type: String
@@ -134,6 +134,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the structured image export result.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Html, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to an HTML file.
 
diff --git a/Docs/Export-OfficePdfImage.md b/Docs/Export-OfficePdfImage.md
index 8035df00..29f451f8 100644
--- a/Docs/Export-OfficePdfImage.md
+++ b/Docs/Export-OfficePdfImage.md
@@ -11,7 +11,7 @@ Exports PDF pages through the shared PNG, JPEG, TIFF, SVG, or WebP image contrac
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Export-OfficePdfImage [-Path]  [-OutputPath]  [-PageRange ] [-Format ] [-Options ] [-ReadOptions ] [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] []
+Export-OfficePdfImage [-Path]  [-OutputPath]  [-PageRange ] [-Format ] [-Options ] [-ReadOptions ] [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -24,7 +24,7 @@ Exports PDF pages through the shared PNG, JPEG, TIFF, SVG, or WebP image contrac
 PS> Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Pages -PageRange '1-3,5'
 ```
 
-Writes the selected pages and returns normalized image results with rendering diagnostics.
+Writes the selected pages. Add -PassThru to receive normalized image results with rendering diagnostics.
 
 ## PARAMETERS
 
@@ -108,6 +108,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit one structured image export result per saved page.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/Export-OfficePdfLayoutOverlay.md b/Docs/Export-OfficePdfLayoutOverlay.md
index e345f7be..8e08c5bf 100644
--- a/Docs/Export-OfficePdfLayoutOverlay.md
+++ b/Docs/Export-OfficePdfLayoutOverlay.md
@@ -11,7 +11,7 @@ Exports PDF word, line, region, and reading-order diagnostics as PNG or SVG.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Export-OfficePdfLayoutOverlay [-Path]  [-OutputPath]  [-Page ] [-Format ] [-Scale ] [-Options ] [-LayoutOptions ] [-ReadOptions ] [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] []
+Export-OfficePdfLayoutOverlay [-Path]  [-OutputPath]  [-Page ] [-Format ] [-Scale ] [-Options ] [-LayoutOptions ] [-ReadOptions ] [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,7 +21,7 @@ Exports PDF word, line, region, and reading-order diagnostics as PNG or SVG.
 
 ### EXAMPLE 1
 ```powershell
-Export-OfficePdfLayoutOverlay -Path 'C:\Path'
+PS> $result = Export-OfficePdfLayoutOverlay -Path .\Report.pdf -OutputPath .\Report-layout.svg -Page 1 -Format Svg -PassThru
 ```
 
 
@@ -123,6 +123,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the structured image export result.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/Export-OfficePowerPointImage.md b/Docs/Export-OfficePowerPointImage.md
index f6b84eda..ae47f7f7 100644
--- a/Docs/Export-OfficePowerPointImage.md
+++ b/Docs/Export-OfficePowerPointImage.md
@@ -11,12 +11,12 @@ Exports presentation slides as PNG or SVG images with one result per slide.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficePowerPointImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficePowerPointImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Presentation
 ```powershell
-Export-OfficePowerPointImage [-OutputPath]  -Presentation  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficePowerPointImage [-OutputPath]  -Presentation  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -29,7 +29,7 @@ Exports presentation slides as PNG or SVG images with one result per slide.
 PS> Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Format Svg
 ```
 
-Writes one image per selected slide and returns OfficeImageExportResult objects.
+Writes one image per selected slide. Add -PassThru to receive the structured export results.
 
 ## PARAMETERS
 
@@ -81,6 +81,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit one structured image export result per saved slide.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Presentation
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to the presentation.
 
diff --git a/Docs/Export-OfficeVisioImage.md b/Docs/Export-OfficeVisioImage.md
index bd692713..6ce9a38a 100644
--- a/Docs/Export-OfficeVisioImage.md
+++ b/Docs/Export-OfficeVisioImage.md
@@ -11,12 +11,12 @@ Exports selected Visio pages through the format-neutral OfficeIMO image pipeline
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficeVisioImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficeVisioImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Export-OfficeVisioImage [-OutputPath]  -Document  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficeVisioImage [-OutputPath]  -Document  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -29,7 +29,7 @@ Exports selected Visio pages through the format-neutral OfficeIMO image pipeline
 PS> Export-OfficeVisioImage -Path .\diagram.vsdx -OutputPath .\Images -Format Png
 ```
 
-Writes one PNG per selected page and returns one result object per file.
+Writes one PNG per selected page. Add -PassThru to receive one result object per file.
 
 ## PARAMETERS
 
@@ -97,6 +97,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit one structured image export result per saved page.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to a Visio document.
 
diff --git a/Docs/Export-OfficeVisioVisual.md b/Docs/Export-OfficeVisioVisual.md
index 9c7e9a45..d2b7baa0 100644
--- a/Docs/Export-OfficeVisioVisual.md
+++ b/Docs/Export-OfficeVisioVisual.md
@@ -11,7 +11,7 @@ Exports CFX semantic visual-artifact input as a native editable VSDX diagram.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Export-OfficeVisioVisual [-InputObject]  [-Path]  [-Show] [-PassThru] [-PageName ] [-UseNaturalPageSize] [-PixelsPerInch ] [-NoTitle] [-NoGroups] [-NoShapeData] [-NoHyperlinks] [-WhatIf] [-Confirm] []
+Export-OfficeVisioVisual [-InputObject]  [-Path]  [-Open] [-PassThru] [-PageName ] [-UseNaturalPageSize] [-PixelsPerInch ] [-NoTitle] [-NoGroups] [-NoShapeData] [-NoHyperlinks] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -108,6 +108,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Open
+Open the generated VSDX after saving.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PageName
 Name of the generated Visio page.
 
@@ -172,22 +188,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the generated VSDX after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -UseNaturalPageSize
 Use the CFX natural pixel size as the minimum Visio page size.
 
diff --git a/Docs/Export-OfficeWordImage.md b/Docs/Export-OfficeWordImage.md
index 3e48bcca..3f284d46 100644
--- a/Docs/Export-OfficeWordImage.md
+++ b/Docs/Export-OfficeWordImage.md
@@ -6,21 +6,21 @@ schema: 2.0.0
 ---
 # Export-OfficeWordImage
 ## SYNOPSIS
-Exports a Word page as PNG or SVG with structured image diagnostics.
+Exports one or more Word pages through the format-neutral OfficeIMO image pipeline.
 
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Export-OfficeWordImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficeWordImage [-Path]  [-OutputPath]  [-Format ] [-Options ] [-AllPages] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Export-OfficeWordImage [-OutputPath]  -Document  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Export-OfficeWordImage [-OutputPath]  -Document  [-Format ] [-Options ] [-AllPages] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
-Exports a Word page as PNG or SVG with structured image diagnostics.
+Exports one or more Word pages through the format-neutral OfficeIMO image pipeline.
 
 ## EXAMPLES
 
@@ -29,10 +29,33 @@ Exports a Word page as PNG or SVG with structured image diagnostics.
 PS> Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Report.svg -Format Svg
 ```
 
-Returns the OfficeIMO image export result after writing the image.
+Writes the image quietly. Add -PassThru to receive the structured export result.
+
+### EXAMPLE 2
+```powershell
+PS> Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Format Jpeg -AllPages
+```
+
+For a bounded batch, create options with New-OfficeWordImageOptions -PageIndex 0 -PageCount 2.
 
 ## PARAMETERS
 
+### -AllPages
+Export every estimated page to the destination folder.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Document
 Open Word document instance.
 
@@ -82,7 +105,7 @@ Accept wildcard characters: False
 ```
 
 ### -OutputPath
-Destination PNG or SVG path.
+Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch.
 
 ```yaml
 Type: String
@@ -97,6 +120,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the structured image export result.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to the Word document.
 
diff --git a/Docs/Find-OfficeExcel.md b/Docs/Find-OfficeExcel.md
index 5ae5ef9a..28139963 100644
--- a/Docs/Find-OfficeExcel.md
+++ b/Docs/Find-OfficeExcel.md
@@ -11,7 +11,7 @@ Finds text in worksheet values.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Find-OfficeExcel [-InputPath]  [-Text]  [-Sheet ] [-SheetIndex ] [-Range ] [-CaseSensitive] [-Regex] [-Exact] []
+Find-OfficeExcel [-Path]  [-Text]  [-Sheet ] [-SheetIndex ] [-Range ] [-CaseSensitive] [-Regex] [-Exact] []
 ```
 
 ### Document
@@ -84,13 +84,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Find-OfficeWord.md b/Docs/Find-OfficeWord.md
index 71ef1ab6..61443a98 100644
--- a/Docs/Find-OfficeWord.md
+++ b/Docs/Find-OfficeWord.md
@@ -11,12 +11,12 @@ Finds text matches inside a Word document.
 ## SYNTAX
 ### PathText (Default)
 ```powershell
-Find-OfficeWord [-InputPath]  [-Text]  [-CaseSensitive] []
+Find-OfficeWord [-Path]  [-Text]  [-CaseSensitive] []
 ```
 
 ### PathRegex
 ```powershell
-Find-OfficeWord [-InputPath]  [-Pattern]  [-CaseSensitive] [-AsResult] []
+Find-OfficeWord [-Path]  [-Pattern]  [-CaseSensitive] [-AsResult] []
 ```
 
 ### DocumentText
@@ -103,13 +103,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: PathText, PathRegex
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Find-OfficeWordList.md b/Docs/Find-OfficeWordList.md
index f6c55cd1..a03ea753 100644
--- a/Docs/Find-OfficeWordList.md
+++ b/Docs/Find-OfficeWordList.md
@@ -11,12 +11,12 @@ Finds Word lists containing matching list-item text.
 ## SYNTAX
 ### PathText (Default)
 ```powershell
-Find-OfficeWordList [-InputPath]  [-Text]  [-CaseSensitive] []
+Find-OfficeWordList [-Path]  [-Text]  [-CaseSensitive] []
 ```
 
 ### PathRegex
 ```powershell
-Find-OfficeWordList [-InputPath]  [-Pattern]  [-CaseSensitive] []
+Find-OfficeWordList [-Path]  [-Pattern]  [-CaseSensitive] []
 ```
 
 ### DocumentText
@@ -103,13 +103,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document to open read-only for searching.
 
 ```yaml
 Type: String
 Parameter Sets: PathText, PathRegex
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Find-OfficeWordTable.md b/Docs/Find-OfficeWordTable.md
index ecbea60d..7f31a55a 100644
--- a/Docs/Find-OfficeWordTable.md
+++ b/Docs/Find-OfficeWordTable.md
@@ -11,12 +11,12 @@ Finds Word tables containing matching cell text.
 ## SYNTAX
 ### PathText (Default)
 ```powershell
-Find-OfficeWordTable [-InputPath]  [-Text]  [-CaseSensitive] [-IncludeNested] []
+Find-OfficeWordTable [-Path]  [-Text]  [-CaseSensitive] [-IncludeNested] []
 ```
 
 ### PathRegex
 ```powershell
-Find-OfficeWordTable [-InputPath]  [-Pattern]  [-CaseSensitive] [-IncludeNested] []
+Find-OfficeWordTable [-Path]  [-Pattern]  [-CaseSensitive] [-IncludeNested] []
 ```
 
 ### DocumentText
@@ -112,13 +112,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document to open read-only for searching.
 
 ```yaml
 Type: String
 Parameter Sets: PathText, PathRegex
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Generated/PSWriteOffice-help.xml b/Docs/Generated/PSWriteOffice-help.xml
index d4b2e488..1d195143 100644
--- a/Docs/Generated/PSWriteOffice-help.xml
+++ b/Docs/Generated/PSWriteOffice-help.xml
@@ -27,6 +27,18 @@
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -66,6 +78,18 @@
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -129,6 +153,18 @@
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Range
         
@@ -7786,18 +7822,6 @@
       
       
         Add-OfficeExcelPackageMetadata
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Kind
           
@@ -7826,6 +7850,18 @@
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           WorksheetName
           
@@ -7932,18 +7968,6 @@
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Kind
         
@@ -7972,6 +7996,18 @@
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         WorksheetName
         
@@ -8121,26 +8157,26 @@
           
           None
         
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Emit page-break records after adding them.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit page-break records after adding them.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -8283,26 +8319,26 @@
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Emit page-break records after adding them.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit page-break records after adding them.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -10824,18 +10860,6 @@
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Name
           
@@ -10860,6 +10884,18 @@
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           QueryTableName
           
@@ -11034,18 +11070,6 @@
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Name
         
@@ -11070,6 +11094,18 @@
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         QueryTableName
         
@@ -11192,6 +11228,18 @@
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Title
           
@@ -11250,6 +11298,18 @@
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Title
         
@@ -11345,6 +11405,18 @@
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PerRow
           
@@ -11384,6 +11456,18 @@
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PerRow
         
@@ -11503,6 +11587,18 @@
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Title
           
@@ -11578,6 +11674,18 @@
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Title
         
@@ -11641,6 +11749,18 @@
     
       
         Add-OfficeExcelReportParagraph
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Text
           
@@ -11656,6 +11776,18 @@
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Text
         
@@ -11716,6 +11848,18 @@
     
       
         Add-OfficeExcelReportSection
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Text
           
@@ -11731,6 +11875,18 @@
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Text
         
@@ -12010,6 +12166,18 @@
     
       
         Add-OfficeExcelReportSpacer
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Rows
           
@@ -12025,6 +12193,18 @@
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Rows
         
@@ -12572,6 +12752,18 @@
     
       
         Add-OfficeExcelReportTitle
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Subtitle
           
@@ -12599,6 +12791,18 @@
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Subtitle
         
@@ -12983,18 +13187,6 @@
       
       
         Add-OfficeExcelSlicer
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Name
           
@@ -13019,6 +13211,18 @@
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           PivotTableName
           
@@ -13145,18 +13349,6 @@
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Name
         
@@ -13181,6 +13373,18 @@
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         PivotTableName
         
@@ -15420,7 +15624,7 @@
         
           Open
           
-            Open the workbook after saving when InputPath is used.
+            Open the workbook after saving when Path is used.
           
           SwitchParameter
           
@@ -15540,18 +15744,6 @@
           
           None
         
-        
-          InputPath
-          
-            Path to the workbook to update in place.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           NoHyperlinks
           
@@ -15579,7 +15771,7 @@
         
           Open
           
-            Open the workbook after saving when InputPath is used.
+            Open the workbook after saving when Path is used.
           
           SwitchParameter
           
@@ -15600,6 +15792,18 @@
           
           None
         
+        
+          Path
+          
+            Path to the workbook to update in place.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           SheetName
           
@@ -15738,7 +15942,7 @@
         
           Open
           
-            Open the workbook after saving when InputPath is used.
+            Open the workbook after saving when Path is used.
           
           SwitchParameter
           
@@ -15870,18 +16074,6 @@
         
         None
       
-      
-        InputPath
-        
-          Path to the workbook to update in place.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         NoHyperlinks
         
@@ -15909,7 +16101,7 @@
       
         Open
         
-          Open the workbook after saving when InputPath is used.
+          Open the workbook after saving when Path is used.
         
         SwitchParameter
         
@@ -15930,6 +16122,18 @@
         
         None
       
+      
+        Path
+        
+          Path to the workbook to update in place.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         SheetName
         
@@ -16020,27 +16224,27 @@ and should close or save the workbook after all edits are complete.
           
           None
         
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to open, update, save, and close.
+            Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command,
+so they do not emit a live table wrapper.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command,
-so they do not emit a live table wrapper.
+            Workbook path to open, update, save, and close.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -16224,27 +16428,27 @@ so they do not emit a live table wrapper.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to open, update, save, and close.
+          Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command,
+so they do not emit a live table wrapper.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command,
-so they do not emit a live table wrapper.
+          Workbook path to open, update, save, and close.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -16531,18 +16735,6 @@ so they do not emit a live table wrapper.
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           NoSave
           
@@ -16579,6 +16771,18 @@ so they do not emit a live table wrapper.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Sheet
           
@@ -16825,18 +17029,6 @@ so they do not emit a live table wrapper.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         NoSave
         
@@ -16873,6 +17065,18 @@ so they do not emit a live table wrapper.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Sheet
         
@@ -17024,18 +17228,6 @@ so they do not emit a live table wrapper.
       
       
         Add-OfficeExcelTimeline
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Name
           
@@ -17060,6 +17252,18 @@ so they do not emit a live table wrapper.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           PivotTableName
           
@@ -17186,18 +17390,6 @@ so they do not emit a live table wrapper.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Name
         
@@ -17222,6 +17414,18 @@ so they do not emit a live table wrapper.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         PivotTableName
         
@@ -21096,6 +21300,18 @@ so they do not emit a live table wrapper.
           
           None
         
+        
+          PassThru
+          
+            Emit the image added to the worksheet.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PointsPerPixel
           
@@ -21308,6 +21524,18 @@ so they do not emit a live table wrapper.
         
         None
       
+      
+        PassThru
+        
+          Emit the image added to the worksheet.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PointsPerPixel
         
@@ -24706,35 +24934,469 @@ so they do not emit a live table wrapper.
   
   
     
-      Add-OfficePdfAttachment
+      Add-OfficeOpenDocumentHeading
       Add
-      OfficePdfAttachment
+      OfficeOpenDocumentHeading
       
-        Adds an embedded file attachment to a generated PDF document.
+        Adds a heading to an OpenDocument text document.
       
     
     
-      Adds an embedded file attachment to a generated PDF document.
+      Adds a heading to an OpenDocument text document.
     
     
-      
-        Add-OfficePdfAttachment
+      
+        Add-OfficeOpenDocumentHeading
+        
+          Document
+          
+            OpenDocument text document. Omit inside New-OfficeOpenDocument -Content.
+          
+          OdtDocument
+          
+            OdtDocument
+            
+          
+          None
+        
         
-          Description
+          Level
           
-            Optional human-readable attachment description.
+            Heading level from 1 through 10.
           
-          String
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the created heading paragraph.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Text
+          
+            Heading text.
+          
+          String
           
             String
             
           
           None
         
+      
+    
+    
+      
+        Document
+        
+          OpenDocument text document. Omit inside New-OfficeOpenDocument -Content.
+        
+        OdtDocument
+        
+          OdtDocument
+          
+        
+        None
+      
+      
+        Level
+        
+          Heading level from 1 through 10.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the created heading paragraph.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Text
+        
+          Heading text.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdtDocument
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdtParagraph
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Add a level-two heading inside an OpenDocument DSL.
+        
+          PS> 
+        
+        Add-OfficeOpenDocumentHeading -Text 'Results' -Level 2
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      Add-OfficeOpenDocumentParagraph
+      Add
+      OfficeOpenDocumentParagraph
+      
+        Adds a paragraph to an OpenDocument text document.
+      
+    
+    
+      Adds a paragraph to an OpenDocument text document.
+    
+    
+      
+        Add-OfficeOpenDocumentParagraph
+        
+          Document
+          
+            OpenDocument text document. Omit inside New-OfficeOpenDocument -Content.
+          
+          OdtDocument
+          
+            OdtDocument
+            
+          
+          None
+        
         
-          MimeType
+          PassThru
           
-            Optional MIME type for the embedded file.
+            Emit the created paragraph.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Text
+          
+            Paragraph text.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        Document
+        
+          OpenDocument text document. Omit inside New-OfficeOpenDocument -Content.
+        
+        OdtDocument
+        
+          OdtDocument
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the created paragraph.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Text
+        
+          Paragraph text.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdtDocument
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdtParagraph
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Add body text in the OpenDocument DSL.
+        
+          PS> 
+        
+        New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content { Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice' }
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      Add-OfficeOpenDocumentSheet
+      Add
+      OfficeOpenDocumentSheet
+      
+        Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content.
+      
+    
+    
+      Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content.
+    
+    
+      
+        Add-OfficeOpenDocumentSheet
+        
+          Content
+          
+            Nested cell commands that use this worksheet as their current target.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          Document
+          
+            OpenDocument spreadsheet. Omit inside New-OfficeOpenDocument -Content.
+          
+          OdsDocument
+          
+            OdsDocument
+            
+          
+          None
+        
+        
+          Name
+          
+            Worksheet name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the created worksheet.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+      
+    
+    
+      
+        Content
+        
+          Nested cell commands that use this worksheet as their current target.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        Document
+        
+          OpenDocument spreadsheet. Omit inside New-OfficeOpenDocument -Content.
+        
+        OdsDocument
+        
+          OdsDocument
+          
+        
+        None
+      
+      
+        Name
+        
+          Worksheet name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the created worksheet.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdsDocument
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdsSheet
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Add a worksheet inside an OpenDocument DSL.
+        
+          PS> 
+        
+        Add-OfficeOpenDocumentSheet -Name 'Data' -Content {
+                Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Status'
+            }
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      Add-OfficeOpenDocumentSlide
+      Add
+      OfficeOpenDocumentSlide
+      
+        Adds a slide to an OpenDocument presentation and optionally runs nested slide content.
+      
+    
+    
+      Adds a slide to an OpenDocument presentation and optionally runs nested slide content.
+    
+    
+      
+        Add-OfficeOpenDocumentSlide
+        
+          Content
+          
+            Nested slide commands that use this slide as their current target.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          Document
+          
+            OpenDocument presentation. Omit inside New-OfficeOpenDocument -Content.
+          
+          OdpPresentation
+          
+            OdpPresentation
+            
+          
+          None
+        
+        
+          Name
+          
+            Optional unique slide name.
           
           String
           
@@ -24743,10 +25405,136 @@ so they do not emit a live table wrapper.
           
           None
         
+        
+          PassThru
+          
+            Emit the created slide.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+      
+    
+    
+      
+        Content
+        
+          Nested slide commands that use this slide as their current target.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        Document
+        
+          OpenDocument presentation. Omit inside New-OfficeOpenDocument -Content.
+        
+        OdpPresentation
+        
+          OdpPresentation
+          
+        
+        None
+      
+      
+        Name
+        
+          Optional unique slide name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the created slide.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdpPresentation
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdpSlide
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Add a slide with positioned text.
+        
+          PS> 
+        
+        Add-OfficeOpenDocumentSlide -Name 'Summary' -Content {
+                Add-OfficeOpenDocumentTextBox -Text 'Quarterly summary' -X 2 -Y 2 -Width 20 -Height 3
+            }
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      Add-OfficeOpenDocumentTextBox
+      Add
+      OfficeOpenDocumentTextBox
+      
+        Adds a positioned text box to an OpenDocument presentation slide.
+      
+    
+    
+      Adds a positioned text box to an OpenDocument presentation slide.
+    
+    
+      
+        Add-OfficeOpenDocumentTextBox
+        
+          Height
+          
+            Height in centimeters.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
         
           Name
           
-            Optional embedded file name. The source file name is used when omitted.
+            Optional shape name.
           
           String
           
@@ -24758,7 +25546,7 @@ so they do not emit a live table wrapper.
         
           PassThru
           
-            Accepted for compatibility. The replacement document is always emitted when -Document is used.
+            Emit the created text box.
           
           SwitchParameter
           
@@ -24767,10 +25555,22 @@ so they do not emit a live table wrapper.
           
           None
         
-        
-          Path
+        
+          Slide
           
-            File path to embed in the generated PDF.
+            Slide target. Omit inside Add-OfficeOpenDocumentSlide -Content.
+          
+          OdpSlide
+          
+            OdpSlide
+            
+          
+          None
+        
+        
+          Text
+          
+            Text box content.
           
           String
           
@@ -24780,48 +25580,292 @@ so they do not emit a live table wrapper.
           None
         
         
-          Relationship
+          Width
           
-            Associated-file relationship between the PDF and the embedded file.
+            Width in centimeters.
           
-          PdfAssociatedFileRelationship
-          
-            Unspecified
-            Source
-            Data
-            Alternative
-            Supplement
-            C2paManifest
-          
+          Double
           
-            PdfAssociatedFileRelationship
+            Double
             
           
           None
         
-      
-      
-        Add-OfficePdfAttachment
         
-          Description
+          X
           
-            Optional human-readable attachment description.
+            Horizontal position in centimeters.
           
-          String
+          Double
           
-            String
+            Double
             
           
           None
         
-        
-          Document
+        
+          Y
           
-            PDF document to update outside the DSL context.
+            Vertical position in centimeters.
           
-          PdfDocument
+          Double
           
-            PdfDocument
+            Double
+            
+          
+          None
+        
+      
+    
+    
+      
+        Height
+        
+          Height in centimeters.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Name
+        
+          Optional shape name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the created text box.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Slide
+        
+          Slide target. Omit inside Add-OfficeOpenDocumentSlide -Content.
+        
+        OdpSlide
+        
+          OdpSlide
+          
+        
+        None
+      
+      
+        Text
+        
+          Text box content.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Width
+        
+          Width in centimeters.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        X
+        
+          Horizontal position in centimeters.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Y
+        
+          Vertical position in centimeters.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdpSlide
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdpTextBox
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Place a text box using centimetre coordinates.
+        
+          PS> 
+        
+        Add-OfficeOpenDocumentTextBox -Text 'Approved' -X 18 -Y 12 -Width 6 -Height 2
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      Add-OfficePdfAttachment
+      Add
+      OfficePdfAttachment
+      
+        Adds an embedded file attachment to a generated PDF document.
+      
+    
+    
+      Adds an embedded file attachment to a generated PDF document.
+    
+    
+      
+        Add-OfficePdfAttachment
+        
+          Description
+          
+            Optional human-readable attachment description.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          MimeType
+          
+            Optional MIME type for the embedded file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Name
+          
+            Optional embedded file name. The source file name is used when omitted.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Accepted for compatibility. The replacement document is always emitted when -Document is used.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            File path to embed in the generated PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Relationship
+          
+            Associated-file relationship between the PDF and the embedded file.
+          
+          PdfAssociatedFileRelationship
+          
+            Unspecified
+            Source
+            Data
+            Alternative
+            Supplement
+            C2paManifest
+          
+          
+            PdfAssociatedFileRelationship
+            
+          
+          None
+        
+      
+      
+        Add-OfficePdfAttachment
+        
+          Description
+          
+            Optional human-readable attachment description.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Document
+          
+            PDF document to update outside the DSL context.
+          
+          PdfDocument
+          
+            PdfDocument
             
           
           None
@@ -25975,6 +27019,18 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -26087,6 +27143,18 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -26312,6 +27380,18 @@ page area from the supplied coordinates.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Strike
           
@@ -26453,6 +27533,18 @@ page area from the supplied coordinates.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Run
           
@@ -26649,6 +27741,18 @@ page area from the supplied coordinates.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Run
         
@@ -28636,6 +29740,18 @@ page area from the supplied coordinates.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -28896,6 +30012,18 @@ page area from the supplied coordinates.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -30200,6 +31328,18 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -30348,6 +31488,18 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -30520,6 +31672,18 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -34947,6 +36111,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -35046,6 +36222,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Slide
         
@@ -35121,7 +36309,7 @@ URI links and bookmark links are supported; a single run cannot target both.PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointBullets.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Delivery update'
                 Add-OfficePowerPointBullets -Slide $slide -Bullets 'Wins','Risks','Next steps' -X 60 -Y 120 -Width 420 -Height 180
             }
@@ -35159,6 +36347,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -35277,6 +36477,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           SeriesProperty
           
@@ -35395,6 +36607,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -35537,6 +36761,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         SeriesProperty
         
@@ -35683,7 +36919,7 @@ URI links and bookmark links are supported; a single run cannot target both.
         
@@ -35700,7 +36936,7 @@ URI links and bookmark links are supported; a single run cannot target both.
         
@@ -36163,6 +37399,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -36238,6 +37486,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -36326,7 +37586,7 @@ URI links and bookmark links are supported; a single run cannot target both.
         $image = '.\Tests\Assets\CellImage.png'
             New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImage.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Evidence'
                 Add-OfficePowerPointImage -Slide $slide -Path $image -X 60 -Y 130 -Width 180 -Height 120
             }
@@ -37758,6 +39018,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -37797,6 +39069,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Presentation
         
@@ -37848,8 +39132,8 @@ URI links and bookmark links are supported; a single run cannot target both.PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSections.pptx {
-                Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Overview'
-                Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Results'
+                Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Overview'
+                Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Results'
                 Add-OfficePowerPointSection -Name 'Results' -StartSlideIndex 1
             }
         
@@ -37934,6 +39218,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ShapeType
           
@@ -38057,6 +39353,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         ShapeType
         
@@ -38138,7 +39446,7 @@ URI links and bookmark links are supported; a single run cannot target both.PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointShape.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Add-OfficePowerPointShape -Slide $slide -ShapeType Rectangle -X 60 -Y 120 -Width 220 -Height 90 -FillColor '#DDEEFF' -OutlineColor '#2563EB' -OutlineWidth 1
                 Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlighted status' -X 80 -Y 145 -Width 180 -Height 32
             }
@@ -38200,6 +39508,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -38263,6 +39583,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -38352,6 +39684,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -38477,6 +39821,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Presentation
         
@@ -38509,7 +39865,9 @@ URI links and bookmark links are supported; a single run cannot target both.
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\deck.pptx; Add-OfficePowerPointSlide -Presentation $ppt
+        $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave
+            Add-OfficePowerPointSlide -Presentation $ppt
+            $ppt | Close-OfficePowerPoint -Save
         
           Creates a deck and appends a new slide at the end.
         
@@ -38650,6 +40008,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -38753,6 +40123,18 @@ URI links and bookmark links are supported; a single run cannot target both.
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Rows
           
@@ -38948,6 +40330,18 @@ URI links and bookmark links are supported; a single run cannot target both.
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Rows
         
@@ -39282,6 +40676,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -39357,6 +40763,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Run
           
@@ -39432,6 +40850,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Run
         
@@ -39525,7 +40955,7 @@ table formatting, borders, and style choices are preserved.
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointTextBox.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Add-OfficePowerPointTextBox -Slide $slide -Text 'Quarterly overview' -X 80 -Y 150 -Width 320 -Height 50
                 Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated by PSWriteOffice' -X 80 -Y 210 -Width 320 -Height 35
             }
@@ -39635,6 +41065,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the picture added to the slide.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PointsPerPixel
           
@@ -39811,6 +41253,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the picture added to the slide.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PointsPerPixel
         
@@ -40089,6 +41543,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           To
           
@@ -40266,6 +41732,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ToShape
           
@@ -40455,6 +41933,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         To
         
@@ -40719,6 +42209,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ShapeId
           
@@ -40914,6 +42416,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         ShapeId
         
@@ -41075,6 +42589,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Text
           
@@ -41227,6 +42753,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Text
         
@@ -41427,6 +42965,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Text
           
@@ -41579,6 +43129,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Text
         
@@ -41743,6 +43305,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Unit
           
@@ -41823,6 +43397,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Unit
         
@@ -42037,6 +43623,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Text
           
@@ -42237,6 +43835,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Text
         
@@ -42485,6 +44095,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ShapeName
           
@@ -42692,6 +44314,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ShapeName
           
@@ -42917,6 +44551,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ShapeName
           
@@ -43166,6 +44812,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         ShapeName
         
@@ -43386,6 +45044,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Text
           
@@ -43550,6 +45220,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Text
         
@@ -44826,7 +46508,7 @@ table formatting, borders, and style choices are preserved.
                 [pscustomobject]@{ Month = 'Feb'; Sales = 12; Profit = 5 }
                 [pscustomobject]@{ Month = 'Mar'; Sales = 15; Profit = 7 }
             )
-            $doc = New-OfficeWord -Path .\Trend.docx -PassThru
+            $doc = New-OfficeWord -Path .\Trend.docx -NoSave
             Add-OfficeWordChart -Document $doc -Type Line -InputObject $trend -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -Title 'Quarter trend'
             Save-OfficeWord -Document $doc
         
@@ -46675,6 +48357,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Type
           
@@ -46707,6 +48401,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Type
         
@@ -46903,6 +48609,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Type
           
@@ -46935,6 +48653,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Type
         
@@ -47684,6 +49414,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Style
           
@@ -47727,6 +49469,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Style
         
@@ -47962,6 +49716,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
     
     
@@ -47977,6 +49743,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
     
     
       
@@ -50664,6 +52442,18 @@ table formatting, borders, and style choices are preserved.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           TableStyle
           
@@ -50810,6 +52600,18 @@ table formatting, borders, and style choices are preserved.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         TableStyle
         
@@ -52478,6 +54280,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the image added to the paragraph.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PointsPerPixel
           
@@ -52651,6 +54465,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        PassThru
+        
+          Emit the image added to the paragraph.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PointsPerPixel
         
@@ -53032,6 +54858,18 @@ cells. This keeps existing-document editing simple without forcing callers back
     
       
         Clear-OfficeExcelAutoFilter
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
       
         Clear-OfficeExcelAutoFilter
@@ -53047,6 +54885,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Sheet
           
@@ -53086,6 +54936,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Sheet
         
@@ -53288,26 +55150,26 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Returns the number of comments cleared.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Returns the number of comments cleared.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -53522,26 +55384,26 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Returns the number of comments cleared.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Returns the number of comments cleared.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -53681,6 +55543,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -53768,8 +55642,20 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
           
             Workbook path to update.
           
@@ -53879,6 +55765,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -53978,8 +55876,20 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
         
           Workbook path to update.
         
@@ -54119,6 +56029,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -54206,8 +56128,20 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
           
             Workbook path to update.
           
@@ -54317,6 +56251,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -54416,8 +56362,20 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
         
           Workbook path to update.
         
@@ -54545,6 +56503,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Row
           
@@ -54608,8 +56578,20 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
           
             Workbook path to update.
           
@@ -54695,6 +56677,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Row
           
@@ -54770,8 +56764,20 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
         
           Workbook path to update.
         
@@ -54959,6 +56965,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -55118,22 +57136,22 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
+        
+          Merges
           
-            Workbook path to update.
+            Clear merged-cell definitions that overlap the selected range.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Merges
+          PassThru
           
-            Clear merged-cell definitions that overlap the selected range.
+            Emit the object created or changed by the command.
           
           SwitchParameter
           
@@ -55142,6 +57160,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Range
           
@@ -55325,6 +57355,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -55496,22 +57538,22 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
+      
+        Merges
         
-          Workbook path to update.
+          Clear merged-cell definitions that overlap the selected range.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Merges
+        PassThru
         
-          Clear merged-cell definitions that overlap the selected range.
+          Emit the object created or changed by the command.
         
         SwitchParameter
         
@@ -55520,6 +57562,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Range
         
@@ -55994,6 +58048,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Open
+          
+            Open the workbook after saving. Requires -Save or -Path.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -56054,18 +58120,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          Show
-          
-            Open the workbook in Excel after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           ValidateOpenXml
           
@@ -56171,6 +58225,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Open
+        
+          Open the workbook after saving. Requires -Save or -Path.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -56231,18 +58297,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        Show
-        
-          Open the workbook in Excel after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
       
         ValidateOpenXml
         
@@ -56305,6 +58359,18 @@ cells. This keeps existing-document editing simple without forcing callers back
     
       
         Close-OfficePowerPoint
+        
+          Open
+          
+            Open the presentation after saving. Requires -Save or -Path.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -56317,34 +58383,34 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          Presentation
+        
+          Path
           
-            Presentation to close.
+            Optional target path when saving.
           
-          PowerPointPresentation
+          String
           
-            PowerPointPresentation
+            String
             
           
           None
         
-        
-          Save
+        
+          Presentation
           
-            Persist changes before closing.
+            Presentation to close.
           
-          SwitchParameter
+          PowerPointPresentation
           
-            SwitchParameter
+            PowerPointPresentation
             
           
           None
         
         
-          Show
+          Save
           
-            Open the presentation in PowerPoint after saving.
+            Persist changes before closing.
           
           SwitchParameter
           
@@ -56356,6 +58422,18 @@ cells. This keeps existing-document editing simple without forcing callers back
       
     
     
+      
+        Open
+        
+          Open the presentation after saving. Requires -Save or -Path.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -56368,34 +58446,34 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        Presentation
+      
+        Path
         
-          Presentation to close.
+          Optional target path when saving.
         
-        PowerPointPresentation
+        String
         
-          PowerPointPresentation
+          String
           
         
         None
       
-      
-        Save
+      
+        Presentation
         
-          Persist changes before closing.
+          Presentation to close.
         
-        SwitchParameter
+        PowerPointPresentation
         
-          SwitchParameter
+          PowerPointPresentation
           
         
         None
       
       
-        Show
+        Save
         
-          Open the presentation in PowerPoint after saving.
+          Persist changes before closing.
         
         SwitchParameter
         
@@ -56424,7 +58502,7 @@ cells. This keeps existing-document editing simple without forcing callers back
         
           PS> 
         
-        $ppt = Get-OfficePowerPoint -FilePath .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt
+        $ppt = Get-OfficePowerPoint -Path .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt
         
           Releases the loaded presentation instance.
         
@@ -56434,7 +58512,7 @@ cells. This keeps existing-document editing simple without forcing callers back
         
           PS> 
         
-        Close-OfficePowerPoint -Presentation $ppt -Save -Show
+        Close-OfficePowerPoint -Presentation $ppt -Save -Open
         
           Saves the presentation, opens it in PowerPoint, and releases the object.
         
@@ -56469,6 +58547,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Open
+          
+            Open the file after saving. Requires -Save or -Path.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -56505,18 +58595,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          Show
-          
-            Open the file after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
       
       
         Close-OfficeWord
@@ -56532,6 +58610,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Open
+          
+            Open the file after saving. Requires -Save or -Path.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -56568,18 +58658,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          Show
-          
-            Open the file after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
       
       
         Close-OfficeWord
@@ -56595,34 +58673,34 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          Password
+        
+          Open
           
-            Password used to save the document as an encrypted package.
+            Open the file after saving. Requires -Save or -Path.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Save
+          Password
           
-            Persist changes before closing.
+            Password used to save the document as an encrypted package.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
         
-          Show
+          Save
           
-            Open the file after saving.
+            Persist changes before closing.
           
           SwitchParameter
           
@@ -56670,6 +58748,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Open
+        
+          Open the file after saving. Requires -Save or -Path.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -56706,18 +58796,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        Show
-        
-          Open the file after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
     
     
       
@@ -56758,7 +58836,7 @@ cells. This keeps existing-document editing simple without forcing callers back
         
           PS> 
         
-        Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Show
+        Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Open
         
           Saves updates to Report-final.docx, opens it, and disposes the document.
         
@@ -56793,18 +58871,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
-          
-            Left workbook path.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           LeftRange
           
@@ -56841,6 +58907,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Left workbook path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           RightPath
           
@@ -57198,18 +59276,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
-        
-          Left workbook path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         LeftRange
         
@@ -57246,6 +59312,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Left workbook path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         RightDocument
         
@@ -57394,26 +59472,26 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
+        
+          MaxDifferences
           
-            Workbook path.
+            Maximum number of differences to report.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
-        
-          MaxDifferences
+        
+          Path
           
-            Maximum number of differences to report.
+            Workbook path.
           
-          Int32
+          String
           
-            Int32
+            String
             
           
           None
@@ -57640,26 +59718,26 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
+      
+        MaxDifferences
         
-          Workbook path.
+          Maximum number of differences to report.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
-      
-        MaxDifferences
+      
+        Path
         
-          Maximum number of differences to report.
+          Workbook path.
         
-        Int32
+        String
         
-          Int32
+          String
           
         
         None
@@ -58059,7 +60137,8 @@ cells. This keeps existing-document editing simple without forcing callers back
         
           PS> 
         
-        $options = [OfficeIMO.Pdf.PdfVisualComparisonOptions]::new(); $options.AllowedDifferenceRatio = 0.001; Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options
+        $options = New-OfficePdfVisualComparisonOptions -AllowedDifferenceRatio 0.001 -ChannelTolerance 2
+            Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options
         
           Returns per-page difference ratios, images, and diagnostics.
         
@@ -58212,6 +60291,17 @@ cells. This keeps existing-document editing simple without forcing callers back
           Returns deterministic findings and saves a Word document containing revision marks.
         
       
+      
+        Ignore whitespace and volatile metadata.
+        
+          PS> 
+        
+        $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -CompareVolatileMetadata:$false
+            Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options
+        
+          
+        
+      
     
     
   
@@ -60202,18 +62292,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
-          
-            Path to an HTML file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           LineEnding
           
@@ -60302,6 +62380,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Path to an HTML file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Portable
           
@@ -60488,18 +62578,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
-        
-          Path to an HTML file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         LineEnding
         
@@ -60588,6 +62666,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Path to an HTML file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Portable
         
@@ -60885,8 +62975,12 @@ cells. This keeps existing-document editing simple without forcing callers back
     
     
       
-        EXAMPLE 1
-        ConvertFrom-OfficeOpenDocument -Path 'C:\Path'
+        Convert an ODS spreadsheet to Excel.
+        
+          PS> 
+        
+        $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumExpandedCells 250000
+            ConvertFrom-OfficeOpenDocument -Path .\Status.ods -OutputPath .\Status.xlsx -ExcelOptions $options
         
           
         
@@ -61050,18 +63144,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
-          
-            Path to an HTML file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Open
           
@@ -61110,6 +63192,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Path to an HTML file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Profile
           
@@ -61191,18 +63285,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
-        
-          Path to an HTML file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Open
         
@@ -61251,6 +63333,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Path to an HTML file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -62306,18 +64400,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          FilePath
-          
-            Path to an HTML file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           FontFamily
           
@@ -62378,6 +64460,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Path to an HTML file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           RenderPreAsTable
           
@@ -62485,18 +64579,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        FilePath
-        
-          Path to an HTML file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         FontFamily
         
@@ -62569,6 +64651,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Path to an HTML file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         RenderPreAsTable
         
@@ -63156,18 +65250,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          FilePath
-          
-            Path to a Markdown file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           FitImagesToContextWidth
           
@@ -63318,6 +65400,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Path to a Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           PreferNarrativeSingleLineDefinitions
           
@@ -63862,18 +65956,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        FilePath
-        
-          Path to a Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         FitImagesToContextWidth
         
@@ -64036,6 +66118,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Path to a Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         PreferNarrativeSingleLineDefinitions
         
@@ -66767,18 +68861,6 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
-        
-          InputPath
-          
-            Path to the Markdown file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MaxInputCharacters
           
@@ -66833,6 +68915,18 @@ cells. This keeps existing-document editing simple without forcing callers back
           
           None
         
+        
+          Path
+          
+            Path to the Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Profile
           
@@ -68189,18 +70283,6 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
-      
-        InputPath
-        
-          Path to the Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MaxInputCharacters
         
@@ -68255,6 +70337,18 @@ cells. This keeps existing-document editing simple without forcing callers back
         
         None
       
+      
+        Path
+        
+          Path to the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -68920,22 +71014,12 @@ cells. This keeps existing-document editing simple without forcing callers back
     
     
       
-        EXAMPLE 1
-        ConvertTo-OfficeOpenDocument -Path 'C:\Path'
-        
-          
-        
-      
-      
-        EXAMPLE 2
-        ConvertTo-OfficeOpenDocument -ExcelDocument 'Value'
-        
-          
-        
-      
-      
-        EXAMPLE 3
-        ConvertTo-OfficeOpenDocument -PowerPointPresentation 'Value'
+        Convert Word to ODT and reject lossy conversion.
+        
+          PS> 
+        
+        $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters
+            ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options -FailOnLoss
         
           
         
@@ -73161,6 +75245,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Open
+          
+            Open the PNG after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           OutputPath
           
@@ -73209,18 +75305,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          Show
-          
-            Open the PNG after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           Supersampling
           
@@ -73356,6 +75440,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Open
+          
+            Open the PNG after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           OutputPath
           
@@ -73392,18 +75488,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          Show
-          
-            Open the PNG after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           Supersampling
           
@@ -73539,6 +75623,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        Open
+        
+          Open the PNG after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         OutputPath
         
@@ -73587,18 +75683,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        Show
-        
-          Open the PNG after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
       
         Supersampling
         
@@ -73755,6 +75839,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Open
+          
+            Open the SVG after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           OutputPath
           
@@ -73803,18 +75899,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          Show
-          
-            Open the SVG after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           Transparent
           
@@ -73914,6 +75998,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Open
+          
+            Open the SVG after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           OutputPath
           
@@ -73950,18 +76046,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          Show
-          
-            Open the SVG after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           Transparent
           
@@ -74061,6 +76145,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        Open
+        
+          Open the SVG after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         OutputPath
         
@@ -74109,18 +76205,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        Show
-        
-          Open the SVG after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
       
         Transparent
         
@@ -74982,18 +77066,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          FilePath
-          
-            Path to a .docx file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           FontFamily
           
@@ -75090,6 +77162,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Path
+          
+            Path to a .docx file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           UseImagePaths
           
@@ -75264,18 +77348,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        FilePath
-        
-          Path to a .docx file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         FontFamily
         
@@ -75372,6 +77444,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        Path
+        
+          Path to a .docx file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         UseImagePaths
         
@@ -75472,18 +77556,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          FilePath
-          
-            Path to a .docx file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           FontFamily
           
@@ -75548,6 +77620,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Path
+          
+            Path to a .docx file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
       
       
         ConvertTo-OfficeWordMarkdown
@@ -75690,18 +77774,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        FilePath
-        
-          Path to a .docx file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         FontFamily
         
@@ -75766,6 +77838,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        Path
+        
+          Path to a .docx file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
     
     
       
@@ -75858,6 +77942,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           SourceDocument
           
@@ -75930,10 +78026,10 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          InputPath
+        
+          NewName
           
-            Target workbook path to update.
+            Name for the copied worksheet.
           
           String
           
@@ -75942,10 +78038,22 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          NewName
+        
+          PassThru
           
-            Name for the copied worksheet.
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            Target workbook path to update.
           
           String
           
@@ -76050,6 +78158,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           SourceDocument
           
@@ -76134,10 +78254,10 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        InputPath
+      
+        NewName
         
-          Target workbook path to update.
+          Name for the copied worksheet.
         
         String
         
@@ -76146,10 +78266,22 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        NewName
+      
+        PassThru
         
-          Name for the copied worksheet.
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
+        
+          Target workbook path to update.
         
         String
         
@@ -76289,18 +78421,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          FilePath
-          
-            Source workbook or template package path.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Force
           
@@ -76325,6 +78445,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Path
+          
+            Source workbook or template package path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
       
     
     
@@ -76340,18 +78472,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        FilePath
-        
-          Source workbook or template package path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Force
         
@@ -76376,172 +78496,208 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-    
-    
-      
-        
-          None
-        
-      
-    
-    
-      
-        
-          System.IO.FileInfo
-        
-      
-    
-    
-      
-        
-      
-    
-    
-      
-        Copy a workbook package and return the copied file.
-        
-          PS> 
-        
-        $copy = Copy-OfficeExcelWorkbook -Path .\Template.xlsx -DestinationPath .\Report.xlsx -Force -PassThru
-            Test-OfficeExcelWorkbook -Path $copy.FullName -SkipOpenXmlValidation |
-                Select-Object Passed, WorksheetCount
-        
-          Copies the workbook package and normalizes the workbook content type for the destination extension.
-        
-      
-    
-    
-  
-  
-    
-      Copy-OfficePdfPage
-      Copy
-      OfficePdfPage
-      
-        Copies selected PDF pages into a new PDF.
-      
-    
-    
-      Copies selected PDF pages into a new PDF.
-    
-    
-      
-        Copy-OfficePdfPage
-        
-          IgnorePermissionRestrictions
-          
-            After successful password authentication, explicitly ignore owner-imposed assembly restrictions.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          OutputPath
-          
-            Output PDF path.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PageRange
-          
-            Page ranges such as 1-3,5.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Password
-          
-            Password used to authenticate an encrypted PDF.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Path
-          
-            Input PDF path.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-      
-    
-    
-      
-        IgnorePermissionRestrictions
-        
-          After successful password authentication, explicitly ignore owner-imposed assembly restrictions.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        OutputPath
-        
-          Output PDF path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PageRange
-        
-          Page ranges such as 1-3,5.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Password
-        
-          Password used to authenticate an encrypted PDF.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
+      
         Path
         
-          Input PDF path.
+          Source workbook or template package path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          System.IO.FileInfo
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Copy a workbook package and return the copied file.
+        
+          PS> 
+        
+        $copy = Copy-OfficeExcelWorkbook -Path .\Template.xlsx -DestinationPath .\Report.xlsx -Force -PassThru
+            Test-OfficeExcelWorkbook -Path $copy.FullName -SkipOpenXmlValidation |
+                Select-Object Passed, WorksheetCount
+        
+          Copies the workbook package and normalizes the workbook content type for the destination extension.
+        
+      
+    
+    
+  
+  
+    
+      Copy-OfficePdfPage
+      Copy
+      OfficePdfPage
+      
+        Copies selected PDF pages into a new PDF.
+      
+    
+    
+      Copies selected PDF pages into a new PDF.
+    
+    
+      
+        Copy-OfficePdfPage
+        
+          IgnorePermissionRestrictions
+          
+            After successful password authentication, explicitly ignore owner-imposed assembly restrictions.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          OutputPath
+          
+            Output PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PageRange
+          
+            Page ranges such as 1-3,5.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password used to authenticate an encrypted PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Input PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        IgnorePermissionRestrictions
+        
+          After successful password authentication, explicitly ignore owner-imposed assembly restrictions.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        OutputPath
+        
+          Output PDF path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PageRange
+        
+          Page ranges such as 1-3,5.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Password
+        
+          Password used to authenticate an encrypted PDF.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Input PDF path.
         
         String
         
@@ -76627,6 +78783,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -76666,6 +78834,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Presentation
         
@@ -76705,9 +78885,9 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCopySlide.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Original'
-                $copy = Copy-OfficePowerPointSlide -Index 0
+                $copy = Copy-OfficePowerPointSlide -Index 0 -PassThru
                 Set-OfficePowerPointSlideTitle -Slide $copy -Title 'Copied appendix'
             }
         
@@ -76732,18 +78912,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
     
       
         Edit-OfficeExcelRow
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           NumericAsDecimal
           
@@ -76768,6 +78936,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Range
           
@@ -76918,18 +79098,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         NumericAsDecimal
         
@@ -76954,6 +79122,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Range
         
@@ -79602,6 +81782,531 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
     
     
   
+  
+    
+      Export-OfficeDocumentPdf
+      Export
+      OfficeDocumentPdf
+      
+        Exports a Word, Excel, PowerPoint, Markdown, or RTF document to PDF.
+      
+    
+    
+      Accepts either a live OfficeIMO document from the pipeline or a supported source file.
+    
+    
+      
+        Export-OfficeDocumentPdf
+        
+          Document
+          
+            Live Word, Excel, PowerPoint, Markdown, or RTF document to export. Saved FileInfo and path strings from the pipeline are opened automatically.
+          
+          Object
+          
+            Object
+            
+          
+          None
+        
+        
+          ExcelOptions
+          
+            Excel-specific PDF options.
+          
+          ExcelPdfSaveOptions
+          
+            ExcelPdfSaveOptions
+            
+          
+          None
+        
+        
+          MarkdownOptions
+          
+            Markdown-specific PDF options.
+          
+          MarkdownPdfSaveOptions
+          
+            MarkdownPdfSaveOptions
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the PDF after exporting it.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the saved PDF file.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password used to open an encrypted Word, Excel, or PowerPoint source file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PdfConversionReportVariable
+          
+            Variable name that receives the structured PDF conversion report.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PdfWarningVariable
+          
+            Variable name that receives structured PDF conversion warnings.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PowerPointOptions
+          
+            PowerPoint-specific PDF options.
+          
+          PowerPointPdfSaveOptions
+          
+            PowerPointPdfSaveOptions
+            
+          
+          None
+        
+        
+          RtfOptions
+          
+            RTF-specific PDF options.
+          
+          RtfPdfSaveOptions
+          
+            RtfPdfSaveOptions
+            
+          
+          None
+        
+        
+          WordOptions
+          
+            Word-specific PDF options.
+          
+          WordPdfSaveOptions
+          
+            WordPdfSaveOptions
+            
+          
+          None
+        
+      
+      
+        Export-OfficeDocumentPdf
+        
+          ExcelOptions
+          
+            Excel-specific PDF options.
+          
+          ExcelPdfSaveOptions
+          
+            ExcelPdfSaveOptions
+            
+          
+          None
+        
+        
+          InputPath
+          
+            Source .docx, .xlsx, .pptx, .md, .markdown, or .rtf file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          MarkdownOptions
+          
+            Markdown-specific PDF options.
+          
+          MarkdownPdfSaveOptions
+          
+            MarkdownPdfSaveOptions
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the PDF after exporting it.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the saved PDF file.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password used to open an encrypted Word, Excel, or PowerPoint source file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PdfConversionReportVariable
+          
+            Variable name that receives the structured PDF conversion report.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PdfWarningVariable
+          
+            Variable name that receives structured PDF conversion warnings.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PowerPointOptions
+          
+            PowerPoint-specific PDF options.
+          
+          PowerPointPdfSaveOptions
+          
+            PowerPointPdfSaveOptions
+            
+          
+          None
+        
+        
+          RtfOptions
+          
+            RTF-specific PDF options.
+          
+          RtfPdfSaveOptions
+          
+            RtfPdfSaveOptions
+            
+          
+          None
+        
+        
+          WordOptions
+          
+            Word-specific PDF options.
+          
+          WordPdfSaveOptions
+          
+            WordPdfSaveOptions
+            
+          
+          None
+        
+      
+    
+    
+      
+        Document
+        
+          Live Word, Excel, PowerPoint, Markdown, or RTF document to export. Saved FileInfo and path strings from the pipeline are opened automatically.
+        
+        Object
+        
+          Object
+          
+        
+        None
+      
+      
+        ExcelOptions
+        
+          Excel-specific PDF options.
+        
+        ExcelPdfSaveOptions
+        
+          ExcelPdfSaveOptions
+          
+        
+        None
+      
+      
+        InputPath
+        
+          Source .docx, .xlsx, .pptx, .md, .markdown, or .rtf file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        MarkdownOptions
+        
+          Markdown-specific PDF options.
+        
+        MarkdownPdfSaveOptions
+        
+          MarkdownPdfSaveOptions
+          
+        
+        None
+      
+      
+        Open
+        
+          Open the PDF after exporting it.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the saved PDF file.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Password
+        
+          Password used to open an encrypted Word, Excel, or PowerPoint source file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Destination PDF path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PdfConversionReportVariable
+        
+          Variable name that receives the structured PDF conversion report.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PdfWarningVariable
+        
+          Variable name that receives structured PDF conversion warnings.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PowerPointOptions
+        
+          PowerPoint-specific PDF options.
+        
+        PowerPointPdfSaveOptions
+        
+          PowerPointPdfSaveOptions
+          
+        
+        None
+      
+      
+        RtfOptions
+        
+          RTF-specific PDF options.
+        
+        RtfPdfSaveOptions
+        
+          RtfPdfSaveOptions
+          
+        
+        None
+      
+      
+        WordOptions
+        
+          Word-specific PDF options.
+        
+        WordPdfSaveOptions
+        
+          WordPdfSaveOptions
+          
+        
+        None
+      
+    
+    
+      
+        
+          System.Object
+        
+      
+      
+        
+          System.String
+        
+      
+    
+    
+      
+        
+          System.IO.FileInfo
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Export a live Word document.
+        
+          PS> 
+        
+        $document | Export-OfficeDocumentPdf -Path .\Report.pdf
+        
+          
+        
+      
+      
+        Export a supported file without opening it explicitly.
+        
+          PS> 
+        
+        Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -PassThru
+        
+          
+        
+      
+      
+        Configure Markdown PDF export with ordinary PowerShell parameters.
+        
+          PS> 
+        
+        $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -IncludeLocalImages -BaseDirectory .\Assets
+            Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options
+        
+          The New-Office*PdfOptions commands build every format-specific options object; no hashtable or .NET constructor is required.
+        
+      
+    
+    
+  
   
     
       Export-OfficeExcel
@@ -82854,6 +85559,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result when a destination path is used.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -82960,6 +85677,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result when a destination path is used.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           WorksheetName
           
@@ -83054,6 +85783,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit the structured image export result when a destination path is used.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -83467,6 +86208,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved sheet.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -83537,6 +86290,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved sheet.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
     
     
@@ -83595,6 +86360,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit one structured image export result per saved sheet.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -83635,7 +86412,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         Export-OfficeExcelImage -Path .\Report.xlsx -OutputPath .\Images
         
-          Writes one image per selected sheet and returns OfficeImageExportResult objects.
+          Writes one image per selected sheet. Add -PassThru to receive the structured export results.
         
       
     
@@ -83711,6 +86488,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result when a destination path is used.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -83817,6 +86606,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result when a destination path is used.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -83911,6 +86712,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit the structured image export result when a destination path is used.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -84030,7 +86843,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
           OutputPath
           
-            Destination PNG or SVG path.
+            Destination PNG, JPEG, TIFF, SVG, or WebP path.
           
           String
           
@@ -84051,6 +86864,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -84124,7 +86949,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
           OutputPath
           
-            Destination PNG or SVG path.
+            Destination PNG, JPEG, TIFF, SVG, or WebP path.
           
           String
           
@@ -84145,6 +86970,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           RenderOptions
           
@@ -84206,7 +87043,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
           OutputPath
           
-            Destination PNG or SVG path.
+            Destination PNG, JPEG, TIFF, SVG, or WebP path.
           
           String
           
@@ -84227,6 +87064,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           RenderOptions
           
@@ -84300,7 +87149,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
       
         OutputPath
         
-          Destination PNG or SVG path.
+          Destination PNG, JPEG, TIFF, SVG, or WebP path.
         
         String
         
@@ -84321,6 +87170,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit the structured image export result.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -84378,7 +87239,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.png
         
-          Uses the dependency-free OfficeIMO HTML renderer and returns OfficeImageExportResult.
+          Uses the dependency-free OfficeIMO HTML renderer. Add -PassThru to receive the structured export result.
         
       
     
@@ -84466,6 +87327,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved page.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -84572,6 +87445,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit one structured image export result per saved page.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -84636,7 +87521,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Pages -PageRange '1-3,5'
         
-          Writes the selected pages and returns normalized image results with rendering diagnostics.
+          Writes the selected pages. Add -PassThru to receive normalized image results with rendering diagnostics.
         
       
     
@@ -84733,6 +87618,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -84860,6 +87757,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit the structured image export result.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -84930,8 +87839,11 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
     
     
       
-        EXAMPLE 1
-        Export-OfficePdfLayoutOverlay -Path 'C:\Path'
+        Export an SVG layout overlay for the first page.
+        
+          PS> 
+        
+        $result = Export-OfficePdfLayoutOverlay -Path .\Report.pdf -OutputPath .\Report-layout.svg -Page 1 -Format Svg -PassThru
         
           
         
@@ -85195,6 +88107,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved slide.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -85253,6 +88177,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved slide.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -85311,6 +88247,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit one structured image export result per saved slide.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -85363,7 +88311,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Format Svg
         
-          Writes one image per selected slide and returns OfficeImageExportResult objects.
+          Writes one image per selected slide. Add -PassThru to receive the structured export results.
         
       
     
@@ -85427,6 +88375,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved page.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -85497,6 +88457,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit one structured image export result per saved page.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
     
     
@@ -85555,6 +88527,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit one structured image export result per saved page.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -85595,7 +88579,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         Export-OfficeVisioImage -Path .\diagram.vsdx -OutputPath .\Images -Format Png
         
-          Writes one PNG per selected page and returns one result object per file.
+          Writes one PNG per selected page. Add -PassThru to receive one result object per file.
         
       
     
@@ -86089,6 +89073,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          Open
+          
+            Open the generated VSDX after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PageName
           
@@ -86137,18 +89133,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          Show
-          
-            Open the generated VSDX after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           UseNaturalPageSize
           
@@ -86224,6 +89208,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        Open
+        
+          Open the generated VSDX after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PageName
         
@@ -86272,18 +89268,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        Show
-        
-          Open the generated VSDX after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
       
         UseNaturalPageSize
         
@@ -86638,15 +89622,27 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
       Export
       OfficeWordImage
       
-        Exports a Word page as PNG or SVG with structured image diagnostics.
+        Exports one or more Word pages through the format-neutral OfficeIMO image pipeline.
       
     
     
-      Exports a Word page as PNG or SVG with structured image diagnostics.
+      Exports one or more Word pages through the format-neutral OfficeIMO image pipeline.
     
     
       
         Export-OfficeWordImage
+        
+          AllPages
+          
+            Export every estimated page to the destination folder.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Format
           
@@ -86681,7 +89677,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
           OutputPath
           
-            Destination PNG or SVG path.
+            Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch.
           
           String
           
@@ -86690,6 +89686,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -86705,6 +89713,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
       
       
         Export-OfficeWordImage
+        
+          AllPages
+          
+            Export every estimated page to the destination folder.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Document
           
@@ -86751,7 +89771,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
           OutputPath
           
-            Destination PNG or SVG path.
+            Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch.
           
           String
           
@@ -86760,9 +89780,33 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
+        
+          PassThru
+          
+            Emit the structured image export result.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
     
     
+      
+        AllPages
+        
+          Export every estimated page to the destination folder.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Document
         
@@ -86809,7 +89853,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
       
         OutputPath
         
-          Destination PNG or SVG path.
+          Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch.
         
         String
         
@@ -86818,6 +89862,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
+      
+        PassThru
+        
+          Emit the structured image export result.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -86858,7 +89914,17 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Report.svg -Format Svg
         
-          Returns the OfficeIMO image export result after writing the image.
+          Writes the image quietly. Add -PassThru to receive the structured export result.
+        
+      
+      
+        Export every page as JPEG files.
+        
+          PS> 
+        
+        Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Format Jpeg -AllPages
+        
+          For a bounded batch, create options with New-OfficeWordImageOptions -PageIndex 0 -PageCount 2.
         
       
     
@@ -86903,8 +89969,8 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -87113,8 +90179,8 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -88085,8 +91151,8 @@ the target shape without reading text content.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -88136,8 +91202,8 @@ the target shape without reading text content.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -88289,8 +91355,8 @@ the target shape without reading text content.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -88410,8 +91476,8 @@ returned list objects can be piped directly to Add-OfficeWordListItem.
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document to open read-only for searching.
           
@@ -88449,8 +91515,8 @@ returned list objects can be piped directly to Add-OfficeWordListItem.
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document to open read-only for searching.
           
@@ -88656,8 +91722,8 @@ returned list objects can be piped directly to Add-OfficeWordListItem.
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document to open read-only for searching.
         
@@ -88804,8 +91870,8 @@ expressions.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document to open read-only for searching.
           
@@ -88855,8 +91921,8 @@ expressions.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document to open read-only for searching.
           
@@ -89020,8 +92086,8 @@ expressions.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document to open read-only for searching.
         
@@ -96413,7 +99479,8 @@ extraction, hashing, and chunk shaping.
         
           PS> 
         
-        $options = [OfficeIMO.Reader.ReaderHierarchicalChunkingOptions]::new(); $options.MaxTokens = 500; $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
+        $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText
+            $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
         
           Returns chunks, token evidence, overlap counts, and flattened parent/child nodes.
         
@@ -98513,8 +101580,12 @@ extraction, hashing, and chunk shaping.
     
     
       
-        EXAMPLE 1
-        Get-OfficeEmail -Path 'C:\Path'
+        Read a message without retaining attachment payloads.
+        
+          PS> 
+        
+        $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+            Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult
         
           
         
@@ -98639,8 +101710,12 @@ extraction, hashing, and chunk shaping.
     
     
       
-        EXAMPLE 1
-        Get-OfficeEmailMailbox -Path 'C:\Path'
+        Read a bounded mbox mailbox with diagnostics.
+        
+          PS> 
+        
+        $options = New-OfficeEmailMailboxReaderOptions -MaxMessageCount 5000
+            Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult
         
           
         
@@ -98664,19 +101739,19 @@ extraction, hashing, and chunk shaping.
       
         Get-OfficeExcel
         
-          AutoSave
+          Password
           
-            Enable automatic saves on the underlying document.
+            Password used to open an encrypted workbook package.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the workbook to load.
           
@@ -98687,18 +101762,6 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          Password
-          
-            Password used to open an encrypted workbook package.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           ReadOnly
           
@@ -98726,18 +101789,6 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          AutoSave
-          
-            Enable automatic saves on the underlying document.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           Password
           
@@ -98790,19 +101841,19 @@ extraction, hashing, and chunk shaping.
         None
       
       
-        AutoSave
+        Password
         
-          Enable automatic saves on the underlying document.
+          Password used to open an encrypted workbook package.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the workbook to load.
         
@@ -98813,18 +101864,6 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        Password
-        
-          Password used to open an encrypted workbook package.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         ReadOnly
         
@@ -98991,8 +102030,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -99177,8 +102216,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -99300,8 +102339,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -99366,8 +102405,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -99552,8 +102591,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -99762,8 +102801,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -100062,8 +103101,8 @@ extraction, hashing, and chunk shaping.
     
       
         Get-OfficeExcelDataModel
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -100104,8 +103143,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -100291,8 +103330,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -100501,8 +103540,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -100647,26 +103686,26 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Name
           
-            Path to the workbook.
+            Property name filter (wildcards supported).
           
-          String
+          String[]
           
-            String
+            String[]
             
           
           None
         
-        
-          Name
+        
+          Path
           
-            Property name filter (wildcards supported).
+            Path to the workbook.
           
-          String[]
+          String
           
-            String[]
+            String
             
           
           None
@@ -100785,26 +103824,26 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Name
         
-          Path to the workbook.
+          Property name filter (wildcards supported).
         
-        String
+        String[]
         
-          String
+          String[]
           
         
         None
       
-      
-        Name
+      
+        Path
         
-          Property name filter (wildcards supported).
+          Path to the workbook.
         
-        String[]
+        String
         
-          String[]
+          String
           
         
         None
@@ -100875,8 +103914,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -100941,8 +103980,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -101005,24 +104044,24 @@ extraction, hashing, and chunk shaping.
     
       
         Get-OfficeExcelNamedRange
-        
-          InputPath
+        
+          Name
           
-            Path to the workbook.
+            Optional named range to retrieve.
           
-          String
+          String
           
             String
             
           
           None
         
-        
-          Name
+        
+          Path
           
-            Optional named range to retrieve.
+            Path to the workbook.
           
-          String
+          String
           
             String
             
@@ -101194,24 +104233,24 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Name
         
-          Path to the workbook.
+          Optional named range to retrieve.
         
-        String
+        String
         
           String
           
         
         None
       
-      
-        Name
+      
+        Path
         
-          Optional named range to retrieve.
+          Path to the workbook.
         
-        String
+        String
         
           String
           
@@ -101464,8 +104503,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -101602,8 +104641,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -101701,24 +104740,24 @@ extraction, hashing, and chunk shaping.
     
       
         Get-OfficeExcelPivotTable
-        
-          InputPath
+        
+          Name
           
-            Path to the workbook.
+            Optional pivot table name filter.
           
-          String
+          String
           
             String
             
           
           None
         
-        
-          Name
+        
+          Path
           
-            Optional pivot table name filter.
+            Path to the workbook.
           
-          String
+          String
           
             String
             
@@ -101815,24 +104854,24 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Name
         
-          Path to the workbook.
+          Optional pivot table name filter.
         
-        String
+        String
         
           String
           
         
         None
       
-      
-        Name
+      
+        Path
         
-          Optional pivot table name filter.
+          Path to the workbook.
         
-        String
+        String
         
           String
           
@@ -101972,8 +105011,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the workbook.
           
@@ -102152,8 +105191,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the workbook.
         
@@ -102268,26 +105307,26 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          NumericAsDecimal
           
-            Path to the workbook.
+            Prefer decimals instead of doubles for numeric values.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          NumericAsDecimal
+        
+          Path
           
-            Prefer decimals instead of doubles for numeric values.
+            Path to the workbook.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -102601,26 +105640,26 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        NumericAsDecimal
         
-          Path to the workbook.
+          Prefer decimals instead of doubles for numeric values.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        NumericAsDecimal
+      
+        Path
         
-          Prefer decimals instead of doubles for numeric values.
+          Path to the workbook.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -102822,8 +105861,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -102984,8 +106023,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -103129,8 +106168,8 @@ extraction, hashing, and chunk shaping.
     
       
         Get-OfficeExcelStreamingContract
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -103171,8 +106210,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -103261,8 +106300,8 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the workbook.
           
@@ -103351,8 +106390,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the workbook.
         
@@ -103416,24 +106455,24 @@ extraction, hashing, and chunk shaping.
     
       
         Get-OfficeExcelTable
-        
-          InputPath
+        
+          Name
           
-            Path to the workbook.
+            Optional table name filter.
           
-          String
+          String
           
             String
             
           
           None
         
-        
-          Name
+        
+          Path
           
-            Optional table name filter.
+            Path to the workbook.
           
-          String
+          String
           
             String
             
@@ -103605,24 +106644,24 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Name
         
-          Path to the workbook.
+          Optional table name filter.
         
-        String
+        String
         
           String
           
         
         None
       
-      
-        Name
+      
+        Path
         
-          Optional table name filter.
+          Path to the workbook.
         
-        String
+        String
         
           String
           
@@ -103872,26 +106911,26 @@ extraction, hashing, and chunk shaping.
       
       
         Get-OfficeExcelTemplateMarker
-        
-          InputPath
+        
+          MissingOnly
           
-            Workbook path to inspect.
+            Only returns markers that are not supplied by -Value.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          MissingOnly
+        
+          Path
           
-            Only returns markers that are not supplied by -Value.
+            Workbook path to inspect.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -104010,26 +107049,26 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        MissingOnly
         
-          Workbook path to inspect.
+          Only returns markers that are not supplied by -Value.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        MissingOnly
+      
+        Path
         
-          Only returns markers that are not supplied by -Value.
+          Workbook path to inspect.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -104155,26 +107194,26 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          NumericAsDecimal
           
-            Path to the workbook.
+            Prefer decimals instead of doubles for numeric values.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          NumericAsDecimal
+        
+          Path
           
-            Prefer decimals instead of doubles for numeric values.
+            Path to the workbook.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -104452,26 +107491,26 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        NumericAsDecimal
         
-          Path to the workbook.
+          Prefer decimals instead of doubles for numeric values.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        NumericAsDecimal
+      
+        Path
         
-          Prefer decimals instead of doubles for numeric values.
+          Path to the workbook.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -104601,8 +107640,8 @@ extraction, hashing, and chunk shaping.
       
       
         Get-OfficeExcelWorksheetView
-        
-          InputPath
+        
+          Path
           
             Workbook path to inspect.
           
@@ -104691,8 +107730,8 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path to inspect.
         
@@ -105135,18 +108174,6 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
-          
-            Path to the Markdown file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MaxInputCharacters
           
@@ -105189,6 +108216,18 @@ extraction, hashing, and chunk shaping.
           
           None
         
+        
+          Path
+          
+            Path to the Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Profile
           
@@ -105453,18 +108492,6 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
-        
-          Path to the Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MaxInputCharacters
         
@@ -105507,6 +108534,18 @@ extraction, hashing, and chunk shaping.
         
         None
       
+      
+        Path
+        
+          Path to the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -105692,18 +108731,6 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
-          
-            Path to the Markdown file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Key
           
@@ -105758,6 +108785,18 @@ extraction, hashing, and chunk shaping.
           
           None
         
+        
+          Path
+          
+            Path to the Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Profile
           
@@ -106253,18 +109292,6 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
-        
-          Path to the Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Key
         
@@ -106319,6 +109346,18 @@ extraction, hashing, and chunk shaping.
         
         None
       
+      
+        Path
+        
+          Path to the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -106533,231 +109572,231 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
+        
+          MaxInputCharacters
+          
+            Maximum Markdown input length accepted by the reader.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxLevel
+          
+            Maximum heading level to return.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MinLevel
+          
+            Minimum heading level to return.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          NormalizeInput
+          
+            Applies a built-in Markdown input normalization preset before parsing.
+          
+          MarkdownInputNormalizationPreset
+          
+            None
+            IntelligenceXTranscript
+            IntelligenceXTranscriptStrict
+            DocsLoose
+          
+          
+            MarkdownInputNormalizationPreset
+            
+          
+          None
+        
+        
+          Options
+          
+            Optional reader options used when parsing path or text input.
+          
+          MarkdownReaderOptions
+          
+            MarkdownReaderOptions
+            
+          
+          None
+        
+        
+          Path
           
             Path to the Markdown file.
           
           String
-          
-            String
-            
-          
-          None
-        
-        
-          MaxInputCharacters
-          
-            Maximum Markdown input length accepted by the reader.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          MaxLevel
-          
-            Maximum heading level to return.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          MinLevel
-          
-            Minimum heading level to return.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          NormalizeInput
-          
-            Applies a built-in Markdown input normalization preset before parsing.
-          
-          MarkdownInputNormalizationPreset
-          
-            None
-            IntelligenceXTranscript
-            IntelligenceXTranscriptStrict
-            DocsLoose
-          
-          
-            MarkdownInputNormalizationPreset
-            
-          
-          None
-        
-        
-          Options
-          
-            Optional reader options used when parsing path or text input.
-          
-          MarkdownReaderOptions
-          
-            MarkdownReaderOptions
-            
-          
-          None
-        
-        
-          Profile
-          
-            Named reader profile used when Options is not supplied.
-          
-          MarkdownDialectProfile
-          
-            OfficeIMO
-            CommonMark
-            GitHubFlavoredMarkdown
-            Portable
-          
-          
-            MarkdownDialectProfile
-            
-          
-          None
-        
-        
-          RestrictUrlSchemes
-          
-            Restrict parsed URL schemes to the allow-list.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-      
-      
-        Get-OfficeMarkdownHeading
-        
-          AllowDataUrls
-          
-            Allow data URLs while parsing Markdown links and images.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          AllowedUrlScheme
-          
-            Allowed URL schemes when URL scheme restriction is enabled.
-          
-          String[]
-          
-            String[]
-            
-          
-          None
-        
-        
-          AllowMailtoUrls
-          
-            Allow mailto URLs while parsing Markdown links.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          AllowProtocolRelativeUrls
-          
-            Allow protocol-relative URLs while parsing Markdown links and images.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          Anchor
-          
-            Optional wildcard pattern matched against resolved heading anchors.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          BaseUri
-          
-            Base URI used to resolve and restrict relative Markdown links and images.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          CaseSensitive
-          
-            Use case-sensitive matching for text and anchor filters.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          DisallowFileUrls
-          
-            Block file URLs while parsing Markdown links and images.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          Document
-          
-            Markdown document to inspect.
-          
-          MarkdownDoc
-          
-            MarkdownDoc
-            
-          
-          None
-        
-        
-          HeadingText
-          
-            Optional wildcard pattern matched against heading text.
-          
-          String
+          
+            String
+            
+          
+          None
+        
+        
+          Profile
+          
+            Named reader profile used when Options is not supplied.
+          
+          MarkdownDialectProfile
+          
+            OfficeIMO
+            CommonMark
+            GitHubFlavoredMarkdown
+            Portable
+          
+          
+            MarkdownDialectProfile
+            
+          
+          None
+        
+        
+          RestrictUrlSchemes
+          
+            Restrict parsed URL schemes to the allow-list.
+          
+          Boolean
+          
+            Boolean
+            
+          
+          None
+        
+      
+      
+        Get-OfficeMarkdownHeading
+        
+          AllowDataUrls
+          
+            Allow data URLs while parsing Markdown links and images.
+          
+          Boolean
+          
+            Boolean
+            
+          
+          None
+        
+        
+          AllowedUrlScheme
+          
+            Allowed URL schemes when URL scheme restriction is enabled.
+          
+          String[]
+          
+            String[]
+            
+          
+          None
+        
+        
+          AllowMailtoUrls
+          
+            Allow mailto URLs while parsing Markdown links.
+          
+          Boolean
+          
+            Boolean
+            
+          
+          None
+        
+        
+          AllowProtocolRelativeUrls
+          
+            Allow protocol-relative URLs while parsing Markdown links and images.
+          
+          Boolean
+          
+            Boolean
+            
+          
+          None
+        
+        
+          Anchor
+          
+            Optional wildcard pattern matched against resolved heading anchors.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          BaseUri
+          
+            Base URI used to resolve and restrict relative Markdown links and images.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          CaseSensitive
+          
+            Use case-sensitive matching for text and anchor filters.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          DisallowFileUrls
+          
+            Block file URLs while parsing Markdown links and images.
+          
+          Boolean
+          
+            Boolean
+            
+          
+          None
+        
+        
+          Document
+          
+            Markdown document to inspect.
+          
+          MarkdownDoc
+          
+            MarkdownDoc
+            
+          
+          None
+        
+        
+          HeadingText
+          
+            Optional wildcard pattern matched against heading text.
+          
+          String
           
             String
             
@@ -107202,18 +110241,6 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
-        
-          Path to the Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MaxInputCharacters
         
@@ -107280,6 +110307,18 @@ extraction, hashing, and chunk shaping.
         
         None
       
+      
+        Path
+        
+          Path to the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -107465,18 +110504,6 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
-          
-            Path to the Markdown file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MaxDepth
           
@@ -107543,6 +110570,18 @@ extraction, hashing, and chunk shaping.
           
           None
         
+        
+          Path
+          
+            Path to the Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Profile
           
@@ -108098,18 +111137,6 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
-        
-          Path to the Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MaxDepth
         
@@ -108176,6 +111203,18 @@ extraction, hashing, and chunk shaping.
         
         None
       
+      
+        Path
+        
+          Path to the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -108378,18 +111417,6 @@ extraction, hashing, and chunk shaping.
           
           None
         
-        
-          InputPath
-          
-            Path to the Markdown file.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MaxInputCharacters
           
@@ -108432,6 +111459,18 @@ extraction, hashing, and chunk shaping.
           
           None
         
+        
+          Path
+          
+            Path to the Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Profile
           
@@ -108903,18 +111942,6 @@ extraction, hashing, and chunk shaping.
         
         None
       
-      
-        InputPath
-        
-          Path to the Markdown file.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MaxInputCharacters
         
@@ -108957,6 +111984,18 @@ extraction, hashing, and chunk shaping.
         
         None
       
+      
+        Path
+        
+          Path to the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Profile
         
@@ -109053,6 +112092,114 @@ extraction, hashing, and chunk shaping.
     
       
         Get-OfficeOpenDocument
+        
+          MaxCompressionRatio
+          
+            Maximum declared expansion ratio for a compressed entry.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          MaxDepth
+          
+            Maximum archive path depth.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxEntries
+          
+            Maximum number of ZIP entries.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxEntryUncompressedBytes
+          
+            Maximum uncompressed size of one package entry.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxPackageBytes
+          
+            Maximum source package size in bytes.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxTotalKdfIterations
+          
+            Maximum aggregate PBKDF2 iterations across encrypted entries.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxTotalUncompressedBytes
+          
+            Maximum aggregate uncompressed package size.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxXmlCharacters
+          
+            Maximum characters allowed in one parsed XML part.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxXmlDepth
+          
+            Maximum element nesting depth in one parsed XML part.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
         
           Options
           
@@ -109065,6 +112212,18 @@ extraction, hashing, and chunk shaping.
           
           None
         
+        
+          Password
+          
+            Password used to decrypt an encrypted OpenDocument package.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Path
           
@@ -109080,6 +112239,114 @@ extraction, hashing, and chunk shaping.
       
     
     
+      
+        MaxCompressionRatio
+        
+          Maximum declared expansion ratio for a compressed entry.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        MaxDepth
+        
+          Maximum archive path depth.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxEntries
+        
+          Maximum number of ZIP entries.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxEntryUncompressedBytes
+        
+          Maximum uncompressed size of one package entry.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxPackageBytes
+        
+          Maximum source package size in bytes.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxTotalKdfIterations
+        
+          Maximum aggregate PBKDF2 iterations across encrypted entries.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxTotalUncompressedBytes
+        
+          Maximum aggregate uncompressed package size.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxXmlCharacters
+        
+          Maximum characters allowed in one parsed XML part.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxXmlDepth
+        
+          Maximum element nesting depth in one parsed XML part.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
       
         Options
         
@@ -109092,6 +112359,18 @@ extraction, hashing, and chunk shaping.
         
         None
       
+      
+        Password
+        
+          Password used to decrypt an encrypted OpenDocument package.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Path
         
@@ -112706,24 +115985,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
     
       
         Get-OfficePowerPoint
-        
-          FilePath
+        
+          Password
           
-            Path to the .pptx file.
+            Password used to open an encrypted presentation package.
           
-          String
+          String
           
             String
             
           
           None
         
-        
-          Password
+        
+          Path
           
-            Password used to open an encrypted presentation package.
+            Path to the .pptx file.
           
-          String
+          String
           
             String
             
@@ -112733,24 +116012,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
       
     
     
-      
-        FilePath
+      
+        Password
         
-          Path to the .pptx file.
+          Password used to open an encrypted presentation package.
         
-        String
+        String
         
           String
           
         
         None
       
-      
-        Password
+      
+        Path
         
-          Password used to open an encrypted presentation package.
+          Path to the .pptx file.
         
-        String
+        String
         
           String
           
@@ -112777,7 +116056,7 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
           PS> 
         
-        $ppt = Get-OfficePowerPoint -FilePath .\Quarterly.pptx
+        $ppt = Get-OfficePowerPoint -Path .\Quarterly.pptx
         
           Reads Quarterly.pptx and exposes the presentation object.
         
@@ -113265,7 +116544,7 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointLayoutBox.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 $box = Get-OfficePowerPointLayoutBox -MarginCm 1.5
                 Add-OfficePowerPointTextBox -Slide $slide -Text 'Inside the content box' -X ($box.LeftPoints) -Y ($box.TopPoints) -Width ($box.WidthPoints) -Height 60
             }
@@ -113279,7 +116558,7 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointColumns.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 $columns = Get-OfficePowerPointLayoutBox -ColumnCount 2 -MarginCm 1.5 -GutterCm 1.0
                 Add-OfficePowerPointTextBox -Slide $slide -Text 'Left column' -X ($columns[0].LeftPoints) -Y ($columns[0].TopPoints) -Width ($columns[0].WidthPoints) -Height 80
                 Add-OfficePowerPointTextBox -Slide $slide -Text 'Right column' -X ($columns[1].LeftPoints) -Y ($columns[1].TopPoints) -Width ($columns[1].WidthPoints) -Height 80
@@ -113856,10 +117135,11 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSectionsRead.pptx
-            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-            Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0 | Out-Null
-            Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSectionsRead.pptx -NoSave
+            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+            Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0
+            Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount
+            $ppt | Close-OfficePowerPoint
         
           Returns section information including section names and slide indexes.
         
@@ -114488,10 +117768,11 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointThemeRead.pptx
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeRead.pptx -NoSave
             Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Service Brief'
             Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos Display' -MinorLatin 'Aptos'
-            Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master
+            Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master
+            $ppt | Close-OfficePowerPoint
         
           Returns theme information after updating the deck theme metadata.
         
@@ -115613,18 +118894,6 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
     
       
         Get-OfficeWord
-        
-          AutoSave
-          
-            Enable AutoSave when editing.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           Content
           
@@ -115637,24 +118906,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Password
           
-            Path to the .docx. Accepts PS paths.
+            Password used to open an encrypted document package.
           
-          String
+          String
           
             String
             
           
           None
         
-        
-          Password
+        
+          Path
           
-            Password used to open an encrypted document package.
+            Path to the .docx. Accepts PS paths.
           
-          String
+          String
           
             String
             
@@ -115676,18 +118945,6 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
       
     
     
-      
-        AutoSave
-        
-          Enable AutoSave when editing.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
       
         Content
         
@@ -115700,24 +118957,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Password
         
-          Path to the .docx. Accepts PS paths.
+          Password used to open an encrypted document package.
         
-        String
+        String
         
           String
           
         
         None
       
-      
-        Password
+      
+        Path
         
-          Password used to open an encrypted document package.
+          Path to the .docx. Accepts PS paths.
         
-        String
+        String
         
           String
           
@@ -115789,26 +119046,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
     
       
         Get-OfficeWordBookmark
-        
-          InputPath
+        
+          Name
           
-            Path to the .docx file.
+            Bookmark name filter (wildcards supported).
           
-          String
+          String[]
           
-            String
+            String[]
             
           
           None
         
-        
-          Name
+        
+          Path
           
-            Bookmark name filter (wildcards supported).
+            Path to the .docx file.
           
-          String[]
+          String
           
-            String[]
+            String
             
           
           None
@@ -115855,26 +119112,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Name
         
-          Path to the .docx file.
+          Bookmark name filter (wildcards supported).
         
-        String
+        String[]
         
-          String
+          String[]
           
         
         None
       
-      
-        Name
+      
+        Path
         
-          Bookmark name filter (wildcards supported).
+          Path to the .docx file.
         
-        String[]
+        String
         
-          String[]
+          String
           
         
         None
@@ -115955,8 +119212,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -116093,8 +119350,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -116193,8 +119450,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -116283,8 +119540,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -116371,8 +119628,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -116485,8 +119742,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -116585,8 +119842,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -116675,8 +119932,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -116775,26 +120032,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Name
           
-            Path to the document.
+            Property name filter (wildcards supported).
           
-          String
+          String[]
           
-            String
+            String[]
             
           
           None
         
-        
-          Name
+        
+          Path
           
-            Property name filter (wildcards supported).
+            Path to the document.
           
-          String[]
+          String
           
-            String[]
+            String
             
           
           None
@@ -116889,26 +120146,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Name
         
-          Path to the document.
+          Property name filter (wildcards supported).
         
-        String
+        String[]
         
-          String
+          String[]
           
         
         None
       
-      
-        Name
+      
+        Path
         
-          Property name filter (wildcards supported).
+          Path to the document.
         
-        String[]
+        String
         
-          String[]
+          String
           
         
         None
@@ -116980,8 +120237,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -117070,8 +120327,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -117146,8 +120403,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
     
       
         Get-OfficeWordEndnote
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -117203,8 +120460,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document.
         
@@ -117398,8 +120655,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -117662,8 +120919,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -117726,8 +120983,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
     
       
         Get-OfficeWordFootnote
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -117783,8 +121040,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document.
         
@@ -117879,8 +121136,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -118095,26 +121352,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Paragraph
         
-          Path to the document.
+          Paragraph to inspect.
         
-        String
+        WordParagraph
         
-          String
+          WordParagraph
           
         
         None
       
-      
-        Paragraph
+      
+        Path
         
-          Paragraph to inspect.
+          Path to the document.
         
-        WordParagraph
+        String
         
-          WordParagraph
+          String
           
         
         None
@@ -118217,8 +121474,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
     
       
         Get-OfficeWordImage
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -118289,26 +121546,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification
         
         None
       
-      
-        InputPath
+      
+        Paragraph
         
-          Path to the document.
+          Paragraph to inspect.
         
-        String
+        WordParagraph
         
-          String
+          WordParagraph
           
         
         None
       
-      
-        Paragraph
+      
+        Path
         
-          Paragraph to inspect.
+          Path to the document.
         
-        WordParagraph
+        String
         
-          WordParagraph
+          String
           
         
         None
@@ -118401,8 +121658,8 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document to open read-only for list inspection.
           
@@ -118494,8 +121751,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document to open read-only for list inspection.
         
@@ -118588,8 +121845,8 @@ the script needs to work with list objects directly instead of using a text sear
     
       
         Get-OfficeWordParagraph
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -118645,8 +121902,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document.
         
@@ -118739,8 +121996,8 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -118829,8 +122086,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -118917,8 +122174,8 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -119007,8 +122264,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -119198,8 +122455,8 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -119264,8 +122521,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document.
         
@@ -119328,8 +122585,8 @@ the script needs to work with list objects directly instead of using a text sear
     
       
         Get-OfficeWordShape
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -119400,26 +122657,26 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Paragraph
         
-          Path to the document.
+          Paragraph to inspect.
         
-        String
+        WordParagraph
         
-          String
+          WordParagraph
           
         
         None
       
-      
-        Paragraph
+      
+        Path
         
-          Paragraph to inspect.
+          Path to the document.
         
-        WordParagraph
+        String
         
-          WordParagraph
+          String
           
         
         None
@@ -119498,8 +122755,8 @@ the script needs to work with list objects directly instead of using a text sear
     
       
         Get-OfficeWordStatistics
-        
-          InputPath
+        
+          Path
           
             Path to the Word document.
           
@@ -119540,8 +122797,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the Word document.
         
@@ -119619,8 +122876,8 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -119712,8 +122969,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the document.
         
@@ -119921,8 +123178,8 @@ the script needs to work with list objects directly instead of using a text sear
     
       
         Get-OfficeWordTableOfContents
-        
-          InputPath
+        
+          Path
           
             Path to the .docx file.
           
@@ -119963,8 +123220,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Path to the .docx file.
         
@@ -120074,8 +123331,8 @@ the script needs to work with list objects directly instead of using a text sear
       
       
         Get-OfficeWordText
-        
-          InputPath
+        
+          Path
           
             Path to the document.
           
@@ -120101,26 +123358,26 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Paragraph
         
-          Path to the document.
+          Paragraph to enumerate.
         
-        String
+        WordParagraph
         
-          String
+          WordParagraph
           
         
         None
       
-      
-        Paragraph
+      
+        Path
         
-          Paragraph to enumerate.
+          Path to the document.
         
-        WordParagraph
+        String
         
-          WordParagraph
+          String
           
         
         None
@@ -124909,18 +128166,6 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
-          
-            Workbook path.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           NoHeader
           
@@ -124969,6 +128214,18 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
+        
+          Path
+          
+            Workbook path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           SheetName
           
@@ -125167,18 +128424,6 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
-        
-          Workbook path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         NoHeader
         
@@ -125227,6 +128472,18 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
+      
+        Path
+        
+          Workbook path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         SheetName
         
@@ -125902,7 +129159,7 @@ the script needs to work with list objects directly instead of using a text sear
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImportTarget.pptx {
-                Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Target deck'
+                Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Target deck'
                 Import-OfficePowerPointSlide -SourcePath .\Examples\Documents\SourceDeck.pptx -SourceIndex 0 -InsertAt 1
             }
         
@@ -127373,18 +130630,6 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MissingValueBehavior
           
@@ -127414,6 +130659,18 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Sheet
           
@@ -127593,18 +130850,6 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MissingValueBehavior
         
@@ -127634,6 +130879,18 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Sheet
         
@@ -127883,154 +131140,154 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          MissingValueBehavior
+          
+            Behavior used when a marker in the optional block is not supplied by -Value.
+          
+          ExcelTemplateMissingValueBehavior
+          
+            PreserveMarker
+            EmptyString
+            Throw
+          
+          
+            ExcelTemplateMissingValueBehavior
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Returns the number of marker replacements.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
           
             Workbook path to update.
           
           String
           
             String
-            
-          
-          None
-        
-        
-          MissingValueBehavior
-          
-            Behavior used when a marker in the optional block is not supplied by -Value.
-          
-          ExcelTemplateMissingValueBehavior
-          
-            PreserveMarker
-            EmptyString
-            Throw
-          
-          
-            ExcelTemplateMissingValueBehavior
-            
-          
-          None
-        
-        
-          PassThru
-          
-            Returns the number of marker replacements.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Remove
-          
-            Removes the optional row block instead of keeping and binding it.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          RowCount
-          
-            Number of rows in the optional block.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          Sheet
-          
-            Worksheet name. Defaults to the current sheet inside an ExcelSheet block.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          SheetIndex
-          
-            Worksheet index when using a workbook object or path.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          ThrowOnMissing
-          
-            Throws when a marker in the optional block is not supplied by -Value.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Value
-          
-            Template marker values used when the optional row block is included.
-          
-          Hashtable
-          
-            Hashtable
-            
-          
-          None
-        
-      
-      
-        Invoke-OfficeExcelTemplateOptionalRow
-        
-          CultureName
-          
-            Culture name used for built-in marker format aliases such as currency and date.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Document
-          
-            Workbook to update outside the DSL context.
-          
-          ExcelDocument
-          
-            ExcelDocument
-            
-          
-          None
-        
-        
-          FirstRow
-          
-            1-based first row in the optional block.
-          
-          Int32
-          
-            Int32
+            
+          
+          None
+        
+        
+          Remove
+          
+            Removes the optional row block instead of keeping and binding it.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          RowCount
+          
+            Number of rows in the optional block.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          Sheet
+          
+            Worksheet name. Defaults to the current sheet inside an ExcelSheet block.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          SheetIndex
+          
+            Worksheet index when using a workbook object or path.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          ThrowOnMissing
+          
+            Throws when a marker in the optional block is not supplied by -Value.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Value
+          
+            Template marker values used when the optional row block is included.
+          
+          Hashtable
+          
+            Hashtable
+            
+          
+          None
+        
+      
+      
+        Invoke-OfficeExcelTemplateOptionalRow
+        
+          CultureName
+          
+            Culture name used for built-in marker format aliases such as currency and date.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Document
+          
+            Workbook to update outside the DSL context.
+          
+          ExcelDocument
+          
+            ExcelDocument
+            
+          
+          None
+        
+        
+          FirstRow
+          
+            1-based first row in the optional block.
+          
+          Int32
+          
+            Int32
             
           
           None
@@ -128175,18 +131432,6 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MissingValueBehavior
         
@@ -128216,6 +131461,18 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Remove
         
@@ -128465,18 +131722,6 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MissingValueBehavior
           
@@ -128506,6 +131751,18 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Sheet
           
@@ -128709,18 +131966,6 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MissingValueBehavior
         
@@ -128750,6 +131995,18 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Sheet
         
@@ -128956,18 +132213,6 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Item
           
@@ -129009,6 +132254,18 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           SheetNameProperty
           
@@ -129176,18 +132433,6 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Item
         
@@ -129229,6 +132474,18 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         SheetNameProperty
         
@@ -129850,18 +133107,6 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
-          
-            Target workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MatchColumnsByHeader
           
@@ -129898,6 +133143,18 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
+        
+          Path
+          
+            Target workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           SourceDocument
           
@@ -130228,18 +133485,6 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
-        
-          Target workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MatchColumnsByHeader
         
@@ -130276,6 +133521,18 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
+      
+        Path
+        
+          Target workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         SourceDocument
         
@@ -130451,8 +133708,8 @@ the script needs to work with list objects directly instead of using a text sear
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Target workbook path to create or update.
           
@@ -130655,8 +133912,8 @@ the script needs to work with list objects directly instead of using a text sear
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Target workbook path to create or update.
         
@@ -131210,14 +134467,14 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
-        
-          InputPath
+        
+          Open
           
-            Base document path.
+            Open the saved output with the shell.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
@@ -131246,14 +134503,14 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
-        
-          Show
+        
+          Path
           
-            Open the saved output with the shell.
+            Base document path.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -131285,34 +134542,34 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
-        
-          OutputPath
+        
+          Open
           
-            Optional output path. When omitted for path input, the base document is updated in place.
+            Open the saved output with the shell.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PassThru
+          OutputPath
           
-            Emit the merged Word document instead of disposing it.
+            Optional output path. When omitted for path input, the base document is updated in place.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
         
-          Show
+          PassThru
           
-            Open the saved output with the shell.
+            Emit the merged Word document instead of disposing it.
           
           SwitchParameter
           
@@ -131348,14 +134605,14 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        InputPath
+      
+        Open
         
-          Base document path.
+          Open the saved output with the shell.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
@@ -131384,14 +134641,14 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        Show
+      
+        Path
         
-          Open the saved output with the shell.
+          Base document path.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -131525,26 +134782,26 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Emit the moved worksheet.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit the moved worksheet.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -131663,26 +134920,26 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Emit the moved worksheet.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit the moved worksheet.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -131808,6 +135065,18 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -131883,6 +135152,18 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -132520,161 +135801,295 @@ This does not discover, bypass, or crack a missing password.
   
   
     
-      New-OfficeExcel
+      New-OfficeEmailMailboxReaderOptions
       New
-      OfficeExcel
+      OfficeEmailMailboxReaderOptions
       
-        Creates a new Excel workbook using the DSL.
+        Creates bounded mbox reader settings through ordinary PowerShell parameters.
       
     
     
-      Runs the provided script block inside an ExcelSheet/ExcelCell DSL context and saves the file.
+      Creates bounded mbox reader settings through ordinary PowerShell parameters.
     
     
       
-        New-OfficeExcel
-        
-          ApplicationName
-          
-            Workbook application-name metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Author
-          
-            Workbook author metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          AutoSave
-          
-            Opt into OfficeIMO automatic saves during operations.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
+        New-OfficeEmailMailboxReaderOptions
         
-          Category
-          
-            Workbook category metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          ClearCachedFormulaResults
+          MaxMailboxBytes
           
-            Remove cached formula results before saving.
+            Maximum aggregate source bytes consumed from one mailbox.
           
-          SwitchParameter
+          Int64
           
-            SwitchParameter
+            Int64
             
           
           None
         
         
-          Company
+          MaxMessageCount
           
-            Workbook company metadata.
+            Maximum messages in one mailbox.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
-        
-          Content
+        
+          MessageOptions
           
-            DSL scriptblock describing workbook content.
+            Bounded policy applied independently to each message.
           
-          ScriptBlock
+          EmailReaderOptions
           
-            ScriptBlock
+            EmailReaderOptions
             
           
           None
         
         
-          DateSystem
+          Variant
           
-            Workbook date system for Excel date serials.
+            Escaping convention to decode.
           
-          String
+          MboxVariant
           
-            1900
-            1904
-            NineteenHundred
-            NineteenFour
+            Auto
+            Mboxo
+            Mboxrd
           
           
-            String
-            
-          
-          None
-        
-        
-          Description
-          
-            Workbook description metadata.
-          
-          String
-          
-            String
+            MboxVariant
             
           
           None
         
-        
-          DisableFastPackageWriter
+      
+    
+    
+      
+        MaxMailboxBytes
+        
+          Maximum aggregate source bytes consumed from one mailbox.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxMessageCount
+        
+          Maximum messages in one mailbox.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MessageOptions
+        
+          Bounded policy applied independently to each message.
+        
+        EmailReaderOptions
+        
+          EmailReaderOptions
+          
+        
+        None
+      
+      
+        Variant
+        
+          Escaping convention to decode.
+        
+        MboxVariant
+        
+          Auto
+          Mboxo
+          Mboxrd
+        
+        
+          MboxVariant
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.Email.EmailReaderOptions
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Email.EmailMailboxReaderOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Read a bounded mailbox with a reusable per-message policy.
+        
+          PS> 
+        
+        $messageOptions = New-OfficeEmailReaderOptions -ExcludeAttachmentContent
+            $options = New-OfficeEmailMailboxReaderOptions -MessageOptions $messageOptions -MaxMessageCount 5000
+            Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeEmailMailboxWriterOptions
+      New
+      OfficeEmailMailboxWriterOptions
+      
+        Creates deterministic mbox writer settings through ordinary PowerShell parameters.
+      
+    
+    
+      Creates deterministic mbox writer settings through ordinary PowerShell parameters.
+    
+    
+      
+        New-OfficeEmailMailboxWriterOptions
+        
+          MessageOptions
           
-            Disable OfficeIMO fast package writers for this save.
+            Serialization policy applied independently to each message.
           
-          SwitchParameter
+          EmailWriterOptions
           
-            SwitchParameter
+            EmailWriterOptions
             
           
           None
         
         
-          DocumentTitle
+          Variant
           
-            Workbook document title metadata.
+            Concrete mbox escaping convention to write.
           
-          String
+          MboxVariant
+          
+            Auto
+            Mboxo
+            Mboxrd
+          
           
-            String
+            MboxVariant
             
           
           None
         
+      
+    
+    
+      
+        MessageOptions
+        
+          Serialization policy applied independently to each message.
+        
+        EmailWriterOptions
+        
+          EmailWriterOptions
+          
+        
+        None
+      
+      
+        Variant
+        
+          Concrete mbox escaping convention to write.
+        
+        MboxVariant
+        
+          Auto
+          Mboxo
+          Mboxrd
+        
+        
+          MboxVariant
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.Email.EmailWriterOptions
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Email.EmailMailboxWriterOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Write an mboxo mailbox with a reusable per-message policy.
+        
+          PS> 
+        
+        $messageOptions = New-OfficeEmailWriterOptions -IncludeBccHeader
+            $options = New-OfficeEmailMailboxWriterOptions -MessageOptions $messageOptions -Variant Mboxo
+            $mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeEmailReaderOptions
+      New
+      OfficeEmailReaderOptions
+      
+        Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters.
+      
+    
+    
+      Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters.
+    
+    
+      
+        New-OfficeEmailReaderOptions
         
-          EvaluateFormulas
+          ExcludeAttachmentContent
           
-            Evaluate supported formulas and write cached values before saving.
+            Do not retain decoded attachment payloads in memory.
           
           SwitchParameter
           
@@ -132683,190 +136098,166 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
-        
-          FilePath
-          
-            Destination path for the workbook.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
-          ForceFullCalculationOnOpen
+          MaxAttachmentBytes
           
-            Request a full workbook recalculation when opened in Excel-compatible applications.
+            Maximum decoded bytes for one attachment.
           
-          SwitchParameter
+          Int64
           
-            SwitchParameter
+            Int64
             
           
           None
         
         
-          Keywords
+          MaxAttachmentCount
           
-            Workbook keyword metadata.
+            Maximum aggregate attachment count.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          LastModifiedBy
+          MaxCompoundDirectoryEntries
           
-            Workbook last-modified-by metadata.
+            Maximum CFB directory entries accepted while reading MSG.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          Manager
+          MaxDecodedPropertyBytes
           
-            Workbook manager metadata.
+            Maximum aggregate bytes represented by decoded MSG property streams.
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          MarkFormulasDirty
+          MaxHeaderBytes
           
-            Mark formula cells dirty before saving.
+            Maximum bytes allowed in one MIME header section.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          NoSave
+          MaxHeaderCount
           
-            Skip saving the workbook after running the DSL.
+            Maximum number of header fields in one entity.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          Open
+          MaxInputBytes
           
-            Open the workbook in Excel after saving.
+            Maximum artifact size accepted by the reader.
           
-          SwitchParameter
+          Int64
           
-            SwitchParameter
+            Int64
             
           
           None
         
         
-          PassThru
+          MaxMapiPropertyCount
           
-            Emit a FileInfo for convenience.
+            Maximum aggregate MAPI properties across a message and embedded messages.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          Password
+          MaxMimeDepth
           
-            Password used to save the workbook as an encrypted package.
+            Maximum nested MIME depth.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          PdfPath
+          MaxNestedMessageDepth
           
-            Optional PDF path to create from the same workbook before closing it.
+            Maximum embedded-message recursion depth.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          SafePreflight
+          MaxPartCount
           
-            Run OfficeIMO worksheet preflight cleanup before saving.
+            Maximum MIME entity count.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          SafeRepairDefinedNames
+          MaxTnefAttributeCount
           
-            Repair common defined-name issues before saving.
+            Maximum number of TNEF attributes.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          Subject
-          
-            Workbook subject metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          TemplatePath
+          MaxTotalAttachmentBytes
           
-            Optional workbook template package copied before running the DSL.
+            Maximum aggregate decoded attachment bytes.
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          ValidateOpenXml
+          PreserveRawSource
           
-            Validate the saved package with OpenXmlValidator and throw on errors.
+            Retain original artifact bytes for an explicit lossless write.
           
           SwitchParameter
           
@@ -132879,147 +136270,9 @@ This does not discover, bypass, or crack a missing password.
     
     
       
-        ApplicationName
-        
-          Workbook application-name metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Author
-        
-          Workbook author metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        AutoSave
-        
-          Opt into OfficeIMO automatic saves during operations.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        Category
-        
-          Workbook category metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        ClearCachedFormulaResults
-        
-          Remove cached formula results before saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        Company
-        
-          Workbook company metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Content
-        
-          DSL scriptblock describing workbook content.
-        
-        ScriptBlock
-        
-          ScriptBlock
-          
-        
-        None
-      
-      
-        DateSystem
-        
-          Workbook date system for Excel date serials.
-        
-        String
-        
-          1900
-          1904
-          NineteenHundred
-          NineteenFour
-        
-        
-          String
-          
-        
-        None
-      
-      
-        Description
-        
-          Workbook description metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        DisableFastPackageWriter
-        
-          Disable OfficeIMO fast package writers for this save.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        DocumentTitle
-        
-          Workbook document title metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        EvaluateFormulas
+        ExcludeAttachmentContent
         
-          Evaluate supported formulas and write cached values before saving.
+          Do not retain decoded attachment payloads in memory.
         
         SwitchParameter
         
@@ -133028,190 +136281,166 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        FilePath
-        
-          Destination path for the workbook.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
-        ForceFullCalculationOnOpen
+        MaxAttachmentBytes
         
-          Request a full workbook recalculation when opened in Excel-compatible applications.
+          Maximum decoded bytes for one attachment.
         
-        SwitchParameter
+        Int64
         
-          SwitchParameter
+          Int64
           
         
         None
       
       
-        Keywords
+        MaxAttachmentCount
         
-          Workbook keyword metadata.
+          Maximum aggregate attachment count.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        LastModifiedBy
+        MaxCompoundDirectoryEntries
         
-          Workbook last-modified-by metadata.
+          Maximum CFB directory entries accepted while reading MSG.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        Manager
+        MaxDecodedPropertyBytes
         
-          Workbook manager metadata.
+          Maximum aggregate bytes represented by decoded MSG property streams.
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
       
-        MarkFormulasDirty
+        MaxHeaderBytes
         
-          Mark formula cells dirty before saving.
+          Maximum bytes allowed in one MIME header section.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        NoSave
+        MaxHeaderCount
         
-          Skip saving the workbook after running the DSL.
+          Maximum number of header fields in one entity.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        Open
+        MaxInputBytes
         
-          Open the workbook in Excel after saving.
+          Maximum artifact size accepted by the reader.
         
-        SwitchParameter
+        Int64
         
-          SwitchParameter
+          Int64
           
         
         None
       
       
-        PassThru
+        MaxMapiPropertyCount
         
-          Emit a FileInfo for convenience.
+          Maximum aggregate MAPI properties across a message and embedded messages.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        Password
+        MaxMimeDepth
         
-          Password used to save the workbook as an encrypted package.
+          Maximum nested MIME depth.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        PdfPath
+        MaxNestedMessageDepth
         
-          Optional PDF path to create from the same workbook before closing it.
+          Maximum embedded-message recursion depth.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        SafePreflight
+        MaxPartCount
         
-          Run OfficeIMO worksheet preflight cleanup before saving.
+          Maximum MIME entity count.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        SafeRepairDefinedNames
+        MaxTnefAttributeCount
         
-          Repair common defined-name issues before saving.
+          Maximum number of TNEF attributes.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        Subject
-        
-          Workbook subject metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        TemplatePath
+        MaxTotalAttachmentBytes
         
-          Optional workbook template package copied before running the DSL.
+          Maximum aggregate decoded attachment bytes.
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
       
-        ValidateOpenXml
+        PreserveRawSource
         
-          Validate the saved package with OpenXmlValidator and throw on errors.
+          Retain original artifact bytes for an explicit lossless write.
         
         SwitchParameter
         
@@ -133228,7 +136457,13 @@ This does not discover, bypass, or crack a missing password.
         
       
     
-    
+    
+      
+        
+          OfficeIMO.Email.EmailReaderOptions
+        
+      
+    
     
       
         
@@ -133236,27 +136471,14 @@ This does not discover, bypass, or crack a missing password.
     
     
       
-        Create a workbook with a sheet and a few cells.
-        
-          PS> 
-        
-        New-OfficeExcel -Path .\report.xlsx { ExcelSheet 'Data' { ExcelCell -Address 'A1' -Value 'Region' } }
-        
-          Creates report.xlsx and writes “Region” into cell A1 on the Data worksheet.
-        
-      
-      
-        Keep a workbook for incremental composition.
+        Read message diagnostics without retaining attachment payloads.
         
           PS> 
         
-        $workbook = New-OfficeExcel -Path .\report.xlsx -NoSave
-            $sheet = $workbook | Add-OfficeExcelSheet -Name 'Data' -PassThru
-            $sheet | Set-OfficeExcelCell -Address A1 -Value 'Region'
-            $workbook | Save-OfficeExcel
-            $workbook | Close-OfficeExcel
+        $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+            Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult
         
-          Associates the output path with a live workbook, changes a worksheet, then saves and closes it once.
+          
         
       
     
@@ -133264,89 +136486,23 @@ This does not discover, bypass, or crack a missing password.
   
   
     
-      New-OfficeExcelDashboard
+      New-OfficeEmailStoreReaderOptions
       New
-      OfficeExcelDashboard
+      OfficeEmailStoreReaderOptions
       
-        Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults.
+        Creates bounded email-store reader settings without requiring .NET constructor syntax.
       
     
     
-      Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults.
+      Creates bounded email-store reader settings without requiring .NET constructor syntax.
     
     
-      
-        New-OfficeExcelDashboard
-        
-          ChartColumn
-          
-            Top-left chart column.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          ChartPreset
-          
-            Dashboard chart preset.
-          
-          ExcelDashboardChartPreset
-          
-            Comparison
-            Trend
-            Contribution
-            CompactComparison
-          
-          
-            ExcelDashboardChartPreset
-            
-          
-          None
-        
-        
-          ChartRow
-          
-            Top-left chart row.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          ChartTitle
-          
-            Chart title. Defaults to Title when omitted.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          InputObject
-          
-            Rows to render in the dashboard table.
-          
-          Object
-          
-            Object
-            
-          
-          None
-        
+      
+        New-OfficeEmailStoreReaderOptions
         
-          NoAutoFilter
+          ExcludeAttachmentContent
           
-            Disable AutoFilter dropdowns on the generated table.
+            Do not retain decoded attachment payloads in memory.
           
           SwitchParameter
           
@@ -133356,9 +136512,9 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          NoAutoFit
+          IncludeAssociatedItems
           
-            Disable auto-fit for generated table columns.
+            Materialize folder-associated information items.
           
           SwitchParameter
           
@@ -133368,9 +136524,9 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          NoChart
+          IncludeOrphanedItems
           
-            Do not create a chart.
+            Recover item nodes absent from folder contents tables.
           
           SwitchParameter
           
@@ -133380,57 +136536,57 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          PassThru
+          MaxArchiveDecodedBytes
           
-            Emit dashboard build metadata.
+            Maximum total decoded size declared by archive entries.
           
-          SwitchParameter
+          Int64
           
-            SwitchParameter
+            Int64
             
           
           None
         
         
-          Subtitle
+          MaxArchiveEntries
           
-            Dashboard subtitle.
+            Maximum entries accepted from a compressed email-store archive.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          TableColumn
+          MaxArchiveEntryBytes
           
-            Top-left column for the generated table.
+            Maximum decoded size declared by one archive entry.
           
-          Int32
+          Int64
           
-            Int32
+            Int64
             
           
           None
         
         
-          TableName
+          MaxAttachmentBytes
           
-            Name for the generated table.
+            Maximum decoded bytes in one attachment.
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          TableRow
+          MaxAttachmentsPerItem
           
-            Top-left row for the generated table.
+            Maximum attachments per item.
           
           Int32
           
@@ -133440,66 +136596,57 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          TableStyle
+          MaxBTreeDepth
           
-            Built-in table style.
+            Maximum tree traversal depth.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          Title
+          MaxCachedBTreePages
           
-            Dashboard title.
+            Maximum PST/OST B-tree pages retained by the cache.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
-      
-      
-        New-OfficeExcelDashboard
         
-          ChartColumn
+          MaxDecodedPropertyBytesPerItem
           
-            Top-left chart column.
+            Maximum decoded property bytes per item.
           
-          Int32
+          Int64
           
-            Int32
+            Int64
             
           
           None
         
         
-          ChartPreset
+          MaxDecodedTableBytes
           
-            Dashboard chart preset.
+            Maximum decoded bytes traversed from one PST/OST table data tree.
           
-          ExcelDashboardChartPreset
-          
-            Comparison
-            Trend
-            Contribution
-            CompactComparison
-          
+          Int64
           
-            ExcelDashboardChartPreset
+            Int64
             
           
           None
         
         
-          ChartRow
+          MaxDirectoryDepth
           
-            Top-left chart row.
+            Maximum directory depth traversed by mailbox-directory sessions.
           
           Int32
           
@@ -133509,105 +136656,69 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          ChartTitle
-          
-            Chart title. Defaults to Title when omitted.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          InputObject
-          
-            Rows to render in the dashboard table.
-          
-          Object
-          
-            Object
-            
-          
-          None
-        
-        
-          InputPath
+          MaxDirectoryFileCount
           
-            Workbook path to update.
+            Maximum EML, EMLX, and Maildir files indexed by one directory session.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          NoAutoFilter
+          MaxFolderCount
           
-            Disable AutoFilter dropdowns on the generated table.
+            Maximum folders materialized.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          NoAutoFit
+          MaxInputBytes
           
-            Disable auto-fit for generated table columns.
+            Maximum seekable source length.
           
-          SwitchParameter
+          Int64
           
-            SwitchParameter
+            Int64
             
           
           None
         
         
-          NoChart
+          MaxItemCount
           
-            Do not create a chart.
+            Maximum items materialized.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          PassThru
-          
-            Emit dashboard build metadata.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Sheet
+          MaxMessageBytes
           
-            Worksheet name when using Path or Document.
+            Maximum RFC 5322/MIME message bytes accepted from one item.
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          SheetIndex
+          MaxNestedMessageDepth
           
-            Worksheet index (0-based) when using Path or Document.
+            Maximum embedded-message recursion depth.
           
           Int32
           
@@ -133617,21 +136728,21 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          Subtitle
+          MaxNodeCount
           
-            Dashboard subtitle.
+            Maximum NDB nodes and blocks visited.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          TableColumn
+          MaxPropertiesPerItem
           
-            Top-left column for the generated table.
+            Maximum MAPI properties decoded per item.
           
           Int32
           
@@ -133641,33 +136752,33 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          TableName
+          MaxTotalAttachmentBytes
           
-            Name for the generated table.
+            Maximum decoded attachment bytes across the read.
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          TableRow
+          MaxXmlCharactersPerItem
           
-            Top-left row for the generated table.
+            Maximum XML characters parsed from one archive item.
           
-          Int32
+          Int64
           
-            Int32
+            Int64
             
           
           None
         
         
-          TableStyle
+          PstPassword
           
-            Built-in table style.
+            Password used to validate legacy protected PST files.
           
           String
           
@@ -133677,234 +136788,9 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          Title
+          PstPasswordEncoding
           
-            Dashboard title.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-      
-      
-        New-OfficeExcelDashboard
-        
-          ChartColumn
-          
-            Top-left chart column.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          ChartPreset
-          
-            Dashboard chart preset.
-          
-          ExcelDashboardChartPreset
-          
-            Comparison
-            Trend
-            Contribution
-            CompactComparison
-          
-          
-            ExcelDashboardChartPreset
-            
-          
-          None
-        
-        
-          ChartRow
-          
-            Top-left chart row.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          ChartTitle
-          
-            Chart title. Defaults to Title when omitted.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Document
-          
-            Workbook to update outside the DSL context.
-          
-          ExcelDocument
-          
-            ExcelDocument
-            
-          
-          None
-        
-        
-          InputObject
-          
-            Rows to render in the dashboard table.
-          
-          Object
-          
-            Object
-            
-          
-          None
-        
-        
-          NoAutoFilter
-          
-            Disable AutoFilter dropdowns on the generated table.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          NoAutoFit
-          
-            Disable auto-fit for generated table columns.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          NoChart
-          
-            Do not create a chart.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          PassThru
-          
-            Emit dashboard build metadata.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Sheet
-          
-            Worksheet name when using Path or Document.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          SheetIndex
-          
-            Worksheet index (0-based) when using Path or Document.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          Subtitle
-          
-            Dashboard subtitle.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          TableColumn
-          
-            Top-left column for the generated table.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          TableName
-          
-            Name for the generated table.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          TableRow
-          
-            Top-left row for the generated table.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          TableStyle
-          
-            Built-in table style.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Title
-          
-            Dashboard title.
+            Encoding name used for the legacy PST password checksum.
           
           String
           
@@ -133917,39 +136803,57 @@ This does not discover, bypass, or crack a missing password.
     
     
       
-        ChartColumn
+        ExcludeAttachmentContent
         
-          Top-left chart column.
+          Do not retain decoded attachment payloads in memory.
         
-        Int32
+        SwitchParameter
         
-          Int32
+          SwitchParameter
           
         
         None
       
       
-        ChartPreset
+        IncludeAssociatedItems
         
-          Dashboard chart preset.
+          Materialize folder-associated information items.
         
-        ExcelDashboardChartPreset
-        
-          Comparison
-          Trend
-          Contribution
-          CompactComparison
-        
+        SwitchParameter
         
-          ExcelDashboardChartPreset
+          SwitchParameter
           
         
         None
       
       
-        ChartRow
+        IncludeOrphanedItems
         
-          Top-left chart row.
+          Recover item nodes absent from folder contents tables.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaxArchiveDecodedBytes
+        
+          Maximum total decoded size declared by archive entries.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxArchiveEntries
+        
+          Maximum entries accepted from a compressed email-store archive.
         
         Int32
         
@@ -133959,117 +136863,117 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        ChartTitle
+        MaxArchiveEntryBytes
         
-          Chart title. Defaults to Title when omitted.
+          Maximum decoded size declared by one archive entry.
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
-      
-        Document
+      
+        MaxAttachmentBytes
         
-          Workbook to update outside the DSL context.
+          Maximum decoded bytes in one attachment.
         
-        ExcelDocument
+        Int64
         
-          ExcelDocument
+          Int64
           
         
         None
       
-      
-        InputObject
+      
+        MaxAttachmentsPerItem
         
-          Rows to render in the dashboard table.
+          Maximum attachments per item.
         
-        Object
+        Int32
         
-          Object
+          Int32
           
         
         None
       
-      
-        InputPath
+      
+        MaxBTreeDepth
         
-          Workbook path to update.
+          Maximum tree traversal depth.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        NoAutoFilter
+        MaxCachedBTreePages
         
-          Disable AutoFilter dropdowns on the generated table.
+          Maximum PST/OST B-tree pages retained by the cache.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        NoAutoFit
+        MaxDecodedPropertyBytesPerItem
         
-          Disable auto-fit for generated table columns.
+          Maximum decoded property bytes per item.
         
-        SwitchParameter
+        Int64
         
-          SwitchParameter
+          Int64
           
         
         None
       
       
-        NoChart
+        MaxDecodedTableBytes
         
-          Do not create a chart.
+          Maximum decoded bytes traversed from one PST/OST table data tree.
         
-        SwitchParameter
+        Int64
         
-          SwitchParameter
+          Int64
           
         
         None
       
       
-        PassThru
+        MaxDirectoryDepth
         
-          Emit dashboard build metadata.
+          Maximum directory depth traversed by mailbox-directory sessions.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
-      
-        Sheet
+      
+        MaxDirectoryFileCount
         
-          Worksheet name when using Path or Document.
+          Maximum EML, EMLX, and Maildir files indexed by one directory session.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        SheetIndex
+        MaxFolderCount
         
-          Worksheet index (0-based) when using Path or Document.
+          Maximum folders materialized.
         
         Int32
         
@@ -134079,21 +136983,21 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        Subtitle
+        MaxInputBytes
         
-          Dashboard subtitle.
+          Maximum seekable source length.
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
       
-        TableColumn
+        MaxItemCount
         
-          Top-left column for the generated table.
+          Maximum items materialized.
         
         Int32
         
@@ -134103,21 +137007,21 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        TableName
+        MaxMessageBytes
         
-          Name for the generated table.
+          Maximum RFC 5322/MIME message bytes accepted from one item.
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
       
-        TableRow
+        MaxNestedMessageDepth
         
-          Top-left row for the generated table.
+          Maximum embedded-message recursion depth.
         
         Int32
         
@@ -134127,9 +137031,57 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        TableStyle
+        MaxNodeCount
         
-          Built-in table style.
+          Maximum NDB nodes and blocks visited.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxPropertiesPerItem
+        
+          Maximum MAPI properties decoded per item.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxTotalAttachmentBytes
+        
+          Maximum decoded attachment bytes across the read.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxXmlCharactersPerItem
+        
+          Maximum XML characters parsed from one archive item.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        PstPassword
+        
+          Password used to validate legacy protected PST files.
         
         String
         
@@ -134139,9 +137091,9 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        Title
+        PstPasswordEncoding
         
-          Dashboard title.
+          Encoding name used for the legacy PST password checksum.
         
         String
         
@@ -134154,14 +137106,14 @@ This does not discover, bypass, or crack a missing password.
     
       
         
-          System.Object
+          None
         
       
     
     
       
         
-          System.Management.Automation.PSObject
+          OfficeIMO.Email.Store.EmailStoreReaderOptions
         
       
     
@@ -134172,13 +137124,14 @@ This does not discover, bypass, or crack a missing password.
     
     
       
-        Create a dashboard table and chart.
+        Read an EMLX message without retaining attachment payloads.
         
           PS> 
         
-        $rows | New-OfficeExcelDashboard -Title 'Sales Dashboard' -TableName Sales -ChartPreset CompactComparison
+        $options = New-OfficeEmailStoreReaderOptions -ExcludeAttachmentContent -MaxAttachmentsPerItem 100
+            Get-OfficeEmail -Path .\Message.emlx -StoreOptions $options -AsResult
         
-          Writes a table and chart into the current Excel DSL worksheet.
+          
         
       
     
@@ -134186,100 +137139,88 @@ This does not discover, bypass, or crack a missing password.
   
   
     
-      New-OfficeMarkdown
+      New-OfficeEmailWriterOptions
       New
-      OfficeMarkdown
+      OfficeEmailWriterOptions
       
-        Creates a Markdown document using a DSL scriptblock.
+        Creates deterministic email writer settings through ordinary PowerShell parameters.
       
     
     
-      Runs the scriptblock against a Markdown document and saves it to disk unless -NoSave is specified.
+      Creates deterministic email writer settings through ordinary PowerShell parameters.
     
     
       
-        New-OfficeMarkdown
-        
-          Content
+        New-OfficeEmailWriterOptions
+        
+          Base64LineLength
           
-            DSL scriptblock describing Markdown content.
+            Maximum encoded characters on one Base64 body line.
           
-          ScriptBlock
+          Int32
           
-            ScriptBlock
+            Int32
             
           
           None
         
         
-          ImageRenderingMode
+          ConversionLossPolicy
           
-            Controls how Markdown images are serialized.
+            Policy applied when the requested format cannot preserve known message semantics.
           
-          MarkdownImageRenderingMode
+          EmailConversionLossPolicy
           
-            RichMarkdown
-            PortableMarkdown
-            Html
+            Block
+            Warn
+            Allow
           
           
-            MarkdownImageRenderingMode
+            EmailConversionLossPolicy
             
           
           None
         
         
-          LineEnding
+          IncludeBccHeader
           
-            Markdown line ending: CRLF, LF, CR, or a literal line ending string.
+            Write Bcc recipients into the message header.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          MarkdownPdfOptions
+          MaxNestedMessageDepth
           
-            Advanced Markdown PDF options. Friendly PDF parameters override matching values.
+            Maximum embedded-message write depth.
           
-          MarkdownPdfSaveOptions
+          Int32
           
-            MarkdownPdfSaveOptions
+            Int32
             
           
           None
         
         
-          NoSave
-          
-            Skip saving after executing the DSL.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          OutputPath
+          MaxOutputBytes
           
-            Destination path for the Markdown file.
+            Maximum serialized artifact size.
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          PassThru
+          UsePreservedRawSource
           
-            Emit a FileInfo for chaining.
+            Emit an unchanged preserved source instead of regenerating the artifact when possible.
           
           SwitchParameter
           
@@ -134288,22 +137229,152 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
+      
+    
+    
+      
+        Base64LineLength
+        
+          Maximum encoded characters on one Base64 body line.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        ConversionLossPolicy
+        
+          Policy applied when the requested format cannot preserve known message semantics.
+        
+        EmailConversionLossPolicy
+        
+          Block
+          Warn
+          Allow
+        
+        
+          EmailConversionLossPolicy
+          
+        
+        None
+      
+      
+        IncludeBccHeader
+        
+          Write Bcc recipients into the message header.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaxNestedMessageDepth
+        
+          Maximum embedded-message write depth.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxOutputBytes
+        
+          Maximum serialized artifact size.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        UsePreservedRawSource
+        
+          Emit an unchanged preserved source instead of regenerating the artifact when possible.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Email.EmailWriterOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Preserve the original source when possible and block semantic loss.
+        
+          PS> 
+        
+        $options = New-OfficeEmailWriterOptions -UsePreservedRawSource -ConversionLossPolicy Block
+            $message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeExcel
+      New
+      OfficeExcel
+      
+        Creates a new Excel workbook using the DSL.
+      
+    
+    
+      Runs the provided script block inside an ExcelSheet/ExcelCell DSL context and saves the file.
+    
+    
+      
+        New-OfficeExcel
         
-          PdfApplyWordLikeTheme
+          ApplicationName
           
-            Apply the built-in Word-like Markdown PDF baseline theme.
+            Workbook application-name metadata.
           
-          Boolean
+          String
           
-            Boolean
+            String
             
           
           None
         
         
-          PdfAuthor
+          Author
           
-            PDF author metadata.
+            Workbook author metadata.
           
           String
           
@@ -134313,9 +137384,9 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          PdfBaseDirectory
+          Category
           
-            Base directory used to resolve local Markdown images during PDF export.
+            Workbook category metadata.
           
           String
           
@@ -134325,57 +137396,63 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          PdfConversionReportVariable
+          ClearCachedFormulaResults
           
-            Variable name that receives the Markdown PDF conversion report.
+            Remove cached formula results before saving.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PdfCreateOutlineFromHeadings
+          Company
           
-            Create PDF outlines from Markdown headings.
+            Workbook company metadata.
           
-          Boolean
+          String
           
-            Boolean
+            String
             
           
           None
         
-        
-          PdfDefaultImageHeight
+        
+          Content
           
-            Fallback PDF image height in points.
+            DSL scriptblock describing workbook content.
           
-          Double
+          ScriptBlock
           
-            Double
+            ScriptBlock
             
           
           None
         
         
-          PdfDefaultImageWidth
+          DateSystem
           
-            Fallback PDF image width in points.
+            Workbook date system for Excel date serials.
           
-          Double
+          String
+          
+            1900
+            1904
+            NineteenHundred
+            NineteenFour
+          
           
-            Double
+            String
             
           
           None
         
         
-          PdfFontFamily
+          Description
           
-            Default font family used by Markdown PDF export.
+            Workbook description metadata.
           
           String
           
@@ -134385,86 +137462,81 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          PdfFrontMatterRenderMode
+          DisableFastPackageWriter
           
-            Controls how YAML front matter appears in the PDF body.
+            Disable OfficeIMO fast package writers for this save.
           
-          MarkdownPdfFrontMatterRenderMode
-          
-            Hidden
-            DocumentHeader
-            Table
-          
+          SwitchParameter
           
-            MarkdownPdfFrontMatterRenderMode
+            SwitchParameter
             
           
           None
         
         
-          PdfIncludeDataUriImages
+          DocumentTitle
           
-            Embed supported data URI images in Markdown PDF output.
+            Workbook document title metadata.
           
-          Boolean
+          String
           
-            Boolean
+            String
             
           
           None
         
         
-          PdfIncludeLocalImages
+          EvaluateFormulas
           
-            Embed supported local image files in Markdown PDF output.
+            Evaluate supported formulas and write cached values before saving.
           
-          Boolean
+          SwitchParameter
           
-            Boolean
+            SwitchParameter
             
           
           None
         
         
-          PdfKeywords
+          ForceFullCalculationOnOpen
           
-            PDF keywords metadata.
+            Request a full workbook recalculation when opened in Excel-compatible applications.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PdfMaximumDataUriImageBytes
+          Keywords
           
-            Maximum decoded bytes for one data URI image in Markdown PDF output.
+            Workbook keyword metadata.
           
-          Int32
+          String
           
-            Int32
+            String
             
           
           None
         
         
-          PdfOptions
+          LastModifiedBy
           
-            Underlying OfficeIMO.Pdf options used by Markdown PDF export.
+            Workbook last-modified-by metadata.
           
-          PdfOptions
+          String
           
-            PdfOptions
+            String
             
           
           None
         
         
-          PdfPath
+          Manager
           
-            Optional PDF path to create from the same Markdown document.
+            Workbook manager metadata.
           
           String
           
@@ -134474,113 +137546,105 @@ This does not discover, bypass, or crack a missing password.
           None
         
         
-          PdfRestrictLocalImagesToBaseDirectory
+          MarkFormulasDirty
           
-            Require local images to resolve under the base directory.
+            Mark formula cells dirty before saving.
           
-          Boolean
+          SwitchParameter
           
-            Boolean
+            SwitchParameter
             
           
           None
         
         
-          PdfSubject
+          NoSave
           
-            PDF subject metadata.
+            Skip saving the workbook after running the DSL.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PdfTheme
+          Open
           
-            Built-in Markdown PDF visual theme.
+            Open the workbook in Excel after saving.
           
-          OfficeVisualThemeKind
-          
-            Plain
-            WordLike
-            TechnicalDocument
-            GitHubLike
-            Compact
-            Report
-          
+          SwitchParameter
           
-            OfficeVisualThemeKind
+            SwitchParameter
             
           
           None
         
         
-          PdfTitle
+          PassThru
           
-            PDF title metadata.
+            Emit a FileInfo for convenience.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PdfUseFirstHeadingAsTitle
+          Password
           
-            Use the first Markdown heading as the PDF title when no title is supplied.
+            Password used to save the workbook as an encrypted package.
           
-          Boolean
+          String
           
-            Boolean
+            String
             
           
           None
         
-        
-          PdfUseFrontMatterMetadata
+        
+          Path
           
-            Use front matter values as PDF metadata.
+            Destination path for the workbook.
           
-          Boolean
+          String
           
-            Boolean
+            String
             
           
           None
         
         
-          PdfUseFrontMatterVisualTheme
+          SafePreflight
           
-            Use front matter values to select a visual theme.
+            Run OfficeIMO worksheet preflight cleanup before saving.
           
-          Boolean
+          SwitchParameter
           
-            Boolean
+            SwitchParameter
             
           
           None
         
         
-          PdfWarningVariable
+          SafeRepairDefinedNames
           
-            Variable name that receives Markdown PDF export warnings.
+            Repair common defined-name issues before saving.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          UnorderedListMarker
+          Subject
           
-            Unordered list marker: '-', '*', or '+'.
+            Workbook subject metadata.
           
           String
           
@@ -134589,31 +137653,26 @@ This does not discover, bypass, or crack a missing password.
           
           None
         
-        
-          WriteOptions
+        
+          TemplatePath
           
-            Optional Markdown writer options.
+            Optional workbook template package copied before running the DSL.
           
-          MarkdownWriteOptions
+          String
           
-            MarkdownWriteOptions
+            String
             
           
           None
         
         
-          WriteProfile
+          ValidateOpenXml
           
-            Friendly Markdown writer profile.
+            Validate the saved package with OpenXmlValidator and throw on errors.
           
-          OfficeMarkdownWriteProfile
-          
-            OfficeIMO
-            Portable
-            HtmlImage
-          
+          SwitchParameter
           
-            OfficeMarkdownWriteProfile
+            SwitchParameter
             
           
           None
@@ -134621,39 +137680,10 @@ This does not discover, bypass, or crack a missing password.
       
     
     
-      
-        Content
-        
-          DSL scriptblock describing Markdown content.
-        
-        ScriptBlock
-        
-          ScriptBlock
-          
-        
-        None
-      
-      
-        ImageRenderingMode
-        
-          Controls how Markdown images are serialized.
-        
-        MarkdownImageRenderingMode
-        
-          RichMarkdown
-          PortableMarkdown
-          Html
-        
-        
-          MarkdownImageRenderingMode
-          
-        
-        None
-      
       
-        LineEnding
+        ApplicationName
         
-          Markdown line ending: CRLF, LF, CR, or a literal line ending string.
+          Workbook application-name metadata.
         
         String
         
@@ -134663,35 +137693,23 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        MarkdownPdfOptions
+        Author
         
-          Advanced Markdown PDF options. Friendly PDF parameters override matching values.
+          Workbook author metadata.
         
-        MarkdownPdfSaveOptions
+        String
         
-          MarkdownPdfSaveOptions
+          String
           
         
         None
       
       
-        NoSave
-        
-          Skip saving after executing the DSL.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        OutputPath
+        Category
         
-          Destination path for the Markdown file.
+          Workbook category metadata.
         
-        String
+        String
         
           String
           
@@ -134699,9 +137717,9 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        PassThru
+        ClearCachedFormulaResults
         
-          Emit a FileInfo for chaining.
+          Remove cached formula results before saving.
         
         SwitchParameter
         
@@ -134711,21 +137729,9 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        PdfApplyWordLikeTheme
-        
-          Apply the built-in Word-like Markdown PDF baseline theme.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfAuthor
+        Company
         
-          PDF author metadata.
+          Workbook company metadata.
         
         String
         
@@ -134734,24 +137740,30 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        PdfBaseDirectory
+      
+        Content
         
-          Base directory used to resolve local Markdown images during PDF export.
+          DSL scriptblock describing workbook content.
         
-        String
+        ScriptBlock
         
-          String
+          ScriptBlock
           
         
         None
       
       
-        PdfConversionReportVariable
+        DateSystem
         
-          Variable name that receives the Markdown PDF conversion report.
+          Workbook date system for Excel date serials.
         
         String
+        
+          1900
+          1904
+          NineteenHundred
+          NineteenFour
+        
         
           String
           
@@ -134759,45 +137771,33 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        PdfCreateOutlineFromHeadings
-        
-          Create PDF outlines from Markdown headings.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfDefaultImageHeight
+        Description
         
-          Fallback PDF image height in points.
+          Workbook description metadata.
         
-        Double
+        String
         
-          Double
+          String
           
         
         None
       
       
-        PdfDefaultImageWidth
+        DisableFastPackageWriter
         
-          Fallback PDF image width in points.
+          Disable OfficeIMO fast package writers for this save.
         
-        Double
+        SwitchParameter
         
-          Double
+          SwitchParameter
           
         
         None
       
       
-        PdfFontFamily
+        DocumentTitle
         
-          Default font family used by Markdown PDF export.
+          Workbook document title metadata.
         
         String
         
@@ -134807,50 +137807,33 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        PdfFrontMatterRenderMode
-        
-          Controls how YAML front matter appears in the PDF body.
-        
-        MarkdownPdfFrontMatterRenderMode
-        
-          Hidden
-          DocumentHeader
-          Table
-        
-        
-          MarkdownPdfFrontMatterRenderMode
-          
-        
-        None
-      
-      
-        PdfIncludeDataUriImages
+        EvaluateFormulas
         
-          Embed supported data URI images in Markdown PDF output.
+          Evaluate supported formulas and write cached values before saving.
         
-        Boolean
+        SwitchParameter
         
-          Boolean
+          SwitchParameter
           
         
         None
       
       
-        PdfIncludeLocalImages
+        ForceFullCalculationOnOpen
         
-          Embed supported local image files in Markdown PDF output.
+          Request a full workbook recalculation when opened in Excel-compatible applications.
         
-        Boolean
+        SwitchParameter
         
-          Boolean
+          SwitchParameter
           
         
         None
       
       
-        PdfKeywords
+        Keywords
         
-          PDF keywords metadata.
+          Workbook keyword metadata.
         
         String
         
@@ -134860,89 +137843,81 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        PdfMaximumDataUriImageBytes
+        LastModifiedBy
         
-          Maximum decoded bytes for one data URI image in Markdown PDF output.
+          Workbook last-modified-by metadata.
         
-        Int32
+        String
         
-          Int32
+          String
           
         
         None
       
       
-        PdfOptions
+        Manager
         
-          Underlying OfficeIMO.Pdf options used by Markdown PDF export.
+          Workbook manager metadata.
         
-        PdfOptions
+        String
         
-          PdfOptions
+          String
           
         
         None
       
       
-        PdfPath
+        MarkFormulasDirty
         
-          Optional PDF path to create from the same Markdown document.
+          Mark formula cells dirty before saving.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        PdfRestrictLocalImagesToBaseDirectory
+        NoSave
         
-          Require local images to resolve under the base directory.
+          Skip saving the workbook after running the DSL.
         
-        Boolean
+        SwitchParameter
         
-          Boolean
+          SwitchParameter
           
         
         None
       
       
-        PdfSubject
+        Open
         
-          PDF subject metadata.
+          Open the workbook in Excel after saving.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        PdfTheme
+        PassThru
         
-          Built-in Markdown PDF visual theme.
+          Emit a FileInfo for convenience.
         
-        OfficeVisualThemeKind
-        
-          Plain
-          WordLike
-          TechnicalDocument
-          GitHubLike
-          Compact
-          Report
-        
+        SwitchParameter
         
-          OfficeVisualThemeKind
+          SwitchParameter
           
         
         None
       
       
-        PdfTitle
+        Password
         
-          PDF title metadata.
+          Password used to save the workbook as an encrypted package.
         
         String
         
@@ -134951,46 +137926,46 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        PdfUseFirstHeadingAsTitle
+      
+        Path
         
-          Use the first Markdown heading as the PDF title when no title is supplied.
+          Destination path for the workbook.
         
-        Boolean
+        String
         
-          Boolean
+          String
           
         
         None
       
       
-        PdfUseFrontMatterMetadata
+        SafePreflight
         
-          Use front matter values as PDF metadata.
+          Run OfficeIMO worksheet preflight cleanup before saving.
         
-        Boolean
+        SwitchParameter
         
-          Boolean
+          SwitchParameter
           
         
         None
       
       
-        PdfUseFrontMatterVisualTheme
+        SafeRepairDefinedNames
         
-          Use front matter values to select a visual theme.
+          Repair common defined-name issues before saving.
         
-        Boolean
+        SwitchParameter
         
-          Boolean
+          SwitchParameter
           
         
         None
       
       
-        PdfWarningVariable
+        Subject
         
-          Variable name that receives Markdown PDF export warnings.
+          Workbook subject metadata.
         
         String
         
@@ -134999,10 +137974,10 @@ This does not discover, bypass, or crack a missing password.
         
         None
       
-      
-        UnorderedListMarker
+      
+        TemplatePath
         
-          Unordered list marker: '-', '*', or '+'.
+          Optional workbook template package copied before running the DSL.
         
         String
         
@@ -135012,30 +137987,13 @@ This does not discover, bypass, or crack a missing password.
         None
       
       
-        WriteOptions
-        
-          Optional Markdown writer options.
-        
-        MarkdownWriteOptions
-        
-          MarkdownWriteOptions
-          
-        
-        None
-      
-      
-        WriteProfile
+        ValidateOpenXml
         
-          Friendly Markdown writer profile.
+          Validate the saved package with OpenXmlValidator and throw on errors.
         
-        OfficeMarkdownWriteProfile
-        
-          OfficeIMO
-          Portable
-          HtmlImage
-        
+        SwitchParameter
         
-          OfficeMarkdownWriteProfile
+          SwitchParameter
           
         
         None
@@ -135048,18 +138006,7 @@ This does not discover, bypass, or crack a missing password.
         
       
     
-    
-      
-        
-          System.IO.FileInfo
-        
-      
-      
-        
-          OfficeIMO.Markdown.MarkdownDoc
-        
-      
-    
+    
     
       
         
@@ -135067,28 +138014,27 @@ This does not discover, bypass, or crack a missing password.
     
     
       
-        Create a Markdown document with headings and a table.
+        Create a workbook with a sheet and a few cells.
         
           PS> 
         
-        New-OfficeMarkdown -Path .\README.md { MarkdownHeading -Level 1 -Text 'Report'; MarkdownTable -InputObject $data }
+        New-OfficeExcel -Path .\report.xlsx { ExcelSheet 'Data' { ExcelCell -Address 'A1' -Value 'Region' } }
         
-          Creates a README file with a heading and table content.
+          Creates report.xlsx and writes “Region” into cell A1 on the Data worksheet.
         
       
       
-        Create a report with multiple tables.
+        Keep a workbook for incremental composition.
         
           PS> 
         
-        New-OfficeMarkdown -Path .\Report.md {
-                MarkdownHeading -Level 1 -Text 'Summary'
-                MarkdownTable -InputObject $summary
-                MarkdownHeading -Level 2 -Text 'Details'
-                MarkdownTable -InputObject $details
-              }
+        $workbook = New-OfficeExcel -Path .\report.xlsx -NoSave
+            $sheet = $workbook | Add-OfficeExcelSheet -Name 'Data' -PassThru
+            $sheet | Set-OfficeExcelCell -Address A1 -Value 'Region'
+            $workbook | Save-OfficeExcel
+            $workbook | Close-OfficeExcel
         
-          Creates a report with two tables separated by headings.
+          Associates the output path with a live workbook, changes a worksheet, then saves and closes it once.
         
       
     
@@ -135096,145 +138042,65 @@ This does not discover, bypass, or crack a missing password.
   
   
     
-      New-OfficeOpenDocument
+      New-OfficeExcelDashboard
       New
-      OfficeOpenDocument
+      OfficeExcelDashboard
       
-        Creates a native ODT, ODS, or ODP document.
+        Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults.
       
     
     
-      Creates a native ODT, ODS, or ODP document.
+      Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults.
     
     
-      
-        New-OfficeOpenDocument
-        
-          Kind
+      
+        New-OfficeExcelDashboard
+        
+          ChartColumn
           
-            OpenDocument text, spreadsheet, or presentation kind.
+            Top-left chart column.
           
-          OdfDocumentKind
-          
-            Text
-            Spreadsheet
-            Presentation
-          
+          Int32
           
-            OdfDocumentKind
+            Int32
             
           
           None
         
-        
-          Path
+        
+          ChartPreset
           
-            Optional initial destination path.
+            Dashboard chart preset.
           
-          String
+          ExcelDashboardChartPreset
+          
+            Comparison
+            Trend
+            Contribution
+            CompactComparison
+          
           
-            String
+            ExcelDashboardChartPreset
             
           
           None
         
-      
-    
-    
-      
-        Kind
-        
-          OpenDocument text, spreadsheet, or presentation kind.
-        
-        OdfDocumentKind
-        
-          Text
-          Spreadsheet
-          Presentation
-        
-        
-          OdfDocumentKind
-          
-        
-        None
-      
-      
-        Path
-        
-          Optional initial destination path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-    
-    
-      
-        
-          None
-        
-      
-    
-    
-      
-        
-          OfficeIMO.OpenDocument.OdfDocument
-        
-      
-    
-    
-      
-        
-      
-    
-    
-      
-        EXAMPLE 1
-        New-OfficeOpenDocument -Path 'C:\Path'
-        
-          
-        
-      
-    
-    
-  
-  
-    
-      New-OfficePdf
-      New
-      OfficePdf
-      
-        Creates a PDF document using the OfficeIMO.Pdf composition engine.
-      
-    
-    
-      New-OfficePdf starts a generated PDF document and optionally executes a PSWriteOffice PDF DSL script block.
-The DSL commands are thin adapters over OfficeIMO.Pdf and support document metadata, page setup, headers, footers,
-themes, styled text, tables, panels, row layouts, form fields, attachments, compliance settings, and save/open behavior.
-Use -NoSave or omit -Path when a document object should be returned for further pipeline operations.
-    
-    
-      
-        New-OfficePdf
         
-          BoldFontPath
+          ChartRow
           
-            Optional bold TrueType font path used when -FontFamily is provided.
+            Top-left chart row.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          BoldItalicFontPath
+          ChartTitle
           
-            Optional bold italic TrueType font path used when -FontFamily is provided.
+            Chart title. Defaults to Title when omitted.
           
           String
           
@@ -135243,34 +138109,22 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          CenterWindow
-          
-            Request PDF viewers to center the document window on screen.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Content
+        
+          InputObject
           
-            DSL script block describing generated PDF content.
+            Rows to render in the dashboard table.
           
-          ScriptBlock
+          Object
           
-            ScriptBlock
+            Object
             
           
           None
         
         
-          CreateOutlineFromHeadings
+          NoAutoFilter
           
-            Create PDF outline/bookmark entries from heading elements.
+            Disable AutoFilter dropdowns on the generated table.
           
           SwitchParameter
           
@@ -135280,47 +138134,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          DefaultFont
-          
-            Default standard PDF font for generated text.
-          
-          PdfStandardFont
-          
-            Helvetica
-            HelveticaOblique
-            HelveticaBold
-            HelveticaBoldOblique
-            TimesRoman
-            TimesItalic
-            TimesBold
-            TimesBoldItalic
-            Courier
-            CourierOblique
-            CourierBold
-            CourierBoldOblique
-          
-          
-            PdfStandardFont
-            
-          
-          None
-        
-        
-          DefaultFontSize
-          
-            Default generated text font size in points.
-          
-          Double
-          
-            Double
-            
-          
-          None
-        
-        
-          DisplayDocTitle
+          NoAutoFit
           
-            Request PDF viewers to display the document title instead of the file name.
+            Disable auto-fit for generated table columns.
           
           SwitchParameter
           
@@ -135330,28 +138146,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          FileVersion
-          
-            PDF file header version emitted by OfficeIMO.Pdf.
-          
-          PdfFileVersion
-          
-            Pdf14
-            Pdf15
-            Pdf16
-            Pdf17
-            Pdf20
-          
-          
-            PdfFileVersion
-            
-          
-          None
-        
-        
-          FitWindow
+          NoChart
           
-            Request PDF viewers to fit the document window to the first displayed page.
+            Do not create a chart.
           
           SwitchParameter
           
@@ -135361,9 +138158,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          FlattenVisualAnnotations
+          PassThru
           
-            Flatten generated FreeText and Highlight annotations into static page content.
+            Emit dashboard build metadata.
           
           SwitchParameter
           
@@ -135373,9 +138170,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          FontFamily
+          Subtitle
           
-            Embedded TrueType font family name for generated text.
+            Dashboard subtitle.
           
           String
           
@@ -135385,57 +138182,57 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          HideMenubar
+          TableColumn
           
-            Request PDF viewers to hide the menu bar.
+            Top-left column for the generated table.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          HideToolbar
+          TableName
           
-            Request PDF viewers to hide the toolbar.
+            Name for the generated table.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
         
-          HideWindowUI
+          TableRow
           
-            Request PDF viewers to hide user-interface elements.
+            Top-left row for the generated table.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          IncludePageLabels
+          TableStyle
           
-            Emit generated catalog page labels.
+            Built-in table style.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
         
-          ItalicFontPath
+          Title
           
-            Optional italic TrueType font path used when -FontFamily is provided.
+            Dashboard title.
           
           String
           
@@ -135444,44 +138241,43 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+      
+      
+        New-OfficeExcelDashboard
         
-          NoSave
+          ChartColumn
           
-            Skip saving even when -Path is provided.
+            Top-left chart column.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          OpenActionMode
+          ChartPreset
           
-            Open-action destination mode.
+            Dashboard chart preset.
           
-          PdfOpenActionDestinationMode
+          ExcelDashboardChartPreset
           
-            Xyz
-            Fit
-            FitHorizontal
-            FitVertical
-            FitRectangle
-            FitBoundingBox
-            FitBoundingBoxHorizontal
-            FitBoundingBoxVertical
+            Comparison
+            Trend
+            Contribution
+            CompactComparison
           
           
-            PdfOpenActionDestinationMode
+            ExcelDashboardChartPreset
             
           
           None
         
         
-          OpenActionPage
+          ChartRow
           
-            Initial one-based page shown by PDF viewers that honor open actions.
+            Top-left chart row.
           
           Int32
           
@@ -135491,89 +138287,61 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          OpenActionTop
-          
-            Optional open-action top coordinate.
-          
-          Double
-          
-            Double
-            
-          
-          None
-        
-        
-          OutlineExpansionLevel
+          ChartTitle
           
-            Initial outline expansion level when heading outlines are created.
+            Chart title. Defaults to Title when omitted.
           
-          Int32
+          String
           
-            Int32
+            String
             
           
           None
         
-        
-          OwnerPassword
+        
+          InputObject
           
-            Optional owner password for the generated encrypted PDF.
+            Rows to render in the dashboard table.
           
-          String
+          Object
           
-            String
+            Object
             
           
           None
         
         
-          PageLabelPrefix
+          NoAutoFilter
           
-            Optional generated page-label prefix.
+            Disable AutoFilter dropdowns on the generated table.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PageLayout
+          NoAutoFit
           
-            Catalog page layout hint emitted for generated PDFs.
+            Disable auto-fit for generated table columns.
           
-          PdfCatalogPageLayout
-          
-            SinglePage
-            OneColumn
-            TwoColumnLeft
-            TwoColumnRight
-            TwoPageLeft
-            TwoPageRight
-          
+          SwitchParameter
           
-            PdfCatalogPageLayout
+            SwitchParameter
             
           
           None
         
         
-          PageMode
+          NoChart
           
-            Catalog page mode hint emitted for generated PDFs.
+            Do not create a chart.
           
-          PdfCatalogPageMode
-          
-            UseNone
-            UseOutlines
-            UseThumbs
-            FullScreen
-            UseOC
-            UseAttachments
-          
+          SwitchParameter
           
-            PdfCatalogPageMode
+            SwitchParameter
             
           
           None
@@ -135581,7 +138349,7 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
           PassThru
           
-            Emit the generated document or saved file for chaining.
+            Emit dashboard build metadata.
           
           SwitchParameter
           
@@ -135590,22 +138358,22 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Password
+        
+          Path
           
-            Password required to open the generated PDF.
+            Workbook path to update.
           
-          String
+          String
           
             String
             
           
           None
         
-        
-          Path
+        
+          Sheet
           
-            Optional destination PDF path.
+            Worksheet name when using Path or Document.
           
           String
           
@@ -135614,10 +138382,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Permission
+        
+          SheetIndex
           
-            Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations.
+            Worksheet index (0-based) when using Path or Document.
           
           Int32
           
@@ -135626,10 +138394,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          RegularFontPath
+        
+          Subtitle
           
-            Regular TrueType font path used when -FontFamily is provided.
+            Dashboard subtitle.
           
           String
           
@@ -135639,54 +138407,45 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Show
+          TableColumn
           
-            Open the PDF after saving.
+            Top-left column for the generated table.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          Theme
+          TableName
           
-            Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
+            Name for the generated table.
           
-          OfficePdfThemePreset
-          
-            WordLike
-            TechnicalDocument
-            Compact
-            Report
-          
+          String
           
-            OfficePdfThemePreset
+            String
             
           
           None
         
-      
-      
-        New-OfficePdf
         
-          BoldFontPath
+          TableRow
           
-            Optional bold TrueType font path used when -FontFamily is provided.
+            Top-left row for the generated table.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          BoldItalicFontPath
+          TableStyle
           
-            Optional bold italic TrueType font path used when -FontFamily is provided.
+            Built-in table style.
           
           String
           
@@ -135696,150 +138455,102 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          CenterWindow
-          
-            Request PDF viewers to center the document window on screen.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Content
+          Title
           
-            DSL script block describing generated PDF content.
+            Dashboard title.
           
-          ScriptBlock
+          String
           
-            ScriptBlock
+            String
             
           
           None
         
+      
+      
+        New-OfficeExcelDashboard
         
-          CreateOutlineFromHeadings
+          ChartColumn
           
-            Create PDF outline/bookmark entries from heading elements.
+            Top-left chart column.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          DefaultFont
+          ChartPreset
           
-            Default standard PDF font for generated text.
+            Dashboard chart preset.
           
-          PdfStandardFont
+          ExcelDashboardChartPreset
           
-            Helvetica
-            HelveticaOblique
-            HelveticaBold
-            HelveticaBoldOblique
-            TimesRoman
-            TimesItalic
-            TimesBold
-            TimesBoldItalic
-            Courier
-            CourierOblique
-            CourierBold
-            CourierBoldOblique
+            Comparison
+            Trend
+            Contribution
+            CompactComparison
           
           
-            PdfStandardFont
-            
-          
-          None
-        
-        
-          DefaultFontSize
-          
-            Default generated text font size in points.
-          
-          Double
-          
-            Double
-            
-          
-          None
-        
-        
-          DisplayDocTitle
-          
-            Request PDF viewers to display the document title instead of the file name.
-          
-          SwitchParameter
-          
-            SwitchParameter
+            ExcelDashboardChartPreset
             
           
           None
         
         
-          FileVersion
+          ChartRow
           
-            PDF file header version emitted by OfficeIMO.Pdf.
+            Top-left chart row.
           
-          PdfFileVersion
-          
-            Pdf14
-            Pdf15
-            Pdf16
-            Pdf17
-            Pdf20
-          
+          Int32
           
-            PdfFileVersion
+            Int32
             
           
           None
         
         
-          FitWindow
+          ChartTitle
           
-            Request PDF viewers to fit the document window to the first displayed page.
+            Chart title. Defaults to Title when omitted.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
-        
-          FlattenVisualAnnotations
+        
+          Document
           
-            Flatten generated FreeText and Highlight annotations into static page content.
+            Workbook to update outside the DSL context.
           
-          SwitchParameter
+          ExcelDocument
           
-            SwitchParameter
+            ExcelDocument
             
           
           None
         
-        
-          FontFamily
+        
+          InputObject
           
-            Embedded TrueType font family name for generated text.
+            Rows to render in the dashboard table.
           
-          String
+          Object
           
-            String
+            Object
             
           
           None
         
         
-          HideMenubar
+          NoAutoFilter
           
-            Request PDF viewers to hide the menu bar.
+            Disable AutoFilter dropdowns on the generated table.
           
           SwitchParameter
           
@@ -135849,9 +138560,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          HideToolbar
+          NoAutoFit
           
-            Request PDF viewers to hide the toolbar.
+            Disable auto-fit for generated table columns.
           
           SwitchParameter
           
@@ -135861,9 +138572,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          HideWindowUI
+          NoChart
           
-            Request PDF viewers to hide user-interface elements.
+            Do not create a chart.
           
           SwitchParameter
           
@@ -135873,9 +138584,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          IncludePageLabels
+          PassThru
           
-            Emit generated catalog page labels.
+            Emit dashboard build metadata.
           
           SwitchParameter
           
@@ -135884,10 +138595,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          ItalicFontPath
+        
+          Sheet
           
-            Optional italic TrueType font path used when -FontFamily is provided.
+            Worksheet name when using Path or Document.
           
           String
           
@@ -135897,43 +138608,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          NoSave
-          
-            Skip saving even when -Path is provided.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          OpenActionMode
-          
-            Open-action destination mode.
-          
-          PdfOpenActionDestinationMode
-          
-            Xyz
-            Fit
-            FitHorizontal
-            FitVertical
-            FitRectangle
-            FitBoundingBox
-            FitBoundingBoxHorizontal
-            FitBoundingBoxVertical
-          
-          
-            PdfOpenActionDestinationMode
-            
-          
-          None
-        
-        
-          OpenActionPage
+          SheetIndex
           
-            Initial one-based page shown by PDF viewers that honor open actions.
+            Worksheet index (0-based) when using Path or Document.
           
           Int32
           
@@ -135943,21 +138620,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          OpenActionTop
+          Subtitle
           
-            Optional open-action top coordinate.
+            Dashboard subtitle.
           
-          Double
+          String
           
-            Double
+            String
             
           
           None
         
         
-          OutlineExpansionLevel
+          TableColumn
           
-            Initial outline expansion level when heading outlines are created.
+            Top-left column for the generated table.
           
           Int32
           
@@ -135967,21 +138644,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          OwnerPassword
-          
-            Optional owner password for the generated encrypted PDF.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PageLabelPrefix
+          TableName
           
-            Optional generated page-label prefix.
+            Name for the generated table.
           
           String
           
@@ -135991,73 +138656,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PageLayout
-          
-            Catalog page layout hint emitted for generated PDFs.
-          
-          PdfCatalogPageLayout
-          
-            SinglePage
-            OneColumn
-            TwoColumnLeft
-            TwoColumnRight
-            TwoPageLeft
-            TwoPageRight
-          
-          
-            PdfCatalogPageLayout
-            
-          
-          None
-        
-        
-          PageMode
-          
-            Catalog page mode hint emitted for generated PDFs.
-          
-          PdfCatalogPageMode
-          
-            UseNone
-            UseOutlines
-            UseThumbs
-            FullScreen
-            UseOC
-            UseAttachments
-          
-          
-            PdfCatalogPageMode
-            
-          
-          None
-        
-        
-          PassThru
-          
-            Emit the generated document or saved file for chaining.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Password
-          
-            Password required to open the generated PDF.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Permission
+          TableRow
           
-            Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations.
+            Top-left row for the generated table.
           
           Int32
           
@@ -136066,10 +138667,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          RegularFontPath
+        
+          TableStyle
           
-            Regular TrueType font path used when -FontFamily is provided.
+            Built-in table style.
           
           String
           
@@ -136079,31 +138680,13 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Show
-          
-            Open the PDF after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Theme
+          Title
           
-            Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
+            Dashboard title.
           
-          OfficePdfThemePreset
-          
-            WordLike
-            TechnicalDocument
-            Compact
-            Report
-          
+          String
           
-            OfficePdfThemePreset
+            String
             
           
           None
@@ -136112,150 +138695,87 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        BoldFontPath
-        
-          Optional bold TrueType font path used when -FontFamily is provided.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        BoldItalicFontPath
-        
-          Optional bold italic TrueType font path used when -FontFamily is provided.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        CenterWindow
-        
-          Request PDF viewers to center the document window on screen.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        Content
-        
-          DSL script block describing generated PDF content.
-        
-        ScriptBlock
-        
-          ScriptBlock
-          
-        
-        None
-      
-      
-        CreateOutlineFromHeadings
+        ChartColumn
         
-          Create PDF outline/bookmark entries from heading elements.
+          Top-left chart column.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        DefaultFont
+        ChartPreset
         
-          Default standard PDF font for generated text.
+          Dashboard chart preset.
         
-        PdfStandardFont
+        ExcelDashboardChartPreset
         
-          Helvetica
-          HelveticaOblique
-          HelveticaBold
-          HelveticaBoldOblique
-          TimesRoman
-          TimesItalic
-          TimesBold
-          TimesBoldItalic
-          Courier
-          CourierOblique
-          CourierBold
-          CourierBoldOblique
+          Comparison
+          Trend
+          Contribution
+          CompactComparison
         
         
-          PdfStandardFont
+          ExcelDashboardChartPreset
           
         
         None
       
       
-        DefaultFontSize
+        ChartRow
         
-          Default generated text font size in points.
+          Top-left chart row.
         
-        Double
+        Int32
         
-          Double
+          Int32
           
         
         None
       
       
-        DisplayDocTitle
+        ChartTitle
         
-          Request PDF viewers to display the document title instead of the file name.
+          Chart title. Defaults to Title when omitted.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
-      
-        FileVersion
+      
+        Document
         
-          PDF file header version emitted by OfficeIMO.Pdf.
+          Workbook to update outside the DSL context.
         
-        PdfFileVersion
-        
-          Pdf14
-          Pdf15
-          Pdf16
-          Pdf17
-          Pdf20
-        
+        ExcelDocument
         
-          PdfFileVersion
+          ExcelDocument
           
         
         None
       
-      
-        FitWindow
+      
+        InputObject
         
-          Request PDF viewers to fit the document window to the first displayed page.
+          Rows to render in the dashboard table.
         
-        SwitchParameter
+        Object
         
-          SwitchParameter
+          Object
           
         
         None
       
       
-        FlattenVisualAnnotations
+        NoAutoFilter
         
-          Flatten generated FreeText and Highlight annotations into static page content.
+          Disable AutoFilter dropdowns on the generated table.
         
         SwitchParameter
         
@@ -136265,21 +138785,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        FontFamily
-        
-          Embedded TrueType font family name for generated text.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        HideMenubar
+        NoAutoFit
         
-          Request PDF viewers to hide the menu bar.
+          Disable auto-fit for generated table columns.
         
         SwitchParameter
         
@@ -136289,9 +138797,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        HideToolbar
+        NoChart
         
-          Request PDF viewers to hide the toolbar.
+          Do not create a chart.
         
         SwitchParameter
         
@@ -136301,9 +138809,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        HideWindowUI
+        PassThru
         
-          Request PDF viewers to hide user-interface elements.
+          Emit dashboard build metadata.
         
         SwitchParameter
         
@@ -136312,22 +138820,22 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        IncludePageLabels
+      
+        Path
         
-          Emit generated catalog page labels.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
-      
-        ItalicFontPath
+      
+        Sheet
         
-          Optional italic TrueType font path used when -FontFamily is provided.
+          Worksheet name when using Path or Document.
         
         String
         
@@ -136337,43 +138845,33 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        NoSave
+        SheetIndex
         
-          Skip saving even when -Path is provided.
+          Worksheet index (0-based) when using Path or Document.
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        OpenActionMode
+        Subtitle
         
-          Open-action destination mode.
+          Dashboard subtitle.
         
-        PdfOpenActionDestinationMode
-        
-          Xyz
-          Fit
-          FitHorizontal
-          FitVertical
-          FitRectangle
-          FitBoundingBox
-          FitBoundingBoxHorizontal
-          FitBoundingBoxVertical
-        
+        String
         
-          PdfOpenActionDestinationMode
+          String
           
         
         None
       
       
-        OpenActionPage
+        TableColumn
         
-          Initial one-based page shown by PDF viewers that honor open actions.
+          Top-left column for the generated table.
         
         Int32
         
@@ -136383,21 +138881,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        OpenActionTop
+        TableName
         
-          Optional open-action top coordinate.
+          Name for the generated table.
         
-        Double
+        String
         
-          Double
+          String
           
         
         None
       
       
-        OutlineExpansionLevel
+        TableRow
         
-          Initial outline expansion level when heading outlines are created.
+          Top-left row for the generated table.
         
         Int32
         
@@ -136407,9 +138905,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        OwnerPassword
+        TableStyle
         
-          Optional owner password for the generated encrypted PDF.
+          Built-in table style.
         
         String
         
@@ -136419,9 +138917,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        PageLabelPrefix
+        Title
         
-          Optional generated page-label prefix.
+          Dashboard title.
         
         String
         
@@ -136430,153 +138928,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        PageLayout
-        
-          Catalog page layout hint emitted for generated PDFs.
-        
-        PdfCatalogPageLayout
-        
-          SinglePage
-          OneColumn
-          TwoColumnLeft
-          TwoColumnRight
-          TwoPageLeft
-          TwoPageRight
-        
-        
-          PdfCatalogPageLayout
-          
-        
-        None
-      
-      
-        PageMode
-        
-          Catalog page mode hint emitted for generated PDFs.
-        
-        PdfCatalogPageMode
-        
-          UseNone
-          UseOutlines
-          UseThumbs
-          FullScreen
-          UseOC
-          UseAttachments
-        
+    
+    
+      
         
-          PdfCatalogPageMode
-          
+          System.Object
         
-        None
-      
-      
-        PassThru
-        
-          Emit the generated document or saved file for chaining.
-        
-        SwitchParameter
+      
+    
+    
+      
         
-          SwitchParameter
-          
-        
-        None
-      
-      
-        Password
-        
-          Password required to open the generated PDF.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Path
-        
-          Optional destination PDF path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Permission
-        
-          Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations.
-        
-        Int32
-        
-          Int32
-          
-        
-        None
-      
-      
-        RegularFontPath
-        
-          Regular TrueType font path used when -FontFamily is provided.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Show
-        
-          Open the PDF after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
-      
-        Theme
-        
-          Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
-        
-        OfficePdfThemePreset
-        
-          WordLike
-          TechnicalDocument
-          Compact
-          Report
-        
-        
-          OfficePdfThemePreset
-          
-        
-        None
-      
-    
-    
-      
-        
-          None
-        
-      
-    
-    
-      
-        
-          OfficeIMO.Pdf.PdfDocument
-        
-      
-      
-        
-          System.IO.FileInfo
+          System.Management.Automation.PSObject
         
       
     
@@ -136587,39 +138950,13 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Create a PDF report.
-        
-          PS> 
-        
-        New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Show
-        
-          Builds a PDF and opens it after saving.
-        
-      
-      
-        Create a polished report with theme, metadata, and layout.
+        Create a dashboard table and chart.
         
           PS> 
         
-        New-OfficePdf -Path .\ServiceReview.pdf {
-                PdfTheme Report
-                PdfMetadata -Title 'Service Review' -Author 'PSWriteOffice'
-                PdfPageSetup -PageSize A4 -Margin 42
-                PdfHeader 'Service Review'
-                PdfFooter 'Page {page}/{pages}'
-                PdfHeading 'Service Review'
-                PdfText -Run @(
-                  @{ Text = 'Generated with ' }
-                  @{ Text = 'rich inline text'; Bold = $true; Color = '#0F766E' }
-                  @{ Text = ' and OfficeIMO.Pdf layout.' }
-                )
-                PdfRow -Column @(
-                  @{ Width = 40; Content = @(@{ Type = 'Panel'; Text = 'Left summary' }) }
-                  @{ Width = 60; Content = @(@{ Type = 'Paragraph'; Text = 'Right details' }) }
-                )
-              }
+        $rows | New-OfficeExcelDashboard -Title 'Sales Dashboard' -TableName Sales -ChartPreset CompactComparison
         
-          Shows the preferred high-level PDF report authoring shape.
+          Writes a table and chart into the current Excel DSL worksheet.
         
       
     
@@ -136627,23 +138964,23 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficePdfSignature
+      New-OfficeExcelImageOptions
       New
-      OfficePdfSignature
+      OfficeExcelImageOptions
       
-        Prepares an existing PDF for external digital signing by appending a signature field, /ByteRange, and reserved /Contents placeholder.
+        Creates discoverable rendering settings for Excel range and chart image export.
       
     
     
-      The command does not create CMS, CAdES, timestamp, certificate-chain, or revocation data. Use the returned byte range or digest with an external signing service, then inject the produced signature bytes with Set-OfficePdfSignature.
+      Creates discoverable rendering settings for Excel range and chart image export.
     
     
       
-        New-OfficePdfSignature
+        New-OfficeExcelImageOptions
         
-          ContactInfo
+          BackgroundColor
           
-            Signer contact information stored in the signature dictionary.
+            
           
           String
           
@@ -136653,33 +138990,33 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          FieldName
+          IncludeCharts
           
-            Signature field name to append.
+            Include worksheet charts.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Filter
+          IncludeConditionalFormatting
           
-            Signature handler filter name. The default is Adobe.PPKLite.
+            Include conditional formatting.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          IgnorePermissionRestrictions
+          IncludeDrawingObjects
           
-            After successful password authentication, explicitly ignore owner-imposed signature-field restrictions.
+            Include drawing objects.
           
           SwitchParameter
           
@@ -136689,93 +139026,93 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Location
+          IncludeHidden
           
-            Signing location stored in the signature dictionary.
+            Include hidden rows and columns.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Name
+          IncludeImages
           
-            Display signer name stored in the signature dictionary.
+            Include worksheet images.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          OutputPath
+        
+          MaximumDegreeOfParallelism
           
-            Output prepared PDF path.
+            
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          PassThruReport
+          MaximumOutputCount
           
-            Return the OfficeIMO.Pdf preparation report instead of only the output file.
+            
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          Password
+          MaximumOutputHeight
           
-            Password used to authenticate an encrypted PDF.
+            
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
-        
-          Path
+        
+          MaximumOutputWidth
           
-            Input PDF path.
+            
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          Reason
+          MaximumRasterPixels
           
-            Signing reason stored in the signature dictionary.
+            
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
         
-          ReservedBytes
+          MaximumRenderedCells
           
-            Raw signature bytes to reserve in /Contents before hex encoding.
+            Maximum cells rendered.
           
           Int32
           
@@ -136785,18 +139122,125 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          SubFilter
+          MaximumTotalEncodedBytes
           
-            Signature subfilter that describes the external signature bytes to inject later.
+            
           
-          PdfExternalSignatureSubFilter
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          RasterOverflowBehavior
+          
+            
+          
+          OfficeRasterOverflowBehavior
           
-            DetachedCms
-            CadesDetached
-            DocumentTimestamp
+            ReduceScale
+            Throw
           
           
-            PdfExternalSignatureSubFilter
+            OfficeRasterOverflowBehavior
+            
+          
+          None
+        
+        
+          RenderTimeoutSeconds
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Scale
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          ShowCommentBodies
+          
+            Show cell comment bodies.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ShowGridlines
+          
+            Show worksheet gridlines.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ShowHyperlinkHints
+          
+            Show hyperlink hints.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          TargetDpi
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TextShapingLanguage
+          
+            
+          
+          String
+          
+            String
             
           
           None
@@ -136805,9 +139249,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        ContactInfo
+        BackgroundColor
         
-          Signer contact information stored in the signature dictionary.
+          
         
         String
         
@@ -136817,33 +139261,33 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        FieldName
+        IncludeCharts
         
-          Signature field name to append.
+          Include worksheet charts.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Filter
+        IncludeConditionalFormatting
         
-          Signature handler filter name. The default is Adobe.PPKLite.
+          Include conditional formatting.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        IgnorePermissionRestrictions
+        IncludeDrawingObjects
         
-          After successful password authentication, explicitly ignore owner-imposed signature-field restrictions.
+          Include drawing objects.
         
         SwitchParameter
         
@@ -136853,93 +139297,93 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Location
+        IncludeHidden
         
-          Signing location stored in the signature dictionary.
+          Include hidden rows and columns.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Name
+        IncludeImages
         
-          Display signer name stored in the signature dictionary.
+          Include worksheet images.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        OutputPath
+      
+        MaximumDegreeOfParallelism
         
-          Output prepared PDF path.
+          
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        PassThruReport
+        MaximumOutputCount
         
-          Return the OfficeIMO.Pdf preparation report instead of only the output file.
+          
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
       
-        Password
+        MaximumOutputHeight
         
-          Password used to authenticate an encrypted PDF.
+          
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
-      
-        Path
+      
+        MaximumOutputWidth
         
-          Input PDF path.
+          
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        Reason
+        MaximumRasterPixels
         
-          Signing reason stored in the signature dictionary.
+          
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
       
-        ReservedBytes
+        MaximumRenderedCells
         
-          Raw signature bytes to reserve in /Contents before hex encoding.
+          Maximum cells rendered.
         
         Int32
         
@@ -136949,18 +139393,125 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        SubFilter
+        MaximumTotalEncodedBytes
         
-          Signature subfilter that describes the external signature bytes to inject later.
+          
         
-        PdfExternalSignatureSubFilter
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        RasterOverflowBehavior
+        
+          
+        
+        OfficeRasterOverflowBehavior
         
-          DetachedCms
-          CadesDetached
-          DocumentTimestamp
+          ReduceScale
+          Throw
         
         
-          PdfExternalSignatureSubFilter
+          OfficeRasterOverflowBehavior
+          
+        
+        None
+      
+      
+        RenderTimeoutSeconds
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Scale
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        ShowCommentBodies
+        
+          Show cell comment bodies.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ShowGridlines
+        
+          Show worksheet gridlines.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ShowHyperlinkHints
+        
+          Show hyperlink hints.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        TargetDpi
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TextShapingLanguage
+        
+          
+        
+        String
+        
+          String
           
         
         None
@@ -136969,19 +139520,208 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          System.String
+          None
         
       
     
     
       
         
-          System.IO.FileInfo
+          OfficeIMO.Excel.ExcelImageExportOptions
         
       
+    
+    
+      
+        
+      
+    
+    
+      
+        Render a range with gridlines and hyperlinks visible.
+        
+          PS> 
+        
+        $options = New-OfficeExcelImageOptions -ShowGridlines -ShowHyperlinkHints -TargetDpi 144
+            Export-OfficeExcelRangeImage -Path .\Workbook.xlsx -Worksheet Summary -Range A1:H20 -OutputPath .\Summary.svg -Options $options
+        
+          
+        
+      
+      
+        Reuse the same rendering controls for a chart.
+        
+          PS> 
+        
+        $options = New-OfficeExcelImageOptions -TargetDpi 144 -MaximumOutputWidth 1600
+            Export-OfficeExcelChartImage -Path .\Workbook.xlsx -Worksheet Summary -ChartName Revenue -OutputPath .\Revenue.svg -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeExcelOpenDocumentOptions
+      New
+      OfficeExcelOpenDocumentOptions
+      
+        Creates Excel/OpenDocument conversion settings.
+      
+    
+    
+      Creates Excel/OpenDocument conversion settings.
+    
+    
+      
+        New-OfficeExcelOpenDocumentOptions
+        
+          IncludeBasicStyles
+          
+            Copy common font, fill, and number-format styles.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          LossPolicy
+          
+            Whether conversion loss is reported or rejected.
+          
+          OdfConversionLossPolicy
+          
+            ReportOnly
+            ThrowOnSkippedOrUnsupported
+            ThrowOnAnyLoss
+          
+          
+            OdfConversionLossPolicy
+            
+          
+          None
+        
+        
+          MaximumColumns
+          
+            Maximum spreadsheet columns.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumExpandedCells
+          
+            Maximum cells materialized during conversion.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumRows
+          
+            Maximum spreadsheet rows.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+      
+    
+    
+      
+        IncludeBasicStyles
+        
+          Copy common font, fill, and number-format styles.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        LossPolicy
+        
+          Whether conversion loss is reported or rejected.
+        
+        OdfConversionLossPolicy
+        
+          ReportOnly
+          ThrowOnSkippedOrUnsupported
+          ThrowOnAnyLoss
+        
+        
+          OdfConversionLossPolicy
+          
+        
+        None
+      
+      
+        MaximumColumns
+        
+          Maximum spreadsheet columns.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumExpandedCells
+        
+          Maximum cells materialized during conversion.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumRows
+        
+          Maximum spreadsheet rows.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
       
         
-          OfficeIMO.Pdf.PdfExternalSignaturePreparation
+          OfficeIMO.Excel.OpenDocument.ExcelOpenDocumentConversionOptions
         
       
     
@@ -136992,15 +139732,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Prepare a PDF for detached CMS signing.
+        Convert a bounded worksheet area with basic styles.
         
           PS> 
         
-        $plan = New-OfficePdfSignature -Path .\Input.pdf -OutputPath .\Prepared.pdf -FieldName Approval -Name 'Alice' -Reason Approval -PassThruReport
-            $plan.ByteRangeValues
-            $plan.ComputeSha256Digest()
+        $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumRows 10000 -MaximumColumns 100
+            ConvertTo-OfficeOpenDocument -Path .\Data.xlsx -OutputPath .\Data.ods -ExcelOptions $options
         
-          Writes a prepared PDF and returns the OfficeIMO.Pdf external signing preparation report.
+          
         
       
     
@@ -137008,40 +139747,35 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficePdfTableCell
+      New-OfficeExcelPdfOptions
       New
-      OfficePdfTableCell
+      OfficeExcelPdfOptions
       
-        Creates a reusable PDF table cell definition for explicit table rows.
+        Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf.
       
     
     
-      Creates a reusable PDF table cell definition for explicit table rows.
+      Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf.
     
     
       
-        New-OfficePdfTableCell
+        New-OfficeExcelPdfOptions
         
-          Align
+          AllowDocumentFontEmbedding
           
-            Horizontal cell alignment.
+            Allow embedding fonts stored in the workbook.
           
-          PdfColumnAlign
-          
-            Left
-            Center
-            Right
-          
+          SwitchParameter
           
-            PdfColumnAlign
+            SwitchParameter
             
           
           None
         
         
-          Bold
+          AllowSystemFontEmbedding
           
-            Render the cell text in bold.
+            Allow embedding fonts discovered on the current system.
           
           SwitchParameter
           
@@ -137050,34 +139784,34 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          CheckBox
+        
+          ChartLayout
           
-            Typed check boxes rendered inside the cell.
+            Chart layout override.
           
-          PdfTableCellCheckBox[]
+          OfficeChartLayout
           
-            PdfTableCellCheckBox[]
+            OfficeChartLayout
             
           
           None
         
         
-          ColumnSpan
+          ChartStyle
           
-            Number of logical columns covered by the cell.
+            Chart visual style override.
           
-          Int32
+          OfficeChartStyle
           
-            Int32
+            OfficeChartStyle
             
           
           None
         
-        
-          FillColor
+        
+          EmptyCellText
           
-            Cell fill color. Named colors and hexadecimal colors are accepted.
+            Text used when a worksheet cell is empty.
           
           String
           
@@ -137087,9 +139821,45 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          FontSize
+          FontFamily
           
-            Cell font size in PDF points.
+            Default font family used when the workbook does not specify one.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          HeaderRowCount
+          
+            Number of leading rows treated as headers.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          IncludeSheetHeadings
+          
+            Include worksheet row and column headings.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MarginBottom
+          
+            Bottom page margin in PDF points.
           
           Double
           
@@ -137098,34 +139868,82 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          FormField
+        
+          MarginLeft
           
-            Typed text or choice form fields rendered inside the cell.
+            Left page margin in PDF points.
           
-          PdfTableCellFormField[]
+          Double
           
-            PdfTableCellFormField[]
+            Double
             
           
           None
         
-        
-          Image
+        
+          MarginRight
           
-            Typed images rendered inside the cell.
+            Right page margin in PDF points.
           
-          PdfTableCellImage[]
+          Double
           
-            PdfTableCellImage[]
+            Double
             
           
           None
         
         
-          Italic
+          MarginTop
           
-            Render the cell text in italics.
+            Top page margin in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          MaxRowsPerSheet
+          
+            Maximum worksheet rows to read and render.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PageSize
+          
+            PDF page size.
+          
+          PageSize
+          
+            PageSize
+            
+          
+          None
+        
+        
+          PdfOptions
+          
+            Underlying low-level OfficeIMO PDF options.
+          
+          PdfOptions
+          
+            PdfOptions
+            
+          
+          None
+        
+        
+          RespectWorkbookSheetVisibility
+          
+            Exclude workbook sheets marked hidden.
           
           SwitchParameter
           
@@ -137135,57 +139953,69 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          LinkContents
+          RespectWorksheetHiddenRowsAndColumns
           
-            Accessible annotation text for the cell link.
+            Exclude hidden worksheet rows and columns.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
+            
+          
+          None
+        
+        
+          SheetName
+          
+            Worksheet names to export. The default exports all eligible sheets.
+          
+          String[]
+          
+            String[]
             
           
           None
         
         
-          LinkDestinationName
+          UseBoundedWorksheetRead
           
-            Named PDF destination linked from the cell.
+            Use bounded worksheet reads for large workbooks.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          LinkUri
+          UseWorksheetCellStyles
           
-            Absolute or catalog-base-relative URI linked from the cell.
+            Render worksheet cell styles.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          NamedDestinationName
+          UseWorksheetCharts
           
-            Named PDF destination defined at this cell.
+            Render worksheet charts.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          NoWrap
+          UseWorksheetColumnWidths
           
-            Keep the cell content on one visual line.
+            Honor worksheet column widths.
           
           SwitchParameter
           
@@ -137195,33 +140025,33 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          RowSpan
+          UseWorksheetHeaderFooterImages
           
-            Number of logical rows covered by the cell.
+            Render images referenced by worksheet headers and footers.
           
-          Int32
+          SwitchParameter
           
-            Int32
+            SwitchParameter
             
           
           None
         
-        
-          Run
+        
+          UseWorksheetHeadersAndFooters
           
-            Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object.
+            Render worksheet headers and footers.
           
-          Object[]
+          SwitchParameter
           
-            Object[]
+            SwitchParameter
             
           
           None
         
         
-          Strike
+          UseWorksheetHyperlinks
           
-            Render the cell text with strikethrough.
+            Render worksheet hyperlinks.
           
           SwitchParameter
           
@@ -137230,34 +140060,34 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Text
+        
+          UseWorksheetImages
           
-            Cell text.
+            Render worksheet images.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          TextColor
+        
+          UseWorksheetMergedCells
           
-            Cell text color. Named colors and hexadecimal colors are accepted.
+            Render merged worksheet cells.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Underline
+          UseWorksheetPageBreaks
           
-            Render the cell text with underline.
+            Honor worksheet page breaks.
           
           SwitchParameter
           
@@ -137267,30 +140097,65 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          UnderlineStyle
+          UseWorksheetPageSetup
           
-            Optional underline style name. PDF table rendering treats any supported value as underline.
+            Honor worksheet page setup.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          VerticalAlign
+          UseWorksheetPrintAreas
           
-            Vertical cell alignment.
+            Honor worksheet print areas.
           
-          PdfCellVerticalAlign
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          UseWorksheetPrintTitleRows
+          
+            Honor worksheet rows configured to repeat on printed pages.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          UseWorksheetRowHeights
+          
+            Honor worksheet row heights.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          WorksheetLayout
+          
+            Controls how worksheet content is laid out on PDF pages.
+          
+          ExcelPdfWorksheetLayoutMode
           
-            Top
-            Middle
-            Bottom
+            WorksheetCanvas
+            FlowTable
           
           
-            PdfCellVerticalAlign
+            ExcelPdfWorksheetLayoutMode
             
           
           None
@@ -137299,26 +140164,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Align
+        AllowDocumentFontEmbedding
         
-          Horizontal cell alignment.
+          Allow embedding fonts stored in the workbook.
         
-        PdfColumnAlign
-        
-          Left
-          Center
-          Right
-        
+        SwitchParameter
         
-          PdfColumnAlign
+          SwitchParameter
           
         
         None
       
       
-        Bold
+        AllowSystemFontEmbedding
         
-          Render the cell text in bold.
+          Allow embedding fonts discovered on the current system.
         
         SwitchParameter
         
@@ -137327,34 +140187,34 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        CheckBox
+      
+        ChartLayout
         
-          Typed check boxes rendered inside the cell.
+          Chart layout override.
         
-        PdfTableCellCheckBox[]
+        OfficeChartLayout
         
-          PdfTableCellCheckBox[]
+          OfficeChartLayout
           
         
         None
       
       
-        ColumnSpan
+        ChartStyle
         
-          Number of logical columns covered by the cell.
+          Chart visual style override.
         
-        Int32
+        OfficeChartStyle
         
-          Int32
+          OfficeChartStyle
           
         
         None
       
-      
-        FillColor
+      
+        EmptyCellText
         
-          Cell fill color. Named colors and hexadecimal colors are accepted.
+          Text used when a worksheet cell is empty.
         
         String
         
@@ -137364,141 +140224,141 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        FontSize
+        FontFamily
         
-          Cell font size in PDF points.
+          Default font family used when the workbook does not specify one.
         
-        Double
+        String
         
-          Double
+          String
           
         
         None
       
-      
-        FormField
+      
+        HeaderRowCount
         
-          Typed text or choice form fields rendered inside the cell.
+          Number of leading rows treated as headers.
         
-        PdfTableCellFormField[]
+        Int32
         
-          PdfTableCellFormField[]
+          Int32
           
         
         None
       
-      
-        Image
+      
+        IncludeSheetHeadings
         
-          Typed images rendered inside the cell.
+          Include worksheet row and column headings.
         
-        PdfTableCellImage[]
+        SwitchParameter
         
-          PdfTableCellImage[]
+          SwitchParameter
           
         
         None
       
       
-        Italic
+        MarginBottom
         
-          Render the cell text in italics.
+          Bottom page margin in PDF points.
         
-        SwitchParameter
+        Double
         
-          SwitchParameter
+          Double
           
         
         None
       
       
-        LinkContents
+        MarginLeft
         
-          Accessible annotation text for the cell link.
+          Left page margin in PDF points.
         
-        String
+        Double
         
-          String
+          Double
           
         
         None
       
       
-        LinkDestinationName
+        MarginRight
         
-          Named PDF destination linked from the cell.
+          Right page margin in PDF points.
         
-        String
+        Double
         
-          String
+          Double
           
         
         None
       
       
-        LinkUri
+        MarginTop
         
-          Absolute or catalog-base-relative URI linked from the cell.
+          Top page margin in PDF points.
         
-        String
+        Double
         
-          String
+          Double
           
         
         None
       
       
-        NamedDestinationName
+        MaxRowsPerSheet
         
-          Named PDF destination defined at this cell.
+          Maximum worksheet rows to read and render.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        NoWrap
+        PageSize
         
-          Keep the cell content on one visual line.
+          PDF page size.
         
-        SwitchParameter
+        PageSize
         
-          SwitchParameter
+          PageSize
           
         
         None
       
       
-        RowSpan
+        PdfOptions
         
-          Number of logical rows covered by the cell.
+          Underlying low-level OfficeIMO PDF options.
         
-        Int32
+        PdfOptions
         
-          Int32
+          PdfOptions
           
         
         None
       
-      
-        Run
+      
+        RespectWorkbookSheetVisibility
         
-          Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object.
+          Exclude workbook sheets marked hidden.
         
-        Object[]
+        SwitchParameter
         
-          Object[]
+          SwitchParameter
           
         
         None
       
       
-        Strike
+        RespectWorksheetHiddenRowsAndColumns
         
-          Render the cell text with strikethrough.
+          Exclude hidden worksheet rows and columns.
         
         SwitchParameter
         
@@ -137507,34 +140367,34 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        Text
+      
+        SheetName
         
-          Cell text.
+          Worksheet names to export. The default exports all eligible sheets.
         
-        String
+        String[]
         
-          String
+          String[]
           
         
         None
       
-      
-        TextColor
+      
+        UseBoundedWorksheetRead
         
-          Cell text color. Named colors and hexadecimal colors are accepted.
+          Use bounded worksheet reads for large workbooks.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Underline
+        UseWorksheetCellStyles
         
-          Render the cell text with underline.
+          Render worksheet cell styles.
         
         SwitchParameter
         
@@ -137544,141 +140404,45 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        UnderlineStyle
+        UseWorksheetCharts
         
-          Optional underline style name. PDF table rendering treats any supported value as underline.
+          Render worksheet charts.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        VerticalAlign
+        UseWorksheetColumnWidths
         
-          Vertical cell alignment.
+          Honor worksheet column widths.
         
-        PdfCellVerticalAlign
-        
-          Top
-          Middle
-          Bottom
-        
+        SwitchParameter
         
-          PdfCellVerticalAlign
+          SwitchParameter
           
         
         None
       
-    
-    
-      
-        
-          None
-        
-      
-    
-    
-      
-        
-          PSWriteOffice.Services.Table.OfficeTableCellSpec
-        
+      
+        UseWorksheetHeaderFooterImages
         
-          Describes a logical table cell that can be rendered by multiple Office table surfaces.
+          Render images referenced by worksheet headers and footers.
         
-      
-    
-    
-      
-        
-      
-    
-    
-      
-        Create a full-width PDF table section row.
-        
-          PS> 
-        
-        $row = @(New-OfficePdfTableCell -Text 'Identity systems' -ColumnSpan 3 -FillColor '#DBEAFE' -TextColor '#1E3A8A' -Bold)
-        
-          The returned cell can be passed to PdfTable inside explicit row arrays.
-        
-      
-    
-    
-  
-  
-    
-      New-OfficePdfTableCellCheckBox
-      New
-      OfficePdfTableCellCheckBox
-      
-        Creates a typed check box for a PDF table cell.
-      
-    
-    
-      Creates a typed check box for a PDF table cell.
-    
-    
-      
-        New-OfficePdfTableCellCheckBox
-        
-          Checked
-          
-            Create the check box in its checked state.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          CheckedValueName
-          
-            PDF appearance-state name written when checked.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Name
-          
-            Unique AcroForm field name.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Size
-          
-            Visual square size in PDF points.
-          
-          Double
-          
-            Double
-            
-          
-          None
-        
-      
-    
-    
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
-        Checked
+        UseWorksheetHeadersAndFooters
         
-          Create the check box in its checked state.
+          Render worksheet headers and footers.
         
         SwitchParameter
         
@@ -137688,37 +140452,113 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        CheckedValueName
+        UseWorksheetHyperlinks
         
-          PDF appearance-state name written when checked.
+          Render worksheet hyperlinks.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        Name
+      
+        UseWorksheetImages
         
-          Unique AcroForm field name.
+          Render worksheet images.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Size
+        UseWorksheetMergedCells
         
-          Visual square size in PDF points.
+          Render merged worksheet cells.
         
-        Double
+        SwitchParameter
         
-          Double
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseWorksheetPageBreaks
+        
+          Honor worksheet page breaks.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseWorksheetPageSetup
+        
+          Honor worksheet page setup.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseWorksheetPrintAreas
+        
+          Honor worksheet print areas.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseWorksheetPrintTitleRows
+        
+          Honor worksheet rows configured to repeat on printed pages.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseWorksheetRowHeights
+        
+          Honor worksheet row heights.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        WorksheetLayout
+        
+          Controls how worksheet content is laid out on PDF pages.
+        
+        ExcelPdfWorksheetLayoutMode
+        
+          WorksheetCanvas
+          FlowTable
+        
+        
+          ExcelPdfWorksheetLayoutMode
           
         
         None
@@ -137734,7 +140574,7 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          OfficeIMO.Pdf.PdfTableCellCheckBox
+          OfficeIMO.Excel.Pdf.ExcelPdfSaveOptions
         
       
     
@@ -137745,14 +140585,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Create a checked table-cell field.
+        Export selected visible sheets with workbook layout features.
         
           PS> 
         
-        $approved = New-OfficePdfTableCellCheckBox -Name Approved -Checked
-            $cell = New-OfficePdfTableCell -Text 'Approved' -CheckBox $approved
+        $options = New-OfficeExcelPdfOptions -SheetName Summary,Services -UseWorksheetCharts -UseWorksheetImages
+            Export-OfficeDocumentPdf -InputPath .\Report.xlsx -Path .\Report.pdf -ExcelOptions $options
         
-          The check box remains an AcroForm field positioned by the OfficeIMO table renderer.
+          
         
       
     
@@ -137760,86 +140600,219 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficePdfTableCellField
+      New-OfficeExcelWorkbookImageOptions
       New
-      OfficePdfTableCellField
+      OfficeExcelWorkbookImageOptions
       
-        Creates a typed text or choice field for a PDF table cell.
+        Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage.
       
     
     
-      Creates a typed text or choice field for a PDF table cell.
+      Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage.
     
     
-      
-        New-OfficePdfTableCellField
+      
+        New-OfficeExcelWorkbookImageOptions
         
-          FontSize
+          BackgroundColor
           
-            Field font size in PDF points.
+            
           
-          Double
+          String
           
-            Double
+            String
             
           
           None
         
         
-          Height
+          IncludeCharts
           
-            Rendered field height in PDF points.
+            Include worksheet charts.
           
-          Double
+          SwitchParameter
           
-            Double
+            SwitchParameter
             
           
           None
         
-        
-          Name
+        
+          IncludeConditionalFormatting
           
-            Unique AcroForm field name.
+            Include conditional formatting.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          Value
+        
+          IncludeDrawingObjects
           
-            Initial field value.
+            Include drawing objects.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Width
+          IncludeHidden
           
-            Rendered field width in PDF points.
+            Include hidden rows and columns.
           
-          Double
+          SwitchParameter
           
-            Double
+            SwitchParameter
             
           
           None
         
-      
-      
-        New-OfficePdfTableCellField
         
-          FontSize
+          IncludeHiddenSheets
           
-            Field font size in PDF points.
+            Include hidden worksheets.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeImages
+          
+            Include worksheet images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaximumDegreeOfParallelism
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputCount
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputHeight
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputWidth
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumRenderedCells
+          
+            Maximum cells rendered per worksheet.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumTotalEncodedBytes
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          RasterOverflowBehavior
+          
+            
+          
+          OfficeRasterOverflowBehavior
+          
+            ReduceScale
+            Throw
+          
+          
+            OfficeRasterOverflowBehavior
+            
+          
+          None
+        
+        
+          RenderTimeoutSeconds
+          
+            
           
           Double
           
@@ -137849,9 +140822,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Height
+          Scale
           
-            Rendered field height in PDF points.
+            
           
           Double
           
@@ -137860,10 +140833,22 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          SheetName
+          
+            Worksheet names to export.
+          
+          String[]
+          
+            String[]
+            
+          
+          None
+        
         
-          ListBox
+          ShowGridlines
           
-            Render a choice field as a list box instead of a combo box.
+            Show worksheet gridlines.
           
           SwitchParameter
           
@@ -137872,34 +140857,34 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Name
+        
+          SplitWorksheetsByManualPageBreaks
           
-            Unique AcroForm field name.
+            Split worksheets at manual page breaks.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          Option
+        
+          TargetDpi
           
-            Available values for a choice field.
+            
           
-          String[]
+          Double
           
-            String[]
+            Double
             
           
           None
         
-        
-          Value
+        
+          TextShapingLanguage
           
-            Initial field value.
+            
           
           String
           
@@ -137909,13 +140894,13 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Width
+          UseWorksheetPrintAreas
           
-            Rendered field width in PDF points.
+            Use worksheet print areas.
           
-          Double
+          SwitchParameter
           
-            Double
+            SwitchParameter
             
           
           None
@@ -137924,9 +140909,205 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        FontSize
+        BackgroundColor
         
-          Field font size in PDF points.
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        IncludeCharts
+        
+          Include worksheet charts.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeConditionalFormatting
+        
+          Include conditional formatting.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeDrawingObjects
+        
+          Include drawing objects.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeHidden
+        
+          Include hidden rows and columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeHiddenSheets
+        
+          Include hidden worksheets.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeImages
+        
+          Include worksheet images.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaximumDegreeOfParallelism
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputCount
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputHeight
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputWidth
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumRenderedCells
+        
+          Maximum cells rendered per worksheet.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumTotalEncodedBytes
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        RasterOverflowBehavior
+        
+          
+        
+        OfficeRasterOverflowBehavior
+        
+          ReduceScale
+          Throw
+        
+        
+          OfficeRasterOverflowBehavior
+          
+        
+        None
+      
+      
+        RenderTimeoutSeconds
+        
+          
         
         Double
         
@@ -137936,9 +141117,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Height
+        Scale
         
-          Rendered field height in PDF points.
+          
         
         Double
         
@@ -137947,10 +141128,22 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        SheetName
+        
+          Worksheet names to export.
+        
+        String[]
+        
+          String[]
+          
+        
+        None
+      
       
-        ListBox
+        ShowGridlines
         
-          Render a choice field as a list box instead of a combo box.
+          Show worksheet gridlines.
         
         SwitchParameter
         
@@ -137959,34 +141152,34 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        Name
+      
+        SplitWorksheetsByManualPageBreaks
         
-          Unique AcroForm field name.
+          Split worksheets at manual page breaks.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        Option
+      
+        TargetDpi
         
-          Available values for a choice field.
+          
         
-        String[]
+        Double
         
-          String[]
+          Double
           
         
         None
       
-      
-        Value
+      
+        TextShapingLanguage
         
-          Initial field value.
+          
         
         String
         
@@ -137996,13 +141189,13 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Width
+        UseWorksheetPrintAreas
         
-          Rendered field width in PDF points.
+          Use worksheet print areas.
         
-        Double
+        SwitchParameter
         
-          Double
+          SwitchParameter
           
         
         None
@@ -138018,7 +141211,7 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          OfficeIMO.Pdf.PdfTableCellFormField
+          OfficeIMO.Excel.ExcelWorkbookImageExportOptions
         
       
     
@@ -138029,14 +141222,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Create a reviewer choice field for a typed PDF table cell.
+        Render selected worksheets with charts and conditional formatting.
         
           PS> 
         
-        $reviewer = New-OfficePdfTableCellField -Name Reviewer -Option 'Unassigned', 'Alice', 'Bob' -Value 'Unassigned'
-            $cell = New-OfficePdfTableCell -Text 'Reviewer' -FormField $reviewer
+        $options = New-OfficeExcelWorkbookImageOptions -SheetName Summary,Data -IncludeCharts -IncludeConditionalFormatting
+            Export-OfficeExcelImage -Path .\Workbook.xlsx -OutputPath .\Sheets -Options $options
         
-          The choice field is positioned by the OfficeIMO PDF table renderer.
+          
         
       
     
@@ -138044,75 +141237,85 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficePdfTableCellImage
+      New-OfficeHtmlConversionOptions
       New
-      OfficePdfTableCellImage
+      OfficeHtmlConversionOptions
       
-        Creates a typed image for a PDF table cell.
+        Creates discoverable parsing, trust, and document settings for HTML conversion.
       
     
     
-      Creates a typed image for a PDF table cell.
+      Creates discoverable parsing, trust, and document settings for HTML conversion.
     
     
       
-        New-OfficePdfTableCellImage
-        
-          Height
+        New-OfficeHtmlConversionOptions
+        
+          BaseUri
           
-            Rendered height in PDF points.
+            Base URI used to resolve relative references.
           
-          Double
+          String
           
-            Double
+            String
             
           
           None
         
         
-          LinkContents
+          IncludeNormalizedHtml
           
-            Accessible annotation text for the image link.
+            Retain normalized HTML in the conversion document.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          LinkUri
+          Profile
           
-            Optional absolute or catalog-base-relative URI linked from the image.
+            Built-in conversion profile.
           
-          String
+          HtmlConversionProfile
+          
+            Semantic
+            Document
+            HighFidelityPrint
+            PositionedReview
+          
           
-            String
+            HtmlConversionProfile
             
           
           None
         
-        
-          Path
+        
+          Trust
           
-            Raster image path.
+            Input trust level.
           
-          String
+          HtmlInputTrust
+          
+            Untrusted
+            Trusted
+          
           
-            String
+            HtmlInputTrust
             
           
           None
         
-        
-          Width
+        
+          UseBodyContentsOnly
           
-            Rendered width in PDF points.
+            Convert only body contents.
           
-          Double
+          SwitchParameter
           
-            Double
+            SwitchParameter
             
           
           None
@@ -138120,62 +141323,72 @@ Use -NoSave or omit -Path when a document object should be returned for further
       
     
     
-      
-        Height
+      
+        BaseUri
         
-          Rendered height in PDF points.
+          Base URI used to resolve relative references.
         
-        Double
+        String
         
-          Double
+          String
           
         
         None
       
       
-        LinkContents
+        IncludeNormalizedHtml
         
-          Accessible annotation text for the image link.
+          Retain normalized HTML in the conversion document.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        LinkUri
+        Profile
         
-          Optional absolute or catalog-base-relative URI linked from the image.
+          Built-in conversion profile.
         
-        String
+        HtmlConversionProfile
+        
+          Semantic
+          Document
+          HighFidelityPrint
+          PositionedReview
+        
         
-          String
+          HtmlConversionProfile
           
         
         None
       
-      
-        Path
+      
+        Trust
         
-          Raster image path.
+          Input trust level.
         
-        String
+        HtmlInputTrust
+        
+          Untrusted
+          Trusted
+        
         
-          String
+          HtmlInputTrust
           
         
         None
       
-      
-        Width
+      
+        UseBodyContentsOnly
         
-          Rendered width in PDF points.
+          Convert only body contents.
         
-        Double
+        SwitchParameter
         
-          Double
+          SwitchParameter
           
         
         None
@@ -138191,7 +141404,7 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          OfficeIMO.Pdf.PdfTableCellImage
+          OfficeIMO.Html.HtmlConversionDocumentOptions
         
       
     
@@ -138202,14 +141415,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Add a linked logo to a typed PDF table cell.
+        Resolve relative resources from a trusted report directory.
         
           PS> 
         
-        $logo = New-OfficePdfTableCellImage -Path .\logo.png -Width 28 -Height 28 -LinkUri 'https://example.com'
-            $cell = New-OfficePdfTableCell -Text 'Portal' -Image $logo
+        $document = New-OfficeHtmlConversionOptions -BaseUri (Resolve-Path .\Assets) -UseBodyContentsOnly
+            Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -DocumentOptions $document
         
-          The image remains a native PDF table-cell visual and may carry its own link.
+          
         
       
     
@@ -138217,37 +141430,37 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficePowerPoint
+      New-OfficeHtmlRenderOptions
       New
-      OfficePowerPoint
+      OfficeHtmlRenderOptions
       
-        Creates a PowerPoint presentation using the DSL.
+        Creates discoverable layout, resource-limit, and rendering settings for HTML image export.
       
     
     
-      Initializes a presentation, runs the DSL script block, and optionally saves the deck.
+      Creates discoverable layout, resource-limit, and rendering settings for HTML image export.
     
     
       
-        New-OfficePowerPoint
-        
-          Content
+        New-OfficeHtmlRenderOptions
+        
+          BackgroundColor
           
-            DSL scriptblock describing presentation content.
+            
           
-          ScriptBlock
+          String
           
-            ScriptBlock
+            String
             
           
           None
         
-        
-          FilePath
+        
+          BaseUri
           
-            Destination path for the new .pptx.
+            Base URI for relative resources.
           
-          String
+          String
           
             String
             
@@ -138255,33 +141468,61 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          NoSave
+          DefaultFontFamily
           
-            Skip saving after executing the DSL.
+            Default font family.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
         
-          Open
+          DefaultFontSize
           
-            Open the presentation after saving.
+            Default font size.
           
-          SwitchParameter
+          Double
           
-            SwitchParameter
+            Double
             
           
           None
         
         
-          PassThru
+          DefaultLineHeight
           
-            Emit a FileInfo for chaining.
+            Default line-height multiplier.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          FidelityPolicy
+          
+            Fidelity policy for unsupported content.
+          
+          HtmlRenderFidelityPolicy
+          
+            AllowDiagnosedLoss
+            RequireNoLoss
+          
+          
+            HtmlRenderFidelityPolicy
+            
+          
+          None
+        
+        
+          HonorCssPageRules
+          
+            Honor CSS page rules.
           
           SwitchParameter
           
@@ -138291,21 +141532,233 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Password
+          MaxHtmlNodes
           
-            Password used to save the presentation as an encrypted package.
+            Maximum HTML nodes.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          PdfPath
+          MaximumDegreeOfParallelism
           
-            Optional PDF path to create from the same presentation before closing it.
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputCount
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputHeight
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputWidth
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalEncodedBytes
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxInputCharacters
+          
+            Maximum HTML input characters.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxPageCount
+          
+            Maximum rendered page count.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxTotalResourceBytes
+          
+            Maximum resource bytes loaded for the document.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          Mode
+          
+            HTML render mode.
+          
+          HtmlRenderMode
+          
+            Continuous
+            Paged
+          
+          
+            HtmlRenderMode
+            
+          
+          None
+        
+        
+          PageSize
+          
+            Page size used by paged rendering.
+          
+          OfficePageSize
+          
+            OfficePageSize
+            
+          
+          None
+        
+        
+          RasterOverflowBehavior
+          
+            
+          
+          OfficeRasterOverflowBehavior
+          
+            ReduceScale
+            Throw
+          
+          
+            OfficeRasterOverflowBehavior
+            
+          
+          None
+        
+        
+          RenderTimeoutSeconds
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          ResourceTimeoutSeconds
+          
+            Maximum duration allowed for one resource load.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Scale
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TargetDpi
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TextShapingLanguage
+          
+            
           
           String
           
@@ -138314,27 +141767,51 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          ViewportHeight
+          
+            Optional viewport height in CSS pixels.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          ViewportWidth
+          
+            Viewport width in CSS pixels.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
       
     
     
-      
-        Content
+      
+        BackgroundColor
         
-          DSL scriptblock describing presentation content.
+          
         
-        ScriptBlock
+        String
         
-          ScriptBlock
+          String
           
         
         None
       
-      
-        FilePath
+      
+        BaseUri
         
-          Destination path for the new .pptx.
+          Base URI for relative resources.
         
-        String
+        String
         
           String
           
@@ -138342,98 +141819,359 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        NoSave
+        DefaultFontFamily
         
-          Skip saving after executing the DSL.
+          Default font family.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
       
-        Open
+        DefaultFontSize
         
-          Open the presentation after saving.
+          Default font size.
         
-        SwitchParameter
+        Double
         
-          SwitchParameter
+          Double
           
         
         None
       
       
-        PassThru
+        DefaultLineHeight
         
-          Emit a FileInfo for chaining.
+          Default line-height multiplier.
         
-        SwitchParameter
+        Double
         
-          SwitchParameter
+          Double
           
         
         None
       
       
-        Password
+        FidelityPolicy
         
-          Password used to save the presentation as an encrypted package.
+          Fidelity policy for unsupported content.
         
-        String
+        HtmlRenderFidelityPolicy
+        
+          AllowDiagnosedLoss
+          RequireNoLoss
+        
         
-          String
+          HtmlRenderFidelityPolicy
           
         
         None
       
       
-        PdfPath
+        HonorCssPageRules
         
-          Optional PDF path to create from the same presentation before closing it.
+          Honor CSS page rules.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-    
-    
-      
+      
+        MaxHtmlNodes
+        
+          Maximum HTML nodes.
+        
+        Int32
         
-          None
+          Int32
+          
         
-      
-    
-    
-    
-      
-        
-      
+        None
+      
+      
+        MaximumDegreeOfParallelism
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputCount
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputHeight
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputWidth
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalEncodedBytes
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxInputCharacters
+        
+          Maximum HTML input characters.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxPageCount
+        
+          Maximum rendered page count.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxTotalResourceBytes
+        
+          Maximum resource bytes loaded for the document.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        Mode
+        
+          HTML render mode.
+        
+        HtmlRenderMode
+        
+          Continuous
+          Paged
+        
+        
+          HtmlRenderMode
+          
+        
+        None
+      
+      
+        PageSize
+        
+          Page size used by paged rendering.
+        
+        OfficePageSize
+        
+          OfficePageSize
+          
+        
+        None
+      
+      
+        RasterOverflowBehavior
+        
+          
+        
+        OfficeRasterOverflowBehavior
+        
+          ReduceScale
+          Throw
+        
+        
+          OfficeRasterOverflowBehavior
+          
+        
+        None
+      
+      
+        RenderTimeoutSeconds
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        ResourceTimeoutSeconds
+        
+          Maximum duration allowed for one resource load.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Scale
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TargetDpi
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TextShapingLanguage
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        ViewportHeight
+        
+          Optional viewport height in CSS pixels.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        ViewportWidth
+        
+          Viewport width in CSS pixels.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Html.HtmlRenderOptions
+        
+      
+    
+    
+      
+        
+      
     
     
       
-        Create and capture the presentation object.
-        
-          PS> 
-        
-        $ppt = New-OfficePowerPoint -FilePath .\deck.pptx
-        
-          Creates deck.pptx and returns the live presentation object for further editing.
-        
-      
-      
-        Create a deck with a title slide.
+        Render HTML with a bounded viewport and resource budget.
         
           PS> 
         
-        New-OfficePowerPoint -Path .\deck.pptx { PptSlide { PptTitle -Title 'Status Update' } } -Open
+        $render = New-OfficeHtmlRenderOptions -ViewportWidth 1280 -ViewportHeight 720 -MaxPageCount 10
+            Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -RenderOptions $render
         
-          Creates, saves, and opens a deck with one titled slide.
+          
         
       
     
@@ -138441,23 +142179,23 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficePowerPointDeckPlan
+      New-OfficeMarkdown
       New
-      OfficePowerPointDeckPlan
+      OfficeMarkdown
       
-        Creates a semantic PowerPoint deck plan for designer rendering.
+        Creates a Markdown document using a DSL scriptblock.
       
     
     
-      Creates a semantic PowerPoint deck plan for designer rendering.
+      Runs the scriptblock against a Markdown document and saves it to disk unless -NoSave is specified.
     
     
       
-        New-OfficePowerPointDeckPlan
-        
+        New-OfficeMarkdown
+        
           Content
           
-            Nested deck-plan DSL content.
+            DSL scriptblock describing Markdown content.
           
           ScriptBlock
           
@@ -138466,13 +142204,119 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          ImageRenderingMode
+          
+            Controls how Markdown images are serialized.
+          
+          MarkdownImageRenderingMode
+          
+            RichMarkdown
+            PortableMarkdown
+            Html
+          
+          
+            MarkdownImageRenderingMode
+            
+          
+          None
+        
+        
+          LineEnding
+          
+            Markdown line ending: CRLF, LF, CR, or a literal line ending string.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving after executing the DSL.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit a FileInfo for chaining.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination path for the Markdown file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          UnorderedListMarker
+          
+            Unordered list marker: '-', '*', or '+'.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          WriteOptions
+          
+            Optional Markdown writer options.
+          
+          MarkdownWriteOptions
+          
+            MarkdownWriteOptions
+            
+          
+          None
+        
+        
+          WriteProfile
+          
+            Friendly Markdown writer profile.
+          
+          OfficeMarkdownWriteProfile
+          
+            OfficeIMO
+            Portable
+            HtmlImage
+          
+          
+            OfficeMarkdownWriteProfile
+            
+          
+          None
+        
       
     
     
-      
+      
         Content
         
-          Nested deck-plan DSL content.
+          DSL scriptblock describing Markdown content.
         
         ScriptBlock
         
@@ -138481,6 +142325,112 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        ImageRenderingMode
+        
+          Controls how Markdown images are serialized.
+        
+        MarkdownImageRenderingMode
+        
+          RichMarkdown
+          PortableMarkdown
+          Html
+        
+        
+          MarkdownImageRenderingMode
+          
+        
+        None
+      
+      
+        LineEnding
+        
+          Markdown line ending: CRLF, LF, CR, or a literal line ending string.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        NoSave
+        
+          Skip saving after executing the DSL.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit a FileInfo for chaining.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
+        
+          Destination path for the Markdown file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        UnorderedListMarker
+        
+          Unordered list marker: '-', '*', or '+'.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        WriteOptions
+        
+          Optional Markdown writer options.
+        
+        MarkdownWriteOptions
+        
+          MarkdownWriteOptions
+          
+        
+        None
+      
+      
+        WriteProfile
+        
+          Friendly Markdown writer profile.
+        
+        OfficeMarkdownWriteProfile
+        
+          OfficeIMO
+          Portable
+          HtmlImage
+        
+        
+          OfficeMarkdownWriteProfile
+          
+        
+        None
+      
     
     
       
@@ -138492,7 +142442,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          OfficeIMO.PowerPoint.PowerPointDeckPlan
+          System.IO.FileInfo
+        
+      
+      
+        
+          OfficeIMO.Markdown.MarkdownDoc
         
       
     
@@ -138503,23 +142458,28 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Create a semantic service brief plan.
+        Create a Markdown document with headings and a table.
         
           PS> 
         
-        $plan = New-OfficePowerPointDeckPlan {
-                Add-OfficePowerPointPlanSection -Title 'Service Review' -Subtitle 'Monthly operating brief'
-                Add-OfficePowerPointPlanProcess -Title 'Operating rhythm' -Steps @(
-                  @{ Title = 'Collect'; Body = 'Gather health signals' }
-                  @{ Title = 'Review'; Body = 'Confirm owner decisions' }
-                  @{ Title = 'Publish'; Body = 'Share the final brief' }
-                )
-            }
-            New-OfficePowerPoint -Path .\Examples\Documents\DesignerDeck.pptx {
-                Add-OfficePowerPointDesignerDeck -Plan $plan
-            }
+        New-OfficeMarkdown -Path .\README.md { MarkdownHeading -Level 1 -Text 'Report'; MarkdownTable -InputObject $data }
         
-          Builds a deck plan and renders it through the OfficeIMO designer helpers.
+          Creates a README file with a heading and table content.
+        
+      
+      
+        Create a report with multiple tables.
+        
+          PS> 
+        
+        New-OfficeMarkdown -Path .\Report.md {
+                MarkdownHeading -Level 1 -Text 'Summary'
+                MarkdownTable -InputObject $summary
+                MarkdownHeading -Level 2 -Text 'Details'
+                MarkdownTable -InputObject $details
+              }
+        
+          Creates a report with two tables separated by headings.
         
       
     
@@ -138527,23 +142487,23 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficeRtf
+      New-OfficeMarkdownPdfOptions
       New
-      OfficeRtf
+      OfficeMarkdownPdfOptions
       
-        Creates an RTF document with plain paragraph content.
+        Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf.
       
     
     
-      Creates an RTF document with plain paragraph content.
+      Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf.
     
     
       
-        New-OfficeRtf
+        New-OfficeMarkdownPdfOptions
         
-          NoSave
+          ApplyWordLikeTheme
           
-            Return the OfficeIMO RTF document without saving.
+            Apply the built-in Word-like Markdown PDF baseline theme.
           
           SwitchParameter
           
@@ -138552,12 +142512,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          OutputPath
+        
+          Author
           
-            Destination path for the RTF file.
+            PDF author metadata.
           
-          String
+          String
           
             String
             
@@ -138565,9 +142525,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PassThru
+          BaseDirectory
           
-            Emit a FileInfo for chaining.
+            Base directory used to resolve local Markdown images.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          CreateOutlineFromHeadings
+          
+            Create PDF outlines from Markdown headings.
           
           SwitchParameter
           
@@ -138576,14 +142548,219 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Text
+        
+          DefaultImageHeight
           
-            Plain paragraph text to add to the document.
+            Fallback image height in PDF points.
           
-          String[]
+          Double
           
-            String[]
+            Double
+            
+          
+          None
+        
+        
+          DefaultImageWidth
+          
+            Fallback image width in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          FontFamily
+          
+            Default font family.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          FrontMatterRenderMode
+          
+            Controls how YAML front matter appears in the PDF body.
+          
+          MarkdownPdfFrontMatterRenderMode
+          
+            Hidden
+            DocumentHeader
+            Table
+          
+          
+            MarkdownPdfFrontMatterRenderMode
+            
+          
+          None
+        
+        
+          IncludeDataUriImages
+          
+            Embed supported data URI images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeLocalImages
+          
+            Embed supported local image files.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Keywords
+          
+            PDF keywords metadata.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          MaximumDataUriImageBytes
+          
+            Maximum decoded bytes for one data URI image.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          Options
+          
+            Existing Markdown PDF options to clone and override.
+          
+          MarkdownPdfSaveOptions
+          
+            MarkdownPdfSaveOptions
+            
+          
+          None
+        
+        
+          PdfOptions
+          
+            Underlying low-level OfficeIMO PDF options.
+          
+          PdfOptions
+          
+            PdfOptions
+            
+          
+          None
+        
+        
+          RestrictLocalImagesToBaseDirectory
+          
+            Require local images to resolve under BaseDirectory.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Subject
+          
+            PDF subject metadata.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Theme
+          
+            Built-in visual theme.
+          
+          OfficeVisualThemeKind
+          
+            Plain
+            WordLike
+            TechnicalDocument
+            GitHubLike
+            Compact
+            Report
+          
+          
+            OfficeVisualThemeKind
+            
+          
+          None
+        
+        
+          Title
+          
+            PDF title metadata.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          UseFirstHeadingAsTitle
+          
+            Use the first Markdown heading as the PDF title when no title is supplied.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          UseFrontMatterMetadata
+          
+            Use front matter values as PDF metadata.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          UseFrontMatterVisualTheme
+          
+            Use front matter values to select a visual theme.
+          
+          SwitchParameter
+          
+            SwitchParameter
             
           
           None
@@ -138592,9 +142769,10962 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        NoSave
+        ApplyWordLikeTheme
+        
+          Apply the built-in Word-like Markdown PDF baseline theme.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Author
+        
+          PDF author metadata.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        BaseDirectory
+        
+          Base directory used to resolve local Markdown images.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        CreateOutlineFromHeadings
+        
+          Create PDF outlines from Markdown headings.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        DefaultImageHeight
+        
+          Fallback image height in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        DefaultImageWidth
+        
+          Fallback image width in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        FontFamily
+        
+          Default font family.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        FrontMatterRenderMode
+        
+          Controls how YAML front matter appears in the PDF body.
+        
+        MarkdownPdfFrontMatterRenderMode
+        
+          Hidden
+          DocumentHeader
+          Table
+        
+        
+          MarkdownPdfFrontMatterRenderMode
+          
+        
+        None
+      
+      
+        IncludeDataUriImages
+        
+          Embed supported data URI images.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeLocalImages
+        
+          Embed supported local image files.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Keywords
+        
+          PDF keywords metadata.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        MaximumDataUriImageBytes
+        
+          Maximum decoded bytes for one data URI image.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        Options
+        
+          Existing Markdown PDF options to clone and override.
+        
+        MarkdownPdfSaveOptions
+        
+          MarkdownPdfSaveOptions
+          
+        
+        None
+      
+      
+        PdfOptions
+        
+          Underlying low-level OfficeIMO PDF options.
+        
+        PdfOptions
+        
+          PdfOptions
+          
+        
+        None
+      
+      
+        RestrictLocalImagesToBaseDirectory
+        
+          Require local images to resolve under BaseDirectory.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Subject
+        
+          PDF subject metadata.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Theme
+        
+          Built-in visual theme.
+        
+        OfficeVisualThemeKind
+        
+          Plain
+          WordLike
+          TechnicalDocument
+          GitHubLike
+          Compact
+          Report
+        
+        
+          OfficeVisualThemeKind
+          
+        
+        None
+      
+      
+        Title
+        
+          PDF title metadata.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        UseFirstHeadingAsTitle
+        
+          Use the first Markdown heading as the PDF title when no title is supplied.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseFrontMatterMetadata
+        
+          Use front matter values as PDF metadata.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UseFrontMatterVisualTheme
+        
+          Use front matter values to select a visual theme.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.Markdown.Pdf.MarkdownPdfSaveOptions
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Markdown.Pdf.MarkdownPdfSaveOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Allow local report images and apply PDF metadata.
+        
+          PS> 
+        
+        $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -Author 'Evotec' -IncludeLocalImages -BaseDirectory .\Assets
+            Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options
+        
+          Builds a typed options object through ordinary PowerShell parameters; no hashtable or .NET construction is required.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeOpenDocument
+      New
+      OfficeOpenDocument
+      
+        Creates a native ODT, ODS, or ODP document.
+      
+    
+    
+      Creates a native ODT, ODS, or ODP document.
+    
+    
+      
+        New-OfficeOpenDocument
+        
+          Content
+          
+            DSL scriptblock describing OpenDocument text, spreadsheet, or presentation content.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          Kind
+          
+            OpenDocument text, spreadsheet, or presentation kind.
+          
+          OdfDocumentKind
+          
+            Text
+            Spreadsheet
+            Presentation
+          
+          
+            OdfDocumentKind
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving and emit the live OpenDocument model even when -Path is supplied.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the saved file when a destination path is supplied.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            Optional initial destination path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        Content
+        
+          DSL scriptblock describing OpenDocument text, spreadsheet, or presentation content.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        Kind
+        
+          OpenDocument text, spreadsheet, or presentation kind.
+        
+        OdfDocumentKind
+        
+          Text
+          Spreadsheet
+          Presentation
+        
+        
+          OdfDocumentKind
+          
+        
+        None
+      
+      
+        NoSave
+        
+          Skip saving and emit the live OpenDocument model even when -Path is supplied.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the saved file when a destination path is supplied.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
+        
+          Optional initial destination path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdfDocument
+        
+      
+      
+        
+          System.IO.FileInfo
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create an OpenDocument text report.
+        
+          PS> 
+        
+        New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content {
+                Add-OfficeOpenDocumentHeading -Text 'Service report' -Level 1
+                Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice.'
+            }
+        
+          
+        
+      
+      
+        Create a spreadsheet with typed cells.
+        
+          PS> 
+        
+        New-OfficeOpenDocument -Kind Spreadsheet -Path .\Status.ods -Content {
+                Add-OfficeOpenDocumentSheet -Name 'Services' -Content {
+                    Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Service'
+                    Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value 'Healthy'
+                    Set-OfficeOpenDocumentCell -Row 1 -Column 0 -Value 'Directory'
+                    Set-OfficeOpenDocumentCell -Row 1 -Column 1 -Value $true
+                }
+            }
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdf
+      New
+      OfficePdf
+      
+        Creates a PDF document using the OfficeIMO.Pdf composition engine.
+      
+    
+    
+      New-OfficePdf starts a generated PDF document and optionally executes a PSWriteOffice PDF DSL script block.
+The DSL commands are thin adapters over OfficeIMO.Pdf and support document metadata, page setup, headers, footers,
+themes, styled text, tables, panels, row layouts, form fields, attachments, compliance settings, and save/open behavior.
+Use -NoSave or omit -Path when a document object should be returned for further pipeline operations.
+    
+    
+      
+        New-OfficePdf
+        
+          BoldFontPath
+          
+            Optional bold TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          BoldItalicFontPath
+          
+            Optional bold italic TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          CenterWindow
+          
+            Request PDF viewers to center the document window on screen.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Content
+          
+            DSL script block describing generated PDF content.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          CreateOutlineFromHeadings
+          
+            Create PDF outline/bookmark entries from heading elements.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          DefaultFont
+          
+            Default standard PDF font for generated text.
+          
+          PdfStandardFont
+          
+            Helvetica
+            HelveticaOblique
+            HelveticaBold
+            HelveticaBoldOblique
+            TimesRoman
+            TimesItalic
+            TimesBold
+            TimesBoldItalic
+            Courier
+            CourierOblique
+            CourierBold
+            CourierBoldOblique
+          
+          
+            PdfStandardFont
+            
+          
+          None
+        
+        
+          DefaultFontSize
+          
+            Default generated text font size in points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          DisplayDocTitle
+          
+            Request PDF viewers to display the document title instead of the file name.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          FileVersion
+          
+            PDF file header version emitted by OfficeIMO.Pdf.
+          
+          PdfFileVersion
+          
+            Pdf14
+            Pdf15
+            Pdf16
+            Pdf17
+            Pdf20
+          
+          
+            PdfFileVersion
+            
+          
+          None
+        
+        
+          FitWindow
+          
+            Request PDF viewers to fit the document window to the first displayed page.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          FlattenVisualAnnotations
+          
+            Flatten generated FreeText and Highlight annotations into static page content.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          FontFamily
+          
+            Embedded TrueType font family name for generated text.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          HideMenubar
+          
+            Request PDF viewers to hide the menu bar.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          HideToolbar
+          
+            Request PDF viewers to hide the toolbar.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          HideWindowUI
+          
+            Request PDF viewers to hide user-interface elements.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludePageLabels
+          
+            Emit generated catalog page labels.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ItalicFontPath
+          
+            Optional italic TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving even when -Path is provided.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the PDF after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          OpenActionMode
+          
+            Open-action destination mode.
+          
+          PdfOpenActionDestinationMode
+          
+            Xyz
+            Fit
+            FitHorizontal
+            FitVertical
+            FitRectangle
+            FitBoundingBox
+            FitBoundingBoxHorizontal
+            FitBoundingBoxVertical
+          
+          
+            PdfOpenActionDestinationMode
+            
+          
+          None
+        
+        
+          OpenActionPage
+          
+            Initial one-based page shown by PDF viewers that honor open actions.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          OpenActionTop
+          
+            Optional open-action top coordinate.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          OutlineExpansionLevel
+          
+            Initial outline expansion level when heading outlines are created.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          OwnerPassword
+          
+            Optional owner password for the generated encrypted PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PageLabelPrefix
+          
+            Optional generated page-label prefix.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PageLayout
+          
+            Catalog page layout hint emitted for generated PDFs.
+          
+          PdfCatalogPageLayout
+          
+            SinglePage
+            OneColumn
+            TwoColumnLeft
+            TwoColumnRight
+            TwoPageLeft
+            TwoPageRight
+          
+          
+            PdfCatalogPageLayout
+            
+          
+          None
+        
+        
+          PageMode
+          
+            Catalog page mode hint emitted for generated PDFs.
+          
+          PdfCatalogPageMode
+          
+            UseNone
+            UseOutlines
+            UseThumbs
+            FullScreen
+            UseOC
+            UseAttachments
+          
+          
+            PdfCatalogPageMode
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the generated document or saved file for chaining.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password required to open the generated PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Optional destination PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Permission
+          
+            Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          RegularFontPath
+          
+            Regular TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Theme
+          
+            Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
+          
+          OfficePdfThemePreset
+          
+            WordLike
+            TechnicalDocument
+            Compact
+            Report
+          
+          
+            OfficePdfThemePreset
+            
+          
+          None
+        
+      
+      
+        New-OfficePdf
+        
+          BoldFontPath
+          
+            Optional bold TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          BoldItalicFontPath
+          
+            Optional bold italic TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          CenterWindow
+          
+            Request PDF viewers to center the document window on screen.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Content
+          
+            DSL script block describing generated PDF content.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          CreateOutlineFromHeadings
+          
+            Create PDF outline/bookmark entries from heading elements.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          DefaultFont
+          
+            Default standard PDF font for generated text.
+          
+          PdfStandardFont
+          
+            Helvetica
+            HelveticaOblique
+            HelveticaBold
+            HelveticaBoldOblique
+            TimesRoman
+            TimesItalic
+            TimesBold
+            TimesBoldItalic
+            Courier
+            CourierOblique
+            CourierBold
+            CourierBoldOblique
+          
+          
+            PdfStandardFont
+            
+          
+          None
+        
+        
+          DefaultFontSize
+          
+            Default generated text font size in points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          DisplayDocTitle
+          
+            Request PDF viewers to display the document title instead of the file name.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          FileVersion
+          
+            PDF file header version emitted by OfficeIMO.Pdf.
+          
+          PdfFileVersion
+          
+            Pdf14
+            Pdf15
+            Pdf16
+            Pdf17
+            Pdf20
+          
+          
+            PdfFileVersion
+            
+          
+          None
+        
+        
+          FitWindow
+          
+            Request PDF viewers to fit the document window to the first displayed page.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          FlattenVisualAnnotations
+          
+            Flatten generated FreeText and Highlight annotations into static page content.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          FontFamily
+          
+            Embedded TrueType font family name for generated text.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          HideMenubar
+          
+            Request PDF viewers to hide the menu bar.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          HideToolbar
+          
+            Request PDF viewers to hide the toolbar.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          HideWindowUI
+          
+            Request PDF viewers to hide user-interface elements.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludePageLabels
+          
+            Emit generated catalog page labels.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ItalicFontPath
+          
+            Optional italic TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving even when -Path is provided.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the PDF after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          OpenActionMode
+          
+            Open-action destination mode.
+          
+          PdfOpenActionDestinationMode
+          
+            Xyz
+            Fit
+            FitHorizontal
+            FitVertical
+            FitRectangle
+            FitBoundingBox
+            FitBoundingBoxHorizontal
+            FitBoundingBoxVertical
+          
+          
+            PdfOpenActionDestinationMode
+            
+          
+          None
+        
+        
+          OpenActionPage
+          
+            Initial one-based page shown by PDF viewers that honor open actions.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          OpenActionTop
+          
+            Optional open-action top coordinate.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          OutlineExpansionLevel
+          
+            Initial outline expansion level when heading outlines are created.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          OwnerPassword
+          
+            Optional owner password for the generated encrypted PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PageLabelPrefix
+          
+            Optional generated page-label prefix.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PageLayout
+          
+            Catalog page layout hint emitted for generated PDFs.
+          
+          PdfCatalogPageLayout
+          
+            SinglePage
+            OneColumn
+            TwoColumnLeft
+            TwoColumnRight
+            TwoPageLeft
+            TwoPageRight
+          
+          
+            PdfCatalogPageLayout
+            
+          
+          None
+        
+        
+          PageMode
+          
+            Catalog page mode hint emitted for generated PDFs.
+          
+          PdfCatalogPageMode
+          
+            UseNone
+            UseOutlines
+            UseThumbs
+            FullScreen
+            UseOC
+            UseAttachments
+          
+          
+            PdfCatalogPageMode
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the generated document or saved file for chaining.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password required to open the generated PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Permission
+          
+            Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          RegularFontPath
+          
+            Regular TrueType font path used when -FontFamily is provided.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Theme
+          
+            Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
+          
+          OfficePdfThemePreset
+          
+            WordLike
+            TechnicalDocument
+            Compact
+            Report
+          
+          
+            OfficePdfThemePreset
+            
+          
+          None
+        
+      
+    
+    
+      
+        BoldFontPath
+        
+          Optional bold TrueType font path used when -FontFamily is provided.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        BoldItalicFontPath
+        
+          Optional bold italic TrueType font path used when -FontFamily is provided.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        CenterWindow
+        
+          Request PDF viewers to center the document window on screen.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Content
+        
+          DSL script block describing generated PDF content.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        CreateOutlineFromHeadings
+        
+          Create PDF outline/bookmark entries from heading elements.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        DefaultFont
+        
+          Default standard PDF font for generated text.
+        
+        PdfStandardFont
+        
+          Helvetica
+          HelveticaOblique
+          HelveticaBold
+          HelveticaBoldOblique
+          TimesRoman
+          TimesItalic
+          TimesBold
+          TimesBoldItalic
+          Courier
+          CourierOblique
+          CourierBold
+          CourierBoldOblique
+        
+        
+          PdfStandardFont
+          
+        
+        None
+      
+      
+        DefaultFontSize
+        
+          Default generated text font size in points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        DisplayDocTitle
+        
+          Request PDF viewers to display the document title instead of the file name.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        FileVersion
+        
+          PDF file header version emitted by OfficeIMO.Pdf.
+        
+        PdfFileVersion
+        
+          Pdf14
+          Pdf15
+          Pdf16
+          Pdf17
+          Pdf20
+        
+        
+          PdfFileVersion
+          
+        
+        None
+      
+      
+        FitWindow
+        
+          Request PDF viewers to fit the document window to the first displayed page.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        FlattenVisualAnnotations
+        
+          Flatten generated FreeText and Highlight annotations into static page content.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        FontFamily
+        
+          Embedded TrueType font family name for generated text.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        HideMenubar
+        
+          Request PDF viewers to hide the menu bar.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        HideToolbar
+        
+          Request PDF viewers to hide the toolbar.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        HideWindowUI
+        
+          Request PDF viewers to hide user-interface elements.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludePageLabels
+        
+          Emit generated catalog page labels.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ItalicFontPath
+        
+          Optional italic TrueType font path used when -FontFamily is provided.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        NoSave
+        
+          Skip saving even when -Path is provided.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Open
+        
+          Open the PDF after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        OpenActionMode
+        
+          Open-action destination mode.
+        
+        PdfOpenActionDestinationMode
+        
+          Xyz
+          Fit
+          FitHorizontal
+          FitVertical
+          FitRectangle
+          FitBoundingBox
+          FitBoundingBoxHorizontal
+          FitBoundingBoxVertical
+        
+        
+          PdfOpenActionDestinationMode
+          
+        
+        None
+      
+      
+        OpenActionPage
+        
+          Initial one-based page shown by PDF viewers that honor open actions.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        OpenActionTop
+        
+          Optional open-action top coordinate.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        OutlineExpansionLevel
+        
+          Initial outline expansion level when heading outlines are created.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        OwnerPassword
+        
+          Optional owner password for the generated encrypted PDF.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PageLabelPrefix
+        
+          Optional generated page-label prefix.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PageLayout
+        
+          Catalog page layout hint emitted for generated PDFs.
+        
+        PdfCatalogPageLayout
+        
+          SinglePage
+          OneColumn
+          TwoColumnLeft
+          TwoColumnRight
+          TwoPageLeft
+          TwoPageRight
+        
+        
+          PdfCatalogPageLayout
+          
+        
+        None
+      
+      
+        PageMode
+        
+          Catalog page mode hint emitted for generated PDFs.
+        
+        PdfCatalogPageMode
+        
+          UseNone
+          UseOutlines
+          UseThumbs
+          FullScreen
+          UseOC
+          UseAttachments
+        
+        
+          PdfCatalogPageMode
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the generated document or saved file for chaining.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Password
+        
+          Password required to open the generated PDF.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Optional destination PDF path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Permission
+        
+          Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        RegularFontPath
+        
+          Regular TrueType font path used when -FontFamily is provided.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Theme
+        
+          Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
+        
+        OfficePdfThemePreset
+        
+          WordLike
+          TechnicalDocument
+          Compact
+          Report
+        
+        
+          OfficePdfThemePreset
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Pdf.PdfDocument
+        
+      
+      
+        
+          System.IO.FileInfo
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a PDF report.
+        
+          PS> 
+        
+        New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Open
+        
+          Builds a PDF and opens it after saving.
+        
+      
+      
+        Create a polished report with theme, metadata, and layout.
+        
+          PS> 
+        
+        New-OfficePdf -Path .\ServiceReview.pdf {
+                PdfTheme Report
+                PdfMetadata -Title 'Service Review' -Author 'PSWriteOffice'
+                PdfPageSetup -PageSize A4 -Margin 42
+                PdfHeader 'Service Review'
+                PdfFooter 'Page {page}/{pages}'
+                PdfHeading 'Service Review'
+                PdfText -Run @(
+                  @{ Text = 'Generated with ' }
+                  @{ Text = 'rich inline text'; Bold = $true; Color = '#0F766E' }
+                  @{ Text = ' and OfficeIMO.Pdf layout.' }
+                )
+                PdfRow -Column @(
+                  @{ Width = 40; Content = @(@{ Type = 'Panel'; Text = 'Left summary' }) }
+                  @{ Width = 60; Content = @(@{ Type = 'Paragraph'; Text = 'Right details' }) }
+                )
+              }
+        
+          Shows the preferred high-level PDF report authoring shape.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfExcelImportOptions
+      New
+      OfficePdfExcelImportOptions
+      
+        Creates discoverable PDF-table-to-Excel reconstruction settings.
+      
+    
+    
+      Creates discoverable PDF-table-to-Excel reconstruction settings.
+    
+    
+      
+        New-OfficePdfExcelImportOptions
+        
+          AutoFitColumns
+          
+            Auto-fit worksheet columns.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ContinuationGeometryTolerancePoints
+          
+            Geometry tolerance in PDF points for page continuations.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          ConvertBooleanColumns
+          
+            Convert consistently boolean columns.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ConvertDateTimeColumns
+          
+            Convert unambiguous date columns.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ConvertNumericColumns
+          
+            Convert consistently numeric columns.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ConvertPercentageColumns
+          
+            Convert percentage columns to fractional numbers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          EmptyWorkbookSheetName
+          
+            Worksheet name used when no tables are detected.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          IncludeAutoFilter
+          
+            Add table-scoped AutoFilters.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaximumContinuationSegments
+          
+            Maximum table segments merged into one table.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxRows
+          
+            Maximum body rows imported per detected table; zero means unlimited.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MergePageContinuations
+          
+            Merge compatible table segments across pages.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          NumericCulture
+          
+            Culture name used for numeric parsing, such as en-US.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          SheetNamePrefix
+          
+            Prefix for generated worksheet names.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          SuppressRepeatedBodyHeaderRows
+          
+            Suppress repeated body header rows in merged segments.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          TableNamePrefix
+          
+            Prefix for generated Excel table names.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          TableStyle
+          
+            Excel table style.
+          
+          ExcelTableStyle
+          
+            TableStyleLight1
+            TableStyleLight2
+            TableStyleLight3
+            TableStyleLight4
+            TableStyleLight5
+            TableStyleLight6
+            TableStyleLight7
+            TableStyleLight8
+            TableStyleLight9
+            TableStyleLight10
+            TableStyleLight11
+            TableStyleLight12
+            TableStyleLight13
+            TableStyleLight14
+            TableStyleLight15
+            TableStyleLight16
+            TableStyleLight17
+            TableStyleLight18
+            TableStyleLight19
+            TableStyleLight20
+            TableStyleLight21
+            TableStyleMedium1
+            TableStyleMedium2
+            TableStyleMedium3
+            TableStyleMedium4
+            TableStyleMedium5
+            TableStyleMedium6
+            TableStyleMedium7
+            TableStyleMedium8
+            TableStyleMedium9
+            TableStyleMedium10
+            TableStyleMedium11
+            TableStyleMedium12
+            TableStyleMedium13
+            TableStyleMedium14
+            TableStyleMedium15
+            TableStyleMedium16
+            TableStyleMedium17
+            TableStyleMedium18
+            TableStyleMedium19
+            TableStyleMedium20
+            TableStyleMedium21
+            TableStyleMedium22
+            TableStyleMedium23
+            TableStyleMedium24
+            TableStyleMedium25
+            TableStyleMedium26
+            TableStyleMedium27
+            TableStyleMedium28
+            TableStyleDark1
+            TableStyleDark2
+            TableStyleDark3
+            TableStyleDark4
+            TableStyleDark5
+            TableStyleDark6
+            TableStyleDark7
+            TableStyleDark8
+            TableStyleDark9
+            TableStyleDark10
+            TableStyleDark11
+          
+          
+            ExcelTableStyle
+            
+          
+          None
+        
+      
+    
+    
+      
+        AutoFitColumns
+        
+          Auto-fit worksheet columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ContinuationGeometryTolerancePoints
+        
+          Geometry tolerance in PDF points for page continuations.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        ConvertBooleanColumns
+        
+          Convert consistently boolean columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ConvertDateTimeColumns
+        
+          Convert unambiguous date columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ConvertNumericColumns
+        
+          Convert consistently numeric columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ConvertPercentageColumns
+        
+          Convert percentage columns to fractional numbers.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        EmptyWorkbookSheetName
+        
+          Worksheet name used when no tables are detected.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        IncludeAutoFilter
+        
+          Add table-scoped AutoFilters.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaximumContinuationSegments
+        
+          Maximum table segments merged into one table.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxRows
+        
+          Maximum body rows imported per detected table; zero means unlimited.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MergePageContinuations
+        
+          Merge compatible table segments across pages.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        NumericCulture
+        
+          Culture name used for numeric parsing, such as en-US.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        SheetNamePrefix
+        
+          Prefix for generated worksheet names.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        SuppressRepeatedBodyHeaderRows
+        
+          Suppress repeated body header rows in merged segments.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        TableNamePrefix
+        
+          Prefix for generated Excel table names.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        TableStyle
+        
+          Excel table style.
+        
+        ExcelTableStyle
+        
+          TableStyleLight1
+          TableStyleLight2
+          TableStyleLight3
+          TableStyleLight4
+          TableStyleLight5
+          TableStyleLight6
+          TableStyleLight7
+          TableStyleLight8
+          TableStyleLight9
+          TableStyleLight10
+          TableStyleLight11
+          TableStyleLight12
+          TableStyleLight13
+          TableStyleLight14
+          TableStyleLight15
+          TableStyleLight16
+          TableStyleLight17
+          TableStyleLight18
+          TableStyleLight19
+          TableStyleLight20
+          TableStyleLight21
+          TableStyleMedium1
+          TableStyleMedium2
+          TableStyleMedium3
+          TableStyleMedium4
+          TableStyleMedium5
+          TableStyleMedium6
+          TableStyleMedium7
+          TableStyleMedium8
+          TableStyleMedium9
+          TableStyleMedium10
+          TableStyleMedium11
+          TableStyleMedium12
+          TableStyleMedium13
+          TableStyleMedium14
+          TableStyleMedium15
+          TableStyleMedium16
+          TableStyleMedium17
+          TableStyleMedium18
+          TableStyleMedium19
+          TableStyleMedium20
+          TableStyleMedium21
+          TableStyleMedium22
+          TableStyleMedium23
+          TableStyleMedium24
+          TableStyleMedium25
+          TableStyleMedium26
+          TableStyleMedium27
+          TableStyleMedium28
+          TableStyleDark1
+          TableStyleDark2
+          TableStyleDark3
+          TableStyleDark4
+          TableStyleDark5
+          TableStyleDark6
+          TableStyleDark7
+          TableStyleDark8
+          TableStyleDark9
+          TableStyleDark10
+          TableStyleDark11
+        
+        
+          ExcelTableStyle
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Excel.Pdf.PdfExcelTableImportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Import PDF tables with typed columns and filters.
+        
+          PS> 
+        
+        $options = New-OfficePdfExcelImportOptions -IncludeAutoFilter -AutoFitColumns -ConvertNumericColumns -ConvertDateTimeColumns
+            ConvertTo-OfficePdfExcel -Path .\Tables.pdf -OutputPath .\Tables.xlsx -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfImageOptions
+      New
+      OfficePdfImageOptions
+      
+        Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage.
+      
+    
+    
+      Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage.
+    
+    
+      
+        New-OfficePdfImageOptions
+        
+          BackgroundColor
+          
+            
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          MaximumDegreeOfParallelism
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputCount
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputHeight
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputWidth
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalEncodedBytes
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          RasterOverflowBehavior
+          
+            
+          
+          OfficeRasterOverflowBehavior
+          
+            ReduceScale
+            Throw
+          
+          
+            OfficeRasterOverflowBehavior
+            
+          
+          None
+        
+        
+          RenderTimeoutSeconds
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Scale
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TargetDpi
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TextShapingLanguage
+          
+            
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          ThumbnailMaxDimension
+          
+            Maximum thumbnail width or height.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+      
+    
+    
+      
+        BackgroundColor
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        MaximumDegreeOfParallelism
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputCount
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputHeight
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputWidth
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalEncodedBytes
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        RasterOverflowBehavior
+        
+          
+        
+        OfficeRasterOverflowBehavior
+        
+          ReduceScale
+          Throw
+        
+        
+          OfficeRasterOverflowBehavior
+          
+        
+        None
+      
+      
+        RenderTimeoutSeconds
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Scale
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TargetDpi
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TextShapingLanguage
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        ThumbnailMaxDimension
+        
+          Maximum thumbnail width or height.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Pdf.PdfImageExportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create compact PDF thumbnails with bounded output dimensions.
+        
+          PS> 
+        
+        $options = New-OfficePdfImageOptions -ThumbnailMaxDimension 320 -MaximumOutputWidth 640
+            Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Thumbnails -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfPowerPointImportOptions
+      New
+      OfficePdfPowerPointImportOptions
+      
+        Creates discoverable PDF-to-PowerPoint reconstruction settings.
+      
+    
+    
+      Creates discoverable PDF-to-PowerPoint reconstruction settings.
+    
+    
+      
+        New-OfficePdfPowerPointImportOptions
+        
+          AlignNumericColumns
+          
+            Right-align inferred numeric columns.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          BandedRows
+          
+            Enable banded-row styling.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Dpi
+          
+            Raster resolution used by visual import.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          EmptyPresentationMessage
+          
+            Message used when no supported content is detected.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          EmptyPresentationTitle
+          
+            Title used when no supported content is detected.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          IncludeColumnHeaderRows
+          
+            Add inferred column headers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSourceTitles
+          
+            Add source-page titles.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaxColumnsPerSlide
+          
+            Maximum columns written to one slide; zero means unlimited.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxEditableObjectsPerPage
+          
+            Maximum editable objects reconstructed per page.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxOutputBytesPerPage
+          
+            Maximum encoded bytes per rendered page.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxPages
+          
+            Maximum pages imported.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxPixelsPerPage
+          
+            Maximum pixels per rendered page.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxRows
+          
+            Maximum body rows imported per table; zero means unlimited.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxRowsPerSlide
+          
+            Maximum rows written to one slide; zero means unlimited.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxTotalOutputBytes
+          
+            Maximum aggregate encoded output bytes.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MergePageContinuations
+          
+            Merge compatible table segments across pages.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Mode
+          
+            Visual, editable-table, hybrid, editable-content, or automatic import mode.
+          
+          PdfPowerPointImportMode
+          
+            VisualPages
+            EditableTables
+            HybridVisualAndEditableTables
+            EditableContent
+            Auto
+          
+          
+            PdfPowerPointImportMode
+            
+          
+          None
+        
+        
+          PageRange
+          
+            Optional one-based page ranges such as 1-3,5.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          SuppressRepeatedBodyHeaderRows
+          
+            Suppress repeated body header rows.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          TableStyle
+          
+            PowerPoint table style.
+          
+          PowerPointTableStylePreset
+          
+            PowerPointTableStylePreset
+            
+          
+          None
+        
+      
+    
+    
+      
+        AlignNumericColumns
+        
+          Right-align inferred numeric columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        BandedRows
+        
+          Enable banded-row styling.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Dpi
+        
+          Raster resolution used by visual import.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        EmptyPresentationMessage
+        
+          Message used when no supported content is detected.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        EmptyPresentationTitle
+        
+          Title used when no supported content is detected.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        IncludeColumnHeaderRows
+        
+          Add inferred column headers.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSourceTitles
+        
+          Add source-page titles.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaxColumnsPerSlide
+        
+          Maximum columns written to one slide; zero means unlimited.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxEditableObjectsPerPage
+        
+          Maximum editable objects reconstructed per page.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxOutputBytesPerPage
+        
+          Maximum encoded bytes per rendered page.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxPages
+        
+          Maximum pages imported.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxPixelsPerPage
+        
+          Maximum pixels per rendered page.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxRows
+        
+          Maximum body rows imported per table; zero means unlimited.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxRowsPerSlide
+        
+          Maximum rows written to one slide; zero means unlimited.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxTotalOutputBytes
+        
+          Maximum aggregate encoded output bytes.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MergePageContinuations
+        
+          Merge compatible table segments across pages.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Mode
+        
+          Visual, editable-table, hybrid, editable-content, or automatic import mode.
+        
+        PdfPowerPointImportMode
+        
+          VisualPages
+          EditableTables
+          HybridVisualAndEditableTables
+          EditableContent
+          Auto
+        
+        
+          PdfPowerPointImportMode
+          
+        
+        None
+      
+      
+        PageRange
+        
+          Optional one-based page ranges such as 1-3,5.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        SuppressRepeatedBodyHeaderRows
+        
+          Suppress repeated body header rows.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        TableStyle
+        
+          PowerPoint table style.
+        
+        PowerPointTableStylePreset
+        
+          PowerPointTableStylePreset
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.PowerPoint.Pdf.PdfPowerPointImportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Import selected PDF pages as bounded slide content.
+        
+          PS> 
+        
+        $options = New-OfficePdfPowerPointImportOptions -PageRange '1-5' -MaxPages 5 -IncludeSourceTitles
+            ConvertTo-OfficePdfPowerPoint -Path .\Source.pdf -OutputPath .\Slides.pptx -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfSignature
+      New
+      OfficePdfSignature
+      
+        Prepares an existing PDF for external digital signing by appending a signature field, /ByteRange, and reserved /Contents placeholder.
+      
+    
+    
+      The command does not create CMS, CAdES, timestamp, certificate-chain, or revocation data. Use the returned byte range or digest with an external signing service, then inject the produced signature bytes with Set-OfficePdfSignature.
+    
+    
+      
+        New-OfficePdfSignature
+        
+          ContactInfo
+          
+            Signer contact information stored in the signature dictionary.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          FieldName
+          
+            Signature field name to append.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Filter
+          
+            Signature handler filter name. The default is Adobe.PPKLite.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          IgnorePermissionRestrictions
+          
+            After successful password authentication, explicitly ignore owner-imposed signature-field restrictions.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Location
+          
+            Signing location stored in the signature dictionary.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Name
+          
+            Display signer name stored in the signature dictionary.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          OutputPath
+          
+            Output prepared PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PassThruReport
+          
+            Return the OfficeIMO.Pdf preparation report instead of only the output file.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password used to authenticate an encrypted PDF.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Input PDF path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Reason
+          
+            Signing reason stored in the signature dictionary.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          ReservedBytes
+          
+            Raw signature bytes to reserve in /Contents before hex encoding.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          SubFilter
+          
+            Signature subfilter that describes the external signature bytes to inject later.
+          
+          PdfExternalSignatureSubFilter
+          
+            DetachedCms
+            CadesDetached
+            DocumentTimestamp
+          
+          
+            PdfExternalSignatureSubFilter
+            
+          
+          None
+        
+      
+    
+    
+      
+        ContactInfo
+        
+          Signer contact information stored in the signature dictionary.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        FieldName
+        
+          Signature field name to append.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Filter
+        
+          Signature handler filter name. The default is Adobe.PPKLite.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        IgnorePermissionRestrictions
+        
+          After successful password authentication, explicitly ignore owner-imposed signature-field restrictions.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Location
+        
+          Signing location stored in the signature dictionary.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Name
+        
+          Display signer name stored in the signature dictionary.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        OutputPath
+        
+          Output prepared PDF path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PassThruReport
+        
+          Return the OfficeIMO.Pdf preparation report instead of only the output file.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Password
+        
+          Password used to authenticate an encrypted PDF.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Input PDF path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Reason
+        
+          Signing reason stored in the signature dictionary.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        ReservedBytes
+        
+          Raw signature bytes to reserve in /Contents before hex encoding.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        SubFilter
+        
+          Signature subfilter that describes the external signature bytes to inject later.
+        
+        PdfExternalSignatureSubFilter
+        
+          DetachedCms
+          CadesDetached
+          DocumentTimestamp
+        
+        
+          PdfExternalSignatureSubFilter
+          
+        
+        None
+      
+    
+    
+      
+        
+          System.String
+        
+      
+    
+    
+      
+        
+          System.IO.FileInfo
+        
+      
+      
+        
+          OfficeIMO.Pdf.PdfExternalSignaturePreparation
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Prepare a PDF for detached CMS signing.
+        
+          PS> 
+        
+        $plan = New-OfficePdfSignature -Path .\Input.pdf -OutputPath .\Prepared.pdf -FieldName Approval -Name 'Alice' -Reason Approval -PassThruReport
+            $plan.ByteRangeValues
+            $plan.ComputeSha256Digest()
+        
+          Writes a prepared PDF and returns the OfficeIMO.Pdf external signing preparation report.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfTableCell
+      New
+      OfficePdfTableCell
+      
+        Creates a reusable PDF table cell definition for explicit table rows.
+      
+    
+    
+      Creates a reusable PDF table cell definition for explicit table rows.
+    
+    
+      
+        New-OfficePdfTableCell
+        
+          Align
+          
+            Horizontal cell alignment.
+          
+          PdfColumnAlign
+          
+            Left
+            Center
+            Right
+          
+          
+            PdfColumnAlign
+            
+          
+          None
+        
+        
+          Bold
+          
+            Render the cell text in bold.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CheckBox
+          
+            Typed check boxes rendered inside the cell.
+          
+          PdfTableCellCheckBox[]
+          
+            PdfTableCellCheckBox[]
+            
+          
+          None
+        
+        
+          ColumnSpan
+          
+            Number of logical columns covered by the cell.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          FillColor
+          
+            Cell fill color. Named colors and hexadecimal colors are accepted.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          FontSize
+          
+            Cell font size in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          FormField
+          
+            Typed text or choice form fields rendered inside the cell.
+          
+          PdfTableCellFormField[]
+          
+            PdfTableCellFormField[]
+            
+          
+          None
+        
+        
+          Image
+          
+            Typed images rendered inside the cell.
+          
+          PdfTableCellImage[]
+          
+            PdfTableCellImage[]
+            
+          
+          None
+        
+        
+          Italic
+          
+            Render the cell text in italics.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          LinkContents
+          
+            Accessible annotation text for the cell link.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          LinkDestinationName
+          
+            Named PDF destination linked from the cell.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          LinkUri
+          
+            Absolute or catalog-base-relative URI linked from the cell.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          NamedDestinationName
+          
+            Named PDF destination defined at this cell.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          NoWrap
+          
+            Keep the cell content on one visual line.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          RowSpan
+          
+            Number of logical rows covered by the cell.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          Run
+          
+            Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object.
+          
+          Object[]
+          
+            Object[]
+            
+          
+          None
+        
+        
+          Strike
+          
+            Render the cell text with strikethrough.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Text
+          
+            Cell text.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          TextColor
+          
+            Cell text color. Named colors and hexadecimal colors are accepted.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Underline
+          
+            Render the cell text with underline.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          UnderlineStyle
+          
+            Optional underline style name. PDF table rendering treats any supported value as underline.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          VerticalAlign
+          
+            Vertical cell alignment.
+          
+          PdfCellVerticalAlign
+          
+            Top
+            Middle
+            Bottom
+          
+          
+            PdfCellVerticalAlign
+            
+          
+          None
+        
+      
+    
+    
+      
+        Align
+        
+          Horizontal cell alignment.
+        
+        PdfColumnAlign
+        
+          Left
+          Center
+          Right
+        
+        
+          PdfColumnAlign
+          
+        
+        None
+      
+      
+        Bold
+        
+          Render the cell text in bold.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CheckBox
+        
+          Typed check boxes rendered inside the cell.
+        
+        PdfTableCellCheckBox[]
+        
+          PdfTableCellCheckBox[]
+          
+        
+        None
+      
+      
+        ColumnSpan
+        
+          Number of logical columns covered by the cell.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        FillColor
+        
+          Cell fill color. Named colors and hexadecimal colors are accepted.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        FontSize
+        
+          Cell font size in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        FormField
+        
+          Typed text or choice form fields rendered inside the cell.
+        
+        PdfTableCellFormField[]
+        
+          PdfTableCellFormField[]
+          
+        
+        None
+      
+      
+        Image
+        
+          Typed images rendered inside the cell.
+        
+        PdfTableCellImage[]
+        
+          PdfTableCellImage[]
+          
+        
+        None
+      
+      
+        Italic
+        
+          Render the cell text in italics.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        LinkContents
+        
+          Accessible annotation text for the cell link.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        LinkDestinationName
+        
+          Named PDF destination linked from the cell.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        LinkUri
+        
+          Absolute or catalog-base-relative URI linked from the cell.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        NamedDestinationName
+        
+          Named PDF destination defined at this cell.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        NoWrap
+        
+          Keep the cell content on one visual line.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        RowSpan
+        
+          Number of logical rows covered by the cell.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        Run
+        
+          Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object.
+        
+        Object[]
+        
+          Object[]
+          
+        
+        None
+      
+      
+        Strike
+        
+          Render the cell text with strikethrough.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Text
+        
+          Cell text.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        TextColor
+        
+          Cell text color. Named colors and hexadecimal colors are accepted.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Underline
+        
+          Render the cell text with underline.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UnderlineStyle
+        
+          Optional underline style name. PDF table rendering treats any supported value as underline.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        VerticalAlign
+        
+          Vertical cell alignment.
+        
+        PdfCellVerticalAlign
+        
+          Top
+          Middle
+          Bottom
+        
+        
+          PdfCellVerticalAlign
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          PSWriteOffice.Services.Table.OfficeTableCellSpec
+        
+        
+          Describes a logical table cell that can be rendered by multiple Office table surfaces.
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a full-width PDF table section row.
+        
+          PS> 
+        
+        $row = @(New-OfficePdfTableCell -Text 'Identity systems' -ColumnSpan 3 -FillColor '#DBEAFE' -TextColor '#1E3A8A' -Bold)
+        
+          The returned cell can be passed to PdfTable inside explicit row arrays.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfTableCellCheckBox
+      New
+      OfficePdfTableCellCheckBox
+      
+        Creates a typed check box for a PDF table cell.
+      
+    
+    
+      Creates a typed check box for a PDF table cell.
+    
+    
+      
+        New-OfficePdfTableCellCheckBox
+        
+          Checked
+          
+            Create the check box in its checked state.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CheckedValueName
+          
+            PDF appearance-state name written when checked.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Name
+          
+            Unique AcroForm field name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Size
+          
+            Visual square size in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+      
+    
+    
+      
+        Checked
+        
+          Create the check box in its checked state.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CheckedValueName
+        
+          PDF appearance-state name written when checked.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Name
+        
+          Unique AcroForm field name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Size
+        
+          Visual square size in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Pdf.PdfTableCellCheckBox
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a checked table-cell field.
+        
+          PS> 
+        
+        $approved = New-OfficePdfTableCellCheckBox -Name Approved -Checked
+            $cell = New-OfficePdfTableCell -Text 'Approved' -CheckBox $approved
+        
+          The check box remains an AcroForm field positioned by the OfficeIMO table renderer.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfTableCellField
+      New
+      OfficePdfTableCellField
+      
+        Creates a typed text or choice field for a PDF table cell.
+      
+    
+    
+      Creates a typed text or choice field for a PDF table cell.
+    
+    
+      
+        New-OfficePdfTableCellField
+        
+          FontSize
+          
+            Field font size in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Height
+          
+            Rendered field height in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Name
+          
+            Unique AcroForm field name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Value
+          
+            Initial field value.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Width
+          
+            Rendered field width in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+      
+      
+        New-OfficePdfTableCellField
+        
+          FontSize
+          
+            Field font size in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Height
+          
+            Rendered field height in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          ListBox
+          
+            Render a choice field as a list box instead of a combo box.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Name
+          
+            Unique AcroForm field name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Option
+          
+            Available values for a choice field.
+          
+          String[]
+          
+            String[]
+            
+          
+          None
+        
+        
+          Value
+          
+            Initial field value.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Width
+          
+            Rendered field width in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+      
+    
+    
+      
+        FontSize
+        
+          Field font size in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Height
+        
+          Rendered field height in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        ListBox
+        
+          Render a choice field as a list box instead of a combo box.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Name
+        
+          Unique AcroForm field name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Option
+        
+          Available values for a choice field.
+        
+        String[]
+        
+          String[]
+          
+        
+        None
+      
+      
+        Value
+        
+          Initial field value.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Width
+        
+          Rendered field width in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Pdf.PdfTableCellFormField
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a reviewer choice field for a typed PDF table cell.
+        
+          PS> 
+        
+        $reviewer = New-OfficePdfTableCellField -Name Reviewer -Option 'Unassigned', 'Alice', 'Bob' -Value 'Unassigned'
+            $cell = New-OfficePdfTableCell -Text 'Reviewer' -FormField $reviewer
+        
+          The choice field is positioned by the OfficeIMO PDF table renderer.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfTableCellImage
+      New
+      OfficePdfTableCellImage
+      
+        Creates a typed image for a PDF table cell.
+      
+    
+    
+      Creates a typed image for a PDF table cell.
+    
+    
+      
+        New-OfficePdfTableCellImage
+        
+          Height
+          
+            Rendered height in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          LinkContents
+          
+            Accessible annotation text for the image link.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          LinkUri
+          
+            Optional absolute or catalog-base-relative URI linked from the image.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Raster image path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Width
+          
+            Rendered width in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+      
+    
+    
+      
+        Height
+        
+          Rendered height in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        LinkContents
+        
+          Accessible annotation text for the image link.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        LinkUri
+        
+          Optional absolute or catalog-base-relative URI linked from the image.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Raster image path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Width
+        
+          Rendered width in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Pdf.PdfTableCellImage
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Add a linked logo to a typed PDF table cell.
+        
+          PS> 
+        
+        $logo = New-OfficePdfTableCellImage -Path .\logo.png -Width 28 -Height 28 -LinkUri 'https://example.com'
+            $cell = New-OfficePdfTableCell -Text 'Portal' -Image $logo
+        
+          The image remains a native PDF table-cell visual and may carry its own link.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfVisualComparisonOptions
+      New
+      OfficePdfVisualComparisonOptions
+      
+        Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual.
+      
+    
+    
+      Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual.
+    
+    
+      
+        New-OfficePdfVisualComparisonOptions
+        
+          Alignment
+          
+            Page alignment used for differently sized renders.
+          
+          PdfVisualPageAlignment
+          
+            TopLeft
+            Center
+          
+          
+            PdfVisualPageAlignment
+            
+          
+          None
+        
+        
+          AllowedDifferenceRatio
+          
+            Maximum differing-pixel ratio treated as equal.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          BackgroundColor
+          
+            Background color name or hex value.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          ChannelTolerance
+          
+            Maximum per-channel byte difference treated as equal.
+          
+          Byte
+          
+            Byte
+            
+          
+          None
+        
+        
+          MaxPages
+          
+            Maximum pages compared.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxPixelsPerImage
+          
+            Maximum pixels accepted per rendered image.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxTotalOutputBytes
+          
+            Maximum total bytes retained for comparison artifacts.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaxTotalPixels
+          
+            Maximum pixels accepted across the comparison.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          Scale
+          
+            Render scale applied before comparison.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+      
+    
+    
+      
+        Alignment
+        
+          Page alignment used for differently sized renders.
+        
+        PdfVisualPageAlignment
+        
+          TopLeft
+          Center
+        
+        
+          PdfVisualPageAlignment
+          
+        
+        None
+      
+      
+        AllowedDifferenceRatio
+        
+          Maximum differing-pixel ratio treated as equal.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        BackgroundColor
+        
+          Background color name or hex value.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        ChannelTolerance
+        
+          Maximum per-channel byte difference treated as equal.
+        
+        Byte
+        
+          Byte
+          
+        
+        None
+      
+      
+        MaxPages
+        
+          Maximum pages compared.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxPixelsPerImage
+        
+          Maximum pixels accepted per rendered image.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxTotalOutputBytes
+        
+          Maximum total bytes retained for comparison artifacts.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaxTotalPixels
+        
+          Maximum pixels accepted across the comparison.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        Scale
+        
+          Render scale applied before comparison.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Pdf.PdfVisualComparisonOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Compare PDFs with a small rendering tolerance.
+        
+          PS> 
+        
+        $options = New-OfficePdfVisualComparisonOptions -ChannelTolerance 2 -AllowedDifferenceRatio 0.001 -MaxPages 50
+            Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePdfWordImportOptions
+      New
+      OfficePdfWordImportOptions
+      
+        Creates discoverable PDF-to-Word reconstruction settings.
+      
+    
+    
+      Creates discoverable PDF-to-Word reconstruction settings.
+    
+    
+      
+        New-OfficePdfWordImportOptions
+        
+          AlignNumericColumns
+          
+            Right-align inferred numeric columns.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          AllowedHyperlinkUriScheme
+          
+            Allowed absolute hyperlink URI schemes.
+          
+          String[]
+          
+            String[]
+            
+          
+          None
+        
+        
+          BookmarkPrefix
+          
+            Prefix for generated Word bookmarks.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          EmptyDocumentMessage
+          
+            Text used when no supported content is detected.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          FitTablesToPageWidth
+          
+            Fit imported tables to page width.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportHeadings
+          
+            Import detected headings.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportImages
+          
+            Import supported embedded images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportInternalLinks
+          
+            Import supported internal links.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportLists
+          
+            Import detected lists.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportParagraphs
+          
+            Import detected paragraphs.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportTables
+          
+            Import detected tables.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ImportUriLinks
+          
+            Import safe URI links.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeEmptyPages
+          
+            Represent empty PDF pages.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeFormFieldPlaceholders
+          
+            Represent AcroForm widgets with editable placeholders.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeImagePlaceholders
+          
+            Use paragraphs when an image cannot be embedded.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeMetadata
+          
+            Copy PDF metadata into Word properties.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaxTableRows
+          
+            Maximum body rows imported per table; zero means unlimited.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PreserveImagePlacementSize
+          
+            Preserve detected image placement size.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PreservePageBreaks
+          
+            Represent source pages with Word page breaks.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          RepeatHeaderRows
+          
+            Repeat inferred table header rows.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          TablesOnly
+          
+            Use the built-in tables-only import profile.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          TableStyle
+          
+            Word table style for imported tables.
+          
+          WordTableStyle
+          
+            TableNormal
+            TableGrid
+            PlainTable1
+            PlainTable2
+            PlainTable3
+            PlainTable4
+            PlainTable5
+            GridTable1Light
+            GridTable1LightAccent1
+            GridTable1LightAccent2
+            GridTable1LightAccent3
+            GridTable1LightAccent4
+            GridTable1LightAccent5
+            GridTable1LightAccent6
+            GridTable2
+            GridTable2Accent1
+            GridTable2Accent2
+            GridTable2Accent3
+            GridTable2Accent4
+            GridTable2Accent5
+            GridTable2Accent6
+            GridTable3
+            GridTable3Accent1
+            GridTable3Accent2
+            GridTable3Accent3
+            GridTable3Accent4
+            GridTable3Accent5
+            GridTable3Accent6
+            GridTable4
+            GridTable4Accent1
+            GridTable4Accent2
+            GridTable4Accent3
+            GridTable4Accent4
+            GridTable4Accent5
+            GridTable4Accent6
+            GridTable5Dark
+            GridTable5DarkAccent1
+            GridTable5DarkAccent2
+            GridTable5DarkAccent3
+            GridTable5DarkAccent4
+            GridTable5DarkAccent5
+            GridTable5DarkAccent6
+            GridTable6Colorful
+            GridTable6ColorfulAccent1
+            GridTable6ColorfulAccent2
+            GridTable6ColorfulAccent3
+            GridTable6ColorfulAccent4
+            GridTable6ColorfulAccent5
+            GridTable6ColorfulAccent6
+            GridTable7Colorful
+            GridTable7ColorfulAccent1
+            GridTable7ColorfulAccent2
+            GridTable7ColorfulAccent3
+            GridTable7ColorfulAccent4
+            GridTable7ColorfulAccent5
+            GridTable7ColorfulAccent6
+            ListTable1Light
+            ListTable1LightAccent1
+            ListTable1LightAccent2
+            ListTable1LightAccent3
+            ListTable1LightAccent4
+            ListTable1LightAccent5
+            ListTable1LightAccent6
+            ListTable2
+            ListTable2Accent1
+            ListTable2Accent2
+            ListTable2Accent3
+            ListTable2Accent4
+            ListTable2Accent5
+            ListTable2Accent6
+            ListTable3
+            ListTable3Accent1
+            ListTable3Accent2
+            ListTable3Accent3
+            ListTable3Accent4
+            ListTable3Accent5
+            ListTable3Accent6
+            ListTable4
+            ListTable4Accent1
+            ListTable4Accent2
+            ListTable4Accent3
+            ListTable4Accent4
+            ListTable4Accent5
+            ListTable4Accent6
+            ListTable5Dark
+            ListTable5DarkAccent1
+            ListTable5DarkAccent2
+            ListTable5DarkAccent3
+            ListTable5DarkAccent4
+            ListTable5DarkAccent5
+            ListTable5DarkAccent6
+            ListTable6Colorful
+            ListTable6ColorfulAccent1
+            ListTable6ColorfulAccent2
+            ListTable6ColorfulAccent3
+            ListTable6ColorfulAccent4
+            ListTable6ColorfulAccent5
+            ListTable6ColorfulAccent6
+            ListTable7Colorful
+            ListTable7ColorfulAccent1
+            ListTable7ColorfulAccent2
+            ListTable7ColorfulAccent3
+            ListTable7ColorfulAccent4
+            ListTable7ColorfulAccent5
+            ListTable7ColorfulAccent6
+          
+          
+            WordTableStyle
+            
+          
+          None
+        
+        
+          UseSharedPageReadingOrder
+          
+            Use the crop-, rotation-, and column-aware reading order.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+      
+    
+    
+      
+        AlignNumericColumns
+        
+          Right-align inferred numeric columns.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        AllowedHyperlinkUriScheme
+        
+          Allowed absolute hyperlink URI schemes.
+        
+        String[]
+        
+          String[]
+          
+        
+        None
+      
+      
+        BookmarkPrefix
+        
+          Prefix for generated Word bookmarks.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        EmptyDocumentMessage
+        
+          Text used when no supported content is detected.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        FitTablesToPageWidth
+        
+          Fit imported tables to page width.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportHeadings
+        
+          Import detected headings.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportImages
+        
+          Import supported embedded images.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportInternalLinks
+        
+          Import supported internal links.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportLists
+        
+          Import detected lists.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportParagraphs
+        
+          Import detected paragraphs.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportTables
+        
+          Import detected tables.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ImportUriLinks
+        
+          Import safe URI links.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeEmptyPages
+        
+          Represent empty PDF pages.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeFormFieldPlaceholders
+        
+          Represent AcroForm widgets with editable placeholders.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeImagePlaceholders
+        
+          Use paragraphs when an image cannot be embedded.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeMetadata
+        
+          Copy PDF metadata into Word properties.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaxTableRows
+        
+          Maximum body rows imported per table; zero means unlimited.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        PreserveImagePlacementSize
+        
+          Preserve detected image placement size.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PreservePageBreaks
+        
+          Represent source pages with Word page breaks.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        RepeatHeaderRows
+        
+          Repeat inferred table header rows.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        TablesOnly
+        
+          Use the built-in tables-only import profile.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        TableStyle
+        
+          Word table style for imported tables.
+        
+        WordTableStyle
+        
+          TableNormal
+          TableGrid
+          PlainTable1
+          PlainTable2
+          PlainTable3
+          PlainTable4
+          PlainTable5
+          GridTable1Light
+          GridTable1LightAccent1
+          GridTable1LightAccent2
+          GridTable1LightAccent3
+          GridTable1LightAccent4
+          GridTable1LightAccent5
+          GridTable1LightAccent6
+          GridTable2
+          GridTable2Accent1
+          GridTable2Accent2
+          GridTable2Accent3
+          GridTable2Accent4
+          GridTable2Accent5
+          GridTable2Accent6
+          GridTable3
+          GridTable3Accent1
+          GridTable3Accent2
+          GridTable3Accent3
+          GridTable3Accent4
+          GridTable3Accent5
+          GridTable3Accent6
+          GridTable4
+          GridTable4Accent1
+          GridTable4Accent2
+          GridTable4Accent3
+          GridTable4Accent4
+          GridTable4Accent5
+          GridTable4Accent6
+          GridTable5Dark
+          GridTable5DarkAccent1
+          GridTable5DarkAccent2
+          GridTable5DarkAccent3
+          GridTable5DarkAccent4
+          GridTable5DarkAccent5
+          GridTable5DarkAccent6
+          GridTable6Colorful
+          GridTable6ColorfulAccent1
+          GridTable6ColorfulAccent2
+          GridTable6ColorfulAccent3
+          GridTable6ColorfulAccent4
+          GridTable6ColorfulAccent5
+          GridTable6ColorfulAccent6
+          GridTable7Colorful
+          GridTable7ColorfulAccent1
+          GridTable7ColorfulAccent2
+          GridTable7ColorfulAccent3
+          GridTable7ColorfulAccent4
+          GridTable7ColorfulAccent5
+          GridTable7ColorfulAccent6
+          ListTable1Light
+          ListTable1LightAccent1
+          ListTable1LightAccent2
+          ListTable1LightAccent3
+          ListTable1LightAccent4
+          ListTable1LightAccent5
+          ListTable1LightAccent6
+          ListTable2
+          ListTable2Accent1
+          ListTable2Accent2
+          ListTable2Accent3
+          ListTable2Accent4
+          ListTable2Accent5
+          ListTable2Accent6
+          ListTable3
+          ListTable3Accent1
+          ListTable3Accent2
+          ListTable3Accent3
+          ListTable3Accent4
+          ListTable3Accent5
+          ListTable3Accent6
+          ListTable4
+          ListTable4Accent1
+          ListTable4Accent2
+          ListTable4Accent3
+          ListTable4Accent4
+          ListTable4Accent5
+          ListTable4Accent6
+          ListTable5Dark
+          ListTable5DarkAccent1
+          ListTable5DarkAccent2
+          ListTable5DarkAccent3
+          ListTable5DarkAccent4
+          ListTable5DarkAccent5
+          ListTable5DarkAccent6
+          ListTable6Colorful
+          ListTable6ColorfulAccent1
+          ListTable6ColorfulAccent2
+          ListTable6ColorfulAccent3
+          ListTable6ColorfulAccent4
+          ListTable6ColorfulAccent5
+          ListTable6ColorfulAccent6
+          ListTable7Colorful
+          ListTable7ColorfulAccent1
+          ListTable7ColorfulAccent2
+          ListTable7ColorfulAccent3
+          ListTable7ColorfulAccent4
+          ListTable7ColorfulAccent5
+          ListTable7ColorfulAccent6
+        
+        
+          WordTableStyle
+          
+        
+        None
+      
+      
+        UseSharedPageReadingOrder
+        
+          Use the crop-, rotation-, and column-aware reading order.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Word.Pdf.PdfWordImportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Reconstruct headings, paragraphs, lists, and tables.
+        
+          PS> 
+        
+        $options = New-OfficePdfWordImportOptions -ImportHeadings -ImportParagraphs -ImportLists -ImportTables
+            ConvertTo-OfficePdfWord -Path .\Source.pdf -OutputPath .\Rebuilt.docx -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePowerPoint
+      New
+      OfficePowerPoint
+      
+        Creates a PowerPoint presentation using the DSL.
+      
+    
+    
+      Initializes a presentation, runs the DSL script block, and optionally saves the deck.
+    
+    
+      
+        New-OfficePowerPoint
+        
+          Content
+          
+            DSL scriptblock describing presentation content.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving after executing the DSL.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the presentation after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the saved FileInfo for chaining.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password used to save the presentation as an encrypted package.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination path for the new .pptx.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        Content
+        
+          DSL scriptblock describing presentation content.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        NoSave
+        
+          Skip saving after executing the DSL.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Open
+        
+          Open the presentation after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the saved FileInfo for chaining.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Password
+        
+          Password used to save the presentation as an encrypted package.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Destination path for the new .pptx.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+    
+      
+        
+      
+    
+    
+      
+        Create and capture the presentation object.
+        
+          PS> 
+        
+        $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave
+        
+          Creates a live presentation associated with deck.pptx for incremental composition.
+        
+      
+      
+        Create a deck with a title slide.
+        
+          PS> 
+        
+        New-OfficePowerPoint -Path .\deck.pptx { PptSlide { PptTitle -Title 'Status Update' } } -Open
+        
+          Creates, saves, and opens a deck with one titled slide.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePowerPointDeckPlan
+      New
+      OfficePowerPointDeckPlan
+      
+        Creates a semantic PowerPoint deck plan for designer rendering.
+      
+    
+    
+      Creates a semantic PowerPoint deck plan for designer rendering.
+    
+    
+      
+        New-OfficePowerPointDeckPlan
+        
+          Content
+          
+            Nested deck-plan DSL content.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+      
+    
+    
+      
+        Content
+        
+          Nested deck-plan DSL content.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.PowerPoint.PowerPointDeckPlan
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a semantic service brief plan.
+        
+          PS> 
+        
+        $plan = New-OfficePowerPointDeckPlan {
+                Add-OfficePowerPointPlanSection -Title 'Service Review' -Subtitle 'Monthly operating brief'
+                Add-OfficePowerPointPlanProcess -Title 'Operating rhythm' -Steps @(
+                  @{ Title = 'Collect'; Body = 'Gather health signals' }
+                  @{ Title = 'Review'; Body = 'Confirm owner decisions' }
+                  @{ Title = 'Publish'; Body = 'Share the final brief' }
+                )
+            }
+            New-OfficePowerPoint -Path .\Examples\Documents\DesignerDeck.pptx {
+                Add-OfficePowerPointDesignerDeck -Plan $plan
+            }
+        
+          Builds a deck plan and renders it through the OfficeIMO designer helpers.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePowerPointImageOptions
+      New
+      OfficePowerPointImageOptions
+      
+        Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage.
+      
+    
+    
+      Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage.
+    
+    
+      
+        New-OfficePowerPointImageOptions
+        
+          BackgroundColor
+          
+            
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          IncludeAutoShapes
+          
+            Render auto shapes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeCharts
+          
+            Render charts.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeHiddenShapes
+          
+            Render hidden shapes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeHiddenSlides
+          
+            Include hidden slides.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludePictures
+          
+            Render pictures.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSlideBackground
+          
+            Render slide backgrounds.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSlideContent
+          
+            Render slide content.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeTables
+          
+            Render tables.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeTextBoxes
+          
+            Render text boxes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaximumDegreeOfParallelism
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputCount
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputHeight
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputWidth
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalEncodedBytes
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          RasterOverflowBehavior
+          
+            
+          
+          OfficeRasterOverflowBehavior
+          
+            ReduceScale
+            Throw
+          
+          
+            OfficeRasterOverflowBehavior
+            
+          
+          None
+        
+        
+          RenderTimeoutSeconds
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Scale
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          SlideNumber
+          
+            One-based slide numbers to export.
+          
+          Int32[]
+          
+            Int32[]
+            
+          
+          None
+        
+        
+          TargetDpi
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TextShapingLanguage
+          
+            
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        BackgroundColor
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        IncludeAutoShapes
+        
+          Render auto shapes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeCharts
+        
+          Render charts.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeHiddenShapes
+        
+          Render hidden shapes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeHiddenSlides
+        
+          Include hidden slides.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludePictures
+        
+          Render pictures.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSlideBackground
+        
+          Render slide backgrounds.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSlideContent
+        
+          Render slide content.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeTables
+        
+          Render tables.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeTextBoxes
+        
+          Render text boxes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaximumDegreeOfParallelism
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputCount
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputHeight
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputWidth
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalEncodedBytes
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        RasterOverflowBehavior
+        
+          
+        
+        OfficeRasterOverflowBehavior
+        
+          ReduceScale
+          Throw
+        
+        
+          OfficeRasterOverflowBehavior
+          
+        
+        None
+      
+      
+        RenderTimeoutSeconds
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Scale
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        SlideNumber
+        
+          One-based slide numbers to export.
+        
+        Int32[]
+        
+          Int32[]
+          
+        
+        None
+      
+      
+        TargetDpi
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TextShapingLanguage
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.PowerPoint.PowerPointPresentationImageExportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Render selected slides with their backgrounds and content.
+        
+          PS> 
+        
+        $options = New-OfficePowerPointImageOptions -SlideNumber 1,3 -IncludeSlideBackground -IncludeSlideContent
+            Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePowerPointOpenDocumentOptions
+      New
+      OfficePowerPointOpenDocumentOptions
+      
+        Creates PowerPoint/OpenDocument conversion settings.
+      
+    
+    
+      Creates PowerPoint/OpenDocument conversion settings.
+    
+    
+      
+        New-OfficePowerPointOpenDocumentOptions
+        
+          IncludeBasicFormatting
+          
+            Copy common fills, outlines, and text-run formatting.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeImages
+          
+            Copy supported embedded images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSpeakerNotes
+          
+            Copy plain speaker-note text.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          LossPolicy
+          
+            Whether conversion loss is reported or rejected.
+          
+          OdfConversionLossPolicy
+          
+            ReportOnly
+            ThrowOnSkippedOrUnsupported
+            ThrowOnAnyLoss
+          
+          
+            OdfConversionLossPolicy
+            
+          
+          None
+        
+        
+          MaxTableColumns
+          
+            Maximum columns in converted presentation tables.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxTableRows
+          
+            Maximum rows in converted presentation tables.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+      
+    
+    
+      
+        IncludeBasicFormatting
+        
+          Copy common fills, outlines, and text-run formatting.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeImages
+        
+          Copy supported embedded images.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSpeakerNotes
+        
+          Copy plain speaker-note text.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        LossPolicy
+        
+          Whether conversion loss is reported or rejected.
+        
+        OdfConversionLossPolicy
+        
+          ReportOnly
+          ThrowOnSkippedOrUnsupported
+          ThrowOnAnyLoss
+        
+        
+          OdfConversionLossPolicy
+          
+        
+        None
+      
+      
+        MaxTableColumns
+        
+          Maximum columns in converted presentation tables.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxTableRows
+        
+          Maximum rows in converted presentation tables.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.PowerPoint.OpenDocument.PowerPointOpenDocumentConversionOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Include slide images, notes, and basic formatting.
+        
+          PS> 
+        
+        $options = New-OfficePowerPointOpenDocumentOptions -IncludeImages -IncludeSpeakerNotes -IncludeBasicFormatting
+            ConvertTo-OfficeOpenDocument -Path .\Deck.pptx -OutputPath .\Deck.odp -PowerPointOptions $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficePowerPointPdfOptions
+      New
+      OfficePowerPointPdfOptions
+      
+        Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf.
+      
+    
+    
+      Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf.
+    
+    
+      
+        New-OfficePowerPointPdfOptions
+        
+          AllowDocumentFontEmbedding
+          
+            Allow embedding fonts stored in the presentation.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          AllowSystemFontEmbedding
+          
+            Allow embedding fonts discovered on the current system.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ChartLayout
+          
+            Chart layout override.
+          
+          OfficeChartLayout
+          
+            OfficeChartLayout
+            
+          
+          None
+        
+        
+          ChartStyle
+          
+            Chart visual style override.
+          
+          OfficeChartStyle
+          
+            OfficeChartStyle
+            
+          
+          None
+        
+        
+          FontFamily
+          
+            Default font family used when the presentation does not specify one.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          HandoutSlidesPerPage
+          
+            Number of slides on each handout page.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          IncludeAutoShapes
+          
+            Render automatic shapes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeCharts
+          
+            Render charts.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeHiddenSlides
+          
+            Include slides marked hidden.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludePictures
+          
+            Render pictures.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSlideBackgrounds
+          
+            Render slide backgrounds.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSmartArt
+          
+            Render SmartArt.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeSpeakerNotes
+          
+            Include speaker notes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeTables
+          
+            Render tables.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeTextBoxes
+          
+            Render text boxes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaxGroupShapeDepth
+          
+            Maximum nested group-shape depth to render.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PageLayout
+          
+            PDF page layout, such as slides, notes, or handouts.
+          
+          PowerPointPdfPageLayout
+          
+            Slides
+            NotesPages
+            Handouts
+          
+          
+            PowerPointPdfPageLayout
+            
+          
+          None
+        
+        
+          PdfOptions
+          
+            Underlying low-level OfficeIMO PDF options.
+          
+          PdfOptions
+          
+            PdfOptions
+            
+          
+          None
+        
+        
+          PictureFit
+          
+            How pictures fit their shape bounds.
+          
+          OfficeImageFit
+          
+            Stretch
+            Contain
+            Cover
+          
+          
+            OfficeImageFit
+            
+          
+          None
+        
+        
+          WarnOnPictureAspectRatioDistortion
+          
+            Report pictures whose requested fit distorts their aspect ratio.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+      
+    
+    
+      
+        AllowDocumentFontEmbedding
+        
+          Allow embedding fonts stored in the presentation.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        AllowSystemFontEmbedding
+        
+          Allow embedding fonts discovered on the current system.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        ChartLayout
+        
+          Chart layout override.
+        
+        OfficeChartLayout
+        
+          OfficeChartLayout
+          
+        
+        None
+      
+      
+        ChartStyle
+        
+          Chart visual style override.
+        
+        OfficeChartStyle
+        
+          OfficeChartStyle
+          
+        
+        None
+      
+      
+        FontFamily
+        
+          Default font family used when the presentation does not specify one.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        HandoutSlidesPerPage
+        
+          Number of slides on each handout page.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        IncludeAutoShapes
+        
+          Render automatic shapes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeCharts
+        
+          Render charts.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeHiddenSlides
+        
+          Include slides marked hidden.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludePictures
+        
+          Render pictures.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSlideBackgrounds
+        
+          Render slide backgrounds.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSmartArt
+        
+          Render SmartArt.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeSpeakerNotes
+        
+          Include speaker notes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeTables
+        
+          Render tables.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeTextBoxes
+        
+          Render text boxes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaxGroupShapeDepth
+        
+          Maximum nested group-shape depth to render.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        PageLayout
+        
+          PDF page layout, such as slides, notes, or handouts.
+        
+        PowerPointPdfPageLayout
+        
+          Slides
+          NotesPages
+          Handouts
+        
+        
+          PowerPointPdfPageLayout
+          
+        
+        None
+      
+      
+        PdfOptions
+        
+          Underlying low-level OfficeIMO PDF options.
+        
+        PdfOptions
+        
+          PdfOptions
+          
+        
+        None
+      
+      
+        PictureFit
+        
+          How pictures fit their shape bounds.
+        
+        OfficeImageFit
+        
+          Stretch
+          Contain
+          Cover
+        
+        
+          OfficeImageFit
+          
+        
+        None
+      
+      
+        WarnOnPictureAspectRatioDistortion
+        
+          Report pictures whose requested fit distorts their aspect ratio.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.PowerPoint.Pdf.PowerPointPdfSaveOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a handout PDF with notes and hidden slides.
+        
+          PS> 
+        
+        $options = New-OfficePowerPointPdfOptions -PageLayout Handouts -HandoutSlidesPerPage 3 -IncludeSpeakerNotes -IncludeHiddenSlides
+            Export-OfficeDocumentPdf -InputPath .\Briefing.pptx -Path .\Briefing.pdf -PowerPointOptions $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeReaderHierarchyOptions
+      New
+      OfficeReaderHierarchyOptions
+      
+        Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy.
+      
+    
+    
+      Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy.
+    
+    
+      
+        New-OfficeReaderHierarchyOptions
+        
+          IncludeContextInText
+          
+            Include hierarchy context in chunk text.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaxContextCharacters
+          
+            Maximum heading-context characters retained.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxHierarchyDepth
+          
+            Maximum heading hierarchy depth.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxInputChunks
+          
+            Maximum source chunks accepted.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxOutputChunks
+          
+            Maximum chunks returned.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaxTokens
+          
+            Maximum tokens per output chunk.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          OverlapTokens
+          
+            Tokens repeated between adjacent chunks.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PreferMarkdown
+          
+            Prefer Markdown text where the reader supports it.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+      
+    
+    
+      
+        IncludeContextInText
+        
+          Include hierarchy context in chunk text.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaxContextCharacters
+        
+          Maximum heading-context characters retained.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxHierarchyDepth
+        
+          Maximum heading hierarchy depth.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxInputChunks
+        
+          Maximum source chunks accepted.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxOutputChunks
+        
+          Maximum chunks returned.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaxTokens
+        
+          Maximum tokens per output chunk.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        OverlapTokens
+        
+          Tokens repeated between adjacent chunks.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        PreferMarkdown
+        
+          Prefer Markdown text where the reader supports it.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Reader.ReaderHierarchicalChunkingOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create embedding-ready chunks.
+        
+          PS> 
+        
+        $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText
+            Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeRtf
+      New
+      OfficeRtf
+      
+        Creates an RTF document with plain paragraph content.
+      
+    
+    
+      Creates an RTF document with plain paragraph content.
+    
+    
+      
+        New-OfficeRtf
+        
+          NoSave
+          
+            Return the OfficeIMO RTF document without saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit a FileInfo for chaining.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination path for the RTF file.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Text
+          
+            Plain paragraph text to add to the document.
+          
+          String[]
+          
+            String[]
+            
+          
+          None
+        
+      
+    
+    
+      
+        NoSave
+        
+          Return the OfficeIMO RTF document without saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit a FileInfo for chaining.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
+        
+          Destination path for the RTF file.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Text
+        
+          Plain paragraph text to add to the document.
+        
+        String[]
+        
+          String[]
+          
+        
+        None
+      
+    
+    
+      
+        
+          System.String[]
+        
+      
+    
+    
+      
+        
+          System.IO.FileInfo
+        
+      
+      
+        
+          OfficeIMO.Rtf.RtfDocument
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a small RTF file.
+        
+          PS> 
+        
+        $file = New-OfficeRtf -Path .\Report.rtf -Text 'Summary', 'Ready for review' -PassThru
+            Get-OfficeRtf -Path $file.FullName
+        
+          Creates an RTF document with two paragraphs and returns the file.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeRtfPdfOptions
+      New
+      OfficeRtfPdfOptions
+      
+        Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf.
+      
+    
+    
+      Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf.
+    
+    
+      
+        New-OfficeRtfPdfOptions
+        
+          AllowDocumentFontEmbedding
+          
+            Allow embedding fonts referenced by the RTF document.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          AllowSystemFontEmbedding
+          
+            Allow embedding fonts discovered on the current system.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          DefaultImageHeight
+          
+            Fallback image height in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          DefaultImageWidth
+          
+            Fallback image width in PDF points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          IncludeHeaderFooters
+          
+            Render headers and footers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeHiddenText
+          
+            Include text marked hidden.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeImages
+          
+            Render images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeMetadata
+          
+            Copy document metadata into the PDF.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeNotes
+          
+            Render document notes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeTables
+          
+            Render tables.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaximumSystemFontFamilies
+          
+            Maximum number of system font families to discover.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PdfOptions
+          
+            Underlying low-level OfficeIMO PDF options.
+          
+          PdfOptions
+          
+            PdfOptions
+            
+          
+          None
+        
+      
+    
+    
+      
+        AllowDocumentFontEmbedding
+        
+          Allow embedding fonts referenced by the RTF document.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        AllowSystemFontEmbedding
+        
+          Allow embedding fonts discovered on the current system.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        DefaultImageHeight
+        
+          Fallback image height in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        DefaultImageWidth
+        
+          Fallback image width in PDF points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        IncludeHeaderFooters
+        
+          Render headers and footers.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeHiddenText
+        
+          Include text marked hidden.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeImages
+        
+          Render images.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeMetadata
+        
+          Copy document metadata into the PDF.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeNotes
+        
+          Render document notes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeTables
+        
+          Render tables.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaximumSystemFontFamilies
+        
+          Maximum number of system font families to discover.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        PdfOptions
+        
+          Underlying low-level OfficeIMO PDF options.
+        
+        PdfOptions
+        
+          PdfOptions
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Rtf.Pdf.RtfPdfSaveOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Include document structure and bound system-font discovery.
+        
+          PS> 
+        
+        $options = New-OfficeRtfPdfOptions -IncludeImages -IncludeTables -IncludeHeaderFooters -MaximumSystemFontFamilies 32
+            Export-OfficeDocumentPdf -InputPath .\Report.rtf -Path .\Report.pdf -RtfOptions $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeTextRun
+      New
+      OfficeTextRun
+      
+        Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands.
+      
+    
+    
+      Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands.
+    
+    
+      
+        New-OfficeTextRun
+        
+          BackgroundColor
+          
+            Run background or highlight color. Named colors and hexadecimal colors are accepted.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Baseline
+          
+            Target-specific baseline name, such as Superscript or Subscript.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Bold
+          
+            Render the run in bold.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Color
+          
+            Text color. Named colors and hexadecimal colors are accepted.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          FontName
+          
+            Font name, family, or target-specific font identifier.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          FontSize
+          
+            Font size in points.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Italic
+          
+            Render the run in italics.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Kind
+          
+            Run kind such as Text, LineBreak, Tab, Superscript, or Subscript.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          LinkContents
+          
+            Optional link tooltip or annotation contents.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          LinkDestinationName
+          
+            Named destination or bookmark target when supported by the target format.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          LinkUri
+          
+            URI link target when supported by the target format.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Strike
+          
+            Render the run with strikethrough.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          TabAlignment
+          
+            Tab alignment name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          TabLeader
+          
+            PDF tab leader style name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Text
+          
+            Run text.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Underline
+          
+            Render the run with underline.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          UnderlineStyle
+          
+            Optional underline style name when the target format supports it.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        BackgroundColor
+        
+          Run background or highlight color. Named colors and hexadecimal colors are accepted.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Baseline
+        
+          Target-specific baseline name, such as Superscript or Subscript.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Bold
+        
+          Render the run in bold.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Color
+        
+          Text color. Named colors and hexadecimal colors are accepted.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        FontName
+        
+          Font name, family, or target-specific font identifier.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        FontSize
+        
+          Font size in points.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Italic
+        
+          Render the run in italics.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Kind
+        
+          Run kind such as Text, LineBreak, Tab, Superscript, or Subscript.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        LinkContents
+        
+          Optional link tooltip or annotation contents.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        LinkDestinationName
+        
+          Named destination or bookmark target when supported by the target format.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        LinkUri
+        
+          URI link target when supported by the target format.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Strike
+        
+          Render the run with strikethrough.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        TabAlignment
+        
+          Tab alignment name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        TabLeader
+        
+          PDF tab leader style name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Text
+        
+          Run text.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Underline
+        
+          Render the run with underline.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        UnderlineStyle
+        
+          Optional underline style name when the target format supports it.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          PSWriteOffice.Services.Text.OfficeTextRunSpec
+        
+        
+          PowerShell-friendly rich text run specification used by document adapters.
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        EXAMPLE 1
+        New-OfficeTextRun -BackgroundColor 'Value'
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeVisio
+      New
+      OfficeVisio
+      
+        Creates a new OfficeIMO.Visio document with an initial page and optional DSL content.
+      
+    
+    
+      Creates a new OfficeIMO.Visio document with an initial page and optional DSL content.
+    
+    
+      
+        New-OfficeVisio
+        
+          Author
+          
+            Optional document author.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Content
+          
+            DSL script block describing Visio pages, shapes, and connectors.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          Height
+          
+            Initial page height.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving and emit the document object.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the document after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PageName
+          
+            Initial page name.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the document object instead of the saved file.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination .vsdx path.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          RequestRecalcOnOpen
+          
+            Ask Visio to recalculate layout and connector routing when the document opens.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Title
+          
+            Optional document title.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Unit
+          
+            Measurement unit for page width and height.
+          
+          VisioMeasurementUnit
+          
+            Inches
+            Centimeters
+            Millimeters
+          
+          
+            VisioMeasurementUnit
+            
+          
+          None
+        
+        
+          UseMastersByDefault
+          
+            Use Visio masters for supported built-in stencil shapes when saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Width
+          
+            Initial page width.
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+      
+    
+    
+      
+        Author
+        
+          Optional document author.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Content
+        
+          DSL script block describing Visio pages, shapes, and connectors.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        Height
+        
+          Initial page height.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        NoSave
+        
+          Skip saving and emit the document object.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Open
+        
+          Open the document after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PageName
+        
+          Initial page name.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the document object instead of the saved file.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
+        
+          Destination .vsdx path.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        RequestRecalcOnOpen
+        
+          Ask Visio to recalculate layout and connector routing when the document opens.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Title
+        
+          Optional document title.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Unit
+        
+          Measurement unit for page width and height.
+        
+        VisioMeasurementUnit
+        
+          Inches
+          Centimeters
+          Millimeters
+        
+        
+          VisioMeasurementUnit
+          
+        
+        None
+      
+      
+        UseMastersByDefault
+        
+          Use Visio masters for supported built-in stencil shapes when saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Width
+        
+          Initial page width.
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Visio.VisioDocument
+        
+      
+      
+        
+          System.IO.FileInfo
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a simple service map.
+        
+          PS> 
+        
+        New-OfficeVisio -Path .\ServiceMap.vsdx -Title 'Service map' -RequestRecalcOnOpen {
+                VisioRectangle -Key web -Text 'Web' -X 1 -Y 4 -FillColor LightBlue
+                VisioRectangle -Key api -Text 'API' -X 4 -Y 4 -FillColor LightGreen
+                VisioConnector -From web -To api -EndArrow Triangle -Label 'calls'
+            }
+        
+          Creates an editable .vsdx diagram with two shapes and a connector.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeVisioGallery
+      New
+      OfficeVisioGallery
+      
+        Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams.
+      
+    
+    
+      Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams.
+    
+    
+      
+        New-OfficeVisioGallery
+        
+          NoPackageValidation
+          
+            Skip structural package validation after gallery documents are generated.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          NoVisualQualityAnalysis
+          
+            Skip visual quality analysis after gallery documents are generated.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          OutputDirectory
+          
+            Directory that receives generated .vsdx gallery documents.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        NoPackageValidation
+        
+          Skip structural package validation after gallery documents are generated.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        NoVisualQualityAnalysis
+        
+          Skip visual quality analysis after gallery documents are generated.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        OutputDirectory
+        
+          Directory that receives generated .vsdx gallery documents.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Visio.VisioGalleryResult
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Generate the Visio reference gallery.
+        
+          PS> 
+        
+        New-OfficeVisioGallery -OutputDirectory .\VisioGallery |
+                Select-Object Name, FilePath, IsClean
+        
+          Creates polished, editable Visio samples for flowcharts, architecture, network, timeline, swimlane, org chart, and graph diagrams.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeVisioImageOptions
+      New
+      OfficeVisioImageOptions
+      
+        Creates discoverable page and rendering settings for Export-OfficeVisioImage.
+      
+    
+    
+      Creates discoverable page and rendering settings for Export-OfficeVisioImage.
+    
+    
+      
+        New-OfficeVisioImageOptions
+        
+          BackgroundColor
+          
+            
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          IncludeSvgXmlDeclaration
+          
+            Include an XML declaration in SVG output.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          MaximumDegreeOfParallelism
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputCount
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputHeight
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumOutputWidth
+          
+            
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          MaximumRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalEncodedBytes
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          MaximumTotalRasterPixels
+          
+            
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          PageCount
+          
+            Maximum pages exported.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          PageIndex
+          
+            Zero-based first page index.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          RasterOverflowBehavior
+          
+            
+          
+          OfficeRasterOverflowBehavior
+          
+            ReduceScale
+            Throw
+          
+          
+            OfficeRasterOverflowBehavior
+            
+          
+          None
+        
+        
+          RenderConnectorLabels
+          
+            Render connector labels.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          RenderStencilArtwork
+          
+            Render supported stencil artwork.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          RenderText
+          
+            Render page text.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          RenderTimeoutSeconds
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          ResolveConnectorLabelOverlaps
+          
+            Resolve connector-label overlaps.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Scale
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Supersampling
+          
+            Raster supersampling factor.
+          
+          Int32
+          
+            Int32
+            
+          
+          None
+        
+        
+          TargetDpi
+          
+            
+          
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          TextShapingLanguage
+          
+            
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        BackgroundColor
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        IncludeSvgXmlDeclaration
+        
+          Include an XML declaration in SVG output.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        MaximumDegreeOfParallelism
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputCount
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputHeight
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumOutputWidth
+        
+          
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        MaximumRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalEncodedBytes
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        MaximumTotalRasterPixels
+        
+          
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        PageCount
+        
+          Maximum pages exported.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        PageIndex
+        
+          Zero-based first page index.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        RasterOverflowBehavior
+        
+          
+        
+        OfficeRasterOverflowBehavior
+        
+          ReduceScale
+          Throw
+        
+        
+          OfficeRasterOverflowBehavior
+          
+        
+        None
+      
+      
+        RenderConnectorLabels
+        
+          Render connector labels.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        RenderStencilArtwork
+        
+          Render supported stencil artwork.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        RenderText
+        
+          Render page text.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        RenderTimeoutSeconds
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        ResolveConnectorLabelOverlaps
+        
+          Resolve connector-label overlaps.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Scale
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        Supersampling
+        
+          Raster supersampling factor.
+        
+        Int32
+        
+          Int32
+          
+        
+        None
+      
+      
+        TargetDpi
+        
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TextShapingLanguage
+        
+          
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Visio.VisioImageExportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Render the first Visio page with text and connector labels.
+        
+          PS> 
+        
+        $options = New-OfficeVisioImageOptions -PageIndex 0 -PageCount 1 -RenderText -RenderConnectorLabels
+            Export-OfficeVisioImage -Path .\Diagram.vsdx -OutputPath .\Preview -Format Svg -Options $options
+        
+          
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeWord
+      New
+      OfficeWord
+      
+        Creates a Word document using the DSL.
+      
+    
+    
+      Handles file creation or template cloning, scriptblock execution, explicit save or live-document composition, and emits the document path when -PassThru is used.
+    
+    
+      
+        New-OfficeWord
+        
+          Content
+          
+            DSL scriptblock describing document content.
+          
+          ScriptBlock
+          
+            ScriptBlock
+            
+          
+          None
+        
+        
+          NoSave
+          
+            Skip saving after executing the DSL.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Open
+          
+            Open the document after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit a FileInfo for chaining.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Password used to save the document as an encrypted package.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
+          
+            Destination path for the document.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          TemplatePath
+          
+            Existing .docx file to clone before running the DSL.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+      
+    
+    
+      
+        Content
+        
+          DSL scriptblock describing document content.
+        
+        ScriptBlock
+        
+          ScriptBlock
+          
+        
+        None
+      
+      
+        NoSave
+        
+          Skip saving after executing the DSL.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Open
+        
+          Open the document after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit a FileInfo for chaining.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Password
+        
+          Password used to save the document as an encrypted package.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        Path
+        
+          Destination path for the document.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+      
+        TemplatePath
+        
+          Existing .docx file to clone before running the DSL.
+        
+        String
+        
+          String
+          
+        
+        None
+      
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+    
+      
+        
+      
+    
+    
+      
+        Create a document inline.
+        
+          PS> 
+        
+        New-OfficeWord -Path .\Report.docx { WordSection { WordParagraph 'Hello DSL' } } -Open
+        
+          Builds a document, adds one paragraph, saves it to disk, and opens it.
+        
+      
+      
+        Create a document from a template.
+        
+          PS> 
+        
+        New-OfficeWord -TemplatePath .\Template.docx -Path .\Report.docx { WordParagraph -Text 'Generated content' -StyleId 'ReportBody' }
+        
+          Copies the template to the output path, runs the DSL against the copied document, and saves it.
+        
+      
+      
+        Keep a document for incremental composition.
+        
+          PS> 
+        
+        $document = New-OfficeWord -Path .\Report.docx -NoSave
+            $document | Add-OfficeWordParagraph -Text 'Status report' -Style Heading1
+            $document | Save-OfficeWord
+            $document | Close-OfficeWord
+        
+          Associates the output path with a live document, adds content through the pipeline, then saves and closes it once.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeWordComparisonOptions
+      New
+      OfficeWordComparisonOptions
+      
+        Creates discoverable structural comparison settings for Compare-OfficeWordDocument.
+      
+    
+    
+      Creates discoverable structural comparison settings for Compare-OfficeWordDocument.
+    
+    
+      
+        New-OfficeWordComparisonOptions
+        
+          CompareBlockOrder
+          
+            Compare document block order.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareBookmarks
+          
+            Compare bookmarks.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareCommentAuthors
+          
+            Compare comment authors.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareCommentReplies
+          
+            Compare comment replies.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareCommentResolvedState
+          
+            Compare comment resolved state.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareComments
+          
+            Compare comments.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareCommentTargets
+          
+            Compare comment targets.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareCommentText
+          
+            Compare comment text.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareContentControls
+          
+            Compare content controls.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareEffectiveFormatting
+          
+            Compare resolved effective formatting.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareFields
+          
+            Compare fields.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareGeneratedIds
+          
+            Compare generated identifiers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareHyperlinks
+          
+            Compare hyperlinks.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareImages
+          
+            Compare images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareLists
+          
+            Compare lists.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareParagraphStyleIds
+          
+            Compare paragraph style identifiers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareRevisionAuthors
+          
+            Compare revision authors.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareRevisionLocations
+          
+            Compare revision locations.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareRevisions
+          
+            Compare tracked revisions.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareRevisionText
+          
+            Compare revision text.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareRunFormatting
+          
+            Compare direct run formatting.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareRunStyleIds
+          
+            Compare run style identifiers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareShapes
+          
+            Compare supported shapes.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          CompareVolatileMetadata
+          
+            Compare volatile timestamps and metadata.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          ExcludeScope
+          
+            Remove these comparison scopes from results.
+          
+          WordComparisonScope[]
+          
+            Paragraph
+            Run
+            Field
+            ContentControl
+            Bookmark
+            Hyperlink
+            List
+            Comment
+            Revision
+            Table
+            TableRow
+            TableCell
+            Image
+            Shape
+          
+          
+            WordComparisonScope[]
+            
+          
+          None
+        
+        
+          IgnoreCase
+          
+            Ignore character casing.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IgnoreWhitespace
+          
+            Ignore differences caused only by whitespace runs.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeScope
+          
+            Limit results to these comparison scopes.
+          
+          WordComparisonScope[]
+          
+            Paragraph
+            Run
+            Field
+            ContentControl
+            Bookmark
+            Hyperlink
+            List
+            Comment
+            Revision
+            Table
+            TableRow
+            TableCell
+            Image
+            Shape
+          
+          
+            WordComparisonScope[]
+            
+          
+          None
+        
+      
+    
+    
+      
+        CompareBlockOrder
+        
+          Compare document block order.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareBookmarks
+        
+          Compare bookmarks.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareCommentAuthors
+        
+          Compare comment authors.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareCommentReplies
+        
+          Compare comment replies.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareCommentResolvedState
+        
+          Compare comment resolved state.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareComments
+        
+          Compare comments.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareCommentTargets
+        
+          Compare comment targets.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareCommentText
+        
+          Compare comment text.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareContentControls
+        
+          Compare content controls.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareEffectiveFormatting
+        
+          Compare resolved effective formatting.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareFields
+        
+          Compare fields.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareGeneratedIds
+        
+          Compare generated identifiers.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareHyperlinks
+        
+          Compare hyperlinks.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareImages
+        
+          Compare images.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareLists
+        
+          Compare lists.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareParagraphStyleIds
+        
+          Compare paragraph style identifiers.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareRevisionAuthors
+        
+          Compare revision authors.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareRevisionLocations
+        
+          Compare revision locations.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareRevisions
+        
+          Compare tracked revisions.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareRevisionText
+        
+          Compare revision text.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareRunFormatting
+        
+          Compare direct run formatting.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareRunStyleIds
+        
+          Compare run style identifiers.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareShapes
+        
+          Compare supported shapes.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        CompareVolatileMetadata
         
-          Return the OfficeIMO RTF document without saving.
+          Compare volatile timestamps and metadata.
         
         SwitchParameter
         
@@ -138603,22 +153733,38 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        OutputPath
+      
+        ExcludeScope
         
-          Destination path for the RTF file.
+          Remove these comparison scopes from results.
         
-        String
+        WordComparisonScope[]
+        
+          Paragraph
+          Run
+          Field
+          ContentControl
+          Bookmark
+          Hyperlink
+          List
+          Comment
+          Revision
+          Table
+          TableRow
+          TableCell
+          Image
+          Shape
+        
         
-          String
+          WordComparisonScope[]
           
         
         None
       
       
-        PassThru
+        IgnoreCase
         
-          Emit a FileInfo for chaining.
+          Ignore character casing.
         
         SwitchParameter
         
@@ -138627,14 +153773,42 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        Text
+      
+        IgnoreWhitespace
         
-          Plain paragraph text to add to the document.
+          Ignore differences caused only by whitespace runs.
         
-        String[]
+        SwitchParameter
         
-          String[]
+          SwitchParameter
+          
+        
+        None
+      
+      
+        IncludeScope
+        
+          Limit results to these comparison scopes.
+        
+        WordComparisonScope[]
+        
+          Paragraph
+          Run
+          Field
+          ContentControl
+          Bookmark
+          Hyperlink
+          List
+          Comment
+          Revision
+          Table
+          TableRow
+          TableCell
+          Image
+          Shape
+        
+        
+          WordComparisonScope[]
           
         
         None
@@ -138643,19 +153817,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          System.String[]
+          None
         
       
     
     
       
         
-          System.IO.FileInfo
-        
-      
-      
-        
-          OfficeIMO.Rtf.RtfDocument
+          OfficeIMO.Word.WordComparisonOptions
         
       
     
@@ -138666,14 +153835,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Create a small RTF file.
+        Ignore text normalization differences and exclude volatile metadata.
         
           PS> 
         
-        $file = New-OfficeRtf -Path .\Report.rtf -Text 'Summary', 'Ready for review' -PassThru
-            Get-OfficeRtf -Path $file.FullName
+        $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -IgnoreCase -CompareVolatileMetadata:$false
+            Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options
         
-          Creates an RTF document with two paragraphs and returns the file.
+          
         
       
     
@@ -138681,35 +153850,23 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficeTextRun
+      New-OfficeWordImageOptions
       New
-      OfficeTextRun
+      OfficeWordImageOptions
       
-        Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands.
+        Creates discoverable page and rendering settings for Export-OfficeWordImage.
       
     
     
-      Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands.
+      Creates discoverable page and rendering settings for Export-OfficeWordImage.
     
     
       
-        New-OfficeTextRun
-        
-          BackgroundColor
-          
-            Run background or highlight color. Named colors and hexadecimal colors are accepted.
-          
-          String
-          
-            String
-            
-          
-          None
-        
+        New-OfficeWordImageOptions
         
-          Baseline
+          BackgroundColor
           
-            Target-specific baseline name, such as Superscript or Subscript.
+            
           
           String
           
@@ -138719,9 +153876,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Bold
+          IncludeDocumentContent
           
-            Render the run in bold.
+            Render document content.
           
           SwitchParameter
           
@@ -138730,166 +153887,170 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Color
+        
+          MaximumDegreeOfParallelism
           
-            Text color. Named colors and hexadecimal colors are accepted.
+            
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
-        
-          FontName
+        
+          MaximumOutputCount
           
-            Font name, family, or target-specific font identifier.
+            
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          FontSize
+          MaximumOutputHeight
           
-            Font size in points.
+            
           
-          Double
+          Int32
           
-            Double
+            Int32
             
           
           None
         
         
-          Italic
+          MaximumOutputWidth
           
-            Render the run in italics.
+            
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
         
-          Kind
+          MaximumRasterPixels
           
-            Run kind such as Text, LineBreak, Tab, Superscript, or Subscript.
+            
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
-        
-          LinkContents
+        
+          MaximumTotalEncodedBytes
           
-            Optional link tooltip or annotation contents.
+            
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
-        
-          LinkDestinationName
+        
+          MaximumTotalRasterPixels
           
-            Named destination or bookmark target when supported by the target format.
+            
           
-          String
+          Int64
           
-            String
+            Int64
             
           
           None
         
-        
-          LinkUri
+        
+          PageCount
           
-            URI link target when supported by the target format.
+            Maximum pages exported. Supplying this value selects batch export.
           
-          String
+          Int32
           
-            String
+            Int32
             
           
           None
         
         
-          Strike
+          PageIndex
           
-            Render the run with strikethrough.
+            Zero-based first page index.
           
-          SwitchParameter
+          Int32
           
-            SwitchParameter
+            Int32
             
           
           None
         
-        
-          TabAlignment
+        
+          RasterOverflowBehavior
           
-            Tab alignment name.
+            
           
-          String
+          OfficeRasterOverflowBehavior
+          
+            ReduceScale
+            Throw
+          
           
-            String
+            OfficeRasterOverflowBehavior
             
           
           None
         
-        
-          TabLeader
+        
+          RenderTimeoutSeconds
           
-            PDF tab leader style name.
+            
           
-          String
+          Double
           
-            String
+            Double
             
           
           None
         
-        
-          Text
+        
+          Scale
           
-            Run text.
+            
           
-          String
+          Double
           
-            String
+            Double
             
           
           None
         
         
-          Underline
+          TargetDpi
           
-            Render the run with underline.
+            
           
-          SwitchParameter
+          Double
           
-            SwitchParameter
+            Double
             
           
           None
         
         
-          UnderlineStyle
+          TextShapingLanguage
           
-            Optional underline style name when the target format supports it.
+            
           
           String
           
@@ -138901,10 +154062,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
       
     
     
-      
+      
         BackgroundColor
         
-          Run background or highlight color. Named colors and hexadecimal colors are accepted.
+          
         
         String
         
@@ -138914,165 +154075,181 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Baseline
+        IncludeDocumentContent
         
-          Target-specific baseline name, such as Superscript or Subscript.
+          Render document content.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Bold
+        MaximumDegreeOfParallelism
         
-          Render the run in bold.
+          
         
-        SwitchParameter
+        Int32
         
-          SwitchParameter
+          Int32
           
         
         None
       
-      
-        Color
+      
+        MaximumOutputCount
         
-          Text color. Named colors and hexadecimal colors are accepted.
+          
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
-      
-        FontName
+      
+        MaximumOutputHeight
         
-          Font name, family, or target-specific font identifier.
+          
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        FontSize
+        MaximumOutputWidth
         
-          Font size in points.
+          
         
-        Double
+        Int32
         
-          Double
+          Int32
           
         
         None
       
       
-        Italic
+        MaximumRasterPixels
         
-          Render the run in italics.
+          
         
-        SwitchParameter
+        Int64
         
-          SwitchParameter
+          Int64
           
         
         None
       
       
-        Kind
+        MaximumTotalEncodedBytes
         
-          Run kind such as Text, LineBreak, Tab, Superscript, or Subscript.
+          
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
-      
-        LinkContents
+      
+        MaximumTotalRasterPixels
         
-          Optional link tooltip or annotation contents.
+          
         
-        String
+        Int64
         
-          String
+          Int64
           
         
         None
       
-      
-        LinkDestinationName
+      
+        PageCount
         
-          Named destination or bookmark target when supported by the target format.
+          Maximum pages exported. Supplying this value selects batch export.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
-      
-        LinkUri
+      
+        PageIndex
         
-          URI link target when supported by the target format.
+          Zero-based first page index.
         
-        String
+        Int32
         
-          String
+          Int32
           
         
         None
       
       
-        Strike
+        RasterOverflowBehavior
         
-          Render the run with strikethrough.
+          
         
-        SwitchParameter
+        OfficeRasterOverflowBehavior
+        
+          ReduceScale
+          Throw
+        
         
-          SwitchParameter
+          OfficeRasterOverflowBehavior
           
         
         None
       
-      
-        TabAlignment
+      
+        RenderTimeoutSeconds
         
-          Tab alignment name.
+          
         
-        String
+        Double
         
-          String
+          Double
           
         
         None
       
-      
-        TabLeader
+      
+        Scale
         
-          PDF tab leader style name.
+          
         
-        String
+        Double
         
-          String
+          Double
           
         
         None
       
-      
-        Text
+      
+        TargetDpi
         
-          Run text.
+          
+        
+        Double
+        
+          Double
+          
+        
+        None
+      
+      
+        TextShapingLanguage
+        
+          
         
         String
         
@@ -139081,10 +154258,104 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+    
+    
+      
+        
+          None
+        
+      
+    
+    
+      
+        
+          OfficeIMO.Word.WordImageExportOptions
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Render the first two pages at higher density.
+        
+          PS> 
+        
+        $options = New-OfficeWordImageOptions -PageIndex 0 -PageCount 2 -TargetDpi 144 -IncludeDocumentContent
+            Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Options $options
+        
+          Supplying PageCount selects batch export, so OutputPath is a folder. Use -AllPages on the export command for the complete document.
+        
+      
+    
+    
+  
+  
+    
+      New-OfficeWordOpenDocumentOptions
+      New
+      OfficeWordOpenDocumentOptions
+      
+        Creates Word/OpenDocument conversion settings.
+      
+    
+    
+      Creates Word/OpenDocument conversion settings.
+    
+    
+      
+        New-OfficeWordOpenDocumentOptions
+        
+          IncludeHeadersAndFooters
+          
+            Copy default headers and footers.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          IncludeImages
+          
+            Copy supported inline images.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          LossPolicy
+          
+            Whether conversion loss is reported or rejected.
+          
+          OdfConversionLossPolicy
+          
+            ReportOnly
+            ThrowOnSkippedOrUnsupported
+            ThrowOnAnyLoss
+          
+          
+            OdfConversionLossPolicy
+            
+          
+          None
+        
+      
+    
+    
       
-        Underline
+        IncludeHeadersAndFooters
         
-          Render the run with underline.
+          Copy default headers and footers.
         
         SwitchParameter
         
@@ -139094,13 +154365,30 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        UnderlineStyle
+        IncludeImages
         
-          Optional underline style name when the target format supports it.
+          Copy supported inline images.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
+          
+        
+        None
+      
+      
+        LossPolicy
+        
+          Whether conversion loss is reported or rejected.
+        
+        OdfConversionLossPolicy
+        
+          ReportOnly
+          ThrowOnSkippedOrUnsupported
+          ThrowOnAnyLoss
+        
+        
+          OdfConversionLossPolicy
           
         
         None
@@ -139116,11 +154404,8 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          PSWriteOffice.Services.Text.OfficeTextRunSpec
+          OfficeIMO.Word.OpenDocument.WordOpenDocumentConversionOptions
         
-        
-          PowerShell-friendly rich text run specification used by document adapters.
-        
       
     
     
@@ -139130,8 +154415,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        EXAMPLE 1
-        New-OfficeTextRun -BackgroundColor 'Value'
+        Include Word images and headers during conversion.
+        
+          PS> 
+        
+        $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters
+            ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options
         
           
         
@@ -139141,23 +154430,47 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficeVisio
+      New-OfficeWordPdfOptions
       New
-      OfficeVisio
+      OfficeWordPdfOptions
       
-        Creates a new OfficeIMO.Visio document with an initial page and optional DSL content.
+        Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf.
       
     
     
-      Creates a new OfficeIMO.Visio document with an initial page and optional DSL content.
+      Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf.
     
     
       
-        New-OfficeVisio
+        New-OfficeWordPdfOptions
+        
+          AllowDocumentFontEmbedding
+          
+            Allow embedding fonts stored in the Word document.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          AllowSystemFontEmbedding
+          
+            Allow embedding fonts discovered on the current system.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Author
           
-            Optional document author.
+            PDF author metadata.
           
           String
           
@@ -139166,34 +154479,50 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Content
+        
+          DefaultOrientation
           
-            DSL script block describing Visio pages, shapes, and connectors.
+            Fallback page orientation for sections without page settings.
           
-          ScriptBlock
+          OfficePageOrientation
+          
+            Portrait
+            Landscape
+          
           
-            ScriptBlock
+            OfficePageOrientation
             
           
           None
         
         
-          Height
+          DefaultPageSize
           
-            Initial page height.
+            Fallback Word page size for sections without page settings.
           
-          Double
+          WordPageSize
+          
+            Unknown
+            Letter
+            Legal
+            Statement
+            Executive
+            A3
+            A4
+            A5
+            A6
+            B5
+          
           
-            Double
+            WordPageSize
             
           
           None
         
         
-          NoSave
+          DefaultTableBorders
           
-            Skip saving and emit the document object.
+            Draw default borders for tables that do not specify borders.
           
           SwitchParameter
           
@@ -139203,9 +154532,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PageName
+          FontFamily
           
-            Initial page name.
+            Default font family used when the document does not specify one.
           
           String
           
@@ -139215,9 +154544,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PassThru
+          IncludePageNumbers
           
-            Emit the document object instead of the saved file.
+            Include page numbers in the generated PDF.
           
           SwitchParameter
           
@@ -139226,12 +154555,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Path
+        
+          Keywords
           
-            Destination .vsdx path.
+            PDF keywords metadata.
           
-          String
+          String
           
             String
             
@@ -139239,78 +154568,125 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          RequestRecalcOnOpen
+          MarginBottom
           
-            Ask Visio to recalculate layout and connector routing when the document opens.
+            Bottom page margin in PDF points.
           
-          SwitchParameter
+          Double
           
-            SwitchParameter
+            Double
             
           
           None
         
         
-          Show
+          MarginLeft
           
-            Open the document after saving.
+            Left page margin in PDF points.
           
-          SwitchParameter
+          Double
           
-            SwitchParameter
+            Double
             
           
           None
         
         
-          Title
+          MarginRight
           
-            Optional document title.
+            Right page margin in PDF points.
           
-          String
+          Double
           
-            String
+            Double
             
           
           None
         
         
-          Unit
+          MarginTop
           
-            Measurement unit for page width and height.
+            Top page margin in PDF points.
           
-          VisioMeasurementUnit
+          Double
+          
+            Double
+            
+          
+          None
+        
+        
+          Orientation
+          
+            PDF page orientation.
+          
+          OfficePageOrientation
           
-            Inches
-            Centimeters
-            Millimeters
+            Portrait
+            Landscape
           
           
-            VisioMeasurementUnit
+            OfficePageOrientation
             
           
           None
         
         
-          UseMastersByDefault
+          PageNumberFormat
           
-            Use Visio masters for supported built-in stencil shapes when saving.
+            Page number text format.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
         
-          Width
+          PageSize
           
-            Initial page width.
+            PDF page size.
           
-          Double
+          PageSize
           
-            Double
+            PageSize
+            
+          
+          None
+        
+        
+          PdfOptions
+          
+            Underlying low-level OfficeIMO PDF options.
+          
+          PdfOptions
+          
+            PdfOptions
+            
+          
+          None
+        
+        
+          Subject
+          
+            PDF subject metadata.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Title
+          
+            PDF title metadata.
+          
+          String
+          
+            String
             
           
           None
@@ -139319,69 +154695,85 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Author
+        AllowDocumentFontEmbedding
         
-          Optional document author.
+          Allow embedding fonts stored in the Word document.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        Content
+      
+        AllowSystemFontEmbedding
         
-          DSL script block describing Visio pages, shapes, and connectors.
+          Allow embedding fonts discovered on the current system.
         
-        ScriptBlock
+        SwitchParameter
         
-          ScriptBlock
+          SwitchParameter
           
         
         None
       
       
-        Height
+        Author
         
-          Initial page height.
+          PDF author metadata.
         
-        Double
+        String
         
-          Double
+          String
           
         
         None
       
       
-        NoSave
+        DefaultOrientation
         
-          Skip saving and emit the document object.
+          Fallback page orientation for sections without page settings.
         
-        SwitchParameter
+        OfficePageOrientation
+        
+          Portrait
+          Landscape
+        
         
-          SwitchParameter
+          OfficePageOrientation
           
         
         None
       
       
-        PageName
+        DefaultPageSize
         
-          Initial page name.
+          Fallback Word page size for sections without page settings.
         
-        String
+        WordPageSize
+        
+          Unknown
+          Letter
+          Legal
+          Statement
+          Executive
+          A3
+          A4
+          A5
+          A6
+          B5
+        
         
-          String
+          WordPageSize
           
         
         None
       
       
-        PassThru
+        DefaultTableBorders
         
-          Emit the document object instead of the saved file.
+          Draw default borders for tables that do not specify borders.
         
         SwitchParameter
         
@@ -139390,12 +154782,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        Path
+      
+        FontFamily
         
-          Destination .vsdx path.
+          Default font family used when the document does not specify one.
         
-        String
+        String
         
           String
           
@@ -139403,9 +154795,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        RequestRecalcOnOpen
+        IncludePageNumbers
         
-          Ask Visio to recalculate layout and connector routing when the document opens.
+          Include page numbers in the generated PDF.
         
         SwitchParameter
         
@@ -139415,62 +154807,57 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Show
+        Keywords
         
-          Open the document after saving.
+          PDF keywords metadata.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
       
-        Title
+        MarginBottom
         
-          Optional document title.
+          Bottom page margin in PDF points.
         
-        String
+        Double
         
-          String
+          Double
           
         
         None
       
       
-        Unit
+        MarginLeft
         
-          Measurement unit for page width and height.
+          Left page margin in PDF points.
         
-        VisioMeasurementUnit
-        
-          Inches
-          Centimeters
-          Millimeters
-        
+        Double
         
-          VisioMeasurementUnit
+          Double
           
         
         None
       
       
-        UseMastersByDefault
+        MarginRight
         
-          Use Visio masters for supported built-in stencil shapes when saving.
+          Right page margin in PDF points.
         
-        SwitchParameter
+        Double
         
-          SwitchParameter
+          Double
           
         
         None
       
       
-        Width
+        MarginTop
         
-          Initial page width.
+          Top page margin in PDF points.
         
         Double
         
@@ -139479,133 +154866,76 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-    
-    
-      
+      
+        Orientation
+        
+          PDF page orientation.
+        
+        OfficePageOrientation
+        
+          Portrait
+          Landscape
+        
         
-          None
+          OfficePageOrientation
+          
         
-      
-    
-    
-      
+        None
+      
+      
+        PageNumberFormat
+        
+          Page number text format.
+        
+        String
         
-          OfficeIMO.Visio.VisioDocument
+          String
+          
         
-      
-      
+        None
+      
+      
+        PageSize
+        
+          PDF page size.
+        
+        PageSize
         
-          System.IO.FileInfo
+          PageSize
+          
         
-      
-    
-    
-      
-        
-      
-    
-    
-      
-        Create a simple service map.
-        
-          PS> 
-        
-        New-OfficeVisio -Path .\ServiceMap.vsdx -Title 'Service map' -RequestRecalcOnOpen {
-                VisioRectangle -Key web -Text 'Web' -X 1 -Y 4 -FillColor LightBlue
-                VisioRectangle -Key api -Text 'API' -X 4 -Y 4 -FillColor LightGreen
-                VisioConnector -From web -To api -EndArrow Triangle -Label 'calls'
-            }
-        
-          Creates an editable .vsdx diagram with two shapes and a connector.
-        
-      
-    
-    
-  
-  
-    
-      New-OfficeVisioGallery
-      New
-      OfficeVisioGallery
-      
-        Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams.
-      
-    
-    
-      Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams.
-    
-    
-      
-        New-OfficeVisioGallery
-        
-          NoPackageValidation
-          
-            Skip structural package validation after gallery documents are generated.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          NoVisualQualityAnalysis
-          
-            Skip visual quality analysis after gallery documents are generated.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          OutputDirectory
-          
-            Directory that receives generated .vsdx gallery documents.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-      
-    
-    
+        None
+      
       
-        NoPackageValidation
+        PdfOptions
         
-          Skip structural package validation after gallery documents are generated.
+          Underlying low-level OfficeIMO PDF options.
         
-        SwitchParameter
+        PdfOptions
         
-          SwitchParameter
+          PdfOptions
           
         
         None
       
       
-        NoVisualQualityAnalysis
+        Subject
         
-          Skip visual quality analysis after gallery documents are generated.
+          PDF subject metadata.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
-      
-        OutputDirectory
+      
+        Title
         
-          Directory that receives generated .vsdx gallery documents.
+          PDF title metadata.
         
-        String
+        String
         
           String
           
@@ -139623,7 +154953,7 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         
-          OfficeIMO.Visio.VisioGalleryResult
+          OfficeIMO.Word.Pdf.WordPdfSaveOptions
         
       
     
@@ -139634,14 +154964,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Generate the Visio reference gallery.
+        Configure metadata, page numbers, and font embedding.
         
           PS> 
         
-        New-OfficeVisioGallery -OutputDirectory .\VisioGallery |
-                Select-Object Name, FilePath, IsClean
+        $options = New-OfficeWordPdfOptions -Title 'Service report' -Author 'Evotec' -IncludePageNumbers -AllowSystemFontEmbedding
+            Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -WordOptions $options
         
-          Creates polished, editable Visio samples for flowcharts, architecture, network, timeline, swimlane, org chart, and graph diagrams.
+          
         
       
     
@@ -139649,47 +154979,59 @@ Use -NoSave or omit -Path when a document object should be returned for further
   
   
     
-      New-OfficeWord
+      New-OfficeWordRevisionFilter
       New
-      OfficeWord
+      OfficeWordRevisionFilter
       
-        Creates a Word document using the DSL.
+        Creates a discoverable Word revision filter for Resolve-OfficeWordRevision.
       
     
     
-      Handles file creation or template cloning, scriptblock execution, optional autosave, and emits the document path when -PassThru is used.
+      Creates a discoverable Word revision filter for Resolve-OfficeWordRevision.
     
     
       
-        New-OfficeWord
+        New-OfficeWordRevisionFilter
         
-          AutoSave
+          Author
           
-            Enable OfficeIMO AutoSave mode.
+            Revision author.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
         
-        
-          Content
+        
+          DateFrom
           
-            DSL scriptblock describing document content.
+            Earliest revision date.
           
-          ScriptBlock
+          DateTime
           
-            ScriptBlock
+            DateTime
             
           
           None
         
         
-          NoSave
+          DateTo
           
-            Skip saving after executing the DSL.
+            Latest revision date.
+          
+          DateTime
+          
+            DateTime
+            
+          
+          None
+        
+        
+          InContentControl
+          
+            Limit results to revisions inside content controls.
           
           SwitchParameter
           
@@ -139699,9 +155041,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Open
+          InTable
           
-            Open the document after saving.
+            Limit results to revisions inside tables.
           
           SwitchParameter
           
@@ -139710,22 +155052,41 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          OutputPath
+        
+          InTextBox
           
-            Destination path for the document.
+            Limit results to revisions inside text boxes.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          PassThru
+          LocationKind
           
-            Emit a FileInfo for chaining.
+            Word part or container location kind.
+          
+          WordReviewLocationKind
+          
+            Body
+            Header
+            Footer
+            Footnote
+            Endnote
+          
+          
+            WordReviewLocationKind
+            
+          
+          None
+        
+        
+          NotInContentControl
+          
+            Limit results to revisions outside content controls.
           
           SwitchParameter
           
@@ -139735,21 +155096,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Password
+          NotInTable
           
-            Password used to save the document as an encrypted package.
+            Limit results to revisions outside tables.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PdfAllowSystemFontEmbedding
+        
+          NotInTextBox
           
-            Allow the native Word PDF converter to embed installed system fonts used by the document.
+            Limit results to revisions outside text boxes.
           
           SwitchParameter
           
@@ -139759,9 +155120,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PdfFontFamily
+          PartUri
           
-            Optional default font family used by the native Word PDF converter.
+            Package part URI.
           
           String
           
@@ -139771,9 +155132,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PdfPath
+          RevisionId
           
-            Optional PDF path to create from the same Word document before closing it.
+            Revision identifier.
           
           String
           
@@ -139783,13 +155144,26 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          TemplatePath
+          RevisionType
           
-            Existing .docx file to clone before running the DSL.
+            Revision operation type.
           
-          String
+          WordReviewRevisionType
+          
+            Insertion
+            Deletion
+            MoveFrom
+            MoveTo
+            ParagraphFormatting
+            RunFormatting
+            TableFormatting
+            TableRowFormatting
+            TableCellFormatting
+            SectionFormatting
+            Unknown
+          
           
-            String
+            WordReviewRevisionType
             
           
           None
@@ -139798,33 +155172,45 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        AutoSave
+        Author
         
-          Enable OfficeIMO AutoSave mode.
+          Revision author.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
       
-      
-        Content
+      
+        DateFrom
         
-          DSL scriptblock describing document content.
+          Earliest revision date.
         
-        ScriptBlock
+        DateTime
         
-          ScriptBlock
+          DateTime
           
         
         None
       
       
-        NoSave
+        DateTo
         
-          Skip saving after executing the DSL.
+          Latest revision date.
+        
+        DateTime
+        
+          DateTime
+          
+        
+        None
+      
+      
+        InContentControl
+        
+          Limit results to revisions inside content controls.
         
         SwitchParameter
         
@@ -139834,9 +155220,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Open
+        InTable
         
-          Open the document after saving.
+          Limit results to revisions inside tables.
         
         SwitchParameter
         
@@ -139845,22 +155231,41 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        OutputPath
+      
+        InTextBox
         
-          Destination path for the document.
+          Limit results to revisions inside text boxes.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        PassThru
+        LocationKind
         
-          Emit a FileInfo for chaining.
+          Word part or container location kind.
+        
+        WordReviewLocationKind
+        
+          Body
+          Header
+          Footer
+          Footnote
+          Endnote
+        
+        
+          WordReviewLocationKind
+          
+        
+        None
+      
+      
+        NotInContentControl
+        
+          Limit results to revisions outside content controls.
         
         SwitchParameter
         
@@ -139870,21 +155275,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Password
+        NotInTable
         
-          Password used to save the document as an encrypted package.
+          Limit results to revisions outside tables.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PdfAllowSystemFontEmbedding
+      
+        NotInTextBox
         
-          Allow the native Word PDF converter to embed installed system fonts used by the document.
+          Limit results to revisions outside text boxes.
         
         SwitchParameter
         
@@ -139894,9 +155299,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        PdfFontFamily
+        PartUri
         
-          Optional default font family used by the native Word PDF converter.
+          Package part URI.
         
         String
         
@@ -139906,9 +155311,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        PdfPath
+        RevisionId
         
-          Optional PDF path to create from the same Word document before closing it.
+          Revision identifier.
         
         String
         
@@ -139918,13 +155323,26 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        TemplatePath
+        RevisionType
         
-          Existing .docx file to clone before running the DSL.
+          Revision operation type.
         
-        String
+        WordReviewRevisionType
+        
+          Insertion
+          Deletion
+          MoveFrom
+          MoveTo
+          ParagraphFormatting
+          RunFormatting
+          TableFormatting
+          TableRowFormatting
+          TableCellFormatting
+          SectionFormatting
+          Unknown
+        
         
-          String
+          WordReviewRevisionType
           
         
         None
@@ -139937,7 +155355,13 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
       
     
-    
+    
+      
+        
+          OfficeIMO.Word.WordRevisionFilter
+        
+      
+    
     
       
         
@@ -139945,36 +155369,14 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Create a document inline.
-        
-          PS> 
-        
-        New-OfficeWord -Path .\Report.docx { WordSection { WordParagraph 'Hello DSL' } } -Open
-        
-          Builds a document, adds one paragraph, saves it to disk, and opens it.
-        
-      
-      
-        Create a document from a template.
-        
-          PS> 
-        
-        New-OfficeWord -TemplatePath .\Template.docx -Path .\Report.docx { WordParagraph -Text 'Generated content' -StyleId 'ReportBody' }
-        
-          Copies the template to the output path, runs the DSL against the copied document, and saves it.
-        
-      
-      
-        Keep a document for incremental composition.
+        Accept only table revisions from one author.
         
           PS> 
         
-        $document = New-OfficeWord -Path .\Report.docx -NoSave
-            $document | Add-OfficeWordParagraph -Text 'Status report' -Style Heading1
-            $document | Save-OfficeWord
-            $document | Close-OfficeWord
+        $filter = New-OfficeWordRevisionFilter -Author 'Alex' -InTable
+            Resolve-OfficeWordRevision -Path .\Review.docx -Action Accept -Filter $filter
         
-          Associates the output path with a live document, adds content through the pipeline, then saves and closes it once.
+          
         
       
     
@@ -141173,23 +156575,71 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          ProtectWindows
-          
-            Protect workbook windows where supported by the consuming application.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-      
-      
-        Protect-OfficeExcelWorkbook
-        
-          InputPath
+        
+          ProtectWindows
+          
+            Protect workbook windows where supported by the consuming application.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+      
+      
+        Protect-OfficeExcelWorkbook
+        
+          LegacyPasswordHash
+          
+            Optional precomputed legacy workbook protection hash to write as-is.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          NoStructure
+          
+            Do not protect workbook structure.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the workbook after protection.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Password
+          
+            Optional workbook protection password. This is UI protection, not package encryption.
+          
+          String
+          
+            String
+            
+          
+          None
+        
+        
+          Path
           
             Workbook path to update.
           
@@ -141200,54 +156650,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          LegacyPasswordHash
-          
-            Optional precomputed legacy workbook protection hash to write as-is.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          NoStructure
-          
-            Do not protect workbook structure.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          PassThru
-          
-            Emit the workbook after protection.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          Password
-          
-            Optional workbook protection password. This is UI protection, not package encryption.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           ProtectWindows
           
@@ -141350,18 +156752,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         LegacyPasswordHash
         
@@ -141410,6 +156800,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         ProtectWindows
         
@@ -142133,6 +157535,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Return the completed delete plan after a live operation.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PlanOnly
           
@@ -142196,6 +157610,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Return the completed delete plan after a live operation.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PlanOnly
         
@@ -142877,6 +158303,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PassThruReport
           
@@ -142988,6 +158426,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PassThruReport
         
@@ -143063,8 +158513,11 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        EXAMPLE 1
-        Remove-OfficePdfAnnotation -Path 'C:\Path'
+        Remove text annotations from the first page.
+        
+          PS> 
+        
+        Remove-OfficePdfAnnotation -Path .\Reviewed.pdf -OutputPath .\Clean.pdf -PageNumber 1 -Subtype Text -Confirm:$false
         
           
         
@@ -143123,6 +158576,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -143186,6 +158651,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -143275,6 +158752,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -143302,6 +158791,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Presentation
         
@@ -143334,11 +158835,11 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRemoveSlide.pptx
-            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRemoveSlide.pptx -NoSave
+            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
             Remove-OfficePowerPointSlide -Presentation $ppt -Index 0 -Confirm:$false
-            Save-OfficePowerPoint -Presentation $ppt
+            Close-OfficePowerPoint -Presentation $ppt -Save
         
           Removes the first slide and saves the updated deck.
         
@@ -143956,10 +159457,11 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRenameSection.pptx
-            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-            Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0 | Out-Null
-            Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRenameSection.pptx -NoSave
+            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+            Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0
+            Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru
+            $ppt | Close-OfficePowerPoint -Save
         
           Renames the first matching section and returns the updated section metadata.
         
@@ -143982,18 +159484,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
       
         Repair-OfficeExcelWorkbook
-        
-          InputPath
-          
-            Workbook path to repair.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           NoSave
           
@@ -144018,6 +159508,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          Path
+          
+            Workbook path to repair.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           SkipCalculation
           
@@ -144216,18 +159718,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        InputPath
-        
-          Workbook path to repair.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         NoSave
         
@@ -144252,6 +159742,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        Path
+        
+          Workbook path to repair.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         SkipCalculation
         
@@ -144589,7 +160091,8 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
           PS> 
         
-        $filter = [OfficeIMO.Word.WordRevisionFilter]::new(); $filter.Author = 'Reviewer'; Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter
+        $filter = New-OfficeWordRevisionFilter -Author 'Reviewer' -InContentControl
+            Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter
         
           Applies only matching revisions, saves the result, and returns the matched revision report.
         
@@ -144624,6 +160127,39 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          LineEnding
+          
+            Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+          
+          String
+          
+            LF
+            CRLF
+            CR
+          
+          
+            String
+            
+          
+          None
+        
+        
+          Mode
+          
+            Writer mode. Preserve retains unchanged source; Canonical emits stable formatting.
+          
+          AsciiDocWriterMode
+          
+            Preserve
+            Canonical
+          
+          
+            AsciiDocWriterMode
+            
+          
+          None
+        
         
           Options
           
@@ -144675,6 +160211,39 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        LineEnding
+        
+          Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+        
+        String
+        
+          LF
+          CRLF
+          CR
+        
+        
+          String
+          
+        
+        None
+      
+      
+        Mode
+        
+          Writer mode. Preserve retains unchanged source; Canonical emits stable formatting.
+        
+        AsciiDocWriterMode
+        
+          Preserve
+          Canonical
+        
+        
+          AsciiDocWriterMode
+          
+        
+        None
+      
       
         Options
         
@@ -144733,8 +160302,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        EXAMPLE 1
-        Save-OfficeAsciiDoc -Path 'C:\Path'
+        Load, edit, and save an AsciiDoc document.
+        
+          PS> 
+        
+        $document = Get-OfficeAsciiDoc -Path .\Guide.adoc
+            $document | Save-OfficeAsciiDoc -Path .\Guide-normalized.adoc -Mode Canonical
         
           
         
@@ -144802,6 +160375,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -144862,6 +160447,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -144896,8 +160493,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        EXAMPLE 1
-        Save-OfficeEmail -Document 'Value'
+        Save a message with an explicit loss policy.
+        
+          PS> 
+        
+        $options = New-OfficeEmailWriterOptions -ConversionLossPolicy Block
+            $message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru
         
           
         
@@ -144944,6 +160545,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -144983,6 +160596,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -145017,8 +160642,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        EXAMPLE 1
-        Save-OfficeEmailMailbox -Mailbox 'Value'
+        Save an mboxrd mailbox and return its diagnostics.
+        
+          PS> 
+        
+        $options = New-OfficeEmailMailboxWriterOptions -Variant Mboxrd
+            $mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru
         
           
         
@@ -145131,10 +160760,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          PassThru
+        
+          Open
           
-            Emit the workbook for further processing.
+            Open the workbook after saving.
           
           SwitchParameter
           
@@ -145144,21 +160773,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          Password
+          PassThru
           
-            Password used to save the workbook as an encrypted package.
+            Emit the workbook for further processing.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Path
+          Password
           
-            Optional save-as path.
+            Password used to save the workbook as an encrypted package.
           
           String
           
@@ -145168,9 +160797,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
           None
         
         
-          PdfPath
+          Path
           
-            Optional PDF path to create from the same workbook.
+            Optional save-as path.
           
           String
           
@@ -145203,18 +160832,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          Show
-          
-            Open the workbook after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
         
           ValidateOpenXml
           
@@ -145320,10 +160937,10 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        PassThru
+      
+        Open
         
-          Emit the workbook for further processing.
+          Open the workbook after saving.
         
         SwitchParameter
         
@@ -145333,21 +160950,21 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        Password
+        PassThru
         
-          Password used to save the workbook as an encrypted package.
+          Emit the workbook for further processing.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Path
+        Password
         
-          Optional save-as path.
+          Password used to save the workbook as an encrypted package.
         
         String
         
@@ -145357,9 +160974,9 @@ Use -NoSave or omit -Path when a document object should be returned for further
         None
       
       
-        PdfPath
+        Path
         
-          Optional PDF path to create from the same workbook.
+          Optional save-as path.
         
         String
         
@@ -145392,18 +161009,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        Show
-        
-          Open the workbook after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
       
         ValidateOpenXml
         
@@ -145477,6 +161082,39 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          LineEnding
+          
+            Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+          
+          String
+          
+            LF
+            CRLF
+            CR
+          
+          
+            String
+            
+          
+          None
+        
+        
+          Mode
+          
+            Writer mode. Preserve retains unchanged source; Canonical normalizes output.
+          
+          LatexWriterMode
+          
+            Preserve
+            Canonical
+          
+          
+            LatexWriterMode
+            
+          
+          None
+        
         
           Options
           
@@ -145528,6 +161166,39 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        LineEnding
+        
+          Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+        
+        String
+        
+          LF
+          CRLF
+          CR
+        
+        
+          String
+          
+        
+        None
+      
+      
+        Mode
+        
+          Writer mode. Preserve retains unchanged source; Canonical normalizes output.
+        
+        LatexWriterMode
+        
+          Preserve
+          Canonical
+        
+        
+          LatexWriterMode
+          
+        
+        None
+      
       
         Options
         
@@ -145586,8 +161257,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        EXAMPLE 1
-        Save-OfficeLatex -Path 'C:\Path'
+        Load and save a canonical LaTeX document.
+        
+          PS> 
+        
+        $document = Get-OfficeLatex -Path .\Article.tex
+            $document | Save-OfficeLatex -Path .\Article-normalized.tex -Mode Canonical
         
           
         
@@ -145601,11 +161276,11 @@ Use -NoSave or omit -Path when a document object should be returned for further
       Save
       OfficeMarkdown
       
-        Saves a Markdown document and optionally creates a PDF sidecar.
+        Saves a Markdown document without changing its lifetime.
       
     
     
-      Saves a Markdown document and optionally creates a PDF sidecar.
+      Saves a Markdown document without changing its lifetime.
     
     
       
@@ -145651,18 +161326,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
-          MarkdownPdfOptions
-          
-            Advanced Markdown PDF options. Friendly PDF parameters override matching values.
-          
-          MarkdownPdfSaveOptions
-          
-            MarkdownPdfSaveOptions
-            
-          
-          None
-        
         
           PassThru
           
@@ -145675,301 +161338,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
-        
+        
           Path
           
             Destination Markdown path.
           
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfApplyWordLikeTheme
-          
-            Apply the built-in Word-like Markdown PDF baseline theme.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfAuthor
-          
-            PDF author metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfBaseDirectory
-          
-            Base directory used to resolve local Markdown images during PDF export.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfConversionReportVariable
-          
-            Variable name that receives the Markdown PDF conversion report.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfCreateOutlineFromHeadings
-          
-            Create PDF outlines from Markdown headings.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfDefaultImageHeight
-          
-            Fallback PDF image height in points.
-          
-          Double
-          
-            Double
-            
-          
-          None
-        
-        
-          PdfDefaultImageWidth
-          
-            Fallback PDF image width in points.
-          
-          Double
-          
-            Double
-            
-          
-          None
-        
-        
-          PdfFontFamily
-          
-            Default font family used by Markdown PDF export.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfFrontMatterRenderMode
-          
-            Controls how YAML front matter appears in the PDF body.
-          
-          MarkdownPdfFrontMatterRenderMode
-          
-            Hidden
-            DocumentHeader
-            Table
-          
-          
-            MarkdownPdfFrontMatterRenderMode
-            
-          
-          None
-        
-        
-          PdfIncludeDataUriImages
-          
-            Embed supported data URI images in Markdown PDF output.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfIncludeLocalImages
-          
-            Embed supported local image files in Markdown PDF output.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfKeywords
-          
-            PDF keywords metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfMaximumDataUriImageBytes
-          
-            Maximum decoded bytes for one data URI image in Markdown PDF output.
-          
-          Int32
-          
-            Int32
-            
-          
-          None
-        
-        
-          PdfOptions
-          
-            Underlying OfficeIMO.Pdf options used by Markdown PDF export.
-          
-          PdfOptions
-          
-            PdfOptions
-            
-          
-          None
-        
-        
-          PdfPath
-          
-            Optional PDF path to create from the same Markdown document.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfRestrictLocalImagesToBaseDirectory
-          
-            Require local images to resolve under the base directory.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfSubject
-          
-            PDF subject metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfTheme
-          
-            Built-in Markdown PDF visual theme.
-          
-          OfficeVisualThemeKind
-          
-            Plain
-            WordLike
-            TechnicalDocument
-            GitHubLike
-            Compact
-            Report
-          
-          
-            OfficeVisualThemeKind
-            
-          
-          None
-        
-        
-          PdfTitle
-          
-            PDF title metadata.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfUseFirstHeadingAsTitle
-          
-            Use the first Markdown heading as the PDF title when no title is supplied.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfUseFrontMatterMetadata
-          
-            Use front matter values as PDF metadata.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfUseFrontMatterVisualTheme
-          
-            Use front matter values to select a visual theme.
-          
-          Boolean
-          
-            Boolean
-            
-          
-          None
-        
-        
-          PdfWarningVariable
-          
-            Variable name that receives Markdown PDF export warnings.
-          
-          String
+          String
           
             String
             
@@ -146061,18 +161435,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
-        MarkdownPdfOptions
-        
-          Advanced Markdown PDF options. Friendly PDF parameters override matching values.
-        
-        MarkdownPdfSaveOptions
-        
-          MarkdownPdfSaveOptions
-          
-        
-        None
-      
       
         PassThru
         
@@ -146085,301 +161447,12 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
-      
+      
         Path
         
           Destination Markdown path.
         
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfApplyWordLikeTheme
-        
-          Apply the built-in Word-like Markdown PDF baseline theme.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfAuthor
-        
-          PDF author metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfBaseDirectory
-        
-          Base directory used to resolve local Markdown images during PDF export.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfConversionReportVariable
-        
-          Variable name that receives the Markdown PDF conversion report.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfCreateOutlineFromHeadings
-        
-          Create PDF outlines from Markdown headings.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfDefaultImageHeight
-        
-          Fallback PDF image height in points.
-        
-        Double
-        
-          Double
-          
-        
-        None
-      
-      
-        PdfDefaultImageWidth
-        
-          Fallback PDF image width in points.
-        
-        Double
-        
-          Double
-          
-        
-        None
-      
-      
-        PdfFontFamily
-        
-          Default font family used by Markdown PDF export.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfFrontMatterRenderMode
-        
-          Controls how YAML front matter appears in the PDF body.
-        
-        MarkdownPdfFrontMatterRenderMode
-        
-          Hidden
-          DocumentHeader
-          Table
-        
-        
-          MarkdownPdfFrontMatterRenderMode
-          
-        
-        None
-      
-      
-        PdfIncludeDataUriImages
-        
-          Embed supported data URI images in Markdown PDF output.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfIncludeLocalImages
-        
-          Embed supported local image files in Markdown PDF output.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfKeywords
-        
-          PDF keywords metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfMaximumDataUriImageBytes
-        
-          Maximum decoded bytes for one data URI image in Markdown PDF output.
-        
-        Int32
-        
-          Int32
-          
-        
-        None
-      
-      
-        PdfOptions
-        
-          Underlying OfficeIMO.Pdf options used by Markdown PDF export.
-        
-        PdfOptions
-        
-          PdfOptions
-          
-        
-        None
-      
-      
-        PdfPath
-        
-          Optional PDF path to create from the same Markdown document.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfRestrictLocalImagesToBaseDirectory
-        
-          Require local images to resolve under the base directory.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfSubject
-        
-          PDF subject metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfTheme
-        
-          Built-in Markdown PDF visual theme.
-        
-        OfficeVisualThemeKind
-        
-          Plain
-          WordLike
-          TechnicalDocument
-          GitHubLike
-          Compact
-          Report
-        
-        
-          OfficeVisualThemeKind
-          
-        
-        None
-      
-      
-        PdfTitle
-        
-          PDF title metadata.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfUseFirstHeadingAsTitle
-        
-          Use the first Markdown heading as the PDF title when no title is supplied.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfUseFrontMatterMetadata
-        
-          Use front matter values as PDF metadata.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfUseFrontMatterVisualTheme
-        
-          Use front matter values to select a visual theme.
-        
-        Boolean
-        
-          Boolean
-          
-        
-        None
-      
-      
-        PdfWarningVariable
-        
-          Variable name that receives Markdown PDF export warnings.
-        
-        String
+        String
         
           String
           
@@ -146441,11 +161514,6 @@ Use -NoSave or omit -Path when a document object should be returned for further
           OfficeIMO.Markdown.MarkdownDoc
         
       
-      
-        
-          System.IO.FileInfo
-        
-      
     
     
       
@@ -146454,13 +161522,13 @@ Use -NoSave or omit -Path when a document object should be returned for further
     
     
       
-        Save Markdown and PDF outputs.
+        Save a Markdown document.
         
           PS> 
         
-        $doc | Save-OfficeMarkdown -Path .\Report.md -PdfPath .\Report.pdf
+        $doc | Save-OfficeMarkdown -Path .\Report.md
         
-          Writes both artifacts from the same Markdown document model.
+          Writes the Markdown artifact and keeps the document available for further changes.
         
       
     
@@ -146517,6 +161585,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
           
           None
         
+        
+          PassThru
+          
+            Emit the save result, including preservation diagnostics.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Path
           
@@ -146568,6 +161648,18 @@ Use -NoSave or omit -Path when a document object should be returned for further
         
         None
       
+      
+        PassThru
+        
+          Emit the save result, including preservation diagnostics.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Path
         
@@ -146639,6 +161731,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          Open
+          
+            Open the PDF after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           OwnerPassword
           
@@ -146654,7 +161758,7 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
           PassThru
           
-            Emit the document instead of the saved file.
+            Emit the document for further processing.
           
           SwitchParameter
           
@@ -146699,18 +161803,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          Show
-          
-            Open the PDF after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
       
     
     
@@ -146726,6 +161818,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        Open
+        
+          Open the PDF after saving.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         OwnerPassword
         
@@ -146741,7 +161845,7 @@ The document is saved through the normal OfficeIMO.Pdf save path.
       
         PassThru
         
-          Emit the document instead of the saved file.
+          Emit the document for further processing.
         
         SwitchParameter
         
@@ -146786,18 +161890,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        Show
-        
-          Open the PDF after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
     
     
       
@@ -146812,11 +161904,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           OfficeIMO.Pdf.PdfDocument
         
       
-      
-        
-          System.IO.FileInfo
-        
-      
     
     
       
@@ -146853,6 +161940,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
     
       
         Save-OfficePowerPoint
+        
+          Open
+          
+            Launch the saved file in the default viewer.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PassThru
           
@@ -146889,18 +161988,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          PdfPath
-          
-            Optional PDF path to create from the same presentation.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Presentation
           
@@ -146913,21 +162000,21 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          Show
-          
-            Launch the saved file in the default viewer.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
       
     
     
+      
+        Open
+        
+          Launch the saved file in the default viewer.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PassThru
         
@@ -146964,18 +162051,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        PdfPath
-        
-          Optional PDF path to create from the same presentation.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Presentation
         
@@ -146988,18 +162063,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        Show
-        
-          Launch the saved file in the default viewer.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
     
     
       
@@ -147026,12 +162089,12 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSave.pptx
-            $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSave.pptx -NoSave
+            $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
             Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Saved later'
-            Save-OfficePowerPoint -Presentation $ppt -PdfPath .\Examples\Documents\PowerPointSave.pdf
+            Save-OfficePowerPoint -Presentation $ppt
         
-          Saves the current presentation and exports a PDF sidecar.
+          Saves the current presentation without closing it.
         
       
     
@@ -147064,10 +162127,10 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          PassThru
+        
+          Open
           
-            Emit the document object instead of the saved file.
+            Open the document after saving.
           
           SwitchParameter
           
@@ -147076,26 +162139,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          Path
+        
+          PassThru
           
-            Optional save-as path.
+            Emit the document object for further processing.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          Show
+        
+          Path
           
-            Open the document after saving.
+            Optional save-as path.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -147115,10 +162178,10 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        PassThru
+      
+        Open
         
-          Emit the document object instead of the saved file.
+          Open the document after saving.
         
         SwitchParameter
         
@@ -147127,26 +162190,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        Path
+      
+        PassThru
         
-          Optional save-as path.
+          Emit the document object for further processing.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        Show
+      
+        Path
         
-          Open the document after saving.
+          Optional save-as path.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -147165,11 +162228,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           OfficeIMO.Visio.VisioDocument
         
       
-      
-        
-          System.IO.FileInfo
-        
-      
     
     
       
@@ -147218,6 +162276,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          Open
+          
+            Open the document after saving.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PassThru
           
@@ -147254,54 +162324,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          PdfAllowSystemFontEmbedding
-          
-            Allow the native Word PDF converter to embed installed system fonts used by the document.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
-        
-          PdfFontFamily
-          
-            Optional default font family used by the native Word PDF converter.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          PdfPath
-          
-            Optional PDF path to create from the same Word document.
-          
-          String
-          
-            String
-            
-          
-          None
-        
-        
-          Show
-          
-            Open the document after saving.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
       
     
     
@@ -147317,10 +162339,10 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        PassThru
+      
+        Open
         
-          Emit the document object for further processing.
+          Open the document after saving.
         
         SwitchParameter
         
@@ -147330,33 +162352,9 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         None
       
       
-        Password
-        
-          Password used to save the document as an encrypted package.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        Path
-        
-          Optional save-as path.
-        
-        String
-        
-          String
-          
-        
-        None
-      
-      
-        PdfAllowSystemFontEmbedding
+        PassThru
         
-          Allow the native Word PDF converter to embed installed system fonts used by the document.
+          Emit the document object for further processing.
         
         SwitchParameter
         
@@ -147366,9 +162364,9 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         None
       
       
-        PdfFontFamily
+        Password
         
-          Optional default font family used by the native Word PDF converter.
+          Password used to save the document as an encrypted package.
         
         String
         
@@ -147377,10 +162375,10 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        PdfPath
+      
+        Path
         
-          Optional PDF path to create from the same Word document.
+          Optional save-as path.
         
         String
         
@@ -147389,18 +162387,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        Show
-        
-          Open the document after saving.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
     
     
       
@@ -148384,26 +163370,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
       
       
         Set-OfficeExcelActiveSheet
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Emit the activated worksheet.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit the activated worksheet.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -148498,26 +163484,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Emit the activated worksheet.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit the activated worksheet.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -149287,6 +164273,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Row
           
@@ -149446,6 +164444,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Sheet
           
@@ -149605,6 +164615,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Row
         
@@ -149842,6 +164864,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           ShowCategoryMajorGridlines
           
@@ -150113,6 +165147,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         ShowCategoryMajorGridlines
         
@@ -150461,6 +165507,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Position
           
@@ -150703,6 +165761,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Position
         
@@ -150943,6 +166013,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Position
           
@@ -151061,6 +166143,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Position
         
@@ -151177,6 +166271,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PointIndex
           
@@ -151264,6 +166370,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PointIndex
           
@@ -151351,6 +166469,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PointIndex
         
@@ -151544,6 +166674,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           SeriesIndex
           
@@ -151679,6 +166821,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           SeriesName
           
@@ -151814,6 +166968,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         SeriesIndex
         
@@ -151911,6 +167077,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           StyleId
           
@@ -151950,6 +167128,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         StyleId
         
@@ -152119,6 +167309,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Period
           
@@ -152278,6 +167480,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Period
           
@@ -152437,6 +167651,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Period
         
@@ -152582,6 +167808,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           StartRow
           
@@ -152669,6 +167907,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         StartRow
         
@@ -152832,6 +168082,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           StartColumn
           
@@ -152955,6 +168217,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         StartColumn
         
@@ -153219,6 +168493,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Pattern
           
@@ -153467,6 +168753,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Pattern
           
@@ -153739,6 +169037,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Pattern
         
@@ -154088,26 +169398,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Returns matching validation rules after updating them.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Returns matching validation rules after updating them.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -154466,26 +169776,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Returns matching validation rules after updating them.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Returns matching validation rules after updating them.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -155336,6 +170646,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Row
           
@@ -155375,6 +170697,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
     
     
@@ -155414,6 +170748,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Row
         
@@ -155481,6 +170827,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           TopRows
           
@@ -155520,6 +170878,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Sheet
           
@@ -155583,6 +170953,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Sheet
         
@@ -160259,26 +175641,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
       
       
         Set-OfficeExcelPrintArea
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Emit the worksheet after setting the print area.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit the worksheet after setting the print area.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -160397,26 +175779,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Emit the worksheet after setting the print area.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit the worksheet after setting the print area.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -160743,18 +176125,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Margins
           
@@ -160829,6 +176199,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Preset
           
@@ -161209,18 +176591,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Margins
         
@@ -161295,6 +176665,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Preset
         
@@ -161598,18 +176980,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           LastColumn
           
@@ -161646,6 +177016,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Sheet
           
@@ -161832,18 +177214,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         LastColumn
         
@@ -161880,6 +177250,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Sheet
         
@@ -162051,18 +177433,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           NoSavePivotSourceData
           
@@ -162087,6 +177457,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           PivotTables
           
@@ -162237,18 +177619,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         NoSavePivotSourceData
         
@@ -162273,6 +177643,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         PivotTables
         
@@ -162459,26 +177841,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Emit written rich text runs.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit written rich text runs.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -162669,26 +178051,26 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Emit written rich text runs.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit written rich text runs.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -162906,6 +178288,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Row
           
@@ -163089,6 +178483,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Row
         
@@ -163264,6 +178670,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           StartRow
           
@@ -163363,6 +178781,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         StartRow
         
@@ -164336,18 +179766,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           Name
           
@@ -164372,6 +179790,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Xml
           
@@ -164498,18 +179928,6 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         Name
         
@@ -164534,6 +179952,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Xml
         
@@ -166369,6 +181799,179 @@ The document is saved through the normal OfficeIMO.Pdf save path.
     
     
   
+  
+    
+      Set-OfficeOpenDocumentCell
+      Set
+      OfficeOpenDocumentCell
+      
+        Sets a typed zero-based cell value in an OpenDocument spreadsheet.
+      
+    
+    
+      Sets a typed zero-based cell value in an OpenDocument spreadsheet.
+    
+    
+      
+        Set-OfficeOpenDocumentCell
+        
+          Column
+          
+            Zero-based column index.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the updated cell.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Row
+          
+            Zero-based row index.
+          
+          Int64
+          
+            Int64
+            
+          
+          None
+        
+        
+          Sheet
+          
+            Worksheet target. Omit inside Add-OfficeOpenDocumentSheet -Content.
+          
+          OdsSheet
+          
+            OdsSheet
+            
+          
+          None
+        
+        
+          Value
+          
+            String, number, decimal, boolean, date, date-time offset, or time span value.
+          
+          Object
+          
+            Object
+            
+          
+          None
+        
+      
+    
+    
+      
+        Column
+        
+          Zero-based column index.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the updated cell.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Row
+        
+          Zero-based row index.
+        
+        Int64
+        
+          Int64
+          
+        
+        None
+      
+      
+        Sheet
+        
+          Worksheet target. Omit inside Add-OfficeOpenDocumentSheet -Content.
+        
+        OdsSheet
+        
+          OdsSheet
+          
+        
+        None
+      
+      
+        Value
+        
+          String, number, decimal, boolean, date, date-time offset, or time span value.
+        
+        Object
+        
+          Object
+          
+        
+        None
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdsSheet
+        
+      
+    
+    
+      
+        
+          OfficeIMO.OpenDocument.OdsCell
+        
+      
+    
+    
+      
+        
+      
+    
+    
+      
+        Set typed values inside the active worksheet.
+        
+          PS> 
+        
+        Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Healthy'
+            Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value $true
+        
+          
+        
+      
+    
+    
+  
   
     
       Set-OfficePdfAnnotation
@@ -166468,6 +182071,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PassThruReport
           
@@ -166615,6 +182230,18 @@ The document is saved through the normal OfficeIMO.Pdf save path.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PassThruReport
         
@@ -168279,6 +183906,18 @@ default, first-page, and even-page text, zones, images, shapes, rich text, and p
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -168402,6 +184041,18 @@ default, first-page, and even-page text, zones, images, shapes, rich text, and p
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -169363,6 +185014,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Password
           
@@ -169588,6 +185251,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Password
         
@@ -170570,6 +186245,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           PassThruReport
           
@@ -170645,6 +186332,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         PassThruReport
         
@@ -170934,6 +186633,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -170961,6 +186672,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -170988,6 +186711,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -171039,6 +186774,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Slide
         
@@ -172265,6 +188012,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
     
       
         Set-OfficePowerPointNotes
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -172292,6 +188051,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Slide
         
@@ -172343,7 +188114,7 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointNotes.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Executive summary'
                 Set-OfficePowerPointNotes -Slide $slide -Text 'Keep this slide under five minutes and focus on decisions.'
             }
@@ -172543,7 +188314,7 @@ Apply a theme near the start of a New-OfficePdf script block so later content in
           PS> 
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointPlaceholderText.pptx {
-                $slide = Add-OfficePowerPointSlide -Layout 1
+                $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
                 Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Agenda'
                 Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Body -Text 'Review signals and decisions' -IgnoreMissing
             }
@@ -173444,6 +189215,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -173495,6 +189278,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -173572,6 +189367,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -173685,6 +189492,18 @@ contents, then save or close the presentation.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Slide
         
@@ -173746,6 +189565,18 @@ contents, then save or close the presentation.
     
       
         Set-OfficePowerPointSlideSize
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Portrait
           
@@ -173802,6 +189633,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -173841,6 +189684,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -173880,6 +189735,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -173919,6 +189786,18 @@ contents, then save or close the presentation.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -173994,6 +189873,18 @@ contents, then save or close the presentation.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Portrait
         
@@ -174111,7 +190002,7 @@ contents, then save or close the presentation.
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointWidescreen.pptx {
                 Set-OfficePowerPointSlideSize -Preset Screen16x9
-                Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck'
+                Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck'
             }
         
           Applies the 16:9 widescreen preset before adding slides.
@@ -174122,9 +190013,10 @@ contents, then save or close the presentation.
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointCustomSize.pptx
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCustomSize.pptx -NoSave
             Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 25.4 -HeightCm 14.0
-            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Custom size'
+            Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Custom size'
+            $ppt | Close-OfficePowerPoint -Save
         
           Sets the presentation slide size to a custom 25.4 x 14.0 cm layout.
         
@@ -174147,6 +190039,18 @@ contents, then save or close the presentation.
     
       
         Set-OfficePowerPointSlideTitle
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -174174,6 +190078,18 @@ contents, then save or close the presentation.
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Slide
         
@@ -174241,6 +190157,18 @@ contents, then save or close the presentation.
     
       
         Set-OfficePowerPointSlideTransition
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -174336,6 +190264,18 @@ contents, then save or close the presentation.
       
     
     
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Slide
         
@@ -175343,7 +191283,7 @@ cell inside a deck that already exists.
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeFonts.pptx {
                 Set-OfficePowerPointThemeFonts -MajorLatin 'Aptos Display' -MinorLatin 'Aptos' -AllMasters
-                Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Theme fonts'
+                Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Theme fonts'
             }
         
           Updates theme fonts before creating slides.
@@ -175494,7 +191434,7 @@ cell inside a deck that already exists.
         
         New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeName.pptx {
                 Set-OfficePowerPointThemeName -Name 'Service Brief' -AllMasters
-                Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Named theme'
+                Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Named theme'
             }
         
           Applies a friendly theme name across every master before saving.
@@ -180403,8 +196343,8 @@ cell inside a deck that already exists.
     
       
         Test-OfficeExcelAccessibility
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -180469,8 +196409,8 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -180569,8 +196509,8 @@ cell inside a deck that already exists.
           
           None
         
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -180707,8 +196647,8 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -180808,8 +196748,8 @@ cell inside a deck that already exists.
     
       
         Test-OfficeExcelWorkbook
-        
-          InputPath
+        
+          Path
           
             Workbook path.
           
@@ -180922,8 +196862,8 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
+      
+        Path
         
           Workbook path.
         
@@ -181437,26 +197377,26 @@ cell inside a deck that already exists.
       
       
         Unprotect-OfficeExcelWorkbook
-        
-          InputPath
+        
+          PassThru
           
-            Workbook path to update.
+            Emit the workbook after removing protection.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
-        
-          PassThru
+        
+          Path
           
-            Emit the workbook after removing protection.
+            Workbook path to update.
           
-          SwitchParameter
+          String
           
-            SwitchParameter
+            String
             
           
           None
@@ -181503,26 +197443,26 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
+      
+        PassThru
         
-          Workbook path to update.
+          Emit the workbook after removing protection.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
-      
-        PassThru
+      
+        Path
         
-          Emit the workbook after removing protection.
+          Workbook path to update.
         
-        SwitchParameter
+        String
         
-          SwitchParameter
+          String
           
         
         None
@@ -181778,18 +197718,6 @@ cell inside a deck that already exists.
           
           None
         
-        
-          InputPath
-          
-            Workbook path to update.
-          
-          String
-          
-            String
-            
-          
-          None
-        
         
           MatchAuthor
           
@@ -181814,6 +197742,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          Path
+          
+            Workbook path to update.
+          
+          String
+          
+            String
+            
+          
+          None
+        
         
           Range
           
@@ -182108,18 +198048,6 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
-        
-          Workbook path to update.
-        
-        String
-        
-          String
-          
-        
-        None
-      
       
         MatchAuthor
         
@@ -182144,6 +198072,18 @@ cell inside a deck that already exists.
         
         None
       
+      
+        Path
+        
+          Workbook path to update.
+        
+        String
+        
+          String
+          
+        
+        None
+      
       
         Range
         
@@ -182279,10 +198219,10 @@ cell inside a deck that already exists.
           
           None
         
-        
-          InputPath
+        
+          NewValue
           
-            Workbook path to update.
+            Replacement text.
           
           String
           
@@ -182292,9 +198232,9 @@ cell inside a deck that already exists.
           None
         
         
-          NewValue
+          OldValue
           
-            Replacement text.
+            Text or pattern to replace.
           
           String
           
@@ -182303,10 +198243,34 @@ cell inside a deck that already exists.
           
           None
         
-        
-          OldValue
+        
+          Open
           
-            Text or pattern to replace.
+            Open the file after saving when using -Path.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
+        
+          Path
+          
+            Workbook path to update.
           
           String
           
@@ -182363,18 +198327,6 @@ cell inside a deck that already exists.
           
           None
         
-        
-          Show
-          
-            Open the file after saving when using -Path.
-          
-          SwitchParameter
-          
-            SwitchParameter
-            
-          
-          None
-        
       
       
         Update-OfficeExcelText
@@ -182426,6 +198378,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Range
           
@@ -182501,10 +198465,10 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
+      
+        NewValue
         
-          Workbook path to update.
+          Replacement text.
         
         String
         
@@ -182514,9 +198478,9 @@ cell inside a deck that already exists.
         None
       
       
-        NewValue
+        OldValue
         
-          Replacement text.
+          Text or pattern to replace.
         
         String
         
@@ -182525,10 +198489,34 @@ cell inside a deck that already exists.
         
         None
       
-      
-        OldValue
+      
+        Open
         
-          Text or pattern to replace.
+          Open the file after saving when using -Path.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
+      
+        Path
+        
+          Workbook path to update.
         
         String
         
@@ -182585,18 +198573,6 @@ cell inside a deck that already exists.
         
         None
       
-      
-        Show
-        
-          Open the file after saving when using -Path.
-        
-        SwitchParameter
-        
-          SwitchParameter
-          
-        
-        None
-      
     
     
       
@@ -182623,7 +198599,7 @@ cell inside a deck that already exists.
         
           PS> 
         
-        $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready
+        $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready -PassThru
             [pscustomobject]@{
                 Path = '.\Report.xlsx'
                 Replacements = $count
@@ -182698,6 +198674,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
       
         Update-OfficePowerPointText
@@ -182749,6 +198737,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Presentation
           
@@ -182812,6 +198812,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
         
           Slide
           
@@ -182875,6 +198887,18 @@ cell inside a deck that already exists.
         
         None
       
+      
+        PassThru
+        
+          Emit the object created or changed by the command.
+        
+        SwitchParameter
+        
+          SwitchParameter
+          
+        
+        None
+      
       
         Presentation
         
@@ -182930,11 +198954,12 @@ cell inside a deck that already exists.
         
           PS> 
         
-        $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointUpdateText.pptx
-            $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-            Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary' | Out-Null
-            Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.' | Out-Null
-            Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes
+        $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointUpdateText.pptx -NoSave
+            $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+            Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary'
+            Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.'
+            $count = Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes -PassThru
+            $ppt | Close-OfficePowerPoint -Save
         
           Replaces matching text throughout the presentation and notes, returning the replacement count.
         
@@ -183629,6 +199654,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
       
         Update-OfficeWordText
@@ -183728,6 +199765,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          PassThru
+          
+            Emit the object created or changed by the command.
+          
+          SwitchParameter
+          
+            SwitchParameter
+            
+          
+          None
+        
       
       
         Update-OfficeWordText
@@ -183791,10 +199840,10 @@ cell inside a deck that already exists.
           
           None
         
-        
-          InputPath
+        
+          NewValue
           
-            Path to the .docx file to update in place.
+            Replacement text.
           
           String
           
@@ -183804,9 +199853,9 @@ cell inside a deck that already exists.
           None
         
         
-          NewValue
+          OldValue
           
-            Replacement text.
+            Text to find.
           
           String
           
@@ -183815,22 +199864,22 @@ cell inside a deck that already exists.
           
           None
         
-        
-          OldValue
+        
+          Open
           
-            Text to find.
+            Open the file after saving when using -Path.
           
-          String
+          SwitchParameter
           
-            String
+            SwitchParameter
             
           
           None
         
         
-          Show
+          PassThru
           
-            Open the file after saving when using -Path.
+            Emit the object created or changed by the command.
           
           SwitchParameter
           
@@ -183839,6 +199888,18 @@ cell inside a deck that already exists.
           
           None
         
+        
+          Path
+          
+            Path to the .docx file to update in place.
+          
+          String
+          
+            String
+            
+          
+          None
+        
       
     
     
@@ -183914,10 +199975,10 @@ cell inside a deck that already exists.
         
         None
       
-      
-        InputPath
+      
+        NewValue
         
-          Path to the .docx file to update in place.
+          Replacement text.
         
         String
         
@@ -183927,9 +199988,9 @@ cell inside a deck that already exists.
         None
       
       
-        NewValue
+        OldValue
         
-          Replacement text.
+          Text to find.
         
         String
         
@@ -183938,22 +199999,22 @@ cell inside a deck that already exists.
         
         None
       
-      
-        OldValue
+      
+        Open
         
-          Text to find.
+          Open the file after saving when using -Path.
         
-        String
+        SwitchParameter
         
-          String
+          SwitchParameter
           
         
         None
       
       
-        Show
+        PassThru
         
-          Open the file after saving when using -Path.
+          Emit the object created or changed by the command.
         
         SwitchParameter
         
@@ -183962,6 +200023,18 @@ cell inside a deck that already exists.
         
         None
       
+      
+        Path
+        
+          Path to the .docx file to update in place.
+        
+        String
+        
+          String
+          
+        
+        None
+      
     
     
       
@@ -183988,7 +200061,7 @@ cell inside a deck that already exists.
         
           PS> 
         
-        $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25'
+        $count = $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -PassThru
         
           Updates matching text in the loaded document and returns the number of replacements.
         
diff --git a/Docs/Get-OfficeDocumentHierarchy.md b/Docs/Get-OfficeDocumentHierarchy.md
index 1fcb0089..e4cb233d 100644
--- a/Docs/Get-OfficeDocumentHierarchy.md
+++ b/Docs/Get-OfficeDocumentHierarchy.md
@@ -21,7 +21,8 @@ Creates bounded token-aware chunks and a deterministic document hierarchy.
 
 ### EXAMPLE 1
 ```powershell
-PS> $options = [OfficeIMO.Reader.ReaderHierarchicalChunkingOptions]::new(); $options.MaxTokens = 500; $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
+PS> $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText
+$result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
 ```
 
 Returns chunks, token evidence, overlap counts, and flattened parent/child nodes.
diff --git a/Docs/Get-OfficeEmail.md b/Docs/Get-OfficeEmail.md
index 780dfb01..7c6c38ec 100644
--- a/Docs/Get-OfficeEmail.md
+++ b/Docs/Get-OfficeEmail.md
@@ -21,7 +21,8 @@ Reads a native EML, EMLX, MSG, or TNEF artifact with bounded diagnostics.
 
 ### EXAMPLE 1
 ```powershell
-Get-OfficeEmail -Path 'C:\Path'
+PS> $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult
 ```
 
 
diff --git a/Docs/Get-OfficeEmailMailbox.md b/Docs/Get-OfficeEmailMailbox.md
index 1602b30f..7d185131 100644
--- a/Docs/Get-OfficeEmailMailbox.md
+++ b/Docs/Get-OfficeEmailMailbox.md
@@ -21,7 +21,8 @@ Reads a native mbox mailbox with bounded per-message diagnostics.
 
 ### EXAMPLE 1
 ```powershell
-Get-OfficeEmailMailbox -Path 'C:\Path'
+PS> $options = New-OfficeEmailMailboxReaderOptions -MaxMessageCount 5000
+Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult
 ```
 
 
diff --git a/Docs/Get-OfficeExcel.md b/Docs/Get-OfficeExcel.md
index b61078c9..05eaa616 100644
--- a/Docs/Get-OfficeExcel.md
+++ b/Docs/Get-OfficeExcel.md
@@ -11,12 +11,12 @@ Opens an existing Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcel [-InputPath]  [-ReadOnly] [-AutoSave] [-Password ] []
+Get-OfficeExcel [-Path]  [-ReadOnly] [-Password ] []
 ```
 
 ### Uri
 ```powershell
-Get-OfficeExcel [-Uri]  [-AllowHttp] [-ReadOnly] [-AutoSave] [-Password ] []
+Get-OfficeExcel [-Uri]  [-AllowHttp] [-ReadOnly] [-Password ] []
 ```
 
 ## DESCRIPTION
@@ -49,11 +49,11 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -AutoSave
-Enable automatic saves on the underlying document.
+### -Password
+Password used to open an encrypted workbook package.
 
 ```yaml
-Type: SwitchParameter
+Type: String
 Parameter Sets: Path, Uri
 Aliases: None
 Possible values:
@@ -65,13 +65,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the workbook to load.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
@@ -81,22 +81,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Password
-Password used to open an encrypted workbook package.
-
-```yaml
-Type: String
-Parameter Sets: Path, Uri
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -ReadOnly
 Open the file in read-only mode.
 
diff --git a/Docs/Get-OfficeExcelComment.md b/Docs/Get-OfficeExcelComment.md
index fbef1a06..f6989d73 100644
--- a/Docs/Get-OfficeExcelComment.md
+++ b/Docs/Get-OfficeExcelComment.md
@@ -16,7 +16,7 @@ Get-OfficeExcelComment [-Sheet ] [-SheetIndex ] [-Address  [-Sheet ] [-SheetIndex ] [-Address ] [-Range ] [-Author ] [-TextContains ] []
+Get-OfficeExcelComment [-Path]  [-Sheet ] [-SheetIndex ] [-Address ] [-Range ] [-Author ] [-TextContains ] []
 ```
 
 ### Document
@@ -88,13 +88,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelCommentAudit.md b/Docs/Get-OfficeExcelCommentAudit.md
index cf7a0eac..9ed2ae5d 100644
--- a/Docs/Get-OfficeExcelCommentAudit.md
+++ b/Docs/Get-OfficeExcelCommentAudit.md
@@ -11,7 +11,7 @@ Audits legacy notes and threaded comments preserved in an Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelCommentAudit [-InputPath]  [-IncludeComments] []
+Get-OfficeExcelCommentAudit [-Path]  [-IncludeComments] []
 ```
 
 ### Document
@@ -67,13 +67,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelConditionalFormatting.md b/Docs/Get-OfficeExcelConditionalFormatting.md
index 4226c45f..9b92fe63 100644
--- a/Docs/Get-OfficeExcelConditionalFormatting.md
+++ b/Docs/Get-OfficeExcelConditionalFormatting.md
@@ -16,7 +16,7 @@ Get-OfficeExcelConditionalFormatting [-Sheet ] [-SheetIndex ] [-R
 
 ### Path
 ```powershell
-Get-OfficeExcelConditionalFormatting [-InputPath]  [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] []
+Get-OfficeExcelConditionalFormatting [-Path]  [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] []
 ```
 
 ### Document
@@ -103,13 +103,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelDataModel.md b/Docs/Get-OfficeExcelDataModel.md
index 868cc7be..7c8dd13f 100644
--- a/Docs/Get-OfficeExcelDataModel.md
+++ b/Docs/Get-OfficeExcelDataModel.md
@@ -11,7 +11,7 @@ Inspects workbook data model, query, connection, and external-link package parts
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelDataModel [-InputPath]  []
+Get-OfficeExcelDataModel [-Path]  []
 ```
 
 ### Document
@@ -52,13 +52,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelDataValidation.md b/Docs/Get-OfficeExcelDataValidation.md
index 6a4616fe..0eabae6c 100644
--- a/Docs/Get-OfficeExcelDataValidation.md
+++ b/Docs/Get-OfficeExcelDataValidation.md
@@ -16,7 +16,7 @@ Get-OfficeExcelDataValidation [-Sheet ] [-SheetIndex ] [-Range  [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] []
+Get-OfficeExcelDataValidation [-Path]  [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] []
 ```
 
 ### Document
@@ -103,13 +103,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelDocumentProperty.md b/Docs/Get-OfficeExcelDocumentProperty.md
index c8d07bb7..ffbaba6c 100644
--- a/Docs/Get-OfficeExcelDocumentProperty.md
+++ b/Docs/Get-OfficeExcelDocumentProperty.md
@@ -11,7 +11,7 @@ Gets built-in and application document properties from an Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelDocumentProperty [-InputPath]  [-Name ] [-BuiltIn] [-Application] [-Custom] []
+Get-OfficeExcelDocumentProperty [-Path]  [-Name ] [-BuiltIn] [-Application] [-Custom] []
 ```
 
 ### Document
@@ -99,22 +99,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the workbook.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Name
 Property name filter (wildcards supported).
 
@@ -131,6 +115,22 @@ Accept pipeline input: False
 Accept wildcard characters: True
 ```
 
+### -Path
+Path to the workbook.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Docs/Get-OfficeExcelFormulaAnalysis.md b/Docs/Get-OfficeExcelFormulaAnalysis.md
index aa247936..24286276 100644
--- a/Docs/Get-OfficeExcelFormulaAnalysis.md
+++ b/Docs/Get-OfficeExcelFormulaAnalysis.md
@@ -11,7 +11,7 @@ Gets workbook formula references, functions, volatile formulas, and external lin
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelFormulaAnalysis [-InputPath]  [-IncludeFormulas] []
+Get-OfficeExcelFormulaAnalysis [-Path]  [-IncludeFormulas] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelNamedRange.md b/Docs/Get-OfficeExcelNamedRange.md
index 9e2a4a9f..6100b672 100644
--- a/Docs/Get-OfficeExcelNamedRange.md
+++ b/Docs/Get-OfficeExcelNamedRange.md
@@ -11,7 +11,7 @@ Gets defined names (named ranges) from an Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelNamedRange [-InputPath]  [-Name ] [-Sheet ] [-SheetIndex ] []
+Get-OfficeExcelNamedRange [-Path]  [-Name ] [-Sheet ] [-SheetIndex ] []
 ```
 
 ### Uri
@@ -73,33 +73,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the workbook.
+### -Name
+Optional named range to retrieve.
 
 ```yaml
 Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Parameter Sets: Path, Uri, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Name
-Optional named range to retrieve.
+### -Path
+Path to the workbook.
 
 ```yaml
 Type: String
-Parameter Sets: Path, Uri, Document
-Aliases: None
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeExcelPageBreak.md b/Docs/Get-OfficeExcelPageBreak.md
index 85cd07ee..2c87eeea 100644
--- a/Docs/Get-OfficeExcelPageBreak.md
+++ b/Docs/Get-OfficeExcelPageBreak.md
@@ -16,7 +16,7 @@ Get-OfficeExcelPageBreak [-Sheet ] [-SheetIndex ] [-Row] [-Column
 
 ### Path
 ```powershell
-Get-OfficeExcelPageBreak [-InputPath]  [-Sheet ] [-SheetIndex ] [-Row] [-Column] []
+Get-OfficeExcelPageBreak [-Path]  [-Sheet ] [-SheetIndex ] [-Row] [-Column] []
 ```
 
 ### Document
@@ -72,13 +72,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelPivotTable.md b/Docs/Get-OfficeExcelPivotTable.md
index b7399d09..d763a094 100644
--- a/Docs/Get-OfficeExcelPivotTable.md
+++ b/Docs/Get-OfficeExcelPivotTable.md
@@ -11,7 +11,7 @@ Gets pivot tables defined in a workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelPivotTable [-InputPath]  [-Name ] [-Sheet ] [-SheetIndex ] []
+Get-OfficeExcelPivotTable [-Path]  [-Name ] [-Sheet ] [-SheetIndex ] []
 ```
 
 ### Document
@@ -52,33 +52,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the workbook.
+### -Name
+Optional pivot table name filter.
 
 ```yaml
 Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Parameter Sets: Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Name
-Optional pivot table name filter.
+### -Path
+Path to the workbook.
 
 ```yaml
 Type: String
-Parameter Sets: Path, Document
-Aliases: None
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeExcelPreflight.md b/Docs/Get-OfficeExcelPreflight.md
index 31c495a1..d1b80ee3 100644
--- a/Docs/Get-OfficeExcelPreflight.md
+++ b/Docs/Get-OfficeExcelPreflight.md
@@ -11,7 +11,7 @@ Runs OfficeIMO Excel feature and workflow preflight checks.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelPreflight [-InputPath]  [-Capability ] [-IncludeFeatures] [-IncludeRepairHints] [-AsMarkdown] [-ThrowOnFailure] []
+Get-OfficeExcelPreflight [-Path]  [-Capability ] [-IncludeFeatures] [-IncludeRepairHints] [-AsMarkdown] [-ThrowOnFailure] []
 ```
 
 ### Document
@@ -115,13 +115,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the workbook.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelRange.md b/Docs/Get-OfficeExcelRange.md
index 746ece9b..07447f46 100644
--- a/Docs/Get-OfficeExcelRange.md
+++ b/Docs/Get-OfficeExcelRange.md
@@ -11,7 +11,7 @@ Reads an explicit A1 range from an Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelRange [-InputPath]  -Range  [-Sheet ] [-SheetIndex ] [-HeadersInFirstRow ] [-NumericAsDecimal] [-AsHashtable] [-AsDataTable] []
+Get-OfficeExcelRange [-Path]  -Range  [-Sheet ] [-SheetIndex ] [-HeadersInFirstRow ] [-NumericAsDecimal] [-AsHashtable] [-AsDataTable] []
 ```
 
 ### Uri
@@ -121,33 +121,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the workbook.
+### -NumericAsDecimal
+Prefer decimals instead of doubles for numeric values.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Type: SwitchParameter
+Parameter Sets: Path, Uri, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -NumericAsDecimal
-Prefer decimals instead of doubles for numeric values.
+### -Path
+Path to the workbook.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Path, Uri, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeExcelRichText.md b/Docs/Get-OfficeExcelRichText.md
index 9e32a340..f4dabb00 100644
--- a/Docs/Get-OfficeExcelRichText.md
+++ b/Docs/Get-OfficeExcelRichText.md
@@ -16,7 +16,7 @@ Get-OfficeExcelRichText [-Sheet ] [-SheetIndex ] [-Row ] [
 
 ### Path
 ```powershell
-Get-OfficeExcelRichText [-InputPath]  [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-Address ] []
+Get-OfficeExcelRichText [-Path]  [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-Address ] []
 ```
 
 ### Document
@@ -88,13 +88,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelStreamingContract.md b/Docs/Get-OfficeExcelStreamingContract.md
index f89938c6..c94f8533 100644
--- a/Docs/Get-OfficeExcelStreamingContract.md
+++ b/Docs/Get-OfficeExcelStreamingContract.md
@@ -11,7 +11,7 @@ Reports large-workbook streaming and direct-writer suitability.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelStreamingContract [-InputPath]  []
+Get-OfficeExcelStreamingContract [-Path]  []
 ```
 
 ### Document
@@ -54,13 +54,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelSummary.md b/Docs/Get-OfficeExcelSummary.md
index 5fed7ef8..216a03e1 100644
--- a/Docs/Get-OfficeExcelSummary.md
+++ b/Docs/Get-OfficeExcelSummary.md
@@ -11,7 +11,7 @@ Gets a compact structural summary of an Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelSummary [-InputPath]  [-IncludeSheets] [-IncludeSchema] []
+Get-OfficeExcelSummary [-Path]  [-IncludeSheets] [-IncludeSchema] []
 ```
 
 ### Document
@@ -85,13 +85,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the workbook.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeExcelTable.md b/Docs/Get-OfficeExcelTable.md
index 0bce6ed4..91ce49f5 100644
--- a/Docs/Get-OfficeExcelTable.md
+++ b/Docs/Get-OfficeExcelTable.md
@@ -11,7 +11,7 @@ Gets Excel tables defined in a workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelTable [-InputPath]  [-Name ] [-Sheet ] [-SheetIndex ] []
+Get-OfficeExcelTable [-Path]  [-Name ] [-Sheet ] [-SheetIndex ] []
 ```
 
 ### Uri
@@ -73,33 +73,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the workbook.
+### -Name
+Optional table name filter.
 
 ```yaml
 Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Parameter Sets: Path, Uri, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Name
-Optional table name filter.
+### -Path
+Path to the workbook.
 
 ```yaml
 Type: String
-Parameter Sets: Path, Uri, Document
-Aliases: None
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeExcelTemplateMarker.md b/Docs/Get-OfficeExcelTemplateMarker.md
index 11b83814..9c56335a 100644
--- a/Docs/Get-OfficeExcelTemplateMarker.md
+++ b/Docs/Get-OfficeExcelTemplateMarker.md
@@ -16,7 +16,7 @@ Get-OfficeExcelTemplateMarker [-Sheet ] [-SheetIndex ] [-Value  [-Sheet ] [-SheetIndex ] [-Value ] [-MissingOnly] []
+Get-OfficeExcelTemplateMarker [-Path]  [-Sheet ] [-SheetIndex ] [-Value ] [-MissingOnly] []
 ```
 
 ### Document
@@ -54,33 +54,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to inspect.
+### -MissingOnly
+Only returns markers that are not supplied by -Value.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -MissingOnly
-Only returns markers that are not supplied by -Value.
+### -Path
+Workbook path to inspect.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeExcelUsedRange.md b/Docs/Get-OfficeExcelUsedRange.md
index 768c4776..70266117 100644
--- a/Docs/Get-OfficeExcelUsedRange.md
+++ b/Docs/Get-OfficeExcelUsedRange.md
@@ -11,7 +11,7 @@ Reads the used range from an Excel workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeExcelUsedRange [-InputPath]  [-Sheet ] [-SheetIndex ] [-HeadersInFirstRow ] [-NumericAsDecimal] [-AsHashtable] [-AsDataTable] []
+Get-OfficeExcelUsedRange [-Path]  [-Sheet ] [-SheetIndex ] [-HeadersInFirstRow ] [-NumericAsDecimal] [-AsHashtable] [-AsDataTable] []
 ```
 
 ### Uri
@@ -121,33 +121,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the workbook.
+### -NumericAsDecimal
+Prefer decimals instead of doubles for numeric values.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Type: SwitchParameter
+Parameter Sets: Path, Uri, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -NumericAsDecimal
-Prefer decimals instead of doubles for numeric values.
+### -Path
+Path to the workbook.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Path, Uri, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeExcelWorksheetView.md b/Docs/Get-OfficeExcelWorksheetView.md
index c8f87c9e..2f2fc775 100644
--- a/Docs/Get-OfficeExcelWorksheetView.md
+++ b/Docs/Get-OfficeExcelWorksheetView.md
@@ -16,7 +16,7 @@ Get-OfficeExcelWorksheetView [-Sheet ] [-SheetIndex ] [ [-Sheet ] [-SheetIndex ] []
+Get-OfficeExcelWorksheetView [-Path]  [-Sheet ] [-SheetIndex ] []
 ```
 
 ### Document
@@ -56,13 +56,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path to inspect.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeMarkdown.md b/Docs/Get-OfficeMarkdown.md
index 6b9abb97..97551929 100644
--- a/Docs/Get-OfficeMarkdown.md
+++ b/Docs/Get-OfficeMarkdown.md
@@ -11,7 +11,7 @@ Parses Markdown text or files into a Markdown document model.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeMarkdown [-InputPath]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] []
+Get-OfficeMarkdown [-Path]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] []
 ```
 
 ### Text
@@ -136,22 +136,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MaxInputCharacters
 Maximum Markdown input length accepted by the reader.
 
@@ -200,6 +184,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Profile
 Named reader profile used when Options is not supplied.
 
diff --git a/Docs/Get-OfficeMarkdownFrontMatter.md b/Docs/Get-OfficeMarkdownFrontMatter.md
index 81b06d8e..e9cd8f54 100644
--- a/Docs/Get-OfficeMarkdownFrontMatter.md
+++ b/Docs/Get-OfficeMarkdownFrontMatter.md
@@ -11,7 +11,7 @@ Gets YAML front matter entries from a Markdown document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeMarkdownFrontMatter [-InputPath]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-Key ] [-CaseSensitive] []
+Get-OfficeMarkdownFrontMatter [-Path]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-Key ] [-CaseSensitive] []
 ```
 
 ### Document
@@ -178,22 +178,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Key
 Optional wildcard pattern matched against front matter keys.
 
@@ -258,6 +242,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Profile
 Named reader profile used when Options is not supplied.
 
diff --git a/Docs/Get-OfficeMarkdownHeading.md b/Docs/Get-OfficeMarkdownHeading.md
index 5c5f202c..e6666a9c 100644
--- a/Docs/Get-OfficeMarkdownHeading.md
+++ b/Docs/Get-OfficeMarkdownHeading.md
@@ -11,7 +11,7 @@ Gets heading metadata from a Markdown document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeMarkdownHeading [-InputPath]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-MinLevel ] [-MaxLevel ] [-HeadingText ] [-Anchor ] [-CaseSensitive] []
+Get-OfficeMarkdownHeading [-Path]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-MinLevel ] [-MaxLevel ] [-HeadingText ] [-Anchor ] [-CaseSensitive] []
 ```
 
 ### Document
@@ -205,22 +205,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MaxInputCharacters
 Maximum Markdown input length accepted by the reader.
 
@@ -301,6 +285,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Profile
 Named reader profile used when Options is not supplied.
 
diff --git a/Docs/Get-OfficeMarkdownNode.md b/Docs/Get-OfficeMarkdownNode.md
index 6c7619da..959a1fd5 100644
--- a/Docs/Get-OfficeMarkdownNode.md
+++ b/Docs/Get-OfficeMarkdownNode.md
@@ -11,7 +11,7 @@ Gets the OfficeIMO.Markdown object tree from Markdown content.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeMarkdownNode [-InputPath]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-NodeType ] [-MaxDepth ] [-CaseSensitive] [-Raw] []
+Get-OfficeMarkdownNode [-Path]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-NodeType ] [-MaxDepth ] [-CaseSensitive] [-Raw] []
 ```
 
 ### Document
@@ -173,22 +173,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MaxDepth
 Maximum traversal depth. Zero returns only the document root.
 
@@ -269,6 +253,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Profile
 Named reader profile used when Options is not supplied.
 
diff --git a/Docs/Get-OfficeMarkdownTable.md b/Docs/Get-OfficeMarkdownTable.md
index df29d630..12510fbc 100644
--- a/Docs/Get-OfficeMarkdownTable.md
+++ b/Docs/Get-OfficeMarkdownTable.md
@@ -11,7 +11,7 @@ Gets Markdown tables from a Markdown document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeMarkdownTable [-InputPath]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-AsObject] []
+Get-OfficeMarkdownTable [-Path]  [-Options ] [-Profile ] [-BaseUri ] [-MaxInputCharacters ] [-NormalizeInput ] [-DisallowFileUrls ] [-AllowDataUrls ] [-AllowMailtoUrls ] [-AllowProtocolRelativeUrls ] [-RestrictUrlSchemes ] [-AllowedUrlScheme ] [-AsObject] []
 ```
 
 ### Document
@@ -166,22 +166,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MaxInputCharacters
 Maximum Markdown input length accepted by the reader.
 
@@ -230,6 +214,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the Markdown file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Profile
 Named reader profile used when Options is not supplied.
 
diff --git a/Docs/Get-OfficeOpenDocument.md b/Docs/Get-OfficeOpenDocument.md
index 1b9e1059..ca659255 100644
--- a/Docs/Get-OfficeOpenDocument.md
+++ b/Docs/Get-OfficeOpenDocument.md
@@ -11,7 +11,7 @@ Loads a native ODT, ODS, or ODP document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Get-OfficeOpenDocument [-Path]  [-Options ] []
+Get-OfficeOpenDocument [-Path]  [-Options ] [-Password ] [-MaxPackageBytes ] [-MaxEntries ] [-MaxEntryUncompressedBytes ] [-MaxTotalUncompressedBytes ] [-MaxTotalKdfIterations ] [-MaxCompressionRatio ] [-MaxDepth ] [-MaxXmlCharacters ] [-MaxXmlDepth ] []
 ```
 
 ## DESCRIPTION
@@ -27,6 +27,150 @@ Get-OfficeOpenDocument -Path 'C:\Path'
 
 ## PARAMETERS
 
+### -MaxCompressionRatio
+Maximum declared expansion ratio for a compressed entry.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxDepth
+Maximum archive path depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxEntries
+Maximum number of ZIP entries.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxEntryUncompressedBytes
+Maximum uncompressed size of one package entry.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPackageBytes
+Maximum source package size in bytes.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalKdfIterations
+Maximum aggregate PBKDF2 iterations across encrypted entries.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalUncompressedBytes
+Maximum aggregate uncompressed package size.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxXmlCharacters
+Maximum characters allowed in one parsed XML part.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxXmlDepth
+Maximum element nesting depth in one parsed XML part.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Options
 Optional bounded package and XML settings.
 
@@ -43,6 +187,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Password
+Password used to decrypt an encrypted OpenDocument package.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Path to an ODT, ODS, or ODP file.
 
diff --git a/Docs/Get-OfficePowerPoint.md b/Docs/Get-OfficePowerPoint.md
index ba4d150a..392322f8 100644
--- a/Docs/Get-OfficePowerPoint.md
+++ b/Docs/Get-OfficePowerPoint.md
@@ -11,7 +11,7 @@ Loads an existing PowerPoint presentation.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Get-OfficePowerPoint -FilePath  [-Password ] []
+Get-OfficePowerPoint -Path  [-Password ] []
 ```
 
 ## DESCRIPTION
@@ -21,15 +21,15 @@ Returns an OfficeIMO PowerPointPresentation for downstream slide operations.
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = Get-OfficePowerPoint -FilePath .\Quarterly.pptx
+PS> $ppt = Get-OfficePowerPoint -Path .\Quarterly.pptx
 ```
 
 Reads Quarterly.pptx and exposes the presentation object.
 
 ## PARAMETERS
 
-### -FilePath
-Path to the .pptx file.
+### -Password
+Password used to open an encrypted presentation package.
 
 ```yaml
 Type: String
@@ -37,23 +37,23 @@ Parameter Sets: __AllParameterSets
 Aliases: None
 Possible values:
 
-Required: True
+Required: False
 Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Password
-Password used to open an encrypted presentation package.
+### -Path
+Path to the .pptx file.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath
 Possible values:
 
-Required: False
+Required: True
 Position: named
 Default value: None
 Accept pipeline input: False
diff --git a/Docs/Get-OfficePowerPointLayoutBox.md b/Docs/Get-OfficePowerPointLayoutBox.md
index 4c59b406..bf6ce039 100644
--- a/Docs/Get-OfficePowerPointLayoutBox.md
+++ b/Docs/Get-OfficePowerPointLayoutBox.md
@@ -32,7 +32,7 @@ Returns the content box for a slide or equal column/row boxes derived from the c
 ### EXAMPLE 1
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointLayoutBox.pptx {
-    $slide = Add-OfficePowerPointSlide -Layout 1
+    $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
     $box = Get-OfficePowerPointLayoutBox -MarginCm 1.5
     Add-OfficePowerPointTextBox -Slide $slide -Text 'Inside the content box' -X ($box.LeftPoints) -Y ($box.TopPoints) -Width ($box.WidthPoints) -Height 60
 }
@@ -43,7 +43,7 @@ Returns a content box and uses it to position slide text.
 ### EXAMPLE 2
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointColumns.pptx {
-    $slide = Add-OfficePowerPointSlide -Layout 1
+    $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
     $columns = Get-OfficePowerPointLayoutBox -ColumnCount 2 -MarginCm 1.5 -GutterCm 1.0
     Add-OfficePowerPointTextBox -Slide $slide -Text 'Left column' -X ($columns[0].LeftPoints) -Y ($columns[0].TopPoints) -Width ($columns[0].WidthPoints) -Height 80
     Add-OfficePowerPointTextBox -Slide $slide -Text 'Right column' -X ($columns[1].LeftPoints) -Y ($columns[1].TopPoints) -Width ($columns[1].WidthPoints) -Height 80
diff --git a/Docs/Get-OfficePowerPointSection.md b/Docs/Get-OfficePowerPointSection.md
index 43df9cdf..9392dbd0 100644
--- a/Docs/Get-OfficePowerPointSection.md
+++ b/Docs/Get-OfficePowerPointSection.md
@@ -21,10 +21,11 @@ Returns OfficeIMO section metadata so scripts can inspect section names and slid
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSectionsRead.pptx
-Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0 | Out-Null
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSectionsRead.pptx -NoSave
+Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0
 Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount
+$ppt | Close-OfficePowerPoint
 ```
 
 Returns section information including section names and slide indexes.
diff --git a/Docs/Get-OfficePowerPointTheme.md b/Docs/Get-OfficePowerPointTheme.md
index 58764b9a..21685596 100644
--- a/Docs/Get-OfficePowerPointTheme.md
+++ b/Docs/Get-OfficePowerPointTheme.md
@@ -21,10 +21,11 @@ Gets theme information for a PowerPoint presentation master.
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointThemeRead.pptx
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeRead.pptx -NoSave
 Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Service Brief'
 Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos Display' -MinorLatin 'Aptos'
 Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master
+$ppt | Close-OfficePowerPoint
 ```
 
 Returns theme information after updating the deck theme metadata.
diff --git a/Docs/Get-OfficeWord.md b/Docs/Get-OfficeWord.md
index 14aca8a5..cf2f253c 100644
--- a/Docs/Get-OfficeWord.md
+++ b/Docs/Get-OfficeWord.md
@@ -11,7 +11,7 @@ Opens an existing Word document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Get-OfficeWord [-InputPath]  [[-Content] ] [-ReadOnly] [-AutoSave] [-Password ] []
+Get-OfficeWord [-Path]  [[-Content] ] [-ReadOnly] [-Password ] []
 ```
 
 ## DESCRIPTION
@@ -35,22 +35,6 @@ Loads the document, appends content through the DSL, and returns the open docume
 
 ## PARAMETERS
 
-### -AutoSave
-Enable AutoSave when editing.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Content
 Optional DSL scriptblock to execute against the loaded document.
 
@@ -67,33 +51,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the .docx. Accepts PS paths.
+### -Password
+Password used to open an encrypted document package.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: FilePath, Path
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Password
-Password used to open an encrypted document package.
+### -Path
+Path to the .docx. Accepts PS paths.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Get-OfficeWordBookmark.md b/Docs/Get-OfficeWordBookmark.md
index c0a88007..c5813218 100644
--- a/Docs/Get-OfficeWordBookmark.md
+++ b/Docs/Get-OfficeWordBookmark.md
@@ -11,7 +11,7 @@ Gets bookmarks from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordBookmark [-InputPath]  [-Name ] []
+Get-OfficeWordBookmark [-Path]  [-Name ] []
 ```
 
 ### Document
@@ -52,22 +52,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the .docx file.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Name
 Bookmark name filter (wildcards supported).
 
@@ -84,6 +68,22 @@ Accept pipeline input: False
 Accept wildcard characters: True
 ```
 
+### -Path
+Path to the .docx file.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Docs/Get-OfficeWordCheckBox.md b/Docs/Get-OfficeWordCheckBox.md
index 6428273e..a659854d 100644
--- a/Docs/Get-OfficeWordCheckBox.md
+++ b/Docs/Get-OfficeWordCheckBox.md
@@ -11,7 +11,7 @@ Gets checkbox content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordCheckBox [-InputPath]  [-Alias ] [-Tag ] [-Checked] [-Unchecked] []
+Get-OfficeWordCheckBox [-Path]  [-Alias ] [-Tag ] [-Checked] [-Unchecked] []
 ```
 
 ### Document
@@ -84,13 +84,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordComboBox.md b/Docs/Get-OfficeWordComboBox.md
index ffcad19c..5264e271 100644
--- a/Docs/Get-OfficeWordComboBox.md
+++ b/Docs/Get-OfficeWordComboBox.md
@@ -11,7 +11,7 @@ Gets combo box content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordComboBox [-InputPath]  [-Alias ] [-Tag ] []
+Get-OfficeWordComboBox [-Path]  [-Alias ] [-Tag ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordContentControl.md b/Docs/Get-OfficeWordContentControl.md
index 89e7ecee..d7b5ab68 100644
--- a/Docs/Get-OfficeWordContentControl.md
+++ b/Docs/Get-OfficeWordContentControl.md
@@ -11,7 +11,7 @@ Gets structured content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordContentControl [-InputPath]  [-Alias ] [-Tag ] [-Text ] []
+Get-OfficeWordContentControl [-Path]  [-Alias ] [-Tag ] [-Text ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordDatePicker.md b/Docs/Get-OfficeWordDatePicker.md
index f3ef335e..f11646e7 100644
--- a/Docs/Get-OfficeWordDatePicker.md
+++ b/Docs/Get-OfficeWordDatePicker.md
@@ -11,7 +11,7 @@ Gets date picker content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordDatePicker [-InputPath]  [-Alias ] [-Tag ] []
+Get-OfficeWordDatePicker [-Path]  [-Alias ] [-Tag ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordDocumentProperty.md b/Docs/Get-OfficeWordDocumentProperty.md
index 04101451..7020b32d 100644
--- a/Docs/Get-OfficeWordDocumentProperty.md
+++ b/Docs/Get-OfficeWordDocumentProperty.md
@@ -11,7 +11,7 @@ Gets built-in and custom document properties from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordDocumentProperty [-InputPath]  [-Name ] [-BuiltIn] [-Custom] []
+Get-OfficeWordDocumentProperty [-Path]  [-Name ] [-BuiltIn] [-Custom] []
 ```
 
 ### Document
@@ -84,22 +84,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the document.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Name
 Property name filter (wildcards supported).
 
@@ -116,6 +100,22 @@ Accept pipeline input: False
 Accept wildcard characters: True
 ```
 
+### -Path
+Path to the document.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Docs/Get-OfficeWordDropDownList.md b/Docs/Get-OfficeWordDropDownList.md
index dacf644e..f2d25005 100644
--- a/Docs/Get-OfficeWordDropDownList.md
+++ b/Docs/Get-OfficeWordDropDownList.md
@@ -11,7 +11,7 @@ Gets dropdown list content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordDropDownList [-InputPath]  [-Alias ] [-Tag ] []
+Get-OfficeWordDropDownList [-Path]  [-Alias ] [-Tag ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordEndnote.md b/Docs/Get-OfficeWordEndnote.md
index 156e1dc0..d8ac65e7 100644
--- a/Docs/Get-OfficeWordEndnote.md
+++ b/Docs/Get-OfficeWordEndnote.md
@@ -11,7 +11,7 @@ Gets endnotes from a Word document or section.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordEndnote [-InputPath]  []
+Get-OfficeWordEndnote [-Path]  []
 ```
 
 ### Document
@@ -57,13 +57,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordField.md b/Docs/Get-OfficeWordField.md
index 1a18c90c..a46f1544 100644
--- a/Docs/Get-OfficeWordField.md
+++ b/Docs/Get-OfficeWordField.md
@@ -11,7 +11,7 @@ Gets fields from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordField [-InputPath]  [-FieldType ] [-Contains ] [-CaseSensitive] []
+Get-OfficeWordField [-Path]  [-FieldType ] [-Contains ] [-CaseSensitive] []
 ```
 
 ### Document
@@ -100,13 +100,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordFootnote.md b/Docs/Get-OfficeWordFootnote.md
index 78816594..2604d726 100644
--- a/Docs/Get-OfficeWordFootnote.md
+++ b/Docs/Get-OfficeWordFootnote.md
@@ -11,7 +11,7 @@ Gets footnotes from a Word document or section.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordFootnote [-InputPath]  []
+Get-OfficeWordFootnote [-Path]  []
 ```
 
 ### Document
@@ -57,13 +57,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordHyperlink.md b/Docs/Get-OfficeWordHyperlink.md
index d9d88d4e..9b62901d 100644
--- a/Docs/Get-OfficeWordHyperlink.md
+++ b/Docs/Get-OfficeWordHyperlink.md
@@ -11,7 +11,7 @@ Gets hyperlinks from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordHyperlink [-InputPath]  [-Text ] [-Url ] [-Anchor ] []
+Get-OfficeWordHyperlink [-Path]  [-Text ] [-Url ] [-Anchor ] []
 ```
 
 ### Document
@@ -78,35 +78,35 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the document.
+### -Paragraph
+Paragraph to inspect.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Type: WordParagraph
+Parameter Sets: Paragraph
+Aliases: None
 Possible values:
 
 Required: True
-Position: 0
+Position: named
 Default value: None
-Accept pipeline input: False
+Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -Paragraph
-Paragraph to inspect.
+### -Path
+Path to the document.
 
 ```yaml
-Type: WordParagraph
-Parameter Sets: Paragraph
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
-Position: named
+Position: 0
 Default value: None
-Accept pipeline input: True (ByValue)
+Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
diff --git a/Docs/Get-OfficeWordImage.md b/Docs/Get-OfficeWordImage.md
index daceb1f4..826cb76f 100644
--- a/Docs/Get-OfficeWordImage.md
+++ b/Docs/Get-OfficeWordImage.md
@@ -11,7 +11,7 @@ Gets images from a Word document, section, or paragraph.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordImage [-InputPath]  []
+Get-OfficeWordImage [-Path]  []
 ```
 
 ### Document
@@ -62,35 +62,35 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the document.
+### -Paragraph
+Paragraph to inspect.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Type: WordParagraph
+Parameter Sets: Paragraph
+Aliases: None
 Possible values:
 
 Required: True
-Position: 0
+Position: named
 Default value: None
-Accept pipeline input: False
+Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -Paragraph
-Paragraph to inspect.
+### -Path
+Path to the document.
 
 ```yaml
-Type: WordParagraph
-Parameter Sets: Paragraph
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
-Position: named
+Position: 0
 Default value: None
-Accept pipeline input: True (ByValue)
+Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
diff --git a/Docs/Get-OfficeWordList.md b/Docs/Get-OfficeWordList.md
index c5eb1e63..5d6d983a 100644
--- a/Docs/Get-OfficeWordList.md
+++ b/Docs/Get-OfficeWordList.md
@@ -11,7 +11,7 @@ Gets lists from a Word document or section.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordList [-InputPath]  [-IncludeEmpty] []
+Get-OfficeWordList [-Path]  [-IncludeEmpty] []
 ```
 
 ### Document
@@ -85,13 +85,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document to open read-only for list inspection.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordParagraph.md b/Docs/Get-OfficeWordParagraph.md
index 3124ca4f..fc9aadea 100644
--- a/Docs/Get-OfficeWordParagraph.md
+++ b/Docs/Get-OfficeWordParagraph.md
@@ -11,7 +11,7 @@ Gets paragraphs from a Word document or section.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordParagraph [-InputPath]  []
+Get-OfficeWordParagraph [-Path]  []
 ```
 
 ### Document
@@ -58,13 +58,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordPictureControl.md b/Docs/Get-OfficeWordPictureControl.md
index 7ab57574..6b4fcb1a 100644
--- a/Docs/Get-OfficeWordPictureControl.md
+++ b/Docs/Get-OfficeWordPictureControl.md
@@ -11,7 +11,7 @@ Gets picture content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordPictureControl [-InputPath]  [-Alias ] [-Tag ] []
+Get-OfficeWordPictureControl [-Path]  [-Alias ] [-Tag ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordRepeatingSection.md b/Docs/Get-OfficeWordRepeatingSection.md
index 878943ab..0ebb456e 100644
--- a/Docs/Get-OfficeWordRepeatingSection.md
+++ b/Docs/Get-OfficeWordRepeatingSection.md
@@ -11,7 +11,7 @@ Gets repeating section content controls from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordRepeatingSection [-InputPath]  [-Alias ] [-Tag ] []
+Get-OfficeWordRepeatingSection [-Path]  [-Alias ] [-Tag ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordSection.md b/Docs/Get-OfficeWordSection.md
index b04d3106..faeefc42 100644
--- a/Docs/Get-OfficeWordSection.md
+++ b/Docs/Get-OfficeWordSection.md
@@ -11,7 +11,7 @@ Gets sections from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordSection [-InputPath]  [-Index ] []
+Get-OfficeWordSection [-Path]  [-Index ] []
 ```
 
 ### Document
@@ -68,13 +68,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordShape.md b/Docs/Get-OfficeWordShape.md
index d0b76aae..640e3988 100644
--- a/Docs/Get-OfficeWordShape.md
+++ b/Docs/Get-OfficeWordShape.md
@@ -11,7 +11,7 @@ Gets shapes from a Word document, section, or paragraph.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordShape [-InputPath]  []
+Get-OfficeWordShape [-Path]  []
 ```
 
 ### Document
@@ -62,35 +62,35 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the document.
+### -Paragraph
+Paragraph to inspect.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Type: WordParagraph
+Parameter Sets: Paragraph
+Aliases: None
 Possible values:
 
 Required: True
-Position: 0
+Position: named
 Default value: None
-Accept pipeline input: False
+Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -Paragraph
-Paragraph to inspect.
+### -Path
+Path to the document.
 
 ```yaml
-Type: WordParagraph
-Parameter Sets: Paragraph
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
-Position: named
+Position: 0
 Default value: None
-Accept pipeline input: True (ByValue)
+Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
diff --git a/Docs/Get-OfficeWordStatistics.md b/Docs/Get-OfficeWordStatistics.md
index a0928a6e..deb984a9 100644
--- a/Docs/Get-OfficeWordStatistics.md
+++ b/Docs/Get-OfficeWordStatistics.md
@@ -11,7 +11,7 @@ Gets document statistics from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordStatistics [-InputPath]  []
+Get-OfficeWordStatistics [-Path]  []
 ```
 
 ### Document
@@ -52,13 +52,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the Word document.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordTable.md b/Docs/Get-OfficeWordTable.md
index 5f8e0a7d..78ef4131 100644
--- a/Docs/Get-OfficeWordTable.md
+++ b/Docs/Get-OfficeWordTable.md
@@ -11,7 +11,7 @@ Gets tables from a Word document or section.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordTable [-InputPath]  [-IncludeNested] []
+Get-OfficeWordTable [-Path]  [-IncludeNested] []
 ```
 
 ### Document
@@ -74,13 +74,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the document.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordTableOfContents.md b/Docs/Get-OfficeWordTableOfContents.md
index 83ddb39c..c8f7a15c 100644
--- a/Docs/Get-OfficeWordTableOfContents.md
+++ b/Docs/Get-OfficeWordTableOfContents.md
@@ -11,7 +11,7 @@ Gets the table of contents from a Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Get-OfficeWordTableOfContents [-InputPath]  []
+Get-OfficeWordTableOfContents [-Path]  []
 ```
 
 ### Document
@@ -54,13 +54,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Path to the .docx file.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: FilePath, Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Get-OfficeWordText.md b/Docs/Get-OfficeWordText.md
index 4999d611..47bd7888 100644
--- a/Docs/Get-OfficeWordText.md
+++ b/Docs/Get-OfficeWordText.md
@@ -26,7 +26,7 @@ Get-OfficeWordText -Document  []
 
 ### Path
 ```powershell
-Get-OfficeWordText [-InputPath]  []
+Get-OfficeWordText [-Path]  []
 ```
 
 ## DESCRIPTION
@@ -59,35 +59,35 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the document.
+### -Paragraph
+Paragraph to enumerate.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Type: WordParagraph
+Parameter Sets: Paragraph
+Aliases: None
 Possible values:
 
 Required: True
-Position: 0
+Position: named
 Default value: None
-Accept pipeline input: False
+Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -Paragraph
-Paragraph to enumerate.
+### -Path
+Path to the document.
 
 ```yaml
-Type: WordParagraph
-Parameter Sets: Paragraph
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
-Position: named
+Position: 0
 Default value: None
-Accept pipeline input: True (ByValue)
+Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
diff --git a/Docs/Import-OfficeExcelDelimitedText.md b/Docs/Import-OfficeExcelDelimitedText.md
index fb3b538c..5bf08f8c 100644
--- a/Docs/Import-OfficeExcelDelimitedText.md
+++ b/Docs/Import-OfficeExcelDelimitedText.md
@@ -11,7 +11,7 @@ Imports normalized CSV/TSV text into an Excel workbook through OfficeIMO.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Import-OfficeExcelDelimitedText [-InputPath]  -SourcePath  [-Delimiter ] [-SheetName ] [-CultureName ] [-NoHeader] [-SkipRows ] [-NoTable] [-NoTypeConversion] [-PassThru] [-WhatIf] [-Confirm] []
+Import-OfficeExcelDelimitedText [-Path]  -SourcePath  [-Delimiter ] [-SheetName ] [-CultureName ] [-NoHeader] [-SkipRows ] [-NoTable] [-NoTypeConversion] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -87,22 +87,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NoHeader
 Treat the first row as data.
 
@@ -167,6 +151,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -SheetName
 Worksheet name to create or inspect.
 
diff --git a/Docs/Import-OfficePowerPointSlide.md b/Docs/Import-OfficePowerPointSlide.md
index a0aa9abe..1fb9c180 100644
--- a/Docs/Import-OfficePowerPointSlide.md
+++ b/Docs/Import-OfficePowerPointSlide.md
@@ -27,7 +27,7 @@ Can import from an open presentation or directly from a source file path.
 ### EXAMPLE 1
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImportTarget.pptx {
-    Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Target deck'
+    Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Target deck'
     Import-OfficePowerPointSlide -SourcePath .\Examples\Documents\SourceDeck.pptx -SourceIndex 0 -InsertAt 1
 }
 ```
diff --git a/Docs/Invoke-OfficeExcelTemplate.md b/Docs/Invoke-OfficeExcelTemplate.md
index 4236e208..f42b6573 100644
--- a/Docs/Invoke-OfficeExcelTemplate.md
+++ b/Docs/Invoke-OfficeExcelTemplate.md
@@ -16,7 +16,7 @@ Invoke-OfficeExcelTemplate -Value  [-Sheet ] [-SheetIndex  -Value  [-Sheet ] [-SheetIndex ] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
+Invoke-OfficeExcelTemplate [-Path]  -Value  [-Sheet ] [-SheetIndex ] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -70,22 +70,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MissingValueBehavior
 Behavior used when a marker is not supplied by -Value.
 
@@ -118,6 +102,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Sheet
 Worksheet name to update. Defaults to the current DSL sheet or all workbook sheets.
 
diff --git a/Docs/Invoke-OfficeExcelTemplateOptionalRow.md b/Docs/Invoke-OfficeExcelTemplateOptionalRow.md
index 0ffe081f..4ef3d87c 100644
--- a/Docs/Invoke-OfficeExcelTemplateOptionalRow.md
+++ b/Docs/Invoke-OfficeExcelTemplateOptionalRow.md
@@ -16,7 +16,7 @@ Invoke-OfficeExcelTemplateOptionalRow -FirstRow  [-Sheet ] [-SheetI
 
 ### Path
 ```powershell
-Invoke-OfficeExcelTemplateOptionalRow [-InputPath]  -FirstRow  [-Sheet ] [-SheetIndex ] [-RowCount ] [-Value ] [-Remove] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
+Invoke-OfficeExcelTemplateOptionalRow [-Path]  -FirstRow  [-Sheet ] [-SheetIndex ] [-RowCount ] [-Value ] [-Remove] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -86,22 +86,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MissingValueBehavior
 Behavior used when a marker in the optional block is not supplied by -Value.
 
@@ -134,6 +118,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Remove
 Removes the optional row block instead of keeping and binding it.
 
diff --git a/Docs/Invoke-OfficeExcelTemplateRow.md b/Docs/Invoke-OfficeExcelTemplateRow.md
index 3e3763b0..e37614b1 100644
--- a/Docs/Invoke-OfficeExcelTemplateRow.md
+++ b/Docs/Invoke-OfficeExcelTemplateRow.md
@@ -16,7 +16,7 @@ Invoke-OfficeExcelTemplateRow [-InputObject]  -TemplateRow  [-Sheet
 
 ### Path
 ```powershell
-Invoke-OfficeExcelTemplateRow [-InputPath]  [-InputObject]  -TemplateRow  [-Sheet ] [-SheetIndex ] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
+Invoke-OfficeExcelTemplateRow [-Path]  [-InputObject]  -TemplateRow  [-Sheet ] [-SheetIndex ] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -86,22 +86,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MissingValueBehavior
 Behavior used when a marker is not supplied by each input row.
 
@@ -134,6 +118,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Sheet
 Worksheet name. Defaults to the current sheet inside an ExcelSheet block.
 
diff --git a/Docs/Invoke-OfficeExcelTemplateSheet.md b/Docs/Invoke-OfficeExcelTemplateSheet.md
index 7f2924bb..9ed8b034 100644
--- a/Docs/Invoke-OfficeExcelTemplateSheet.md
+++ b/Docs/Invoke-OfficeExcelTemplateSheet.md
@@ -16,7 +16,7 @@ Invoke-OfficeExcelTemplateSheet [-Item]  [-TemplateSheet ] [-She
 
 ### Path
 ```powershell
-Invoke-OfficeExcelTemplateSheet [-InputPath]  [-Item]  [-TemplateSheet ] [-SheetNameProperty ] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
+Invoke-OfficeExcelTemplateSheet [-Path]  [-Item]  [-TemplateSheet ] [-SheetNameProperty ] [-CultureName ] [-MissingValueBehavior ] [-ThrowOnMissing] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -70,22 +70,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Item
 Pipeline data. Hashtables, dictionaries, PSCustomObjects, and typed objects are supported.
 
@@ -134,6 +118,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -SheetNameProperty
 Input property used as the generated worksheet name.
 
diff --git a/Docs/Join-OfficeExcelSheet.md b/Docs/Join-OfficeExcelSheet.md
index 41b812f1..c1d08f68 100644
--- a/Docs/Join-OfficeExcelSheet.md
+++ b/Docs/Join-OfficeExcelSheet.md
@@ -16,7 +16,7 @@ Join-OfficeExcelSheet -SourceSheet  [-TargetSheet ] [-TargetShee
 
 ### Path
 ```powershell
-Join-OfficeExcelSheet [-InputPath]  -SourceSheet  [-TargetSheet ] [-TargetSheetIndex ] [-SourceDocument ] [-SourcePath ] [-SourceRange ] [-TargetStartRow ] [-TargetStartColumn ] [-NoSourceHeader] [-IncludeSourceHeader] [-MatchColumnsByHeader] [-TargetHeaderRow ] [-BlankRowsBefore ] [-OverwriteExistingCells] [-WhatIf] [-Confirm] []
+Join-OfficeExcelSheet [-Path]  -SourceSheet  [-TargetSheet ] [-TargetSheetIndex ] [-SourceDocument ] [-SourcePath ] [-SourceRange ] [-TargetStartRow ] [-TargetStartColumn ] [-NoSourceHeader] [-IncludeSourceHeader] [-MatchColumnsByHeader] [-TargetHeaderRow ] [-BlankRowsBefore ] [-OverwriteExistingCells] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -88,22 +88,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Target workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MatchColumnsByHeader
 Match source columns to target columns by header text.
 
@@ -152,6 +136,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Target workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -SourceDocument
 Optional source workbook object for cross-workbook joins.
 
diff --git a/Docs/Join-OfficeExcelWorkbook.md b/Docs/Join-OfficeExcelWorkbook.md
index c6fcb3cf..56a87993 100644
--- a/Docs/Join-OfficeExcelWorkbook.md
+++ b/Docs/Join-OfficeExcelWorkbook.md
@@ -11,7 +11,7 @@ Merges worksheets from one or more workbooks into a target workbook.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Join-OfficeExcelWorkbook [-InputPath]  [[-SourcePath] ] [-SourceDocument ] [-SourceSheet ] [-SheetNamePrefix ] [-ValidationMode ] [-CopyMode ] [-WhatIf] [-Confirm] []
+Join-OfficeExcelWorkbook [-Path]  [[-SourcePath] ] [-SourceDocument ] [-SourceSheet ] [-SheetNamePrefix ] [-ValidationMode ] [-CopyMode ] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -76,13 +76,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Target workbook path to create or update.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath, OutputPath
+Aliases: InputPath, FilePath, OutputPath
 Possible values:
 
 Required: True
diff --git a/Docs/Join-OfficeWordDocument.md b/Docs/Join-OfficeWordDocument.md
index ad916e57..a8707dfe 100644
--- a/Docs/Join-OfficeWordDocument.md
+++ b/Docs/Join-OfficeWordDocument.md
@@ -11,12 +11,12 @@ Appends one or more Word documents into a base Word document.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Join-OfficeWordDocument [-InputPath]  [-AppendPath]  [-OutputPath ] [-Show] [-PassThru] [-WhatIf] [-Confirm] []
+Join-OfficeWordDocument [-Path]  [-AppendPath]  [-OutputPath ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Join-OfficeWordDocument [-AppendPath]  -Document  [-OutputPath ] [-Show] [-PassThru] [-WhatIf] [-Confirm] []
+Join-OfficeWordDocument [-AppendPath]  -Document  [-OutputPath ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -79,17 +79,17 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Base document path.
+### -Open
+Open the saved output with the shell.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, BasePath
+Type: SwitchParameter
+Parameter Sets: Path, Document
+Aliases: Show
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
@@ -127,17 +127,17 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the saved output with the shell.
+### -Path
+Base document path.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, BasePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Move-OfficeExcelSheet.md b/Docs/Move-OfficeExcelSheet.md
index 423637b5..519a3326 100644
--- a/Docs/Move-OfficeExcelSheet.md
+++ b/Docs/Move-OfficeExcelSheet.md
@@ -16,7 +16,7 @@ Move-OfficeExcelSheet -Index  [-Sheet ] [-SheetIndex ] [-Pas
 
 ### Path
 ```powershell
-Move-OfficeExcelSheet [-InputPath]  -Index  [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] []
+Move-OfficeExcelSheet [-Path]  -Index  [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -76,33 +76,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -PassThru
+Emit the moved worksheet.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the moved worksheet.
+### -Path
+Workbook path to update.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Move-OfficePdfPage.md b/Docs/Move-OfficePdfPage.md
index 6bdb58fb..235edd82 100644
--- a/Docs/Move-OfficePdfPage.md
+++ b/Docs/Move-OfficePdfPage.md
@@ -11,7 +11,7 @@ Moves selected pages before another page and writes a new PDF.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Move-OfficePdfPage -Path  -PageRange  -BeforePage  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] []
+Move-OfficePdfPage -Path  -PageRange  -BeforePage  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -96,6 +96,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/New-OfficeEmailMailboxReaderOptions.md b/Docs/New-OfficeEmailMailboxReaderOptions.md
new file mode 100644
index 00000000..86aa6cea
--- /dev/null
+++ b/Docs/New-OfficeEmailMailboxReaderOptions.md
@@ -0,0 +1,109 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeEmailMailboxReaderOptions
+## SYNOPSIS
+Creates bounded mbox reader settings through ordinary PowerShell parameters.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeEmailMailboxReaderOptions [-MessageOptions ] [-Variant ] [-MaxMessageCount ] [-MaxMailboxBytes ] []
+```
+
+## DESCRIPTION
+Creates bounded mbox reader settings through ordinary PowerShell parameters.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $messageOptions = New-OfficeEmailReaderOptions -ExcludeAttachmentContent
+$options = New-OfficeEmailMailboxReaderOptions -MessageOptions $messageOptions -MaxMessageCount 5000
+Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult
+```
+
+
+## PARAMETERS
+
+### -MaxMailboxBytes
+Maximum aggregate source bytes consumed from one mailbox.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxMessageCount
+Maximum messages in one mailbox.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MessageOptions
+Bounded policy applied independently to each message.
+
+```yaml
+Type: EmailReaderOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: True (ByValue)
+Accept wildcard characters: False
+```
+
+### -Variant
+Escaping convention to decode.
+
+```yaml
+Type: MboxVariant
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Auto, Mboxo, Mboxrd
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `OfficeIMO.Email.EmailReaderOptions`
+
+## OUTPUTS
+
+- `OfficeIMO.Email.EmailMailboxReaderOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeEmailMailboxWriterOptions.md b/Docs/New-OfficeEmailMailboxWriterOptions.md
new file mode 100644
index 00000000..8d6e2355
--- /dev/null
+++ b/Docs/New-OfficeEmailMailboxWriterOptions.md
@@ -0,0 +1,77 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeEmailMailboxWriterOptions
+## SYNOPSIS
+Creates deterministic mbox writer settings through ordinary PowerShell parameters.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeEmailMailboxWriterOptions [-MessageOptions ] [-Variant ] []
+```
+
+## DESCRIPTION
+Creates deterministic mbox writer settings through ordinary PowerShell parameters.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $messageOptions = New-OfficeEmailWriterOptions -IncludeBccHeader
+$options = New-OfficeEmailMailboxWriterOptions -MessageOptions $messageOptions -Variant Mboxo
+$mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru
+```
+
+
+## PARAMETERS
+
+### -MessageOptions
+Serialization policy applied independently to each message.
+
+```yaml
+Type: EmailWriterOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: True (ByValue)
+Accept wildcard characters: False
+```
+
+### -Variant
+Concrete mbox escaping convention to write.
+
+```yaml
+Type: MboxVariant
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Auto, Mboxo, Mboxrd
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `OfficeIMO.Email.EmailWriterOptions`
+
+## OUTPUTS
+
+- `OfficeIMO.Email.EmailMailboxWriterOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeEmailReaderOptions.md b/Docs/New-OfficeEmailReaderOptions.md
new file mode 100644
index 00000000..875ef739
--- /dev/null
+++ b/Docs/New-OfficeEmailReaderOptions.md
@@ -0,0 +1,284 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeEmailReaderOptions
+## SYNOPSIS
+Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeEmailReaderOptions [-MaxInputBytes ] [-MaxHeaderBytes ] [-MaxHeaderCount ] [-MaxPartCount ] [-MaxMimeDepth ] [-MaxAttachmentBytes ] [-MaxTotalAttachmentBytes ] [-MaxNestedMessageDepth ] [-ExcludeAttachmentContent] [-PreserveRawSource] [-MaxCompoundDirectoryEntries ] [-MaxMapiPropertyCount ] [-MaxDecodedPropertyBytes ] [-MaxTnefAttributeCount ] [-MaxAttachmentCount ] []
+```
+
+## DESCRIPTION
+Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult
+```
+
+
+## PARAMETERS
+
+### -ExcludeAttachmentContent
+Do not retain decoded attachment payloads in memory.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxAttachmentBytes
+Maximum decoded bytes for one attachment.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxAttachmentCount
+Maximum aggregate attachment count.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxCompoundDirectoryEntries
+Maximum CFB directory entries accepted while reading MSG.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxDecodedPropertyBytes
+Maximum aggregate bytes represented by decoded MSG property streams.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxHeaderBytes
+Maximum bytes allowed in one MIME header section.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxHeaderCount
+Maximum number of header fields in one entity.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxInputBytes
+Maximum artifact size accepted by the reader.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxMapiPropertyCount
+Maximum aggregate MAPI properties across a message and embedded messages.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxMimeDepth
+Maximum nested MIME depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxNestedMessageDepth
+Maximum embedded-message recursion depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPartCount
+Maximum MIME entity count.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTnefAttributeCount
+Maximum number of TNEF attributes.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalAttachmentBytes
+Maximum aggregate decoded attachment bytes.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PreserveRawSource
+Retain original artifact bytes for an explicit lossless write.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Email.EmailReaderOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeEmailStoreReaderOptions.md b/Docs/New-OfficeEmailStoreReaderOptions.md
new file mode 100644
index 00000000..92500e81
--- /dev/null
+++ b/Docs/New-OfficeEmailStoreReaderOptions.md
@@ -0,0 +1,444 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeEmailStoreReaderOptions
+## SYNOPSIS
+Creates bounded email-store reader settings without requiring .NET constructor syntax.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeEmailStoreReaderOptions [-MaxInputBytes ] [-MaxNodeCount ] [-MaxBTreeDepth ] [-MaxCachedBTreePages ] [-MaxFolderCount ] [-MaxItemCount ] [-MaxPropertiesPerItem ] [-MaxDecodedPropertyBytesPerItem ] [-MaxAttachmentsPerItem ] [-MaxAttachmentBytes ] [-MaxTotalAttachmentBytes ] [-ExcludeAttachmentContent] [-PstPassword ] [-PstPasswordEncoding ] [-IncludeAssociatedItems] [-IncludeOrphanedItems] [-MaxNestedMessageDepth ] [-MaxArchiveEntries ] [-MaxArchiveEntryBytes ] [-MaxArchiveDecodedBytes ] [-MaxXmlCharactersPerItem ] [-MaxMessageBytes ] [-MaxDirectoryDepth ] [-MaxDirectoryFileCount ] [-MaxDecodedTableBytes ] []
+```
+
+## DESCRIPTION
+Creates bounded email-store reader settings without requiring .NET constructor syntax.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeEmailStoreReaderOptions -ExcludeAttachmentContent -MaxAttachmentsPerItem 100
+Get-OfficeEmail -Path .\Message.emlx -StoreOptions $options -AsResult
+```
+
+
+## PARAMETERS
+
+### -ExcludeAttachmentContent
+Do not retain decoded attachment payloads in memory.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeAssociatedItems
+Materialize folder-associated information items.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeOrphanedItems
+Recover item nodes absent from folder contents tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxArchiveDecodedBytes
+Maximum total decoded size declared by archive entries.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxArchiveEntries
+Maximum entries accepted from a compressed email-store archive.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxArchiveEntryBytes
+Maximum decoded size declared by one archive entry.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxAttachmentBytes
+Maximum decoded bytes in one attachment.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxAttachmentsPerItem
+Maximum attachments per item.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxBTreeDepth
+Maximum tree traversal depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxCachedBTreePages
+Maximum PST/OST B-tree pages retained by the cache.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxDecodedPropertyBytesPerItem
+Maximum decoded property bytes per item.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxDecodedTableBytes
+Maximum decoded bytes traversed from one PST/OST table data tree.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxDirectoryDepth
+Maximum directory depth traversed by mailbox-directory sessions.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxDirectoryFileCount
+Maximum EML, EMLX, and Maildir files indexed by one directory session.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxFolderCount
+Maximum folders materialized.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxInputBytes
+Maximum seekable source length.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxItemCount
+Maximum items materialized.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxMessageBytes
+Maximum RFC 5322/MIME message bytes accepted from one item.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxNestedMessageDepth
+Maximum embedded-message recursion depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxNodeCount
+Maximum NDB nodes and blocks visited.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPropertiesPerItem
+Maximum MAPI properties decoded per item.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalAttachmentBytes
+Maximum decoded attachment bytes across the read.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxXmlCharactersPerItem
+Maximum XML characters parsed from one archive item.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PstPassword
+Password used to validate legacy protected PST files.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PstPasswordEncoding
+Encoding name used for the legacy PST password checksum.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Email.Store.EmailStoreReaderOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeEmailWriterOptions.md b/Docs/New-OfficeEmailWriterOptions.md
new file mode 100644
index 00000000..d589c719
--- /dev/null
+++ b/Docs/New-OfficeEmailWriterOptions.md
@@ -0,0 +1,140 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeEmailWriterOptions
+## SYNOPSIS
+Creates deterministic email writer settings through ordinary PowerShell parameters.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeEmailWriterOptions [-ConversionLossPolicy ] [-UsePreservedRawSource] [-IncludeBccHeader] [-Base64LineLength ] [-MaxNestedMessageDepth ] [-MaxOutputBytes ] []
+```
+
+## DESCRIPTION
+Creates deterministic email writer settings through ordinary PowerShell parameters.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeEmailWriterOptions -UsePreservedRawSource -ConversionLossPolicy Block
+$message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru
+```
+
+
+## PARAMETERS
+
+### -Base64LineLength
+Maximum encoded characters on one Base64 body line.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ConversionLossPolicy
+Policy applied when the requested format cannot preserve known message semantics.
+
+```yaml
+Type: EmailConversionLossPolicy
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Block, Warn, Allow
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeBccHeader
+Write Bcc recipients into the message header.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxNestedMessageDepth
+Maximum embedded-message write depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxOutputBytes
+Maximum serialized artifact size.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UsePreservedRawSource
+Emit an unchanged preserved source instead of regenerating the artifact when possible.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Email.EmailWriterOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeExcel.md b/Docs/New-OfficeExcel.md
index 09bd79b1..31a1a2e1 100644
--- a/Docs/New-OfficeExcel.md
+++ b/Docs/New-OfficeExcel.md
@@ -11,7 +11,7 @@ Creates a new Excel workbook using the DSL.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficeExcel [-FilePath]  [[-Content] ] [-TemplatePath ] [-AutoSave] [-NoSave] [-Open] [-Password ] [-SafePreflight] [-SafeRepairDefinedNames] [-ValidateOpenXml] [-DisableFastPackageWriter] [-EvaluateFormulas] [-ClearCachedFormulaResults] [-MarkFormulasDirty] [-ForceFullCalculationOnOpen] [-DateSystem ] [-PdfPath ] [-PassThru] [-DocumentTitle ] [-Author ] [-Subject ] [-Keywords ] [-Description ] [-Category ] [-Company ] [-Manager ] [-ApplicationName ] [-LastModifiedBy ] [-WhatIf] [-Confirm] []
+New-OfficeExcel [-Path]  [[-Content] ] [-TemplatePath ] [-NoSave] [-Open] [-Password ] [-SafePreflight] [-SafeRepairDefinedNames] [-ValidateOpenXml] [-DisableFastPackageWriter] [-EvaluateFormulas] [-ClearCachedFormulaResults] [-MarkFormulasDirty] [-ForceFullCalculationOnOpen] [-DateSystem ] [-PassThru] [-DocumentTitle ] [-Author ] [-Subject ] [-Keywords ] [-Description ] [-Category ] [-Company ] [-Manager ] [-ApplicationName ] [-LastModifiedBy ] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -71,22 +71,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -AutoSave
-Opt into OfficeIMO automatic saves during operations.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Category
 Workbook category metadata.
 
@@ -231,22 +215,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -FilePath
-Destination path for the workbook.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -ForceFullCalculationOnOpen
 Request a full workbook recalculation when opened in Excel-compatible applications.
 
@@ -391,17 +359,17 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfPath
-Optional PDF path to create from the same workbook before closing it.
+### -Path
+Destination path for the workbook.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/New-OfficeExcelDashboard.md b/Docs/New-OfficeExcelDashboard.md
index d5ef7dbe..bf6aaab2 100644
--- a/Docs/New-OfficeExcelDashboard.md
+++ b/Docs/New-OfficeExcelDashboard.md
@@ -16,7 +16,7 @@ New-OfficeExcelDashboard [-InputObject]  [-Title ] [-Subtitle  -InputPath  [-Sheet ] [-SheetIndex ] [-Title ] [-Subtitle ] [-TableName ] [-TableRow ] [-TableColumn ] [-TableStyle ] [-NoAutoFilter] [-NoAutoFit] [-NoChart] [-ChartPreset ] [-ChartTitle ] [-ChartRow ] [-ChartColumn ] [-PassThru] [-WhatIf] [-Confirm] []
+New-OfficeExcelDashboard [-InputObject]  -Path  [-Sheet ] [-SheetIndex ] [-Title ] [-Subtitle ] [-TableName ] [-TableRow ] [-TableColumn ] [-TableStyle ] [-NoAutoFilter] [-NoAutoFit] [-NoChart] [-ChartPreset ] [-ChartTitle ] [-ChartRow ] [-ChartColumn ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -134,22 +134,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NoAutoFilter
 Disable AutoFilter dropdowns on the generated table.
 
@@ -214,6 +198,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Sheet
 Worksheet name when using Path or Document.
 
diff --git a/Docs/New-OfficeExcelImageOptions.md b/Docs/New-OfficeExcelImageOptions.md
new file mode 100644
index 00000000..d6025d9c
--- /dev/null
+++ b/Docs/New-OfficeExcelImageOptions.md
@@ -0,0 +1,403 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeExcelImageOptions
+## SYNOPSIS
+Creates discoverable rendering settings for Excel range and chart image export.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeExcelImageOptions [-ShowGridlines] [-IncludeHidden] [-IncludeImages] [-IncludeCharts] [-IncludeDrawingObjects] [-IncludeConditionalFormatting] [-ShowHyperlinkHints] [-ShowCommentBodies] [-MaximumRenderedCells ] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable rendering settings for Excel range and chart image export.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeExcelImageOptions -ShowGridlines -ShowHyperlinkHints -TargetDpi 144
+Export-OfficeExcelRangeImage -Path .\Workbook.xlsx -Worksheet Summary -Range A1:H20 -OutputPath .\Summary.svg -Options $options
+```
+
+
+### EXAMPLE 2
+```powershell
+PS> $options = New-OfficeExcelImageOptions -TargetDpi 144 -MaximumOutputWidth 1600
+Export-OfficeExcelChartImage -Path .\Workbook.xlsx -Worksheet Summary -ChartName Revenue -OutputPath .\Revenue.svg -Options $options
+```
+
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeCharts
+Include worksheet charts.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeConditionalFormatting
+Include conditional formatting.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeDrawingObjects
+Include drawing objects.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHidden
+Include hidden rows and columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeImages
+Include worksheet images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRenderedCells
+Maximum cells rendered.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ShowCommentBodies
+Show cell comment bodies.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ShowGridlines
+Show worksheet gridlines.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ShowHyperlinkHints
+Show hyperlink hints.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Excel.ExcelImageExportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeExcelOpenDocumentOptions.md b/Docs/New-OfficeExcelOpenDocumentOptions.md
new file mode 100644
index 00000000..dccf52de
--- /dev/null
+++ b/Docs/New-OfficeExcelOpenDocumentOptions.md
@@ -0,0 +1,124 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeExcelOpenDocumentOptions
+## SYNOPSIS
+Creates Excel/OpenDocument conversion settings.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeExcelOpenDocumentOptions [-LossPolicy ] [-IncludeBasicStyles] [-MaximumExpandedCells ] [-MaximumRows ] [-MaximumColumns ] []
+```
+
+## DESCRIPTION
+Creates Excel/OpenDocument conversion settings.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumRows 10000 -MaximumColumns 100
+ConvertTo-OfficeOpenDocument -Path .\Data.xlsx -OutputPath .\Data.ods -ExcelOptions $options
+```
+
+
+## PARAMETERS
+
+### -IncludeBasicStyles
+Copy common font, fill, and number-format styles.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -LossPolicy
+Whether conversion loss is reported or rejected.
+
+```yaml
+Type: OdfConversionLossPolicy
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReportOnly, ThrowOnSkippedOrUnsupported, ThrowOnAnyLoss
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumColumns
+Maximum spreadsheet columns.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumExpandedCells
+Maximum cells materialized during conversion.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRows
+Maximum spreadsheet rows.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Excel.OpenDocument.ExcelOpenDocumentConversionOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeExcelPdfOptions.md b/Docs/New-OfficeExcelPdfOptions.md
new file mode 100644
index 00000000..ded7e0fd
--- /dev/null
+++ b/Docs/New-OfficeExcelPdfOptions.md
@@ -0,0 +1,572 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeExcelPdfOptions
+## SYNOPSIS
+Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeExcelPdfOptions [-PdfOptions ] [-FontFamily ] [-PageSize ] [-MarginLeft ] [-MarginTop ] [-MarginRight ] [-MarginBottom ] [-WorksheetLayout ] [-SheetName ] [-RespectWorkbookSheetVisibility] [-UseWorksheetPrintAreas] [-UseWorksheetPageSetup] [-UseWorksheetPrintTitleRows] [-UseWorksheetPageBreaks] [-UseWorksheetHeadersAndFooters] [-UseWorksheetHeaderFooterImages] [-UseWorksheetCellStyles] [-UseWorksheetHyperlinks] [-UseWorksheetImages] [-UseWorksheetCharts] [-ChartStyle ] [-ChartLayout ] [-UseWorksheetMergedCells] [-UseWorksheetColumnWidths] [-UseWorksheetRowHeights] [-RespectWorksheetHiddenRowsAndColumns] [-IncludeSheetHeadings] [-HeaderRowCount ] [-MaxRowsPerSheet ] [-UseBoundedWorksheetRead] [-EmptyCellText ] [-AllowSystemFontEmbedding] [-AllowDocumentFontEmbedding] []
+```
+
+## DESCRIPTION
+Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeExcelPdfOptions -SheetName Summary,Services -UseWorksheetCharts -UseWorksheetImages
+Export-OfficeDocumentPdf -InputPath .\Report.xlsx -Path .\Report.pdf -ExcelOptions $options
+```
+
+
+## PARAMETERS
+
+### -AllowDocumentFontEmbedding
+Allow embedding fonts stored in the workbook.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AllowSystemFontEmbedding
+Allow embedding fonts discovered on the current system.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChartLayout
+Chart layout override.
+
+```yaml
+Type: OfficeChartLayout
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChartStyle
+Chart visual style override.
+
+```yaml
+Type: OfficeChartStyle
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -EmptyCellText
+Text used when a worksheet cell is empty.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FontFamily
+Default font family used when the workbook does not specify one.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -HeaderRowCount
+Number of leading rows treated as headers.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSheetHeadings
+Include worksheet row and column headings.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginBottom
+Bottom page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginLeft
+Left page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginRight
+Right page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginTop
+Top page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxRowsPerSheet
+Maximum worksheet rows to read and render.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageSize
+PDF page size.
+
+```yaml
+Type: PageSize
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PdfOptions
+Underlying low-level OfficeIMO PDF options.
+
+```yaml
+Type: PdfOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RespectWorkbookSheetVisibility
+Exclude workbook sheets marked hidden.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RespectWorksheetHiddenRowsAndColumns
+Exclude hidden worksheet rows and columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SheetName
+Worksheet names to export. The default exports all eligible sheets.
+
+```yaml
+Type: String[]
+Parameter Sets: __AllParameterSets
+Aliases: SheetNames
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseBoundedWorksheetRead
+Use bounded worksheet reads for large workbooks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetCellStyles
+Render worksheet cell styles.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetCharts
+Render worksheet charts.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetColumnWidths
+Honor worksheet column widths.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetHeaderFooterImages
+Render images referenced by worksheet headers and footers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetHeadersAndFooters
+Render worksheet headers and footers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetHyperlinks
+Render worksheet hyperlinks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetImages
+Render worksheet images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetMergedCells
+Render merged worksheet cells.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetPageBreaks
+Honor worksheet page breaks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetPageSetup
+Honor worksheet page setup.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetPrintAreas
+Honor worksheet print areas.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetPrintTitleRows
+Honor worksheet rows configured to repeat on printed pages.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetRowHeights
+Honor worksheet row heights.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -WorksheetLayout
+Controls how worksheet content is laid out on PDF pages.
+
+```yaml
+Type: ExcelPdfWorksheetLayoutMode
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: WorksheetCanvas, FlowTable
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Excel.Pdf.ExcelPdfSaveOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeExcelWorkbookImageOptions.md b/Docs/New-OfficeExcelWorkbookImageOptions.md
new file mode 100644
index 00000000..2e7be804
--- /dev/null
+++ b/Docs/New-OfficeExcelWorkbookImageOptions.md
@@ -0,0 +1,428 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeExcelWorkbookImageOptions
+## SYNOPSIS
+Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeExcelWorkbookImageOptions [-SheetName ] [-IncludeHiddenSheets] [-UseWorksheetPrintAreas] [-SplitWorksheetsByManualPageBreaks] [-ShowGridlines] [-IncludeHidden] [-IncludeImages] [-IncludeCharts] [-IncludeDrawingObjects] [-IncludeConditionalFormatting] [-MaximumRenderedCells ] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeExcelWorkbookImageOptions -SheetName Summary,Data -IncludeCharts -IncludeConditionalFormatting
+Export-OfficeExcelImage -Path .\Workbook.xlsx -OutputPath .\Sheets -Options $options
+```
+
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeCharts
+Include worksheet charts.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeConditionalFormatting
+Include conditional formatting.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeDrawingObjects
+Include drawing objects.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHidden
+Include hidden rows and columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHiddenSheets
+Include hidden worksheets.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeImages
+Include worksheet images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRenderedCells
+Maximum cells rendered per worksheet.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SheetName
+Worksheet names to export.
+
+```yaml
+Type: String[]
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ShowGridlines
+Show worksheet gridlines.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SplitWorksheetsByManualPageBreaks
+Split worksheets at manual page breaks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseWorksheetPrintAreas
+Use worksheet print areas.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Excel.ExcelWorkbookImageExportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeHtmlConversionOptions.md b/Docs/New-OfficeHtmlConversionOptions.md
new file mode 100644
index 00000000..167d3fa8
--- /dev/null
+++ b/Docs/New-OfficeHtmlConversionOptions.md
@@ -0,0 +1,124 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeHtmlConversionOptions
+## SYNOPSIS
+Creates discoverable parsing, trust, and document settings for HTML conversion.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeHtmlConversionOptions [-Profile ] [-Trust ] [-BaseUri ] [-UseBodyContentsOnly] [-IncludeNormalizedHtml] []
+```
+
+## DESCRIPTION
+Creates discoverable parsing, trust, and document settings for HTML conversion.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $document = New-OfficeHtmlConversionOptions -BaseUri (Resolve-Path .\Assets) -UseBodyContentsOnly
+Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -DocumentOptions $document
+```
+
+
+## PARAMETERS
+
+### -BaseUri
+Base URI used to resolve relative references.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeNormalizedHtml
+Retain normalized HTML in the conversion document.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Profile
+Built-in conversion profile.
+
+```yaml
+Type: HtmlConversionProfile
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Semantic, Document, HighFidelityPrint, PositionedReview
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Trust
+Input trust level.
+
+```yaml
+Type: HtmlInputTrust
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Untrusted, Trusted
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseBodyContentsOnly
+Convert only body contents.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Html.HtmlConversionDocumentOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeHtmlRenderOptions.md b/Docs/New-OfficeHtmlRenderOptions.md
new file mode 100644
index 00000000..5c3804a8
--- /dev/null
+++ b/Docs/New-OfficeHtmlRenderOptions.md
@@ -0,0 +1,492 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeHtmlRenderOptions
+## SYNOPSIS
+Creates discoverable layout, resource-limit, and rendering settings for HTML image export.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeHtmlRenderOptions [-Mode ] [-FidelityPolicy ] [-ViewportWidth ] [-ViewportHeight ] [-PageSize ] [-HonorCssPageRules] [-DefaultFontFamily ] [-DefaultFontSize ] [-DefaultLineHeight ] [-BaseUri ] [-MaxPageCount ] [-MaxInputCharacters ] [-MaxHtmlNodes ] [-MaxTotalResourceBytes ] [-ResourceTimeoutSeconds ] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable layout, resource-limit, and rendering settings for HTML image export.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $render = New-OfficeHtmlRenderOptions -ViewportWidth 1280 -ViewportHeight 720 -MaxPageCount 10
+Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -RenderOptions $render
+```
+
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -BaseUri
+Base URI for relative resources.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultFontFamily
+Default font family.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultFontSize
+Default font size.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultLineHeight
+Default line-height multiplier.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FidelityPolicy
+Fidelity policy for unsupported content.
+
+```yaml
+Type: HtmlRenderFidelityPolicy
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: AllowDiagnosedLoss, RequireNoLoss
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -HonorCssPageRules
+Honor CSS page rules.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxHtmlNodes
+Maximum HTML nodes.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxInputCharacters
+Maximum HTML input characters.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPageCount
+Maximum rendered page count.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalResourceBytes
+Maximum resource bytes loaded for the document.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Mode
+HTML render mode.
+
+```yaml
+Type: HtmlRenderMode
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Continuous, Paged
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageSize
+Page size used by paged rendering.
+
+```yaml
+Type: OfficePageSize
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ResourceTimeoutSeconds
+Maximum duration allowed for one resource load.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ViewportHeight
+Optional viewport height in CSS pixels.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ViewportWidth
+Viewport width in CSS pixels.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Html.HtmlRenderOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeMarkdown.md b/Docs/New-OfficeMarkdown.md
index c0b63a88..79800e51 100644
--- a/Docs/New-OfficeMarkdown.md
+++ b/Docs/New-OfficeMarkdown.md
@@ -11,7 +11,7 @@ Creates a Markdown document using a DSL scriptblock.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficeMarkdown [-OutputPath]  [[-Content] ] [-PassThru] [-NoSave] [-PdfPath ] [-WriteOptions ] [-WriteProfile ] [-ImageRenderingMode ] [-LineEnding ] [-UnorderedListMarker ] [-MarkdownPdfOptions ] [-PdfOptions ] [-PdfTheme ] [-PdfFontFamily ] [-PdfTitle ] [-PdfAuthor ] [-PdfSubject ] [-PdfKeywords ] [-PdfBaseDirectory ] [-PdfApplyWordLikeTheme ] [-PdfIncludeLocalImages ] [-PdfIncludeDataUriImages ] [-PdfRestrictLocalImagesToBaseDirectory ] [-PdfMaximumDataUriImageBytes ] [-PdfDefaultImageWidth ] [-PdfDefaultImageHeight ] [-PdfFrontMatterRenderMode ] [-PdfUseFrontMatterVisualTheme ] [-PdfUseFrontMatterMetadata ] [-PdfUseFirstHeadingAsTitle ] [-PdfCreateOutlineFromHeadings ] [-PdfWarningVariable ] [-PdfConversionReportVariable ] [-WhatIf] [-Confirm] []
+New-OfficeMarkdown [-Path]  [[-Content] ] [-PassThru] [-NoSave] [-WriteOptions ] [-WriteProfile ] [-ImageRenderingMode ] [-LineEnding ] [-UnorderedListMarker ] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -88,22 +88,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -MarkdownPdfOptions
-Advanced Markdown PDF options. Friendly PDF parameters override matching values.
-
-```yaml
-Type: MarkdownPdfSaveOptions
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NoSave
 Skip saving after executing the DSL.
 
@@ -120,22 +104,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -OutputPath
-Destination path for the Markdown file.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -PassThru
 Emit a FileInfo for chaining.
 
@@ -152,369 +120,17 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfApplyWordLikeTheme
-Apply the built-in Word-like Markdown PDF baseline theme.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfAuthor
-PDF author metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfBaseDirectory
-Base directory used to resolve local Markdown images during PDF export.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfConversionReportVariable
-Variable name that receives the Markdown PDF conversion report.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfCreateOutlineFromHeadings
-Create PDF outlines from Markdown headings.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfDefaultImageHeight
-Fallback PDF image height in points.
-
-```yaml
-Type: Double
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfDefaultImageWidth
-Fallback PDF image width in points.
-
-```yaml
-Type: Double
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfFontFamily
-Default font family used by Markdown PDF export.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfFrontMatterRenderMode
-Controls how YAML front matter appears in the PDF body.
-
-```yaml
-Type: MarkdownPdfFrontMatterRenderMode
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values: Hidden, DocumentHeader, Table
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfIncludeDataUriImages
-Embed supported data URI images in Markdown PDF output.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfIncludeLocalImages
-Embed supported local image files in Markdown PDF output.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfKeywords
-PDF keywords metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfMaximumDataUriImageBytes
-Maximum decoded bytes for one data URI image in Markdown PDF output.
-
-```yaml
-Type: Int32
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfOptions
-Underlying OfficeIMO.Pdf options used by Markdown PDF export.
-
-```yaml
-Type: PdfOptions
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfPath
-Optional PDF path to create from the same Markdown document.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfRestrictLocalImagesToBaseDirectory
-Require local images to resolve under the base directory.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfSubject
-PDF subject metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfTheme
-Built-in Markdown PDF visual theme.
-
-```yaml
-Type: OfficeVisualThemeKind
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values: Plain, WordLike, TechnicalDocument, GitHubLike, Compact, Report
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfTitle
-PDF title metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfUseFirstHeadingAsTitle
-Use the first Markdown heading as the PDF title when no title is supplied.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfUseFrontMatterMetadata
-Use front matter values as PDF metadata.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfUseFrontMatterVisualTheme
-Use front matter values to select a visual theme.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfWarningVariable
-Variable name that receives Markdown PDF export warnings.
+### -Path
+Destination path for the Markdown file.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath, OutputPath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/New-OfficeMarkdownPdfOptions.md b/Docs/New-OfficeMarkdownPdfOptions.md
new file mode 100644
index 00000000..0ec68124
--- /dev/null
+++ b/Docs/New-OfficeMarkdownPdfOptions.md
@@ -0,0 +1,381 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeMarkdownPdfOptions
+## SYNOPSIS
+Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeMarkdownPdfOptions [-Options ] [-PdfOptions ] [-Theme ] [-FontFamily ] [-Title ] [-Author ] [-Subject ] [-Keywords ] [-BaseDirectory ] [-ApplyWordLikeTheme] [-IncludeLocalImages] [-IncludeDataUriImages] [-RestrictLocalImagesToBaseDirectory] [-MaximumDataUriImageBytes ] [-DefaultImageWidth ] [-DefaultImageHeight ] [-FrontMatterRenderMode ] [-UseFrontMatterVisualTheme] [-UseFrontMatterMetadata] [-UseFirstHeadingAsTitle] [-CreateOutlineFromHeadings] []
+```
+
+## DESCRIPTION
+Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -Author 'Evotec' -IncludeLocalImages -BaseDirectory .\Assets
+Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options
+```
+
+Builds a typed options object through ordinary PowerShell parameters; no hashtable or .NET construction is required.
+
+## PARAMETERS
+
+### -ApplyWordLikeTheme
+Apply the built-in Word-like Markdown PDF baseline theme.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Author
+PDF author metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -BaseDirectory
+Base directory used to resolve local Markdown images.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CreateOutlineFromHeadings
+Create PDF outlines from Markdown headings.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultImageHeight
+Fallback image height in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultImageWidth
+Fallback image width in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FontFamily
+Default font family.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FrontMatterRenderMode
+Controls how YAML front matter appears in the PDF body.
+
+```yaml
+Type: MarkdownPdfFrontMatterRenderMode
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Hidden, DocumentHeader, Table
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeDataUriImages
+Embed supported data URI images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeLocalImages
+Embed supported local image files.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Keywords
+PDF keywords metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDataUriImageBytes
+Maximum decoded bytes for one data URI image.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Options
+Existing Markdown PDF options to clone and override.
+
+```yaml
+Type: MarkdownPdfSaveOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: True (ByValue)
+Accept wildcard characters: False
+```
+
+### -PdfOptions
+Underlying low-level OfficeIMO PDF options.
+
+```yaml
+Type: PdfOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RestrictLocalImagesToBaseDirectory
+Require local images to resolve under BaseDirectory.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Subject
+PDF subject metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Theme
+Built-in visual theme.
+
+```yaml
+Type: OfficeVisualThemeKind
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Plain, WordLike, TechnicalDocument, GitHubLike, Compact, Report
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Title
+PDF title metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseFirstHeadingAsTitle
+Use the first Markdown heading as the PDF title when no title is supplied.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseFrontMatterMetadata
+Use front matter values as PDF metadata.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseFrontMatterVisualTheme
+Use front matter values to select a visual theme.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `OfficeIMO.Markdown.Pdf.MarkdownPdfSaveOptions`
+
+## OUTPUTS
+
+- `OfficeIMO.Markdown.Pdf.MarkdownPdfSaveOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeOpenDocument.md b/Docs/New-OfficeOpenDocument.md
index 9e9d9261..782611a0 100644
--- a/Docs/New-OfficeOpenDocument.md
+++ b/Docs/New-OfficeOpenDocument.md
@@ -11,7 +11,7 @@ Creates a native ODT, ODS, or ODP document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficeOpenDocument [-Kind]  [[-Path] ] [-WhatIf] [-Confirm] []
+New-OfficeOpenDocument [-Kind]  [[-Path] ] [[-Content] ] [-NoSave] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,12 +21,44 @@ Creates a native ODT, ODS, or ODP document.
 
 ### EXAMPLE 1
 ```powershell
-New-OfficeOpenDocument -Path 'C:\Path'
+PS> New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content {
+    Add-OfficeOpenDocumentHeading -Text 'Service report' -Level 1
+    Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice.'
+}
+```
+
+
+### EXAMPLE 2
+```powershell
+PS> New-OfficeOpenDocument -Kind Spreadsheet -Path .\Status.ods -Content {
+    Add-OfficeOpenDocumentSheet -Name 'Services' -Content {
+        Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Service'
+        Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value 'Healthy'
+        Set-OfficeOpenDocumentCell -Row 1 -Column 0 -Value 'Directory'
+        Set-OfficeOpenDocumentCell -Row 1 -Column 1 -Value $true
+    }
+}
 ```
 
 
 ## PARAMETERS
 
+### -Content
+DSL scriptblock describing OpenDocument text, spreadsheet, or presentation content.
+
+```yaml
+Type: ScriptBlock
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Kind
 OpenDocument text, spreadsheet, or presentation kind.
 
@@ -43,6 +75,38 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -NoSave
+Skip saving and emit the live OpenDocument model even when -Path is supplied.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PassThru
+Emit the saved file when a destination path is supplied.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Optional initial destination path.
 
@@ -69,6 +133,7 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
 ## OUTPUTS
 
 - `OfficeIMO.OpenDocument.OdfDocument`
+- `System.IO.FileInfo`
 
 ## RELATED LINKS
 
diff --git a/Docs/New-OfficePdf.md b/Docs/New-OfficePdf.md
index 241b6835..29515b34 100644
--- a/Docs/New-OfficePdf.md
+++ b/Docs/New-OfficePdf.md
@@ -11,12 +11,12 @@ Creates a PDF document using the OfficeIMO.Pdf composition engine.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-New-OfficePdf [[-Path] ] [[-Content] ] [-PassThru] [-NoSave] [-Show] [-DefaultFont ] [-DefaultFontSize ] [-Theme ] [-FontFamily ] [-RegularFontPath ] [-BoldFontPath ] [-ItalicFontPath ] [-BoldItalicFontPath ] [-FileVersion ] [-CreateOutlineFromHeadings] [-OutlineExpansionLevel ] [-PageMode ] [-PageLayout ] [-IncludePageLabels] [-PageLabelPrefix ] [-OpenActionPage ] [-OpenActionMode ] [-OpenActionTop ] [-DisplayDocTitle] [-FitWindow] [-CenterWindow] [-HideToolbar] [-HideMenubar] [-HideWindowUI] [-FlattenVisualAnnotations] [-Password ] [-OwnerPassword ] [-Permission ] [-WhatIf] [-Confirm] []
+New-OfficePdf [[-Path] ] [[-Content] ] [-PassThru] [-NoSave] [-Open] [-DefaultFont ] [-DefaultFontSize ] [-Theme ] [-FontFamily ] [-RegularFontPath ] [-BoldFontPath ] [-ItalicFontPath ] [-BoldItalicFontPath ] [-FileVersion ] [-CreateOutlineFromHeadings] [-OutlineExpansionLevel ] [-PageMode ] [-PageLayout ] [-IncludePageLabels] [-PageLabelPrefix ] [-OpenActionPage ] [-OpenActionMode ] [-OpenActionTop ] [-DisplayDocTitle] [-FitWindow] [-CenterWindow] [-HideToolbar] [-HideMenubar] [-HideWindowUI] [-FlattenVisualAnnotations] [-Password ] [-OwnerPassword ] [-Permission ] [-WhatIf] [-Confirm] []
 ```
 
 ### Content
 ```powershell
-New-OfficePdf [[-Content] ] [-PassThru] [-NoSave] [-Show] [-DefaultFont ] [-DefaultFontSize ] [-Theme ] [-FontFamily ] [-RegularFontPath ] [-BoldFontPath ] [-ItalicFontPath ] [-BoldItalicFontPath ] [-FileVersion ] [-CreateOutlineFromHeadings] [-OutlineExpansionLevel ] [-PageMode ] [-PageLayout ] [-IncludePageLabels] [-PageLabelPrefix ] [-OpenActionPage ] [-OpenActionMode ] [-OpenActionTop ] [-DisplayDocTitle] [-FitWindow] [-CenterWindow] [-HideToolbar] [-HideMenubar] [-HideWindowUI] [-FlattenVisualAnnotations] [-Password ] [-OwnerPassword ] [-Permission ] [-WhatIf] [-Confirm] []
+New-OfficePdf [[-Content] ] [-PassThru] [-NoSave] [-Open] [-DefaultFont ] [-DefaultFontSize ] [-Theme ] [-FontFamily ] [-RegularFontPath ] [-BoldFontPath ] [-ItalicFontPath ] [-BoldItalicFontPath ] [-FileVersion ] [-CreateOutlineFromHeadings] [-OutlineExpansionLevel ] [-PageMode ] [-PageLayout ] [-IncludePageLabels] [-PageLabelPrefix ] [-OpenActionPage ] [-OpenActionMode ] [-OpenActionTop ] [-DisplayDocTitle] [-FitWindow] [-CenterWindow] [-HideToolbar] [-HideMenubar] [-HideWindowUI] [-FlattenVisualAnnotations] [-Password ] [-OwnerPassword ] [-Permission ] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -29,7 +29,7 @@ Use -NoSave or omit -Path when a document object should be returned for further
 
 ### EXAMPLE 1
 ```powershell
-PS> New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Show
+PS> New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Open
 ```
 
 Builds a PDF and opens it after saving.
@@ -347,6 +347,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Open
+Open the PDF after saving.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Path, Content
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -OpenActionMode
 Open-action destination mode.
 
@@ -555,22 +571,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the PDF after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: Path, Content
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Theme
 Built-in OfficeIMO.Pdf theme applied before the DSL content runs.
 
diff --git a/Docs/New-OfficePdfExcelImportOptions.md b/Docs/New-OfficePdfExcelImportOptions.md
new file mode 100644
index 00000000..0bcbb7c3
--- /dev/null
+++ b/Docs/New-OfficePdfExcelImportOptions.md
@@ -0,0 +1,300 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePdfExcelImportOptions
+## SYNOPSIS
+Creates discoverable PDF-table-to-Excel reconstruction settings.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePdfExcelImportOptions [-MaxRows ] [-SheetNamePrefix ] [-TableNamePrefix ] [-TableStyle ] [-IncludeAutoFilter] [-AutoFitColumns] [-ConvertNumericColumns] [-ConvertBooleanColumns] [-ConvertDateTimeColumns] [-ConvertPercentageColumns] [-NumericCulture ] [-MergePageContinuations] [-SuppressRepeatedBodyHeaderRows] [-MaximumContinuationSegments ] [-ContinuationGeometryTolerancePoints ] [-EmptyWorkbookSheetName ] []
+```
+
+## DESCRIPTION
+Creates discoverable PDF-table-to-Excel reconstruction settings.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePdfExcelImportOptions -IncludeAutoFilter -AutoFitColumns -ConvertNumericColumns -ConvertDateTimeColumns
+ConvertTo-OfficePdfExcel -Path .\Tables.pdf -OutputPath .\Tables.xlsx -Options $options
+```
+
+
+## PARAMETERS
+
+### -AutoFitColumns
+Auto-fit worksheet columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ContinuationGeometryTolerancePoints
+Geometry tolerance in PDF points for page continuations.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ConvertBooleanColumns
+Convert consistently boolean columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ConvertDateTimeColumns
+Convert unambiguous date columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ConvertNumericColumns
+Convert consistently numeric columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ConvertPercentageColumns
+Convert percentage columns to fractional numbers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -EmptyWorkbookSheetName
+Worksheet name used when no tables are detected.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeAutoFilter
+Add table-scoped AutoFilters.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumContinuationSegments
+Maximum table segments merged into one table.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxRows
+Maximum body rows imported per detected table; zero means unlimited.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MergePageContinuations
+Merge compatible table segments across pages.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -NumericCulture
+Culture name used for numeric parsing, such as en-US.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SheetNamePrefix
+Prefix for generated worksheet names.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SuppressRepeatedBodyHeaderRows
+Suppress repeated body header rows in merged segments.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TableNamePrefix
+Prefix for generated Excel table names.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TableStyle
+Excel table style.
+
+```yaml
+Type: ExcelTableStyle
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: TableStyleLight1, TableStyleLight2, TableStyleLight3, TableStyleLight4, TableStyleLight5, TableStyleLight6, TableStyleLight7, TableStyleLight8, TableStyleLight9, TableStyleLight10, TableStyleLight11, TableStyleLight12, TableStyleLight13, TableStyleLight14, TableStyleLight15, TableStyleLight16, TableStyleLight17, TableStyleLight18, TableStyleLight19, TableStyleLight20, TableStyleLight21, TableStyleMedium1, TableStyleMedium2, TableStyleMedium3, TableStyleMedium4, TableStyleMedium5, TableStyleMedium6, TableStyleMedium7, TableStyleMedium8, TableStyleMedium9, TableStyleMedium10, TableStyleMedium11, TableStyleMedium12, TableStyleMedium13, TableStyleMedium14, TableStyleMedium15, TableStyleMedium16, TableStyleMedium17, TableStyleMedium18, TableStyleMedium19, TableStyleMedium20, TableStyleMedium21, TableStyleMedium22, TableStyleMedium23, TableStyleMedium24, TableStyleMedium25, TableStyleMedium26, TableStyleMedium27, TableStyleMedium28, TableStyleDark1, TableStyleDark2, TableStyleDark3, TableStyleDark4, TableStyleDark5, TableStyleDark6, TableStyleDark7, TableStyleDark8, TableStyleDark9, TableStyleDark10, TableStyleDark11
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Excel.Pdf.PdfExcelTableImportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePdfImageOptions.md b/Docs/New-OfficePdfImageOptions.md
new file mode 100644
index 00000000..0a8f2212
--- /dev/null
+++ b/Docs/New-OfficePdfImageOptions.md
@@ -0,0 +1,268 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePdfImageOptions
+## SYNOPSIS
+Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePdfImageOptions [-ThumbnailMaxDimension ] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePdfImageOptions -ThumbnailMaxDimension 320 -MaximumOutputWidth 640
+Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Thumbnails -Options $options
+```
+
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ThumbnailMaxDimension
+Maximum thumbnail width or height.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Pdf.PdfImageExportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePdfPowerPointImportOptions.md b/Docs/New-OfficePdfPowerPointImportOptions.md
new file mode 100644
index 00000000..241f7d3a
--- /dev/null
+++ b/Docs/New-OfficePdfPowerPointImportOptions.md
@@ -0,0 +1,364 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePdfPowerPointImportOptions
+## SYNOPSIS
+Creates discoverable PDF-to-PowerPoint reconstruction settings.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePdfPowerPointImportOptions [-Mode ] [-PageRange ] [-Dpi ] [-MaxPages ] [-MaxPixelsPerPage ] [-MaxOutputBytesPerPage ] [-MaxTotalOutputBytes ] [-MaxEditableObjectsPerPage ] [-MaxRows ] [-MergePageContinuations] [-SuppressRepeatedBodyHeaderRows] [-MaxRowsPerSlide ] [-MaxColumnsPerSlide ] [-TableStyle ] [-IncludeSourceTitles] [-IncludeColumnHeaderRows] [-BandedRows] [-AlignNumericColumns] [-EmptyPresentationTitle ] [-EmptyPresentationMessage ] []
+```
+
+## DESCRIPTION
+Creates discoverable PDF-to-PowerPoint reconstruction settings.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePdfPowerPointImportOptions -PageRange '1-5' -MaxPages 5 -IncludeSourceTitles
+ConvertTo-OfficePdfPowerPoint -Path .\Source.pdf -OutputPath .\Slides.pptx -Options $options
+```
+
+
+## PARAMETERS
+
+### -AlignNumericColumns
+Right-align inferred numeric columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -BandedRows
+Enable banded-row styling.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Dpi
+Raster resolution used by visual import.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -EmptyPresentationMessage
+Message used when no supported content is detected.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -EmptyPresentationTitle
+Title used when no supported content is detected.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeColumnHeaderRows
+Add inferred column headers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSourceTitles
+Add source-page titles.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxColumnsPerSlide
+Maximum columns written to one slide; zero means unlimited.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxEditableObjectsPerPage
+Maximum editable objects reconstructed per page.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxOutputBytesPerPage
+Maximum encoded bytes per rendered page.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPages
+Maximum pages imported.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPixelsPerPage
+Maximum pixels per rendered page.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxRows
+Maximum body rows imported per table; zero means unlimited.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxRowsPerSlide
+Maximum rows written to one slide; zero means unlimited.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalOutputBytes
+Maximum aggregate encoded output bytes.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MergePageContinuations
+Merge compatible table segments across pages.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Mode
+Visual, editable-table, hybrid, editable-content, or automatic import mode.
+
+```yaml
+Type: PdfPowerPointImportMode
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: VisualPages, EditableTables, HybridVisualAndEditableTables, EditableContent, Auto
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageRange
+Optional one-based page ranges such as 1-3,5.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SuppressRepeatedBodyHeaderRows
+Suppress repeated body header rows.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TableStyle
+PowerPoint table style.
+
+```yaml
+Type: PowerPointTableStylePreset
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.PowerPoint.Pdf.PdfPowerPointImportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePdfVisualComparisonOptions.md b/Docs/New-OfficePdfVisualComparisonOptions.md
new file mode 100644
index 00000000..f393cb02
--- /dev/null
+++ b/Docs/New-OfficePdfVisualComparisonOptions.md
@@ -0,0 +1,188 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePdfVisualComparisonOptions
+## SYNOPSIS
+Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePdfVisualComparisonOptions [-Scale ] [-ChannelTolerance ] [-AllowedDifferenceRatio ] [-Alignment ] [-BackgroundColor ] [-MaxPages ] [-MaxPixelsPerImage ] [-MaxTotalPixels ] [-MaxTotalOutputBytes ] []
+```
+
+## DESCRIPTION
+Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePdfVisualComparisonOptions -ChannelTolerance 2 -AllowedDifferenceRatio 0.001 -MaxPages 50
+Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -Options $options
+```
+
+
+## PARAMETERS
+
+### -Alignment
+Page alignment used for differently sized renders.
+
+```yaml
+Type: PdfVisualPageAlignment
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: TopLeft, Center
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AllowedDifferenceRatio
+Maximum differing-pixel ratio treated as equal.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -BackgroundColor
+Background color name or hex value.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChannelTolerance
+Maximum per-channel byte difference treated as equal.
+
+```yaml
+Type: Byte
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPages
+Maximum pages compared.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxPixelsPerImage
+Maximum pixels accepted per rendered image.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalOutputBytes
+Maximum total bytes retained for comparison artifacts.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTotalPixels
+Maximum pixels accepted across the comparison.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+Render scale applied before comparison.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Pdf.PdfVisualComparisonOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePdfWordImportOptions.md b/Docs/New-OfficePdfWordImportOptions.md
new file mode 100644
index 00000000..8299293e
--- /dev/null
+++ b/Docs/New-OfficePdfWordImportOptions.md
@@ -0,0 +1,412 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePdfWordImportOptions
+## SYNOPSIS
+Creates discoverable PDF-to-Word reconstruction settings.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePdfWordImportOptions [-TablesOnly] [-IncludeMetadata] [-PreservePageBreaks] [-IncludeEmptyPages] [-ImportHeadings] [-ImportParagraphs] [-UseSharedPageReadingOrder] [-ImportLists] [-ImportTables] [-ImportUriLinks] [-ImportInternalLinks] [-BookmarkPrefix ] [-AllowedHyperlinkUriScheme ] [-ImportImages] [-PreserveImagePlacementSize] [-IncludeImagePlaceholders] [-IncludeFormFieldPlaceholders] [-MaxTableRows ] [-TableStyle ] [-RepeatHeaderRows] [-FitTablesToPageWidth] [-AlignNumericColumns] [-EmptyDocumentMessage ] []
+```
+
+## DESCRIPTION
+Creates discoverable PDF-to-Word reconstruction settings.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePdfWordImportOptions -ImportHeadings -ImportParagraphs -ImportLists -ImportTables
+ConvertTo-OfficePdfWord -Path .\Source.pdf -OutputPath .\Rebuilt.docx -Options $options
+```
+
+
+## PARAMETERS
+
+### -AlignNumericColumns
+Right-align inferred numeric columns.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AllowedHyperlinkUriScheme
+Allowed absolute hyperlink URI schemes.
+
+```yaml
+Type: String[]
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -BookmarkPrefix
+Prefix for generated Word bookmarks.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -EmptyDocumentMessage
+Text used when no supported content is detected.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FitTablesToPageWidth
+Fit imported tables to page width.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportHeadings
+Import detected headings.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportImages
+Import supported embedded images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportInternalLinks
+Import supported internal links.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportLists
+Import detected lists.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportParagraphs
+Import detected paragraphs.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportTables
+Import detected tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ImportUriLinks
+Import safe URI links.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeEmptyPages
+Represent empty PDF pages.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeFormFieldPlaceholders
+Represent AcroForm widgets with editable placeholders.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeImagePlaceholders
+Use paragraphs when an image cannot be embedded.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeMetadata
+Copy PDF metadata into Word properties.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTableRows
+Maximum body rows imported per table; zero means unlimited.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PreserveImagePlacementSize
+Preserve detected image placement size.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PreservePageBreaks
+Represent source pages with Word page breaks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RepeatHeaderRows
+Repeat inferred table header rows.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TablesOnly
+Use the built-in tables-only import profile.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TableStyle
+Word table style for imported tables.
+
+```yaml
+Type: WordTableStyle
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: TableNormal, TableGrid, PlainTable1, PlainTable2, PlainTable3, PlainTable4, PlainTable5, GridTable1Light, GridTable1LightAccent1, GridTable1LightAccent2, GridTable1LightAccent3, GridTable1LightAccent4, GridTable1LightAccent5, GridTable1LightAccent6, GridTable2, GridTable2Accent1, GridTable2Accent2, GridTable2Accent3, GridTable2Accent4, GridTable2Accent5, GridTable2Accent6, GridTable3, GridTable3Accent1, GridTable3Accent2, GridTable3Accent3, GridTable3Accent4, GridTable3Accent5, GridTable3Accent6, GridTable4, GridTable4Accent1, GridTable4Accent2, GridTable4Accent3, GridTable4Accent4, GridTable4Accent5, GridTable4Accent6, GridTable5Dark, GridTable5DarkAccent1, GridTable5DarkAccent2, GridTable5DarkAccent3, GridTable5DarkAccent4, GridTable5DarkAccent5, GridTable5DarkAccent6, GridTable6Colorful, GridTable6ColorfulAccent1, GridTable6ColorfulAccent2, GridTable6ColorfulAccent3, GridTable6ColorfulAccent4, GridTable6ColorfulAccent5, GridTable6ColorfulAccent6, GridTable7Colorful, GridTable7ColorfulAccent1, GridTable7ColorfulAccent2, GridTable7ColorfulAccent3, GridTable7ColorfulAccent4, GridTable7ColorfulAccent5, GridTable7ColorfulAccent6, ListTable1Light, ListTable1LightAccent1, ListTable1LightAccent2, ListTable1LightAccent3, ListTable1LightAccent4, ListTable1LightAccent5, ListTable1LightAccent6, ListTable2, ListTable2Accent1, ListTable2Accent2, ListTable2Accent3, ListTable2Accent4, ListTable2Accent5, ListTable2Accent6, ListTable3, ListTable3Accent1, ListTable3Accent2, ListTable3Accent3, ListTable3Accent4, ListTable3Accent5, ListTable3Accent6, ListTable4, ListTable4Accent1, ListTable4Accent2, ListTable4Accent3, ListTable4Accent4, ListTable4Accent5, ListTable4Accent6, ListTable5Dark, ListTable5DarkAccent1, ListTable5DarkAccent2, ListTable5DarkAccent3, ListTable5DarkAccent4, ListTable5DarkAccent5, ListTable5DarkAccent6, ListTable6Colorful, ListTable6ColorfulAccent1, ListTable6ColorfulAccent2, ListTable6ColorfulAccent3, ListTable6ColorfulAccent4, ListTable6ColorfulAccent5, ListTable6ColorfulAccent6, ListTable7Colorful, ListTable7ColorfulAccent1, ListTable7ColorfulAccent2, ListTable7ColorfulAccent3, ListTable7ColorfulAccent4, ListTable7ColorfulAccent5, ListTable7ColorfulAccent6
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -UseSharedPageReadingOrder
+Use the crop-, rotation-, and column-aware reading order.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Word.Pdf.PdfWordImportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePowerPoint.md b/Docs/New-OfficePowerPoint.md
index ae546055..1a1e6c59 100644
--- a/Docs/New-OfficePowerPoint.md
+++ b/Docs/New-OfficePowerPoint.md
@@ -11,7 +11,7 @@ Creates a PowerPoint presentation using the DSL.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficePowerPoint [-FilePath]  [[-Content] ] [-Open] [-NoSave] [-PassThru] [-Password ] [-PdfPath ] [-WhatIf] [-Confirm] []
+New-OfficePowerPoint [-Path]  [[-Content] ] [-Open] [-NoSave] [-PassThru] [-Password ] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,10 +21,10 @@ Initializes a presentation, runs the DSL script block, and optionally saves the
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\deck.pptx
+PS> $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave
 ```
 
-Creates deck.pptx and returns the live presentation object for further editing.
+Creates a live presentation associated with deck.pptx for incremental composition.
 
 ### EXAMPLE 2
 ```powershell
@@ -51,22 +51,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -FilePath
-Destination path for the new .pptx.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NoSave
 Skip saving after executing the DSL.
 
@@ -100,7 +84,7 @@ Accept wildcard characters: False
 ```
 
 ### -PassThru
-Emit a FileInfo for chaining.
+Emit the saved FileInfo for chaining.
 
 ```yaml
 Type: SwitchParameter
@@ -131,17 +115,17 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfPath
-Optional PDF path to create from the same presentation before closing it.
+### -Path
+Destination path for the new .pptx.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/New-OfficePowerPointImageOptions.md b/Docs/New-OfficePowerPointImageOptions.md
new file mode 100644
index 00000000..208ae9b2
--- /dev/null
+++ b/Docs/New-OfficePowerPointImageOptions.md
@@ -0,0 +1,412 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePowerPointImageOptions
+## SYNOPSIS
+Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePowerPointImageOptions [-SlideNumber ] [-IncludeHiddenSlides] [-IncludeSlideBackground] [-IncludeSlideContent] [-IncludePictures] [-IncludeAutoShapes] [-IncludeTextBoxes] [-IncludeTables] [-IncludeCharts] [-IncludeHiddenShapes] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePowerPointImageOptions -SlideNumber 1,3 -IncludeSlideBackground -IncludeSlideContent
+Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Options $options
+```
+
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeAutoShapes
+Render auto shapes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeCharts
+Render charts.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHiddenShapes
+Render hidden shapes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHiddenSlides
+Include hidden slides.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludePictures
+Render pictures.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSlideBackground
+Render slide backgrounds.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSlideContent
+Render slide content.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeTables
+Render tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeTextBoxes
+Render text boxes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -SlideNumber
+One-based slide numbers to export.
+
+```yaml
+Type: Int32[]
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.PowerPoint.PowerPointPresentationImageExportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePowerPointOpenDocumentOptions.md b/Docs/New-OfficePowerPointOpenDocumentOptions.md
new file mode 100644
index 00000000..aeaedd0a
--- /dev/null
+++ b/Docs/New-OfficePowerPointOpenDocumentOptions.md
@@ -0,0 +1,140 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePowerPointOpenDocumentOptions
+## SYNOPSIS
+Creates PowerPoint/OpenDocument conversion settings.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePowerPointOpenDocumentOptions [-LossPolicy ] [-IncludeImages] [-IncludeSpeakerNotes] [-IncludeBasicFormatting] [-MaxTableRows ] [-MaxTableColumns ] []
+```
+
+## DESCRIPTION
+Creates PowerPoint/OpenDocument conversion settings.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePowerPointOpenDocumentOptions -IncludeImages -IncludeSpeakerNotes -IncludeBasicFormatting
+ConvertTo-OfficeOpenDocument -Path .\Deck.pptx -OutputPath .\Deck.odp -PowerPointOptions $options
+```
+
+
+## PARAMETERS
+
+### -IncludeBasicFormatting
+Copy common fills, outlines, and text-run formatting.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeImages
+Copy supported embedded images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSpeakerNotes
+Copy plain speaker-note text.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -LossPolicy
+Whether conversion loss is reported or rejected.
+
+```yaml
+Type: OdfConversionLossPolicy
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReportOnly, ThrowOnSkippedOrUnsupported, ThrowOnAnyLoss
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTableColumns
+Maximum columns in converted presentation tables.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTableRows
+Maximum rows in converted presentation tables.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.PowerPoint.OpenDocument.PowerPointOpenDocumentConversionOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficePowerPointPdfOptions.md b/Docs/New-OfficePowerPointPdfOptions.md
new file mode 100644
index 00000000..8743c22e
--- /dev/null
+++ b/Docs/New-OfficePowerPointPdfOptions.md
@@ -0,0 +1,364 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficePowerPointPdfOptions
+## SYNOPSIS
+Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficePowerPointPdfOptions [-PdfOptions ] [-FontFamily ] [-IncludePictures] [-IncludeAutoShapes] [-IncludeTextBoxes] [-IncludeSlideBackgrounds] [-IncludeTables] [-IncludeCharts] [-IncludeSmartArt] [-IncludeHiddenSlides] [-PageLayout ] [-HandoutSlidesPerPage ] [-IncludeSpeakerNotes] [-MaxGroupShapeDepth ] [-PictureFit ] [-WarnOnPictureAspectRatioDistortion] [-ChartStyle ] [-ChartLayout ] [-AllowSystemFontEmbedding] [-AllowDocumentFontEmbedding] []
+```
+
+## DESCRIPTION
+Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficePowerPointPdfOptions -PageLayout Handouts -HandoutSlidesPerPage 3 -IncludeSpeakerNotes -IncludeHiddenSlides
+Export-OfficeDocumentPdf -InputPath .\Briefing.pptx -Path .\Briefing.pdf -PowerPointOptions $options
+```
+
+
+## PARAMETERS
+
+### -AllowDocumentFontEmbedding
+Allow embedding fonts stored in the presentation.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AllowSystemFontEmbedding
+Allow embedding fonts discovered on the current system.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChartLayout
+Chart layout override.
+
+```yaml
+Type: OfficeChartLayout
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ChartStyle
+Chart visual style override.
+
+```yaml
+Type: OfficeChartStyle
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FontFamily
+Default font family used when the presentation does not specify one.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -HandoutSlidesPerPage
+Number of slides on each handout page.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeAutoShapes
+Render automatic shapes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeCharts
+Render charts.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHiddenSlides
+Include slides marked hidden.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludePictures
+Render pictures.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSlideBackgrounds
+Render slide backgrounds.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSmartArt
+Render SmartArt.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSpeakerNotes
+Include speaker notes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeTables
+Render tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeTextBoxes
+Render text boxes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxGroupShapeDepth
+Maximum nested group-shape depth to render.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageLayout
+PDF page layout, such as slides, notes, or handouts.
+
+```yaml
+Type: PowerPointPdfPageLayout
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Slides, NotesPages, Handouts
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PdfOptions
+Underlying low-level OfficeIMO PDF options.
+
+```yaml
+Type: PdfOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PictureFit
+How pictures fit their shape bounds.
+
+```yaml
+Type: OfficeImageFit
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Stretch, Contain, Cover
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -WarnOnPictureAspectRatioDistortion
+Report pictures whose requested fit distorts their aspect ratio.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.PowerPoint.Pdf.PowerPointPdfSaveOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeReaderHierarchyOptions.md b/Docs/New-OfficeReaderHierarchyOptions.md
new file mode 100644
index 00000000..0520b8f2
--- /dev/null
+++ b/Docs/New-OfficeReaderHierarchyOptions.md
@@ -0,0 +1,172 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeReaderHierarchyOptions
+## SYNOPSIS
+Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeReaderHierarchyOptions [-MaxTokens ] [-OverlapTokens ] [-MaxInputChunks ] [-MaxOutputChunks ] [-MaxHierarchyDepth ] [-MaxContextCharacters ] [-PreferMarkdown] [-IncludeContextInText] []
+```
+
+## DESCRIPTION
+Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText
+Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
+```
+
+
+## PARAMETERS
+
+### -IncludeContextInText
+Include hierarchy context in chunk text.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxContextCharacters
+Maximum heading-context characters retained.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxHierarchyDepth
+Maximum heading hierarchy depth.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxInputChunks
+Maximum source chunks accepted.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxOutputChunks
+Maximum chunks returned.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaxTokens
+Maximum tokens per output chunk.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -OverlapTokens
+Tokens repeated between adjacent chunks.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PreferMarkdown
+Prefer Markdown text where the reader supports it.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Reader.ReaderHierarchicalChunkingOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeRtf.md b/Docs/New-OfficeRtf.md
index aade14f5..5768907b 100644
--- a/Docs/New-OfficeRtf.md
+++ b/Docs/New-OfficeRtf.md
@@ -11,7 +11,7 @@ Creates an RTF document with plain paragraph content.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficeRtf [-OutputPath]  [[-Text] ] [-PassThru] [-NoSave] [-WhatIf] [-Confirm] []
+New-OfficeRtf [-Path]  [[-Text] ] [-PassThru] [-NoSave] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -45,33 +45,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -OutputPath
-Destination path for the RTF file.
+### -PassThru
+Emit a FileInfo for chaining.
 
 ```yaml
-Type: String
+Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: FilePath, Path
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit a FileInfo for chaining.
+### -Path
+Destination path for the RTF file.
 
 ```yaml
-Type: SwitchParameter
+Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath, OutputPath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/New-OfficeRtfPdfOptions.md b/Docs/New-OfficeRtfPdfOptions.md
new file mode 100644
index 00000000..b8d3b2dc
--- /dev/null
+++ b/Docs/New-OfficeRtfPdfOptions.md
@@ -0,0 +1,236 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeRtfPdfOptions
+## SYNOPSIS
+Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeRtfPdfOptions [-PdfOptions ] [-IncludeHiddenText] [-IncludeImages] [-DefaultImageWidth ] [-DefaultImageHeight ] [-IncludeMetadata] [-IncludeTables] [-IncludeHeaderFooters] [-IncludeNotes] [-MaximumSystemFontFamilies ] [-AllowSystemFontEmbedding] [-AllowDocumentFontEmbedding] []
+```
+
+## DESCRIPTION
+Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeRtfPdfOptions -IncludeImages -IncludeTables -IncludeHeaderFooters -MaximumSystemFontFamilies 32
+Export-OfficeDocumentPdf -InputPath .\Report.rtf -Path .\Report.pdf -RtfOptions $options
+```
+
+
+## PARAMETERS
+
+### -AllowDocumentFontEmbedding
+Allow embedding fonts referenced by the RTF document.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AllowSystemFontEmbedding
+Allow embedding fonts discovered on the current system.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultImageHeight
+Fallback image height in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultImageWidth
+Fallback image width in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHeaderFooters
+Render headers and footers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeHiddenText
+Include text marked hidden.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeImages
+Render images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeMetadata
+Copy document metadata into the PDF.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeNotes
+Render document notes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeTables
+Render tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumSystemFontFamilies
+Maximum number of system font families to discover.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PdfOptions
+Underlying low-level OfficeIMO PDF options.
+
+```yaml
+Type: PdfOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Rtf.Pdf.RtfPdfSaveOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeVisio.md b/Docs/New-OfficeVisio.md
index 637c3d49..c8733063 100644
--- a/Docs/New-OfficeVisio.md
+++ b/Docs/New-OfficeVisio.md
@@ -11,7 +11,7 @@ Creates a new OfficeIMO.Visio document with an initial page and optional DSL con
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficeVisio [-Path]  [[-Content] ] [-PageName ] [-Width ] [-Height ] [-Unit ] [-Title ] [-Author ] [-RequestRecalcOnOpen] [-UseMastersByDefault] [-NoSave] [-Show] [-PassThru] [-WhatIf] [-Confirm] []
+New-OfficeVisio [-Path]  [[-Content] ] [-PageName ] [-Width ] [-Height ] [-Unit ] [-Title ] [-Author ] [-RequestRecalcOnOpen] [-UseMastersByDefault] [-NoSave] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -96,6 +96,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Open
+Open the document after saving.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PageName
 Initial page name.
 
@@ -160,22 +176,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the document after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Title
 Optional document title.
 
diff --git a/Docs/New-OfficeVisioImageOptions.md b/Docs/New-OfficeVisioImageOptions.md
new file mode 100644
index 00000000..38cfce81
--- /dev/null
+++ b/Docs/New-OfficeVisioImageOptions.md
@@ -0,0 +1,380 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeVisioImageOptions
+## SYNOPSIS
+Creates discoverable page and rendering settings for Export-OfficeVisioImage.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeVisioImageOptions [-PageIndex ] [-PageCount ] [-RenderText] [-RenderStencilArtwork] [-RenderConnectorLabels] [-ResolveConnectorLabelOverlaps] [-Supersampling ] [-IncludeSvgXmlDeclaration] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable page and rendering settings for Export-OfficeVisioImage.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeVisioImageOptions -PageIndex 0 -PageCount 1 -RenderText -RenderConnectorLabels
+Export-OfficeVisioImage -Path .\Diagram.vsdx -OutputPath .\Preview -Format Svg -Options $options
+```
+
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeSvgXmlDeclaration
+Include an XML declaration in SVG output.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageCount
+Maximum pages exported.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageIndex
+Zero-based first page index.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderConnectorLabels
+Render connector labels.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderStencilArtwork
+Render supported stencil artwork.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderText
+Render page text.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ResolveConnectorLabelOverlaps
+Resolve connector-label overlaps.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Supersampling
+Raster supersampling factor.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Visio.VisioImageExportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeWord.md b/Docs/New-OfficeWord.md
index 08585422..8c7ac84c 100644
--- a/Docs/New-OfficeWord.md
+++ b/Docs/New-OfficeWord.md
@@ -11,11 +11,11 @@ Creates a Word document using the DSL.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-New-OfficeWord [-OutputPath]  [[-Content] ] [-TemplatePath ] [-PassThru] [-Open] [-NoSave] [-AutoSave] [-Password ] [-PdfPath ] [-PdfFontFamily ] [-PdfAllowSystemFontEmbedding] [-WhatIf] [-Confirm] []
+New-OfficeWord [-Path]  [[-Content] ] [-TemplatePath ] [-PassThru] [-Open] [-NoSave] [-Password ] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
-Handles file creation or template cloning, scriptblock execution, optional autosave, and emits the document path when -PassThru is used.
+Handles file creation or template cloning, scriptblock execution, explicit save or live-document composition, and emits the document path when -PassThru is used.
 
 ## EXAMPLES
 
@@ -45,22 +45,6 @@ Associates the output path with a live document, adds content through the pipeli
 
 ## PARAMETERS
 
-### -AutoSave
-Enable OfficeIMO AutoSave mode.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Content
 DSL scriptblock describing document content.
 
@@ -109,22 +93,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -OutputPath
-Destination path for the document.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: FilePath, Path
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -PassThru
 Emit a FileInfo for chaining.
 
@@ -157,49 +125,17 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfAllowSystemFontEmbedding
-Allow the native Word PDF converter to embed installed system fonts used by the document.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: AllowSystemFontEmbedding
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfFontFamily
-Optional default font family used by the native Word PDF converter.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfPath
-Optional PDF path to create from the same Word document before closing it.
+### -Path
+Destination path for the document.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath, OutputPath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/New-OfficeWordComparisonOptions.md b/Docs/New-OfficeWordComparisonOptions.md
new file mode 100644
index 00000000..224ea700
--- /dev/null
+++ b/Docs/New-OfficeWordComparisonOptions.md
@@ -0,0 +1,492 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeWordComparisonOptions
+## SYNOPSIS
+Creates discoverable structural comparison settings for Compare-OfficeWordDocument.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeWordComparisonOptions [-IgnoreWhitespace] [-IgnoreCase] [-CompareRunFormatting] [-CompareEffectiveFormatting] [-CompareParagraphStyleIds] [-CompareRunStyleIds] [-IncludeScope ] [-ExcludeScope ] [-CompareFields] [-CompareContentControls] [-CompareBookmarks] [-CompareHyperlinks] [-CompareLists] [-CompareComments] [-CompareCommentAuthors] [-CompareCommentText] [-CompareCommentResolvedState] [-CompareCommentTargets] [-CompareCommentReplies] [-CompareRevisions] [-CompareRevisionAuthors] [-CompareRevisionText] [-CompareRevisionLocations] [-CompareImages] [-CompareShapes] [-CompareBlockOrder] [-CompareGeneratedIds] [-CompareVolatileMetadata] []
+```
+
+## DESCRIPTION
+Creates discoverable structural comparison settings for Compare-OfficeWordDocument.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -IgnoreCase -CompareVolatileMetadata:$false
+Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options
+```
+
+
+## PARAMETERS
+
+### -CompareBlockOrder
+Compare document block order.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareBookmarks
+Compare bookmarks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareCommentAuthors
+Compare comment authors.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareCommentReplies
+Compare comment replies.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareCommentResolvedState
+Compare comment resolved state.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareComments
+Compare comments.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareCommentTargets
+Compare comment targets.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareCommentText
+Compare comment text.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareContentControls
+Compare content controls.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareEffectiveFormatting
+Compare resolved effective formatting.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareFields
+Compare fields.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareGeneratedIds
+Compare generated identifiers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareHyperlinks
+Compare hyperlinks.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareImages
+Compare images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareLists
+Compare lists.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareParagraphStyleIds
+Compare paragraph style identifiers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareRevisionAuthors
+Compare revision authors.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareRevisionLocations
+Compare revision locations.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareRevisions
+Compare tracked revisions.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareRevisionText
+Compare revision text.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareRunFormatting
+Compare direct run formatting.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareRunStyleIds
+Compare run style identifiers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareShapes
+Compare supported shapes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -CompareVolatileMetadata
+Compare volatile timestamps and metadata.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ExcludeScope
+Remove these comparison scopes from results.
+
+```yaml
+Type: WordComparisonScope[]
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Paragraph, Run, Field, ContentControl, Bookmark, Hyperlink, List, Comment, Revision, Table, TableRow, TableCell, Image, Shape
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IgnoreCase
+Ignore character casing.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IgnoreWhitespace
+Ignore differences caused only by whitespace runs.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeScope
+Limit results to these comparison scopes.
+
+```yaml
+Type: WordComparisonScope[]
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Paragraph, Run, Field, ContentControl, Bookmark, Hyperlink, List, Comment, Revision, Table, TableRow, TableCell, Image, Shape
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Word.WordComparisonOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeWordImageOptions.md b/Docs/New-OfficeWordImageOptions.md
new file mode 100644
index 00000000..b4d74d7a
--- /dev/null
+++ b/Docs/New-OfficeWordImageOptions.md
@@ -0,0 +1,301 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeWordImageOptions
+## SYNOPSIS
+Creates discoverable page and rendering settings for Export-OfficeWordImage.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeWordImageOptions [-IncludeDocumentContent] [-PageIndex ] [-PageCount ] [-Scale ] [-MaximumOutputWidth ] [-MaximumOutputHeight ] [-BackgroundColor ] [-TargetDpi ] [-MaximumRasterPixels ] [-RasterOverflowBehavior ] [-MaximumOutputCount ] [-MaximumTotalRasterPixels ] [-MaximumTotalEncodedBytes ] [-RenderTimeoutSeconds ] [-MaximumDegreeOfParallelism ] [-TextShapingLanguage ] []
+```
+
+## DESCRIPTION
+Creates discoverable page and rendering settings for Export-OfficeWordImage.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeWordImageOptions -PageIndex 0 -PageCount 2 -TargetDpi 144 -IncludeDocumentContent
+Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Options $options
+```
+
+Supplying PageCount selects batch export, so OutputPath is a folder. Use -AllPages on the export command for the complete document.
+
+## PARAMETERS
+
+### -BackgroundColor
+{{ Fill BackgroundColor Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeDocumentContent
+Render document content.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumDegreeOfParallelism
+{{ Fill MaximumDegreeOfParallelism Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputCount
+{{ Fill MaximumOutputCount Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputHeight
+{{ Fill MaximumOutputHeight Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumOutputWidth
+{{ Fill MaximumOutputWidth Description }}
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumRasterPixels
+{{ Fill MaximumRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalEncodedBytes
+{{ Fill MaximumTotalEncodedBytes Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MaximumTotalRasterPixels
+{{ Fill MaximumTotalRasterPixels Description }}
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageCount
+Maximum pages exported. Supplying this value selects batch export.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageIndex
+Zero-based first page index.
+
+```yaml
+Type: Int32
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RasterOverflowBehavior
+{{ Fill RasterOverflowBehavior Description }}
+
+```yaml
+Type: OfficeRasterOverflowBehavior
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReduceScale, Throw
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RenderTimeoutSeconds
+{{ Fill RenderTimeoutSeconds Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Scale
+{{ Fill Scale Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TargetDpi
+{{ Fill TargetDpi Description }}
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -TextShapingLanguage
+{{ Fill TextShapingLanguage Description }}
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Word.WordImageExportOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeWordOpenDocumentOptions.md b/Docs/New-OfficeWordOpenDocumentOptions.md
new file mode 100644
index 00000000..bb89c2cb
--- /dev/null
+++ b/Docs/New-OfficeWordOpenDocumentOptions.md
@@ -0,0 +1,92 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeWordOpenDocumentOptions
+## SYNOPSIS
+Creates Word/OpenDocument conversion settings.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeWordOpenDocumentOptions [-LossPolicy ] [-IncludeImages] [-IncludeHeadersAndFooters] []
+```
+
+## DESCRIPTION
+Creates Word/OpenDocument conversion settings.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters
+ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options
+```
+
+
+## PARAMETERS
+
+### -IncludeHeadersAndFooters
+Copy default headers and footers.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludeImages
+Copy supported inline images.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -LossPolicy
+Whether conversion loss is reported or rejected.
+
+```yaml
+Type: OdfConversionLossPolicy
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: ReportOnly, ThrowOnSkippedOrUnsupported, ThrowOnAnyLoss
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Word.OpenDocument.WordOpenDocumentConversionOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeWordPdfOptions.md b/Docs/New-OfficeWordPdfOptions.md
new file mode 100644
index 00000000..c67b18cb
--- /dev/null
+++ b/Docs/New-OfficeWordPdfOptions.md
@@ -0,0 +1,348 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeWordPdfOptions
+## SYNOPSIS
+Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeWordPdfOptions [-PdfOptions ] [-FontFamily ] [-PageSize ] [-Orientation ] [-DefaultPageSize ] [-DefaultOrientation ] [-MarginLeft ] [-MarginTop ] [-MarginRight ] [-MarginBottom ] [-Title ] [-Author ] [-Subject ] [-Keywords ] [-IncludePageNumbers] [-PageNumberFormat ] [-DefaultTableBorders] [-AllowSystemFontEmbedding] [-AllowDocumentFontEmbedding] []
+```
+
+## DESCRIPTION
+Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $options = New-OfficeWordPdfOptions -Title 'Service report' -Author 'Evotec' -IncludePageNumbers -AllowSystemFontEmbedding
+Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -WordOptions $options
+```
+
+
+## PARAMETERS
+
+### -AllowDocumentFontEmbedding
+Allow embedding fonts stored in the Word document.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -AllowSystemFontEmbedding
+Allow embedding fonts discovered on the current system.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Author
+PDF author metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultOrientation
+Fallback page orientation for sections without page settings.
+
+```yaml
+Type: OfficePageOrientation
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Portrait, Landscape
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultPageSize
+Fallback Word page size for sections without page settings.
+
+```yaml
+Type: WordPageSize
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Unknown, Letter, Legal, Statement, Executive, A3, A4, A5, A6, B5
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DefaultTableBorders
+Draw default borders for tables that do not specify borders.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -FontFamily
+Default font family used when the document does not specify one.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -IncludePageNumbers
+Include page numbers in the generated PDF.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Keywords
+PDF keywords metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginBottom
+Bottom page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginLeft
+Left page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginRight
+Right page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -MarginTop
+Top page margin in PDF points.
+
+```yaml
+Type: Double
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Orientation
+PDF page orientation.
+
+```yaml
+Type: OfficePageOrientation
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Portrait, Landscape
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageNumberFormat
+Page number text format.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PageSize
+PDF page size.
+
+```yaml
+Type: PageSize
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PdfOptions
+Underlying low-level OfficeIMO PDF options.
+
+```yaml
+Type: PdfOptions
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Subject
+PDF subject metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Title
+PDF title metadata.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Word.Pdf.WordPdfSaveOptions`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/New-OfficeWordRevisionFilter.md b/Docs/New-OfficeWordRevisionFilter.md
new file mode 100644
index 00000000..e16f622f
--- /dev/null
+++ b/Docs/New-OfficeWordRevisionFilter.md
@@ -0,0 +1,252 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# New-OfficeWordRevisionFilter
+## SYNOPSIS
+Creates a discoverable Word revision filter for Resolve-OfficeWordRevision.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+New-OfficeWordRevisionFilter [-Author ] [-RevisionId ] [-RevisionType ] [-DateFrom ] [-DateTo ] [-LocationKind ] [-PartUri ] [-InTable] [-NotInTable] [-InContentControl] [-NotInContentControl] [-InTextBox] [-NotInTextBox] []
+```
+
+## DESCRIPTION
+Creates a discoverable Word revision filter for Resolve-OfficeWordRevision.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> $filter = New-OfficeWordRevisionFilter -Author 'Alex' -InTable
+Resolve-OfficeWordRevision -Path .\Review.docx -Action Accept -Filter $filter
+```
+
+
+## PARAMETERS
+
+### -Author
+Revision author.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DateFrom
+Earliest revision date.
+
+```yaml
+Type: DateTime
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DateTo
+Latest revision date.
+
+```yaml
+Type: DateTime
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -InContentControl
+Limit results to revisions inside content controls.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -InTable
+Limit results to revisions inside tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -InTextBox
+Limit results to revisions inside text boxes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -LocationKind
+Word part or container location kind.
+
+```yaml
+Type: WordReviewLocationKind
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Body, Header, Footer, Footnote, Endnote
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -NotInContentControl
+Limit results to revisions outside content controls.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -NotInTable
+Limit results to revisions outside tables.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -NotInTextBox
+Limit results to revisions outside text boxes.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PartUri
+Package part URI.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RevisionId
+Revision identifier.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -RevisionType
+Revision operation type.
+
+```yaml
+Type: WordReviewRevisionType
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Insertion, Deletion, MoveFrom, MoveTo, ParagraphFormatting, RunFormatting, TableFormatting, TableRowFormatting, TableCellFormatting, SectionFormatting, Unknown
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `None`
+
+## OUTPUTS
+
+- `OfficeIMO.Word.WordRevisionFilter`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/Protect-OfficeExcelWorkbook.md b/Docs/Protect-OfficeExcelWorkbook.md
index 2a47241d..e44bfcad 100644
--- a/Docs/Protect-OfficeExcelWorkbook.md
+++ b/Docs/Protect-OfficeExcelWorkbook.md
@@ -16,7 +16,7 @@ Protect-OfficeExcelWorkbook [-NoStructure] [-ProtectWindows] [-Password 
 
 ### Path
 ```powershell
-Protect-OfficeExcelWorkbook [-InputPath]  [-NoStructure] [-ProtectWindows] [-Password ] [-LegacyPasswordHash ] [-PassThru] [-WhatIf] [-Confirm] []
+Protect-OfficeExcelWorkbook [-Path]  [-NoStructure] [-ProtectWindows] [-Password ] [-LegacyPasswordHash ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -56,22 +56,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -LegacyPasswordHash
 Optional precomputed legacy workbook protection hash to write as-is.
 
@@ -136,6 +120,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -ProtectWindows
 Protect workbook windows where supported by the consuming application.
 
diff --git a/Docs/Readme.md b/Docs/Readme.md
index 00e22020..28c11921 100644
--- a/Docs/Readme.md
+++ b/Docs/Readme.md
@@ -175,6 +175,21 @@ Adds a Markdown table of contents placeholder.
 ### [Add-OfficeMarkdownTaskList](Add-OfficeMarkdownTaskList.md)
 Adds a Markdown task list.
 
+### [Add-OfficeOpenDocumentHeading](Add-OfficeOpenDocumentHeading.md)
+Adds a heading to an OpenDocument text document.
+
+### [Add-OfficeOpenDocumentParagraph](Add-OfficeOpenDocumentParagraph.md)
+Adds a paragraph to an OpenDocument text document.
+
+### [Add-OfficeOpenDocumentSheet](Add-OfficeOpenDocumentSheet.md)
+Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content.
+
+### [Add-OfficeOpenDocumentSlide](Add-OfficeOpenDocumentSlide.md)
+Adds a slide to an OpenDocument presentation and optionally runs nested slide content.
+
+### [Add-OfficeOpenDocumentTextBox](Add-OfficeOpenDocumentTextBox.md)
+Adds a positioned text box to an OpenDocument presentation slide.
+
 ### [Add-OfficePdfAttachment](Add-OfficePdfAttachment.md)
 Adds an embedded file attachment to a generated PDF document.
 
@@ -595,6 +610,9 @@ Runs a script block against editable worksheet rows.
 ### [Export-OfficeCsv](Export-OfficeCsv.md)
 Exports objects or a CSV document to a CSV file.
 
+### [Export-OfficeDocumentPdf](Export-OfficeDocumentPdf.md)
+Exports a Word, Excel, PowerPoint, Markdown, or RTF document to PDF.
+
 ### [Export-OfficeExcel](Export-OfficeExcel.md)
 Exports PowerShell objects to an Excel workbook using an operator-friendly surface.
 
@@ -638,7 +656,7 @@ Exports CFX semantic visual-artifact input as a native editable VSDX diagram.
 Plans, compiles, or exports a Word document to Google Docs.
 
 ### [Export-OfficeWordImage](Export-OfficeWordImage.md)
-Exports a Word page as PNG or SVG with structured image diagnostics.
+Exports one or more Word pages through the format-neutral OfficeIMO image pipeline.
 
 ### [Find-OfficeExcel](Find-OfficeExcel.md)
 Finds text in worksheet values.
@@ -1051,21 +1069,66 @@ Creates an in-memory Confluence Cloud session.
 ### [New-OfficeDocumentReader](New-OfficeDocumentReader.md)
 Creates an immutable fully configured OfficeIMO document reader.
 
+### [New-OfficeEmailMailboxReaderOptions](New-OfficeEmailMailboxReaderOptions.md)
+Creates bounded mbox reader settings through ordinary PowerShell parameters.
+
+### [New-OfficeEmailMailboxWriterOptions](New-OfficeEmailMailboxWriterOptions.md)
+Creates deterministic mbox writer settings through ordinary PowerShell parameters.
+
+### [New-OfficeEmailReaderOptions](New-OfficeEmailReaderOptions.md)
+Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters.
+
+### [New-OfficeEmailStoreReaderOptions](New-OfficeEmailStoreReaderOptions.md)
+Creates bounded email-store reader settings without requiring .NET constructor syntax.
+
+### [New-OfficeEmailWriterOptions](New-OfficeEmailWriterOptions.md)
+Creates deterministic email writer settings through ordinary PowerShell parameters.
+
 ### [New-OfficeExcel](New-OfficeExcel.md)
 Creates a new Excel workbook using the DSL.
 
 ### [New-OfficeExcelDashboard](New-OfficeExcelDashboard.md)
 Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults.
 
+### [New-OfficeExcelImageOptions](New-OfficeExcelImageOptions.md)
+Creates discoverable rendering settings for Excel range and chart image export.
+
+### [New-OfficeExcelOpenDocumentOptions](New-OfficeExcelOpenDocumentOptions.md)
+Creates Excel/OpenDocument conversion settings.
+
+### [New-OfficeExcelPdfOptions](New-OfficeExcelPdfOptions.md)
+Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+### [New-OfficeExcelWorkbookImageOptions](New-OfficeExcelWorkbookImageOptions.md)
+Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage.
+
+### [New-OfficeHtmlConversionOptions](New-OfficeHtmlConversionOptions.md)
+Creates discoverable parsing, trust, and document settings for HTML conversion.
+
+### [New-OfficeHtmlRenderOptions](New-OfficeHtmlRenderOptions.md)
+Creates discoverable layout, resource-limit, and rendering settings for HTML image export.
+
 ### [New-OfficeMarkdown](New-OfficeMarkdown.md)
 Creates a Markdown document using a DSL scriptblock.
 
+### [New-OfficeMarkdownPdfOptions](New-OfficeMarkdownPdfOptions.md)
+Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf.
+
 ### [New-OfficeOpenDocument](New-OfficeOpenDocument.md)
 Creates a native ODT, ODS, or ODP document.
 
 ### [New-OfficePdf](New-OfficePdf.md)
 Creates a PDF document using the OfficeIMO.Pdf composition engine.
 
+### [New-OfficePdfExcelImportOptions](New-OfficePdfExcelImportOptions.md)
+Creates discoverable PDF-table-to-Excel reconstruction settings.
+
+### [New-OfficePdfImageOptions](New-OfficePdfImageOptions.md)
+Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage.
+
+### [New-OfficePdfPowerPointImportOptions](New-OfficePdfPowerPointImportOptions.md)
+Creates discoverable PDF-to-PowerPoint reconstruction settings.
+
 ### [New-OfficePdfSignature](New-OfficePdfSignature.md)
 Prepares an existing PDF for external digital signing by appending a signature field, /ByteRange, and reserved /Contents placeholder.
 
@@ -1081,15 +1144,36 @@ Creates a typed text or choice field for a PDF table cell.
 ### [New-OfficePdfTableCellImage](New-OfficePdfTableCellImage.md)
 Creates a typed image for a PDF table cell.
 
+### [New-OfficePdfVisualComparisonOptions](New-OfficePdfVisualComparisonOptions.md)
+Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual.
+
+### [New-OfficePdfWordImportOptions](New-OfficePdfWordImportOptions.md)
+Creates discoverable PDF-to-Word reconstruction settings.
+
 ### [New-OfficePowerPoint](New-OfficePowerPoint.md)
 Creates a PowerPoint presentation using the DSL.
 
 ### [New-OfficePowerPointDeckPlan](New-OfficePowerPointDeckPlan.md)
 Creates a semantic PowerPoint deck plan for designer rendering.
 
+### [New-OfficePowerPointImageOptions](New-OfficePowerPointImageOptions.md)
+Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage.
+
+### [New-OfficePowerPointOpenDocumentOptions](New-OfficePowerPointOpenDocumentOptions.md)
+Creates PowerPoint/OpenDocument conversion settings.
+
+### [New-OfficePowerPointPdfOptions](New-OfficePowerPointPdfOptions.md)
+Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+### [New-OfficeReaderHierarchyOptions](New-OfficeReaderHierarchyOptions.md)
+Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy.
+
 ### [New-OfficeRtf](New-OfficeRtf.md)
 Creates an RTF document with plain paragraph content.
 
+### [New-OfficeRtfPdfOptions](New-OfficeRtfPdfOptions.md)
+Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf.
+
 ### [New-OfficeTextRun](New-OfficeTextRun.md)
 Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands.
 
@@ -1099,9 +1183,27 @@ Creates a new OfficeIMO.Visio document with an initial page and optional DSL con
 ### [New-OfficeVisioGallery](New-OfficeVisioGallery.md)
 Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams.
 
+### [New-OfficeVisioImageOptions](New-OfficeVisioImageOptions.md)
+Creates discoverable page and rendering settings for Export-OfficeVisioImage.
+
 ### [New-OfficeWord](New-OfficeWord.md)
 Creates a Word document using the DSL.
 
+### [New-OfficeWordComparisonOptions](New-OfficeWordComparisonOptions.md)
+Creates discoverable structural comparison settings for Compare-OfficeWordDocument.
+
+### [New-OfficeWordImageOptions](New-OfficeWordImageOptions.md)
+Creates discoverable page and rendering settings for Export-OfficeWordImage.
+
+### [New-OfficeWordOpenDocumentOptions](New-OfficeWordOpenDocumentOptions.md)
+Creates Word/OpenDocument conversion settings.
+
+### [New-OfficeWordPdfOptions](New-OfficeWordPdfOptions.md)
+Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf.
+
+### [New-OfficeWordRevisionFilter](New-OfficeWordRevisionFilter.md)
+Creates a discoverable Word revision filter for Resolve-OfficeWordRevision.
+
 ### [New-OfficeWordTableCell](New-OfficeWordTableCell.md)
 Creates a reusable Word table cell definition for explicit table rows.
 
@@ -1166,7 +1268,7 @@ Saves an Excel workbook without disposing it.
 Saves an OfficeIMO LaTeX document.
 
 ### [Save-OfficeMarkdown](Save-OfficeMarkdown.md)
-Saves a Markdown document and optionally creates a PDF sidecar.
+Saves a Markdown document without changing its lifetime.
 
 ### [Save-OfficeOpenDocument](Save-OfficeOpenDocument.md)
 Saves a native OpenDocument model with entry-level preservation diagnostics.
@@ -1324,6 +1426,9 @@ Sets worksheet view options such as gridlines, direction, zoom, and view mode.
 ### [Set-OfficeExcelWriteReservation](Set-OfficeExcelWriteReservation.md)
 Sets workbook write-reservation metadata.
 
+### [Set-OfficeOpenDocumentCell](Set-OfficeOpenDocumentCell.md)
+Sets a typed zero-based cell value in an OpenDocument spreadsheet.
+
 ### [Set-OfficePdfAnnotation](Set-OfficePdfAnnotation.md)
 Updates a single indirect PDF annotation.
 
diff --git a/Docs/Remove-OfficeConfluencePage.md b/Docs/Remove-OfficeConfluencePage.md
index 42013673..0fe60a4c 100644
--- a/Docs/Remove-OfficeConfluencePage.md
+++ b/Docs/Remove-OfficeConfluencePage.md
@@ -11,7 +11,7 @@ Plans or deletes a Confluence Cloud page.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Remove-OfficeConfluencePage [-PageId]  [-Session ] [-Purge] [-Draft] [-PlanOnly] [-WhatIf] [-Confirm] []
+Remove-OfficeConfluencePage [-PageId]  [-Session ] [-Purge] [-Draft] [-PlanOnly] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -67,6 +67,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Return the completed delete plan after a live operation.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PlanOnly
 Return the exact delete plan without contacting Confluence.
 
diff --git a/Docs/Remove-OfficePdfAnnotation.md b/Docs/Remove-OfficePdfAnnotation.md
index 378d804f..d0b36381 100644
--- a/Docs/Remove-OfficePdfAnnotation.md
+++ b/Docs/Remove-OfficePdfAnnotation.md
@@ -11,7 +11,7 @@ Removes PDF annotations matching friendly filters.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Remove-OfficePdfAnnotation [-Path]  [-OutputPath]  [-Password ] [-IgnorePermissionRestrictions] [-ObjectNumber ] [-PageNumber ] [-Subtype ] [-KeepPopups] [-PassThruReport] [-WhatIf] [-Confirm] []
+Remove-OfficePdfAnnotation [-Path]  [-OutputPath]  [-Password ] [-IgnorePermissionRestrictions] [-ObjectNumber ] [-PageNumber ] [-Subtype ] [-KeepPopups] [-PassThruReport] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,7 +21,7 @@ Removes PDF annotations matching friendly filters.
 
 ### EXAMPLE 1
 ```powershell
-Remove-OfficePdfAnnotation -Path 'C:\Path'
+PS> Remove-OfficePdfAnnotation -Path .\Reviewed.pdf -OutputPath .\Clean.pdf -PageNumber 1 -Subtype Text -Confirm:$false
 ```
 
 
@@ -107,6 +107,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PassThruReport
 Return the annotation edit result instead of the output file.
 
diff --git a/Docs/Remove-OfficePdfPage.md b/Docs/Remove-OfficePdfPage.md
index 10ce0e7d..81aa5efd 100644
--- a/Docs/Remove-OfficePdfPage.md
+++ b/Docs/Remove-OfficePdfPage.md
@@ -11,7 +11,7 @@ Removes selected pages from a PDF and writes a new PDF.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Remove-OfficePdfPage -Path  -PageRange  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] []
+Remove-OfficePdfPage -Path  -PageRange  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -80,6 +80,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/Remove-OfficePowerPointSlide.md b/Docs/Remove-OfficePowerPointSlide.md
index 6cd26402..e884b503 100644
--- a/Docs/Remove-OfficePowerPointSlide.md
+++ b/Docs/Remove-OfficePowerPointSlide.md
@@ -11,7 +11,7 @@ Removes a slide by index.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Remove-OfficePowerPointSlide -Presentation  -Index  [-WhatIf] [-Confirm] []
+Remove-OfficePowerPointSlide -Presentation  -Index  [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,11 +21,11 @@ Supports -WhatIf/-Confirm thanks to SupportsShouldProcess.
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRemoveSlide.pptx
-Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRemoveSlide.pptx -NoSave
+Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
 Remove-OfficePowerPointSlide -Presentation $ppt -Index 0 -Confirm:$false
-Save-OfficePowerPoint -Presentation $ppt
+Close-OfficePowerPoint -Presentation $ppt -Save
 ```
 
 Removes the first slide and saves the updated deck.
@@ -48,6 +48,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Presentation
 Presentation to modify.
 
diff --git a/Docs/Rename-OfficePowerPointSection.md b/Docs/Rename-OfficePowerPointSection.md
index d3e48f71..82cbdbdb 100644
--- a/Docs/Rename-OfficePowerPointSection.md
+++ b/Docs/Rename-OfficePowerPointSection.md
@@ -21,10 +21,11 @@ Renames a PowerPoint section.
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRenameSection.pptx
-Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0 | Out-Null
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRenameSection.pptx -NoSave
+Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0
 Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru
+$ppt | Close-OfficePowerPoint -Save
 ```
 
 Renames the first matching section and returns the updated section metadata.
diff --git a/Docs/Repair-OfficeExcelWorkbook.md b/Docs/Repair-OfficeExcelWorkbook.md
index 45c0f841..06a65ae3 100644
--- a/Docs/Repair-OfficeExcelWorkbook.md
+++ b/Docs/Repair-OfficeExcelWorkbook.md
@@ -11,7 +11,7 @@ Runs OfficeIMO safe workbook repairs for common package, table, view, print, dra
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Repair-OfficeExcelWorkbook [-InputPath]  [-SkipDefinedNames] [-SkipTables] [-SkipSheetViews] [-SkipPrintSettings] [-SkipDrawings] [-SkipCalculation] [-NoSave] [-PassThru] [-WhatIf] [-Confirm] []
+Repair-OfficeExcelWorkbook [-Path]  [-SkipDefinedNames] [-SkipTables] [-SkipSheetViews] [-SkipPrintSettings] [-SkipDrawings] [-SkipCalculation] [-NoSave] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -53,22 +53,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to repair.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NoSave
 Do not save after applying repairs to an open document.
 
@@ -101,6 +85,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to repair.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -SkipCalculation
 Skip calculation-chain cleanup and recalc-on-open metadata.
 
diff --git a/Docs/Resolve-OfficeWordRevision.md b/Docs/Resolve-OfficeWordRevision.md
index 27bdb728..ba918462 100644
--- a/Docs/Resolve-OfficeWordRevision.md
+++ b/Docs/Resolve-OfficeWordRevision.md
@@ -26,7 +26,8 @@ Accepts or rejects filtered Word revisions and returns an operation report.
 
 ### EXAMPLE 1
 ```powershell
-PS> $filter = [OfficeIMO.Word.WordRevisionFilter]::new(); $filter.Author = 'Reviewer'; Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter
+PS> $filter = New-OfficeWordRevisionFilter -Author 'Reviewer' -InContentControl
+Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter
 ```
 
 Applies only matching revisions, saves the result, and returns the matched revision report.
diff --git a/Docs/Save-OfficeAsciiDoc.md b/Docs/Save-OfficeAsciiDoc.md
index ec5edddc..78b50207 100644
--- a/Docs/Save-OfficeAsciiDoc.md
+++ b/Docs/Save-OfficeAsciiDoc.md
@@ -11,7 +11,7 @@ Saves an OfficeIMO AsciiDoc document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeAsciiDoc [-Document]  [-Path]  [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficeAsciiDoc [-Document]  [-Path]  [-Options ] [-Mode ] [-LineEnding ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,7 +21,8 @@ Saves an OfficeIMO AsciiDoc document.
 
 ### EXAMPLE 1
 ```powershell
-Save-OfficeAsciiDoc -Path 'C:\Path'
+PS> $document = Get-OfficeAsciiDoc -Path .\Guide.adoc
+$document | Save-OfficeAsciiDoc -Path .\Guide-normalized.adoc -Mode Canonical
 ```
 
 
@@ -43,6 +44,38 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
+### -LineEnding
+Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: LF, CRLF, CR
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Mode
+Writer mode. Preserve retains unchanged source; Canonical emits stable formatting.
+
+```yaml
+Type: AsciiDocWriterMode
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Preserve, Canonical
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Options
 Optional writer settings.
 
diff --git a/Docs/Save-OfficeEmail.md b/Docs/Save-OfficeEmail.md
index c8984548..f69fc347 100644
--- a/Docs/Save-OfficeEmail.md
+++ b/Docs/Save-OfficeEmail.md
@@ -11,7 +11,7 @@ Saves an email document as EML, EMLX, MSG, or TNEF with fidelity diagnostics.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeEmail [-Path]  -Document  [-Format ] [-Options ] [-WhatIf] [-Confirm] []
+Save-OfficeEmail [-Path]  -Document  [-Format ] [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,7 +21,8 @@ Saves an email document as EML, EMLX, MSG, or TNEF with fidelity diagnostics.
 
 ### EXAMPLE 1
 ```powershell
-Save-OfficeEmail -Document 'Value'
+PS> $options = New-OfficeEmailWriterOptions -ConversionLossPolicy Block
+$message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru
 ```
 
 
@@ -75,6 +76,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Destination path.
 
diff --git a/Docs/Save-OfficeEmailMailbox.md b/Docs/Save-OfficeEmailMailbox.md
index f9a992c7..5d3ca87e 100644
--- a/Docs/Save-OfficeEmailMailbox.md
+++ b/Docs/Save-OfficeEmailMailbox.md
@@ -11,7 +11,7 @@ Saves a native mbox mailbox with output diagnostics.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeEmailMailbox [-Path]  -Mailbox  [-Options ] [-WhatIf] [-Confirm] []
+Save-OfficeEmailMailbox [-Path]  -Mailbox  [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,7 +21,8 @@ Saves a native mbox mailbox with output diagnostics.
 
 ### EXAMPLE 1
 ```powershell
-Save-OfficeEmailMailbox -Mailbox 'Value'
+PS> $options = New-OfficeEmailMailboxWriterOptions -Variant Mboxrd
+$mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru
 ```
 
 
@@ -59,6 +60,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Destination mbox path.
 
diff --git a/Docs/Save-OfficeExcel.md b/Docs/Save-OfficeExcel.md
index 93b6c9cf..1e3fda16 100644
--- a/Docs/Save-OfficeExcel.md
+++ b/Docs/Save-OfficeExcel.md
@@ -11,7 +11,7 @@ Saves an Excel workbook without disposing it.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeExcel [-Document]  [-Path ] [-Show] [-Password ] [-SafePreflight] [-SafeRepairDefinedNames] [-ValidateOpenXml] [-DisableFastPackageWriter] [-EvaluateFormulas] [-ClearCachedFormulaResults] [-MarkFormulasDirty] [-ForceFullCalculationOnOpen] [-PdfPath ] [-DateSystem ] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficeExcel [-Document]  [-Path ] [-Open] [-Password ] [-SafePreflight] [-SafeRepairDefinedNames] [-ValidateOpenXml] [-DisableFastPackageWriter] [-EvaluateFormulas] [-ClearCachedFormulaResults] [-MarkFormulasDirty] [-ForceFullCalculationOnOpen] [-DateSystem ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -140,13 +140,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the workbook for further processing.
+### -Open
+Open the workbook after saving.
 
 ```yaml
 Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: Show
 Possible values:
 
 Required: False
@@ -156,11 +156,11 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Password
-Password used to save the workbook as an encrypted package.
+### -PassThru
+Emit the workbook for further processing.
 
 ```yaml
-Type: String
+Type: SwitchParameter
 Parameter Sets: __AllParameterSets
 Aliases: None
 Possible values:
@@ -172,8 +172,8 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Path
-Optional save-as path.
+### -Password
+Password used to save the workbook as an encrypted package.
 
 ```yaml
 Type: String
@@ -188,8 +188,8 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfPath
-Optional PDF path to create from the same workbook.
+### -Path
+Optional save-as path.
 
 ```yaml
 Type: String
@@ -236,22 +236,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the workbook after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -ValidateOpenXml
 Validate the saved package with OpenXmlValidator and throw on errors.
 
diff --git a/Docs/Save-OfficeLatex.md b/Docs/Save-OfficeLatex.md
index 57614d0c..88239c3c 100644
--- a/Docs/Save-OfficeLatex.md
+++ b/Docs/Save-OfficeLatex.md
@@ -11,7 +11,7 @@ Saves an OfficeIMO LaTeX document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeLatex [-Document]  [-Path]  [-Options ] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficeLatex [-Document]  [-Path]  [-Options ] [-Mode ] [-LineEnding ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,7 +21,8 @@ Saves an OfficeIMO LaTeX document.
 
 ### EXAMPLE 1
 ```powershell
-Save-OfficeLatex -Path 'C:\Path'
+PS> $document = Get-OfficeLatex -Path .\Article.tex
+$document | Save-OfficeLatex -Path .\Article-normalized.tex -Mode Canonical
 ```
 
 
@@ -43,6 +44,38 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
+### -LineEnding
+Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+
+```yaml
+Type: String
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: LF, CRLF, CR
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Mode
+Writer mode. Preserve retains unchanged source; Canonical normalizes output.
+
+```yaml
+Type: LatexWriterMode
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values: Preserve, Canonical
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Options
 Optional writer settings.
 
diff --git a/Docs/Save-OfficeMarkdown.md b/Docs/Save-OfficeMarkdown.md
index d7058f84..d829c50b 100644
--- a/Docs/Save-OfficeMarkdown.md
+++ b/Docs/Save-OfficeMarkdown.md
@@ -6,25 +6,25 @@ schema: 2.0.0
 ---
 # Save-OfficeMarkdown
 ## SYNOPSIS
-Saves a Markdown document and optionally creates a PDF sidecar.
+Saves a Markdown document without changing its lifetime.
 
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeMarkdown [-Document]  [[-Path] ] [-PdfPath ] [-WriteOptions ] [-WriteProfile ] [-ImageRenderingMode ] [-LineEnding ] [-UnorderedListMarker ] [-MarkdownPdfOptions ] [-PdfOptions ] [-PdfTheme ] [-PdfFontFamily ] [-PdfTitle ] [-PdfAuthor ] [-PdfSubject ] [-PdfKeywords ] [-PdfBaseDirectory ] [-PdfApplyWordLikeTheme ] [-PdfIncludeLocalImages ] [-PdfIncludeDataUriImages ] [-PdfRestrictLocalImagesToBaseDirectory ] [-PdfMaximumDataUriImageBytes ] [-PdfDefaultImageWidth ] [-PdfDefaultImageHeight ] [-PdfFrontMatterRenderMode ] [-PdfUseFrontMatterVisualTheme ] [-PdfUseFrontMatterMetadata ] [-PdfUseFirstHeadingAsTitle ] [-PdfCreateOutlineFromHeadings ] [-PdfWarningVariable ] [-PdfConversionReportVariable ] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficeMarkdown [-Document]  [-Path]  [-WriteOptions ] [-WriteProfile ] [-ImageRenderingMode ] [-LineEnding ] [-UnorderedListMarker ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
-Saves a Markdown document and optionally creates a PDF sidecar.
+Saves a Markdown document without changing its lifetime.
 
 ## EXAMPLES
 
 ### EXAMPLE 1
 ```powershell
-PS> $doc | Save-OfficeMarkdown -Path .\Report.md -PdfPath .\Report.pdf
+PS> $doc | Save-OfficeMarkdown -Path .\Report.md
 ```
 
-Writes both artifacts from the same Markdown document model.
+Writes the Markdown artifact and keeps the document available for further changes.
 
 ## PARAMETERS
 
@@ -76,22 +76,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -MarkdownPdfOptions
-Advanced Markdown PDF options. Friendly PDF parameters override matching values.
-
-```yaml
-Type: MarkdownPdfSaveOptions
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -PassThru
 Emit the Markdown document rather than the saved file.
 
@@ -117,381 +101,13 @@ Parameter Sets: __AllParameterSets
 Aliases: FilePath
 Possible values:
 
-Required: False
+Required: True
 Position: 1
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfApplyWordLikeTheme
-Apply the built-in Word-like Markdown PDF baseline theme.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfAuthor
-PDF author metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfBaseDirectory
-Base directory used to resolve local Markdown images during PDF export.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfConversionReportVariable
-Variable name that receives the Markdown PDF conversion report.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfCreateOutlineFromHeadings
-Create PDF outlines from Markdown headings.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfDefaultImageHeight
-Fallback PDF image height in points.
-
-```yaml
-Type: Double
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfDefaultImageWidth
-Fallback PDF image width in points.
-
-```yaml
-Type: Double
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfFontFamily
-Default font family used by Markdown PDF export.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfFrontMatterRenderMode
-Controls how YAML front matter appears in the PDF body.
-
-```yaml
-Type: MarkdownPdfFrontMatterRenderMode
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values: Hidden, DocumentHeader, Table
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfIncludeDataUriImages
-Embed supported data URI images in Markdown PDF output.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfIncludeLocalImages
-Embed supported local image files in Markdown PDF output.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfKeywords
-PDF keywords metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfMaximumDataUriImageBytes
-Maximum decoded bytes for one data URI image in Markdown PDF output.
-
-```yaml
-Type: Int32
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfOptions
-Underlying OfficeIMO.Pdf options used by Markdown PDF export.
-
-```yaml
-Type: PdfOptions
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfPath
-Optional PDF path to create from the same Markdown document.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfRestrictLocalImagesToBaseDirectory
-Require local images to resolve under the base directory.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfSubject
-PDF subject metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfTheme
-Built-in Markdown PDF visual theme.
-
-```yaml
-Type: OfficeVisualThemeKind
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values: Plain, WordLike, TechnicalDocument, GitHubLike, Compact, Report
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfTitle
-PDF title metadata.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfUseFirstHeadingAsTitle
-Use the first Markdown heading as the PDF title when no title is supplied.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfUseFrontMatterMetadata
-Use front matter values as PDF metadata.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfUseFrontMatterVisualTheme
-Use front matter values to select a visual theme.
-
-```yaml
-Type: Boolean
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfWarningVariable
-Variable name that receives Markdown PDF export warnings.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -UnorderedListMarker
 Unordered list marker: '-', '*', or '+'.
 
@@ -550,7 +166,6 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
 ## OUTPUTS
 
 - `OfficeIMO.Markdown.MarkdownDoc`
-- `System.IO.FileInfo`
 
 ## RELATED LINKS
 
diff --git a/Docs/Save-OfficeOpenDocument.md b/Docs/Save-OfficeOpenDocument.md
index 72790789..2a4cfc1e 100644
--- a/Docs/Save-OfficeOpenDocument.md
+++ b/Docs/Save-OfficeOpenDocument.md
@@ -11,7 +11,7 @@ Saves a native OpenDocument model with entry-level preservation diagnostics.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeOpenDocument [-Path]  -Document  [-Options ] [-FailOnLoss] [-WhatIf] [-Confirm] []
+Save-OfficeOpenDocument [-Path]  -Document  [-Options ] [-FailOnLoss] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -75,6 +75,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the save result, including preservation diagnostics.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Path
 Destination path.
 
diff --git a/Docs/Save-OfficePdf.md b/Docs/Save-OfficePdf.md
index a3ca66e6..1d7f8f11 100644
--- a/Docs/Save-OfficePdf.md
+++ b/Docs/Save-OfficePdf.md
@@ -11,7 +11,7 @@ Saves an OfficeIMO.Pdf document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficePdf [-Document]  [-Path]  [-Show] [-PassThru] [-Password ] [-OwnerPassword ] [-Permission ] [-WhatIf] [-Confirm] []
+Save-OfficePdf [-Document]  [-Path]  [-Open] [-PassThru] [-Password ] [-OwnerPassword ] [-Permission ] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -46,6 +46,22 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
+### -Open
+Open the PDF after saving.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -OwnerPassword
 Optional owner password for the generated encrypted PDF.
 
@@ -63,7 +79,7 @@ Accept wildcard characters: False
 ```
 
 ### -PassThru
-Emit the document instead of the saved file.
+Emit the document for further processing.
 
 ```yaml
 Type: SwitchParameter
@@ -126,22 +142,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the PDF after saving.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
@@ -152,7 +152,6 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
 ## OUTPUTS
 
 - `OfficeIMO.Pdf.PdfDocument`
-- `System.IO.FileInfo`
 
 ## RELATED LINKS
 
diff --git a/Docs/Save-OfficePowerPoint.md b/Docs/Save-OfficePowerPoint.md
index 301976f8..1cb33968 100644
--- a/Docs/Save-OfficePowerPoint.md
+++ b/Docs/Save-OfficePowerPoint.md
@@ -11,7 +11,7 @@ Saves a presentation without disposing it.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficePowerPoint -Presentation  [-Path ] [-Show] [-Password ] [-PdfPath ] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficePowerPoint -Presentation  [-Path ] [-Open] [-Password ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -21,23 +21,23 @@ Use Close-OfficePowerPoint -Save when the presentation should be saved and close
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSave.pptx
-$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSave.pptx -NoSave
+$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
 Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Saved later'
-Save-OfficePowerPoint -Presentation $ppt -PdfPath .\Examples\Documents\PowerPointSave.pdf
+Save-OfficePowerPoint -Presentation $ppt
 ```
 
-Saves the current presentation and exports a PDF sidecar.
+Saves the current presentation without closing it.
 
 ## PARAMETERS
 
-### -PassThru
-Emit the still-open presentation for further processing.
+### -Open
+Launch the saved file in the default viewer.
 
 ```yaml
 Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: Show
 Possible values:
 
 Required: False
@@ -47,11 +47,11 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Password
-Password used to save the presentation as an encrypted package.
+### -PassThru
+Emit the still-open presentation for further processing.
 
 ```yaml
-Type: String
+Type: SwitchParameter
 Parameter Sets: __AllParameterSets
 Aliases: None
 Possible values:
@@ -63,13 +63,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Path
-Optional save-as path.
+### -Password
+Password used to save the presentation as an encrypted package.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: FilePath
+Aliases: None
 Possible values:
 
 Required: False
@@ -79,13 +79,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfPath
-Optional PDF path to create from the same presentation.
+### -Path
+Optional save-as path.
 
 ```yaml
 Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath
 Possible values:
 
 Required: False
@@ -111,22 +111,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -Show
-Launch the saved file in the default viewer.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Docs/Save-OfficeVisio.md b/Docs/Save-OfficeVisio.md
index 1f052fd4..9ebd942a 100644
--- a/Docs/Save-OfficeVisio.md
+++ b/Docs/Save-OfficeVisio.md
@@ -11,7 +11,7 @@ Saves an OfficeIMO.Visio document.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeVisio [-Document]  [[-Path] ] [-Show] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficeVisio [-Document]  [[-Path] ] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -45,13 +45,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the document object instead of the saved file.
+### -Open
+Open the document after saving.
 
 ```yaml
 Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: Show
 Possible values:
 
 Required: False
@@ -61,33 +61,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Path
-Optional save-as path.
+### -PassThru
+Emit the document object for further processing.
 
 ```yaml
-Type: String
+Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: FilePath
+Aliases: None
 Possible values:
 
 Required: False
-Position: 1
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the document after saving.
+### -Path
+Optional save-as path.
 
 ```yaml
-Type: SwitchParameter
+Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath
 Possible values:
 
 Required: False
-Position: named
+Position: 1
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
@@ -103,7 +103,6 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
 ## OUTPUTS
 
 - `OfficeIMO.Visio.VisioDocument`
-- `System.IO.FileInfo`
 
 ## RELATED LINKS
 
diff --git a/Docs/Save-OfficeWord.md b/Docs/Save-OfficeWord.md
index c9ca7c36..fff29a24 100644
--- a/Docs/Save-OfficeWord.md
+++ b/Docs/Save-OfficeWord.md
@@ -11,7 +11,7 @@ Saves a Word document without disposing it.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Save-OfficeWord [-Document]  [-Path ] [-Show] [-Password ] [-PdfPath ] [-PdfFontFamily ] [-PdfAllowSystemFontEmbedding] [-PassThru] [-WhatIf] [-Confirm] []
+Save-OfficeWord [-Document]  [-Path ] [-Open] [-Password ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -44,45 +44,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the document object for further processing.
+### -Open
+Open the document after saving.
 
 ```yaml
 Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -Password
-Password used to save the document as an encrypted package.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -Path
-Optional save-as path.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
-Aliases: FilePath
+Aliases: Show
 Possible values:
 
 Required: False
@@ -92,28 +60,12 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfAllowSystemFontEmbedding
-Allow the native Word PDF converter to embed installed system fonts used by the document.
+### -PassThru
+Emit the document object for further processing.
 
 ```yaml
 Type: SwitchParameter
 Parameter Sets: __AllParameterSets
-Aliases: AllowSystemFontEmbedding
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
-### -PdfFontFamily
-Optional default font family used by the native Word PDF converter.
-
-```yaml
-Type: String
-Parameter Sets: __AllParameterSets
 Aliases: None
 Possible values:
 
@@ -124,8 +76,8 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PdfPath
-Optional PDF path to create from the same Word document.
+### -Password
+Password used to save the document as an encrypted package.
 
 ```yaml
 Type: String
@@ -140,13 +92,13 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the document after saving.
+### -Path
+Optional save-as path.
 
 ```yaml
-Type: SwitchParameter
+Type: String
 Parameter Sets: __AllParameterSets
-Aliases: None
+Aliases: FilePath
 Possible values:
 
 Required: False
diff --git a/Docs/Set-OfficeExcelActiveSheet.md b/Docs/Set-OfficeExcelActiveSheet.md
index 86088268..68b37b8d 100644
--- a/Docs/Set-OfficeExcelActiveSheet.md
+++ b/Docs/Set-OfficeExcelActiveSheet.md
@@ -16,7 +16,7 @@ Set-OfficeExcelActiveSheet [-PassThru] [-WhatIf] [-Confirm] []
 
 ### Path
 ```powershell
-Set-OfficeExcelActiveSheet [-InputPath]  [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelActiveSheet [-Path]  [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -56,33 +56,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -PassThru
+Emit the activated worksheet.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the activated worksheet.
+### -Path
+Workbook path to update.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Set-OfficeExcelCell.md b/Docs/Set-OfficeExcelCell.md
index f14baaa4..503a3563 100644
--- a/Docs/Set-OfficeExcelCell.md
+++ b/Docs/Set-OfficeExcelCell.md
@@ -11,12 +11,12 @@ Sets a cell value, formula, or number format within the current worksheet.
 ## SYNTAX
 ### Coordinates
 ```powershell
-Set-OfficeExcelCell [-Worksheet ] [-Document ] [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-Value ] [-Formula ] [-NumberFormat ] [-BackgroundColor ] [-GradientFrom ] [-GradientTo ] [-GradientDegree ] []
+Set-OfficeExcelCell [-Worksheet ] [-Document ] [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-Value ] [-Formula ] [-NumberFormat ] [-BackgroundColor ] [-GradientFrom ] [-GradientTo ] [-GradientDegree ] [-PassThru] []
 ```
 
 ### Address
 ```powershell
-Set-OfficeExcelCell [-Worksheet ] [-Document ] [-Sheet ] [-SheetIndex ] [-Address ] [-Value ] [-Formula ] [-NumberFormat ] [-BackgroundColor ] [-GradientFrom ] [-GradientTo ] [-GradientDegree ] []
+Set-OfficeExcelCell [-Worksheet ] [-Document ] [-Sheet ] [-SheetIndex ] [-Address ] [-Value ] [-Formula ] [-NumberFormat ] [-BackgroundColor ] [-GradientFrom ] [-GradientTo ] [-GradientDegree ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -184,6 +184,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Coordinates, Address
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Row
 1-based row index.
 
diff --git a/Docs/Set-OfficeExcelChartAxis.md b/Docs/Set-OfficeExcelChartAxis.md
index 08d78b10..f4b1c590 100644
--- a/Docs/Set-OfficeExcelChartAxis.md
+++ b/Docs/Set-OfficeExcelChartAxis.md
@@ -11,7 +11,7 @@ Configures common Excel chart axis titles, formats, scale, and gridlines.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelChartAxis -Chart  [-AxisGroup ] [-CategoryTitle ] [-ValueTitle ] [-CategoryNumberFormat ] [-ValueNumberFormat ] [-SourceLinked ] [-ValueMinimum ] [-ValueMaximum ] [-ValueMajorUnit ] [-ValueMinorUnit ] [-CategoryMinimum ] [-CategoryMaximum ] [-CategoryMajorUnit ] [-CategoryMinorUnit ] [-ShowCategoryMajorGridlines] [-ShowCategoryMinorGridlines] [-ShowValueMajorGridlines] [-ShowValueMinorGridlines] [-CategoryGridlineColor ] [-ValueGridlineColor ] [-GridlineWidthPoints ] []
+Set-OfficeExcelChartAxis -Chart  [-AxisGroup ] [-CategoryTitle ] [-ValueTitle ] [-CategoryNumberFormat ] [-ValueNumberFormat ] [-SourceLinked ] [-ValueMinimum ] [-ValueMaximum ] [-ValueMajorUnit ] [-ValueMinorUnit ] [-CategoryMinimum ] [-CategoryMaximum ] [-CategoryMajorUnit ] [-CategoryMinorUnit ] [-ShowCategoryMajorGridlines] [-ShowCategoryMinorGridlines] [-ShowValueMajorGridlines] [-ShowValueMinorGridlines] [-CategoryGridlineColor ] [-ValueGridlineColor ] [-GridlineWidthPoints ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -196,6 +196,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -ShowCategoryMajorGridlines
 Show category major gridlines.
 
diff --git a/Docs/Set-OfficeExcelChartDataLabels.md b/Docs/Set-OfficeExcelChartDataLabels.md
index 43733c2c..b4f09c30 100644
--- a/Docs/Set-OfficeExcelChartDataLabels.md
+++ b/Docs/Set-OfficeExcelChartDataLabels.md
@@ -11,7 +11,7 @@ Configures data labels and optional styling for an Excel chart.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelChartDataLabels -Chart  [-ShowValue ] [-ShowCategoryName ] [-ShowSeriesName ] [-ShowLegendKey ] [-ShowPercent ] [-Position ] [-NumberFormat ] [-SourceLinked ] [-FontSizePoints ] [-Bold ] [-Italic ] [-Color ] [-FontName ] [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-NoFill] [-NoLine] []
+Set-OfficeExcelChartDataLabels -Chart  [-ShowValue ] [-ShowCategoryName ] [-ShowSeriesName ] [-ShowLegendKey ] [-ShowPercent ] [-Position ] [-NumberFormat ] [-SourceLinked ] [-FontSizePoints ] [-Bold ] [-Italic ] [-Color ] [-FontName ] [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-NoFill] [-NoLine] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -220,6 +220,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Position
 Optional data label position.
 
diff --git a/Docs/Set-OfficeExcelChartLegend.md b/Docs/Set-OfficeExcelChartLegend.md
index 12696962..a23b1cf4 100644
--- a/Docs/Set-OfficeExcelChartLegend.md
+++ b/Docs/Set-OfficeExcelChartLegend.md
@@ -11,7 +11,7 @@ Configures legend visibility and styling for an Excel chart.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelChartLegend -Chart  [-Position ] [-Overlay ] [-Hide] [-FontSizePoints ] [-Bold ] [-Italic ] [-Color ] [-FontName ] []
+Set-OfficeExcelChartLegend -Chart  [-Position ] [-Overlay ] [-Hide] [-FontSizePoints ] [-Bold ] [-Italic ] [-Color ] [-FontName ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -156,6 +156,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Position
 Legend position.
 
diff --git a/Docs/Set-OfficeExcelChartPoint.md b/Docs/Set-OfficeExcelChartPoint.md
index 3643ef8c..a60388a9 100644
--- a/Docs/Set-OfficeExcelChartPoint.md
+++ b/Docs/Set-OfficeExcelChartPoint.md
@@ -11,12 +11,12 @@ Configures fill and line styling for a single Excel chart data point.
 ## SYNTAX
 ### Index (Default)
 ```powershell
-Set-OfficeExcelChartPoint -Chart  -SeriesIndex  -PointIndex  [-FillColor ] [-LineColor ] [-LineWidthPoints ] []
+Set-OfficeExcelChartPoint -Chart  -SeriesIndex  -PointIndex  [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-PassThru] []
 ```
 
 ### Name
 ```powershell
-Set-OfficeExcelChartPoint -Chart  -SeriesName  -PointIndex  [-IgnoreCase ] [-FillColor ] [-LineColor ] [-LineWidthPoints ] []
+Set-OfficeExcelChartPoint -Chart  -SeriesName  -PointIndex  [-IgnoreCase ] [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -113,6 +113,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Index, Name
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PointIndex
 Zero-based data point index within the series.
 
diff --git a/Docs/Set-OfficeExcelChartSeries.md b/Docs/Set-OfficeExcelChartSeries.md
index ff2b2a36..72a510d4 100644
--- a/Docs/Set-OfficeExcelChartSeries.md
+++ b/Docs/Set-OfficeExcelChartSeries.md
@@ -11,12 +11,12 @@ Configures Excel chart series colors, line style, and markers.
 ## SYNTAX
 ### Index (Default)
 ```powershell
-Set-OfficeExcelChartSeries -Chart  -SeriesIndex  [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-MarkerStyle ] [-MarkerSize ] [-MarkerFillColor ] [-MarkerLineColor ] [-MarkerLineWidthPoints ] []
+Set-OfficeExcelChartSeries -Chart  -SeriesIndex  [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-MarkerStyle ] [-MarkerSize ] [-MarkerFillColor ] [-MarkerLineColor ] [-MarkerLineWidthPoints ] [-PassThru] []
 ```
 
 ### Name
 ```powershell
-Set-OfficeExcelChartSeries -Chart  -SeriesName  [-IgnoreCase ] [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-MarkerStyle ] [-MarkerSize ] [-MarkerFillColor ] [-MarkerLineColor ] [-MarkerLineWidthPoints ] []
+Set-OfficeExcelChartSeries -Chart  -SeriesName  [-IgnoreCase ] [-FillColor ] [-LineColor ] [-LineWidthPoints ] [-MarkerStyle ] [-MarkerSize ] [-MarkerFillColor ] [-MarkerLineColor ] [-MarkerLineWidthPoints ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -193,6 +193,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Index, Name
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -SeriesIndex
 Zero-based series index.
 
diff --git a/Docs/Set-OfficeExcelChartStyle.md b/Docs/Set-OfficeExcelChartStyle.md
index face4764..b1c9decb 100644
--- a/Docs/Set-OfficeExcelChartStyle.md
+++ b/Docs/Set-OfficeExcelChartStyle.md
@@ -11,7 +11,7 @@ Applies a built-in style and color preset to an Excel chart.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelChartStyle -Chart  [-StyleId ] [-ColorStyleId ] []
+Set-OfficeExcelChartStyle -Chart  [-StyleId ] [-ColorStyleId ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -60,6 +60,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -StyleId
 Chart style identifier.
 
diff --git a/Docs/Set-OfficeExcelChartTrendline.md b/Docs/Set-OfficeExcelChartTrendline.md
index 7a178cc2..e0feb45a 100644
--- a/Docs/Set-OfficeExcelChartTrendline.md
+++ b/Docs/Set-OfficeExcelChartTrendline.md
@@ -11,12 +11,12 @@ Adds or replaces an Excel chart series trendline.
 ## SYNTAX
 ### Index (Default)
 ```powershell
-Set-OfficeExcelChartTrendline -Chart  -SeriesIndex  -Type  [-Order ] [-Period ] [-Forward ] [-Backward ] [-Intercept ] [-DisplayEquation] [-DisplayRSquared] [-LineColor ] [-LineWidthPoints ] []
+Set-OfficeExcelChartTrendline -Chart  -SeriesIndex  -Type  [-Order ] [-Period ] [-Forward ] [-Backward ] [-Intercept ] [-DisplayEquation] [-DisplayRSquared] [-LineColor ] [-LineWidthPoints ] [-PassThru] []
 ```
 
 ### Name
 ```powershell
-Set-OfficeExcelChartTrendline -Chart  -SeriesName  -Type  [-IgnoreCase ] [-Order ] [-Period ] [-Forward ] [-Backward ] [-Intercept ] [-DisplayEquation] [-DisplayRSquared] [-LineColor ] [-LineWidthPoints ] []
+Set-OfficeExcelChartTrendline -Chart  -SeriesName  -Type  [-IgnoreCase ] [-Order ] [-Period ] [-Forward ] [-Backward ] [-Intercept ] [-DisplayEquation] [-DisplayRSquared] [-LineColor ] [-LineWidthPoints ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -193,6 +193,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Index, Name
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Period
 Moving-average period.
 
diff --git a/Docs/Set-OfficeExcelColumn.md b/Docs/Set-OfficeExcelColumn.md
index 8b3b972b..24005e89 100644
--- a/Docs/Set-OfficeExcelColumn.md
+++ b/Docs/Set-OfficeExcelColumn.md
@@ -11,7 +11,7 @@ Writes values or formatting to a column in the current worksheet.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelColumn [[-Column] ] [-ColumnName ] [-Values ] [-StartRow ] [-Width ] [-Hidden ] [-AutoFit] []
+Set-OfficeExcelColumn [[-Column] ] [-ColumnName ] [-Values ] [-StartRow ] [-Width ] [-Hidden ] [-AutoFit] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -92,6 +92,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -StartRow
 Starting row index (1-based) for values.
 
diff --git a/Docs/Set-OfficeExcelColumnGroup.md b/Docs/Set-OfficeExcelColumnGroup.md
index 65dca338..d4c1b93f 100644
--- a/Docs/Set-OfficeExcelColumnGroup.md
+++ b/Docs/Set-OfficeExcelColumnGroup.md
@@ -11,7 +11,7 @@ Configures collapsible Excel outline grouping for worksheet columns.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelColumnGroup [[-StartColumn] ] [[-EndColumn] ] [-StartColumnName ] [-EndColumnName ] [-OutlineLevel ] [-Collapsed] [-Hidden] [-Clear] [-KeepHidden] [-SummaryRight ] []
+Set-OfficeExcelColumnGroup [[-StartColumn] ] [[-EndColumn] ] [-StartColumnName ] [-EndColumnName ] [-OutlineLevel ] [-Collapsed] [-Hidden] [-Clear] [-KeepHidden] [-SummaryRight ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -140,6 +140,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -StartColumn
 First 1-based column in the group.
 
diff --git a/Docs/Set-OfficeExcelColumnStyleByHeader.md b/Docs/Set-OfficeExcelColumnStyleByHeader.md
index 900b29da..49353cff 100644
--- a/Docs/Set-OfficeExcelColumnStyleByHeader.md
+++ b/Docs/Set-OfficeExcelColumnStyleByHeader.md
@@ -11,12 +11,12 @@ Applies common number, fill, font, and status styles to a worksheet column resol
 ## SYNTAX
 ### Context (Default)
 ```powershell
-Set-OfficeExcelColumnStyleByHeader [-Header]  [-IncludeHeader] [-Style ] [-Decimals ] [-CultureName ] [-NumberFormat ] [-Pattern ] [-Bold] [-BackgroundColor ] [-FontColor ] [-Alignment ] [-BackgroundByText ] [-FontColorByText ] [-BoldByText ] [-CaseSensitive] [-Width ] [-AutoFit] [-IgnoreMissing] []
+Set-OfficeExcelColumnStyleByHeader [-Header]  [-IncludeHeader] [-Style ] [-Decimals ] [-CultureName ] [-NumberFormat ] [-Pattern ] [-Bold] [-BackgroundColor ] [-FontColor ] [-Alignment ] [-BackgroundByText ] [-FontColorByText ] [-BoldByText ] [-CaseSensitive] [-Width ] [-AutoFit] [-IgnoreMissing] [-PassThru] []
 ```
 
 ### Document
 ```powershell
-Set-OfficeExcelColumnStyleByHeader [-Header]  -Document  [-Sheet ] [-SheetIndex ] [-IncludeHeader] [-Style ] [-Decimals ] [-CultureName ] [-NumberFormat ] [-Pattern ] [-Bold] [-BackgroundColor ] [-FontColor ] [-Alignment ] [-BackgroundByText ] [-FontColorByText ] [-BoldByText ] [-CaseSensitive] [-Width ] [-AutoFit] [-IgnoreMissing] []
+Set-OfficeExcelColumnStyleByHeader [-Header]  -Document  [-Sheet ] [-SheetIndex ] [-IncludeHeader] [-Style ] [-Decimals ] [-CultureName ] [-NumberFormat ] [-Pattern ] [-Bold] [-BackgroundColor ] [-FontColor ] [-Alignment ] [-BackgroundByText ] [-FontColorByText ] [-BoldByText ] [-CaseSensitive] [-Width ] [-AutoFit] [-IgnoreMissing] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -292,6 +292,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Context, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Pattern
 Date or DateTime number format pattern.
 
diff --git a/Docs/Set-OfficeExcelDataValidationMessage.md b/Docs/Set-OfficeExcelDataValidationMessage.md
index 30edfaa7..ec68db6e 100644
--- a/Docs/Set-OfficeExcelDataValidationMessage.md
+++ b/Docs/Set-OfficeExcelDataValidationMessage.md
@@ -16,7 +16,7 @@ Set-OfficeExcelDataValidationMessage [-Sheet ] [-SheetIndex ] [-R
 
 ### Path
 ```powershell
-Set-OfficeExcelDataValidationMessage [-InputPath]  [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PromptTitle ] [-Prompt ] [-ErrorTitle ] [-ErrorMessage ] [-ShowInputMessage] [-ShowErrorMessage] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelDataValidationMessage [-Path]  [-Sheet ] [-SheetIndex ] [-Range ] [-HeaderName ] [-TableName ] [-HeaderRow ] [-IncludeHeader] [-PromptTitle ] [-Prompt ] [-ErrorTitle ] [-ErrorMessage ] [-ShowInputMessage] [-ShowErrorMessage] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -136,33 +136,33 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -PassThru
+Returns matching validation rules after updating them.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Returns matching validation rules after updating them.
+### -Path
+Workbook path to update.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Set-OfficeExcelFormula.md b/Docs/Set-OfficeExcelFormula.md
index 9949b49b..cf44e205 100644
--- a/Docs/Set-OfficeExcelFormula.md
+++ b/Docs/Set-OfficeExcelFormula.md
@@ -11,12 +11,12 @@ Sets a formula in a worksheet cell.
 ## SYNTAX
 ### Coordinates
 ```powershell
-Set-OfficeExcelFormula -Formula  [-Row ] [-Column ] []
+Set-OfficeExcelFormula -Formula  [-Row ] [-Column ] [-PassThru] []
 ```
 
 ### Address
 ```powershell
-Set-OfficeExcelFormula -Formula  [-Address ] []
+Set-OfficeExcelFormula -Formula  [-Address ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -81,6 +81,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Coordinates, Address
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Row
 1-based row index.
 
diff --git a/Docs/Set-OfficeExcelFreeze.md b/Docs/Set-OfficeExcelFreeze.md
index ac9f0404..a7fe9048 100644
--- a/Docs/Set-OfficeExcelFreeze.md
+++ b/Docs/Set-OfficeExcelFreeze.md
@@ -11,12 +11,12 @@ Freezes panes on the current worksheet.
 ## SYNTAX
 ### Context (Default)
 ```powershell
-Set-OfficeExcelFreeze [-TopRows ] [-LeftColumns ] []
+Set-OfficeExcelFreeze [-TopRows ] [-LeftColumns ] [-PassThru] []
 ```
 
 ### Document
 ```powershell
-Set-OfficeExcelFreeze -Document  [-Sheet ] [-SheetIndex ] [-TopRows ] [-LeftColumns ] []
+Set-OfficeExcelFreeze -Document  [-Sheet ] [-SheetIndex ] [-TopRows ] [-LeftColumns ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -72,6 +72,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Context, Document
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Sheet
 Worksheet name when using Document.
 
diff --git a/Docs/Set-OfficeExcelPrintArea.md b/Docs/Set-OfficeExcelPrintArea.md
index 2ebd9880..b970e40c 100644
--- a/Docs/Set-OfficeExcelPrintArea.md
+++ b/Docs/Set-OfficeExcelPrintArea.md
@@ -16,7 +16,7 @@ Set-OfficeExcelPrintArea [-Range]  [-Sheet ] [-SheetIndex  [-Range]  [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelPrintArea [-Path]  [-Range]  [-Sheet ] [-SheetIndex ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -58,33 +58,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -PassThru
+Emit the worksheet after setting the print area.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the worksheet after setting the print area.
+### -Path
+Workbook path to update.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Set-OfficeExcelPrintLayout.md b/Docs/Set-OfficeExcelPrintLayout.md
index bfe634a9..e88193a8 100644
--- a/Docs/Set-OfficeExcelPrintLayout.md
+++ b/Docs/Set-OfficeExcelPrintLayout.md
@@ -16,7 +16,7 @@ Set-OfficeExcelPrintLayout [-Sheet ] [-SheetIndex ] [-Preset  [-Sheet ] [-SheetIndex ] [-Preset ] [-PrintArea ] [-Orientation ] [-Margins ] [-FitToWidth ] [-FitToHeight ] [-Scale ] [-PageOrder ] [-RepeatFirstRow ] [-RepeatLastRow ] [-RepeatFirstColumn ] [-RepeatLastColumn ] [-NoPresetPrintTitles] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelPrintLayout [-Path]  [-Sheet ] [-SheetIndex ] [-Preset ] [-PrintArea ] [-Orientation ] [-Margins ] [-FitToWidth ] [-FitToHeight ] [-Scale ] [-PageOrder ] [-RepeatFirstRow ] [-RepeatLastRow ] [-RepeatFirstColumn ] [-RepeatLastColumn ] [-NoPresetPrintTitles] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -86,22 +86,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Margins
 Optional margin preset override.
 
@@ -182,6 +166,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Preset
 Print layout preset.
 
diff --git a/Docs/Set-OfficeExcelPrintTitles.md b/Docs/Set-OfficeExcelPrintTitles.md
index fcf0fe64..43f8f263 100644
--- a/Docs/Set-OfficeExcelPrintTitles.md
+++ b/Docs/Set-OfficeExcelPrintTitles.md
@@ -16,7 +16,7 @@ Set-OfficeExcelPrintTitles [-Sheet ] [-SheetIndex ] [-FirstRow  [-Sheet ] [-SheetIndex ] [-FirstRow ] [-LastRow ] [-FirstColumn ] [-LastColumn ] [-Clear] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelPrintTitles [-Path]  [-Sheet ] [-SheetIndex ] [-FirstRow ] [-LastRow ] [-FirstColumn ] [-LastColumn ] [-Clear] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -107,22 +107,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -LastColumn
 Last 1-based column to repeat.
 
@@ -171,6 +155,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Sheet
 Worksheet name. Defaults to the current sheet inside an ExcelSheet block.
 
diff --git a/Docs/Set-OfficeExcelRefreshOnOpen.md b/Docs/Set-OfficeExcelRefreshOnOpen.md
index dcdc815d..37b74bee 100644
--- a/Docs/Set-OfficeExcelRefreshOnOpen.md
+++ b/Docs/Set-OfficeExcelRefreshOnOpen.md
@@ -16,7 +16,7 @@ Set-OfficeExcelRefreshOnOpen [-PivotTables] [-Connections] [-Disable] [-SavePivo
 
 ### Path
 ```powershell
-Set-OfficeExcelRefreshOnOpen [-InputPath]  [-PivotTables] [-Connections] [-Disable] [-SavePivotSourceData] [-NoSavePivotSourceData] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelRefreshOnOpen [-Path]  [-PivotTables] [-Connections] [-Disable] [-SavePivotSourceData] [-NoSavePivotSourceData] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -88,22 +88,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -NoSavePivotSourceData
 Do not save pivot cache source data.
 
@@ -136,6 +120,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PivotTables
 Update pivot cache refresh-on-open metadata.
 
diff --git a/Docs/Set-OfficeExcelRichText.md b/Docs/Set-OfficeExcelRichText.md
index 1b9d95e5..8347cbc1 100644
--- a/Docs/Set-OfficeExcelRichText.md
+++ b/Docs/Set-OfficeExcelRichText.md
@@ -16,7 +16,7 @@ Set-OfficeExcelRichText -Run  [-Sheet ] [-SheetIndex ]
 
 ### Path
 ```powershell
-Set-OfficeExcelRichText [-InputPath]  -Run  [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-Address ] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelRichText [-Path]  -Run  [-Sheet ] [-SheetIndex ] [-Row ] [-Column ] [-Address ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -88,33 +88,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -PassThru
+Emit written rich text runs.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit written rich text runs.
+### -Path
+Workbook path to update.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Set-OfficeExcelRow.md b/Docs/Set-OfficeExcelRow.md
index c678fc1a..584d3660 100644
--- a/Docs/Set-OfficeExcelRow.md
+++ b/Docs/Set-OfficeExcelRow.md
@@ -11,7 +11,7 @@ Writes a row of values to the current worksheet.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelRow [-Row]  [[-Values] ] [-StartColumn ] [-Height ] [-ClearHeight] [-AutoFit] [-Hidden ] [-Bold ] [-Italic ] [-Underline ] [-WrapText ] [-FontName ] [-BackgroundColor ] [-FirstColumn ] [-LastColumn ] []
+Set-OfficeExcelRow [-Row]  [[-Values] ] [-StartColumn ] [-Height ] [-ClearHeight] [-AutoFit] [-Hidden ] [-Bold ] [-Italic ] [-Underline ] [-WrapText ] [-FontName ] [-BackgroundColor ] [-FirstColumn ] [-LastColumn ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -188,6 +188,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Row
 1-based row index.
 
diff --git a/Docs/Set-OfficeExcelRowGroup.md b/Docs/Set-OfficeExcelRowGroup.md
index 89c5fcc2..a6d94627 100644
--- a/Docs/Set-OfficeExcelRowGroup.md
+++ b/Docs/Set-OfficeExcelRowGroup.md
@@ -11,7 +11,7 @@ Configures collapsible Excel outline grouping for worksheet rows.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficeExcelRowGroup [-StartRow]  [[-EndRow] ] [-OutlineLevel ] [-Collapsed] [-Hidden] [-Clear] [-KeepHidden] [-SummaryBelow ] []
+Set-OfficeExcelRowGroup [-StartRow]  [[-EndRow] ] [-OutlineLevel ] [-Collapsed] [-Hidden] [-Clear] [-KeepHidden] [-SummaryBelow ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -124,6 +124,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -StartRow
 First 1-based row in the group.
 
diff --git a/Docs/Set-OfficeExcelTheme.md b/Docs/Set-OfficeExcelTheme.md
index a722cbd4..d89e57bf 100644
--- a/Docs/Set-OfficeExcelTheme.md
+++ b/Docs/Set-OfficeExcelTheme.md
@@ -16,7 +16,7 @@ Set-OfficeExcelTheme [-Default] [-Xml ] [-XmlPath ] [-Name  [-Default] [-Xml ] [-XmlPath ] [-Name ] [-PassThru] [-WhatIf] [-Confirm] []
+Set-OfficeExcelTheme [-Path]  [-Default] [-Xml ] [-XmlPath ] [-Name ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -72,22 +72,6 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -Name
 Optional workbook theme name to apply after writing the theme.
 
@@ -120,6 +104,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Xml
 Theme XML to write to the workbook theme part.
 
diff --git a/Docs/Set-OfficeOpenDocumentCell.md b/Docs/Set-OfficeOpenDocumentCell.md
new file mode 100644
index 00000000..de134ad3
--- /dev/null
+++ b/Docs/Set-OfficeOpenDocumentCell.md
@@ -0,0 +1,124 @@
+---
+external help file: PSWriteOffice-help.xml
+Module Name: PSWriteOffice
+online version: https://github.com/EvotecIT/PSWriteOffice
+schema: 2.0.0
+---
+# Set-OfficeOpenDocumentCell
+## SYNOPSIS
+Sets a typed zero-based cell value in an OpenDocument spreadsheet.
+
+## SYNTAX
+### __AllParameterSets
+```powershell
+Set-OfficeOpenDocumentCell [-Value]  -Row  -Column  [-Sheet ] [-PassThru] []
+```
+
+## DESCRIPTION
+Sets a typed zero-based cell value in an OpenDocument spreadsheet.
+
+## EXAMPLES
+
+### EXAMPLE 1
+```powershell
+PS> Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Healthy'
+            Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value $true
+```
+
+
+## PARAMETERS
+
+### -Column
+Zero-based column index.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: True
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PassThru
+Emit the updated cell.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Row
+Zero-based row index.
+
+```yaml
+Type: Int64
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: True
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -Sheet
+Worksheet target. Omit inside Add-OfficeOpenDocumentSheet -Content.
+
+```yaml
+Type: OdsSheet
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: True (ByValue)
+Accept wildcard characters: False
+```
+
+### -Value
+String, number, decimal, boolean, date, date-time offset, or time span value.
+
+```yaml
+Type: Object
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### CommonParameters
+This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
+
+## INPUTS
+
+- `OfficeIMO.OpenDocument.OdsSheet`
+
+## OUTPUTS
+
+- `OfficeIMO.OpenDocument.OdsCell`
+
+## RELATED LINKS
+
+- None
diff --git a/Docs/Set-OfficePdfAnnotation.md b/Docs/Set-OfficePdfAnnotation.md
index 7e590685..1a6affb2 100644
--- a/Docs/Set-OfficePdfAnnotation.md
+++ b/Docs/Set-OfficePdfAnnotation.md
@@ -11,7 +11,7 @@ Updates a single indirect PDF annotation.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePdfAnnotation [-Path]  [-OutputPath]  -ObjectNumber  [-Password ] [-IgnorePermissionRestrictions] [-Contents ] [-Title ] [-Name ] [-Flags ] [-Color ] [-RemoveAction] [-PassThruReport] [-WhatIf] [-Confirm] []
+Set-OfficePdfAnnotation [-Path]  [-OutputPath]  -ObjectNumber  [-Password ] [-IgnorePermissionRestrictions] [-Contents ] [-Title ] [-Name ] [-Flags ] [-Color ] [-RemoveAction] [-PassThruReport] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -139,6 +139,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PassThruReport
 Return the annotation edit result instead of the output file.
 
diff --git a/Docs/Set-OfficePdfForm.md b/Docs/Set-OfficePdfForm.md
index 3134470e..bee4edd3 100644
--- a/Docs/Set-OfficePdfForm.md
+++ b/Docs/Set-OfficePdfForm.md
@@ -11,7 +11,7 @@ Fills and optionally flattens simple AcroForm fields in an existing PDF.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePdfForm -Path  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-Field ] [-Flatten] [-KeepNeedAppearances] [-Incremental] [-AppearanceFontPath ] [-AppearanceFontFamilyName ] [-WhatIf] [-Confirm] []
+Set-OfficePdfForm -Path  -OutputPath  [-Password ] [-IgnorePermissionRestrictions] [-Field ] [-Flatten] [-KeepNeedAppearances] [-Incremental] [-AppearanceFontPath ] [-AppearanceFontFamilyName ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -161,6 +161,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/Set-OfficePdfPage.md b/Docs/Set-OfficePdfPage.md
index 2d483457..ade41044 100644
--- a/Docs/Set-OfficePdfPage.md
+++ b/Docs/Set-OfficePdfPage.md
@@ -11,7 +11,7 @@ Sets page-level PDF properties and writes a new PDF.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePdfPage -Path  -OutputPath  [-PageRange ] [-Rotation ] [-BoxName ] [-Left ] [-Bottom ] [-Right ] [-Top ] [-PageSize ] [-Width ] [-Height ] [-Landscape] [-ResizeMode ] [-ResizeMargin ] [-Password ] [-IgnorePermissionRestrictions] [-WhatIf] [-Confirm] []
+Set-OfficePdfPage -Path  -OutputPath  [-PageRange ] [-Rotation ] [-BoxName ] [-Left ] [-Bottom ] [-Right ] [-Top ] [-PageSize ] [-Width ] [-Height ] [-Landscape] [-ResizeMode ] [-ResizeMargin ] [-Password ] [-IgnorePermissionRestrictions] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -176,6 +176,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Password
 Password used to authenticate an encrypted PDF.
 
diff --git a/Docs/Set-OfficePdfSignature.md b/Docs/Set-OfficePdfSignature.md
index f010f570..016243d7 100644
--- a/Docs/Set-OfficePdfSignature.md
+++ b/Docs/Set-OfficePdfSignature.md
@@ -11,7 +11,7 @@ Injects externally produced CMS, CAdES, or timestamp signature bytes into a prep
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePdfSignature [-Path]  [-SignaturePath]  [-OutputPath]  [-Password ] [-IgnorePermissionRestrictions] [-PassThruReport] [-WhatIf] [-Confirm] []
+Set-OfficePdfSignature [-Path]  [-SignaturePath]  [-OutputPath]  [-Password ] [-IgnorePermissionRestrictions] [-PassThruReport] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -61,6 +61,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -PassThruReport
 Return a signature validation report for the written PDF instead of only the output file.
 
diff --git a/Docs/Set-OfficePowerPointBackground.md b/Docs/Set-OfficePowerPointBackground.md
index 01fdb6b1..5c39b26f 100644
--- a/Docs/Set-OfficePowerPointBackground.md
+++ b/Docs/Set-OfficePowerPointBackground.md
@@ -11,17 +11,17 @@ Sets the slide background color or image.
 ## SYNTAX
 ### Color (Default)
 ```powershell
-Set-OfficePowerPointBackground [-Color]  [-Slide ] []
+Set-OfficePowerPointBackground [-Color]  [-Slide ] [-PassThru] []
 ```
 
 ### Image
 ```powershell
-Set-OfficePowerPointBackground [-ImagePath]  [-Slide ] []
+Set-OfficePowerPointBackground [-ImagePath]  [-Slide ] [-PassThru] []
 ```
 
 ### Clear
 ```powershell
-Set-OfficePowerPointBackground -Clear [-Slide ] []
+Set-OfficePowerPointBackground -Clear [-Slide ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -93,6 +93,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Color, Image, Clear
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Slide
 Slide to update (optional inside a slide DSL scope).
 
diff --git a/Docs/Set-OfficePowerPointNotes.md b/Docs/Set-OfficePowerPointNotes.md
index 4215a9a5..f275b397 100644
--- a/Docs/Set-OfficePowerPointNotes.md
+++ b/Docs/Set-OfficePowerPointNotes.md
@@ -11,7 +11,7 @@ Sets speaker notes for a PowerPoint slide.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePowerPointNotes [-Text]  [-Slide ] []
+Set-OfficePowerPointNotes [-Text]  [-Slide ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -22,7 +22,7 @@ Sets speaker notes for a PowerPoint slide.
 ### EXAMPLE 1
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointNotes.pptx {
-    $slide = Add-OfficePowerPointSlide -Layout 1
+    $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
     Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Executive summary'
     Set-OfficePowerPointNotes -Slide $slide -Text 'Keep this slide under five minutes and focus on decisions.'
 }
@@ -32,6 +32,22 @@ Writes speaker notes to a generated slide.
 
 ## PARAMETERS
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Slide
 Slide whose notes should be updated (optional inside DSL).
 
diff --git a/Docs/Set-OfficePowerPointPlaceholderText.md b/Docs/Set-OfficePowerPointPlaceholderText.md
index a8a454b3..bc850a49 100644
--- a/Docs/Set-OfficePowerPointPlaceholderText.md
+++ b/Docs/Set-OfficePowerPointPlaceholderText.md
@@ -22,7 +22,7 @@ Sets text in a slide placeholder.
 ### EXAMPLE 1
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointPlaceholderText.pptx {
-    $slide = Add-OfficePowerPointSlide -Layout 1
+    $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
     Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Agenda'
     Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Body -Text 'Review signals and decisions' -IgnoreMissing
 }
diff --git a/Docs/Set-OfficePowerPointSlideLayout.md b/Docs/Set-OfficePowerPointSlideLayout.md
index 07dc1bd0..c2935897 100644
--- a/Docs/Set-OfficePowerPointSlideLayout.md
+++ b/Docs/Set-OfficePowerPointSlideLayout.md
@@ -11,17 +11,17 @@ Changes the layout used by a slide.
 ## SYNTAX
 ### Index (Default)
 ```powershell
-Set-OfficePowerPointSlideLayout -Layout  [-Slide ] [-Master ] []
+Set-OfficePowerPointSlideLayout -Layout  [-Slide ] [-Master ] [-PassThru] []
 ```
 
 ### Name
 ```powershell
-Set-OfficePowerPointSlideLayout -LayoutName  [-Slide ] [-Master ] [-CaseSensitive] []
+Set-OfficePowerPointSlideLayout -LayoutName  [-Slide ] [-Master ] [-CaseSensitive] [-PassThru] []
 ```
 
 ### Type
 ```powershell
-Set-OfficePowerPointSlideLayout -LayoutType  [-Slide ] [-Master ] []
+Set-OfficePowerPointSlideLayout -LayoutType  [-Slide ] [-Master ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -118,6 +118,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Index, Name, Type
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Slide
 Slide to update (optional inside a slide DSL scope).
 
diff --git a/Docs/Set-OfficePowerPointSlideSize.md b/Docs/Set-OfficePowerPointSlideSize.md
index b9fe955e..8958c5e0 100644
--- a/Docs/Set-OfficePowerPointSlideSize.md
+++ b/Docs/Set-OfficePowerPointSlideSize.md
@@ -11,27 +11,27 @@ Sets the slide size for a PowerPoint presentation.
 ## SYNTAX
 ### Preset (Default)
 ```powershell
-Set-OfficePowerPointSlideSize -Preset  [-Presentation ] [-Portrait] []
+Set-OfficePowerPointSlideSize -Preset  [-Presentation ] [-Portrait] [-PassThru] []
 ```
 
 ### Centimeters
 ```powershell
-Set-OfficePowerPointSlideSize -WidthCm  -HeightCm  [-Presentation ] []
+Set-OfficePowerPointSlideSize -WidthCm  -HeightCm  [-Presentation ] [-PassThru] []
 ```
 
 ### Inches
 ```powershell
-Set-OfficePowerPointSlideSize -WidthInches  -HeightInches  [-Presentation ] []
+Set-OfficePowerPointSlideSize -WidthInches  -HeightInches  [-Presentation ] [-PassThru] []
 ```
 
 ### Points
 ```powershell
-Set-OfficePowerPointSlideSize -WidthPoints  -HeightPoints  [-Presentation ] []
+Set-OfficePowerPointSlideSize -WidthPoints  -HeightPoints  [-Presentation ] [-PassThru] []
 ```
 
 ### Emus
 ```powershell
-Set-OfficePowerPointSlideSize -WidthEmus  -HeightEmus  [-Presentation ] []
+Set-OfficePowerPointSlideSize -WidthEmus  -HeightEmus  [-Presentation ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -43,7 +43,7 @@ Supports common presets as well as explicit width and height in centimeters, inc
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointWidescreen.pptx {
     Set-OfficePowerPointSlideSize -Preset Screen16x9
-    Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck'
+    Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck'
 }
 ```
 
@@ -51,9 +51,10 @@ Applies the 16:9 widescreen preset before adding slides.
 
 ### EXAMPLE 2
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointCustomSize.pptx
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCustomSize.pptx -NoSave
 Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 25.4 -HeightCm 14.0
-Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Custom size'
+Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Custom size'
+$ppt | Close-OfficePowerPoint -Save
 ```
 
 Sets the presentation slide size to a custom 25.4 x 14.0 cm layout.
@@ -124,6 +125,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Preset, Centimeters, Inches, Points, Emus
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Portrait
 Apply the preset in portrait orientation.
 
diff --git a/Docs/Set-OfficePowerPointSlideTitle.md b/Docs/Set-OfficePowerPointSlideTitle.md
index 9b6671b4..3729420f 100644
--- a/Docs/Set-OfficePowerPointSlideTitle.md
+++ b/Docs/Set-OfficePowerPointSlideTitle.md
@@ -11,7 +11,7 @@ Sets the text of the title placeholder on a slide.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePowerPointSlideTitle -Title  [-Slide ] []
+Set-OfficePowerPointSlideTitle -Title  [-Slide ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -28,6 +28,22 @@ Updates the first slide’s title.
 
 ## PARAMETERS
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Slide
 Slide whose title should change (optional inside DSL).
 
diff --git a/Docs/Set-OfficePowerPointSlideTransition.md b/Docs/Set-OfficePowerPointSlideTransition.md
index 71591fd2..1d77be0a 100644
--- a/Docs/Set-OfficePowerPointSlideTransition.md
+++ b/Docs/Set-OfficePowerPointSlideTransition.md
@@ -11,7 +11,7 @@ Sets the transition used when advancing to a slide.
 ## SYNTAX
 ### __AllParameterSets
 ```powershell
-Set-OfficePowerPointSlideTransition -Transition  [-Slide ] []
+Set-OfficePowerPointSlideTransition -Transition  [-Slide ] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -28,6 +28,22 @@ Updates the first slide so it uses the Fade transition.
 
 ## PARAMETERS
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: __AllParameterSets
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Slide
 Slide to update (optional inside a slide DSL scope).
 
diff --git a/Docs/Set-OfficePowerPointThemeFonts.md b/Docs/Set-OfficePowerPointThemeFonts.md
index b2d8dadf..66145d23 100644
--- a/Docs/Set-OfficePowerPointThemeFonts.md
+++ b/Docs/Set-OfficePowerPointThemeFonts.md
@@ -23,7 +23,7 @@ Sets PowerPoint theme fonts.
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeFonts.pptx {
     Set-OfficePowerPointThemeFonts -MajorLatin 'Aptos Display' -MinorLatin 'Aptos' -AllMasters
-    Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Theme fonts'
+    Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Theme fonts'
 }
 ```
 
diff --git a/Docs/Set-OfficePowerPointThemeName.md b/Docs/Set-OfficePowerPointThemeName.md
index 0276eba3..a36104c8 100644
--- a/Docs/Set-OfficePowerPointThemeName.md
+++ b/Docs/Set-OfficePowerPointThemeName.md
@@ -23,7 +23,7 @@ Sets the PowerPoint theme name.
 ```powershell
 PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeName.pptx {
     Set-OfficePowerPointThemeName -Name 'Service Brief' -AllMasters
-    Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Named theme'
+    Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Named theme'
 }
 ```
 
diff --git a/Docs/Test-OfficeExcelAccessibility.md b/Docs/Test-OfficeExcelAccessibility.md
index f3b97f16..027ce967 100644
--- a/Docs/Test-OfficeExcelAccessibility.md
+++ b/Docs/Test-OfficeExcelAccessibility.md
@@ -11,7 +11,7 @@ Checks workbook accessibility and compliance signals.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Test-OfficeExcelAccessibility [-InputPath]  [-Quiet] []
+Test-OfficeExcelAccessibility [-Path]  [-Quiet] []
 ```
 
 ### Document
@@ -52,13 +52,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Test-OfficeExcelTemplateBinding.md b/Docs/Test-OfficeExcelTemplateBinding.md
index 972178ef..9aaf75d1 100644
--- a/Docs/Test-OfficeExcelTemplateBinding.md
+++ b/Docs/Test-OfficeExcelTemplateBinding.md
@@ -11,7 +11,7 @@ Validates Excel template markers against supplied bindings before applying a tem
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Test-OfficeExcelTemplateBinding [-InputPath]  -Binding  [-Quiet] [-AsMarkdown] [-ThrowOnMissing] []
+Test-OfficeExcelTemplateBinding [-Path]  -Binding  [-Quiet] [-AsMarkdown] [-ThrowOnMissing] []
 ```
 
 ### Document
@@ -87,13 +87,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Test-OfficeExcelWorkbook.md b/Docs/Test-OfficeExcelWorkbook.md
index a06b8d54..75ec68de 100644
--- a/Docs/Test-OfficeExcelWorkbook.md
+++ b/Docs/Test-OfficeExcelWorkbook.md
@@ -11,7 +11,7 @@ Runs OfficeIMO workbook diagnostics and optional safe repairs.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Test-OfficeExcelWorkbook [-InputPath]  [-RepairDefinedNames] [-SkipOpenXmlValidation] [-Quiet] [-WhatIf] [-Confirm] []
+Test-OfficeExcelWorkbook [-Path]  [-RepairDefinedNames] [-SkipOpenXmlValidation] [-Quiet] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -54,13 +54,13 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
+### -Path
 Workbook path.
 
 ```yaml
 Type: String
 Parameter Sets: Path
-Aliases: Path, FilePath
+Aliases: InputPath, FilePath
 Possible values:
 
 Required: True
diff --git a/Docs/Unprotect-OfficeExcelWorkbook.md b/Docs/Unprotect-OfficeExcelWorkbook.md
index 485becee..f9f90806 100644
--- a/Docs/Unprotect-OfficeExcelWorkbook.md
+++ b/Docs/Unprotect-OfficeExcelWorkbook.md
@@ -16,7 +16,7 @@ Unprotect-OfficeExcelWorkbook [-PassThru] [-WhatIf] [-Confirm] [ [-PassThru] [-WhatIf] [-Confirm] []
+Unprotect-OfficeExcelWorkbook [-Path]  [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -56,33 +56,33 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -PassThru
+Emit the workbook after removing protection.
 
 ```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Type: SwitchParameter
+Parameter Sets: Context, Path, Document
+Aliases: None
 Possible values:
 
-Required: True
-Position: 0
+Required: False
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -PassThru
-Emit the workbook after removing protection.
+### -Path
+Workbook path to update.
 
 ```yaml
-Type: SwitchParameter
-Parameter Sets: Context, Path, Document
-Aliases: None
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
 Possible values:
 
-Required: False
-Position: named
+Required: True
+Position: 0
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
diff --git a/Docs/Update-OfficeExcelComment.md b/Docs/Update-OfficeExcelComment.md
index 689617a2..80da0af1 100644
--- a/Docs/Update-OfficeExcelComment.md
+++ b/Docs/Update-OfficeExcelComment.md
@@ -16,7 +16,7 @@ Update-OfficeExcelComment [-Sheet ] [-SheetIndex ] [-Address  [-Sheet ] [-SheetIndex ] [-Address ] [-Range ] [-MatchAuthor ] [-TextContains ] [-All] [-Text ] [-Run ] [-Author ] [-Initials ] [-PassThru] [-WhatIf] [-Confirm] []
+Update-OfficeExcelComment [-Path]  [-Sheet ] [-SheetIndex ] [-Address ] [-Range ] [-MatchAuthor ] [-TextContains ] [-All] [-Text ] [-Run ] [-Author ] [-Initials ] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
@@ -120,22 +120,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
-
-```yaml
-Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
-Possible values:
-
-Required: True
-Position: 0
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### -MatchAuthor
 Existing comment author to match, ignoring case.
 
@@ -168,6 +152,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Range
 A1 cell or range to match.
 
diff --git a/Docs/Update-OfficeExcelText.md b/Docs/Update-OfficeExcelText.md
index e0c17456..6c66df8c 100644
--- a/Docs/Update-OfficeExcelText.md
+++ b/Docs/Update-OfficeExcelText.md
@@ -11,12 +11,12 @@ Replaces text in worksheet values.
 ## SYNTAX
 ### Path (Default)
 ```powershell
-Update-OfficeExcelText [-InputPath]  -OldValue  -NewValue  [-Sheet ] [-SheetIndex ] [-Range ] [-CaseSensitive] [-Regex] [-Show] [-WhatIf] [-Confirm] []
+Update-OfficeExcelText [-Path]  -OldValue  -NewValue  [-Sheet ] [-SheetIndex ] [-Range ] [-CaseSensitive] [-Regex] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Update-OfficeExcelText -Document  -OldValue  -NewValue  [-Sheet ] [-SheetIndex ] [-Range ] [-CaseSensitive] [-Regex] [-WhatIf] [-Confirm] []
+Update-OfficeExcelText -Document  -OldValue  -NewValue  [-Sheet ] [-SheetIndex ] [-Range ] [-CaseSensitive] [-Regex] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -26,7 +26,7 @@ Replaces text in worksheet values.
 
 ### EXAMPLE 1
 ```powershell
-PS> $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready
+PS> $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready -PassThru
 [pscustomobject]@{
     Path = '.\Report.xlsx'
     Replacements = $count
@@ -69,24 +69,24 @@ Accept pipeline input: True (ByValue)
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Workbook path to update.
+### -NewValue
+Replacement text.
 
 ```yaml
 Type: String
-Parameter Sets: Path
-Aliases: Path, FilePath
+Parameter Sets: Path, Document
+Aliases: None
 Possible values:
 
 Required: True
-Position: 0
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -NewValue
-Replacement text.
+### -OldValue
+Text or pattern to replace.
 
 ```yaml
 Type: String
@@ -101,22 +101,54 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -OldValue
-Text or pattern to replace.
+### -Open
+Open the file after saving when using -Path.
 
 ```yaml
-Type: String
+Type: SwitchParameter
+Parameter Sets: Path
+Aliases: Show
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
 Parameter Sets: Path, Document
 Aliases: None
 Possible values:
 
-Required: True
+Required: False
 Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Workbook path to update.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Range
 A1 range to update. Defaults to each selected worksheet's used range.
 
@@ -181,22 +213,6 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the file after saving when using -Path.
-
-```yaml
-Type: SwitchParameter
-Parameter Sets: Path
-Aliases: None
-Possible values:
-
-Required: False
-Position: named
-Default value: None
-Accept pipeline input: False
-Accept wildcard characters: False
-```
-
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Docs/Update-OfficePowerPointText.md b/Docs/Update-OfficePowerPointText.md
index be8aefea..c7a42069 100644
--- a/Docs/Update-OfficePowerPointText.md
+++ b/Docs/Update-OfficePowerPointText.md
@@ -11,17 +11,17 @@ Replaces text in a PowerPoint slide or presentation.
 ## SYNTAX
 ### Auto (Default)
 ```powershell
-Update-OfficePowerPointText -OldValue  -NewValue  [-IncludeTables ] [-IncludeNotes] []
+Update-OfficePowerPointText -OldValue  -NewValue  [-IncludeTables ] [-IncludeNotes] [-PassThru] []
 ```
 
 ### Presentation
 ```powershell
-Update-OfficePowerPointText -OldValue  -NewValue  [-Presentation ] [-IncludeTables ] [-IncludeNotes] []
+Update-OfficePowerPointText -OldValue  -NewValue  [-Presentation ] [-IncludeTables ] [-IncludeNotes] [-PassThru] []
 ```
 
 ### Slide
 ```powershell
-Update-OfficePowerPointText -OldValue  -NewValue  [-Slide ] [-IncludeTables ] [-IncludeNotes] []
+Update-OfficePowerPointText -OldValue  -NewValue  [-Slide ] [-IncludeTables ] [-IncludeNotes] [-PassThru] []
 ```
 
 ## DESCRIPTION
@@ -31,11 +31,12 @@ Can replace text in text boxes, tables, and optionally notes using the OfficeIMO
 
 ### EXAMPLE 1
 ```powershell
-PS> $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointUpdateText.pptx
-$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary' | Out-Null
-Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.' | Out-Null
-Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes
+PS> $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointUpdateText.pptx -NoSave
+$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary'
+Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.'
+$count = Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes -PassThru
+$ppt | Close-OfficePowerPoint -Save
 ```
 
 Replaces matching text throughout the presentation and notes, returning the replacement count.
@@ -106,6 +107,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -PassThru
+Emit the object created or changed by the command.
+
+```yaml
+Type: SwitchParameter
+Parameter Sets: Auto, Presentation, Slide
+Aliases: None
+Possible values:
+
+Required: False
+Position: named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### -Presentation
 Presentation to update.
 
diff --git a/Docs/Update-OfficeWordText.md b/Docs/Update-OfficeWordText.md
index 54618c8d..e088c9b1 100644
--- a/Docs/Update-OfficeWordText.md
+++ b/Docs/Update-OfficeWordText.md
@@ -11,17 +11,17 @@ Replaces text in a Word document.
 ## SYNTAX
 ### Auto (Default)
 ```powershell
-Update-OfficeWordText -OldValue  -NewValue  [-CaseSensitive] [-IncludeHyperlinkText] [-IncludeHyperlinkUri] [-IncludeHyperlinkAnchor] [-IncludeHyperlinkTooltip] [-WhatIf] [-Confirm] []
+Update-OfficeWordText -OldValue  -NewValue  [-CaseSensitive] [-IncludeHyperlinkText] [-IncludeHyperlinkUri] [-IncludeHyperlinkAnchor] [-IncludeHyperlinkTooltip] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Document
 ```powershell
-Update-OfficeWordText -OldValue  -NewValue  [-Document ] [-CaseSensitive] [-IncludeHyperlinkText] [-IncludeHyperlinkUri] [-IncludeHyperlinkAnchor] [-IncludeHyperlinkTooltip] [-WhatIf] [-Confirm] []
+Update-OfficeWordText -OldValue  -NewValue  [-Document ] [-CaseSensitive] [-IncludeHyperlinkText] [-IncludeHyperlinkUri] [-IncludeHyperlinkAnchor] [-IncludeHyperlinkTooltip] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ### Path
 ```powershell
-Update-OfficeWordText [-InputPath]  -OldValue  -NewValue  [-CaseSensitive] [-IncludeHyperlinkText] [-IncludeHyperlinkUri] [-IncludeHyperlinkAnchor] [-IncludeHyperlinkTooltip] [-Show] [-WhatIf] [-Confirm] []
+Update-OfficeWordText [-Path]  -OldValue  -NewValue  [-CaseSensitive] [-IncludeHyperlinkText] [-IncludeHyperlinkUri] [-IncludeHyperlinkAnchor] [-IncludeHyperlinkTooltip] [-Open] [-PassThru] [-WhatIf] [-Confirm] []
 ```
 
 ## DESCRIPTION
@@ -31,7 +31,7 @@ Supports direct document objects, file paths, and the active DSL document. Hyper
 
 ### EXAMPLE 1
 ```powershell
-PS> $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25'
+PS> $count = $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -PassThru
 ```
 
 Updates matching text in the loaded document and returns the number of replacements.
@@ -141,24 +141,24 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -InputPath
-Path to the .docx file to update in place.
+### -NewValue
+Replacement text.
 
 ```yaml
 Type: String
-Parameter Sets: Path
-Aliases: FilePath, Path
+Parameter Sets: Auto, Document, Path
+Aliases: None
 Possible values:
 
 Required: True
-Position: 0
+Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -NewValue
-Replacement text.
+### -OldValue
+Text to find.
 
 ```yaml
 Type: String
@@ -173,28 +173,28 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -OldValue
-Text to find.
+### -Open
+Open the file after saving when using -Path.
 
 ```yaml
-Type: String
-Parameter Sets: Auto, Document, Path
-Aliases: None
+Type: SwitchParameter
+Parameter Sets: Path
+Aliases: Show
 Possible values:
 
-Required: True
+Required: False
 Position: named
 Default value: None
 Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
-### -Show
-Open the file after saving when using -Path.
+### -PassThru
+Emit the object created or changed by the command.
 
 ```yaml
 Type: SwitchParameter
-Parameter Sets: Path
+Parameter Sets: Auto, Document, Path
 Aliases: None
 Possible values:
 
@@ -205,6 +205,22 @@ Accept pipeline input: False
 Accept wildcard characters: False
 ```
 
+### -Path
+Path to the .docx file to update in place.
+
+```yaml
+Type: String
+Parameter Sets: Path
+Aliases: InputPath, FilePath
+Possible values:
+
+Required: True
+Position: 0
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
 ### CommonParameters
 This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
 
diff --git a/Examples/Csv/Example-CsvAdvanced.ps1 b/Examples/Csv/Example-CsvAdvanced.ps1
index fec653ec..c9830c15 100644
--- a/Examples/Csv/Example-CsvAdvanced.ps1
+++ b/Examples/Csv/Example-CsvAdvanced.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Csv-Advanced.csv'
 $rows = @(
     [PSCustomObject]@{ Name = 'Alpha'; Score = 92; Active = $true }
diff --git a/Examples/Csv/Example-CsvBasic.ps1 b/Examples/Csv/Example-CsvBasic.ps1
index 1256b196..90af1840 100644
--- a/Examples/Csv/Example-CsvBasic.ps1
+++ b/Examples/Csv/Example-CsvBasic.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Data.csv'
 $rows = @(
     [PSCustomObject]@{ Name = 'Alpha'; Value = 1 }
diff --git a/Examples/Csv/Example-CsvDbaClientXRoundTrip.ps1 b/Examples/Csv/Example-CsvDbaClientXRoundTrip.ps1
index 0c5d87e2..1248caef 100644
--- a/Examples/Csv/Example-CsvDbaClientXRoundTrip.ps1
+++ b/Examples/Csv/Example-CsvDbaClientXRoundTrip.ps1
@@ -72,7 +72,7 @@ try {
     $rows |
         Export-OfficeCsv `
             -Path $Path `
-            -ErrorAction Stop | Out-Null
+            -ErrorAction Stop
 
     $table = Import-OfficeCsv `
         -Path $Path `
diff --git a/Examples/ExamplePowerPoint01-AddSlides.ps1 b/Examples/ExamplePowerPoint01-AddSlides.ps1
index 06220d21..4e37d141 100644
--- a/Examples/ExamplePowerPoint01-AddSlides.ps1
+++ b/Examples/ExamplePowerPoint01-AddSlides.ps1
@@ -1,18 +1,17 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'ExamplePowerPoint1.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 
-$slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Status Update' | Out-Null
-Add-OfficePowerPointTextBox -Slide $slide1 -Text 'Generated with PSWriteOffice' -X 80 -Y 150 -Width 320 -Height 40 | Out-Null
-Add-OfficePowerPointShape -Slide $slide1 -ShapeType Rectangle -X 80 -Y 210 -Width 320 -Height 120 -FillColor '#DDEEFF' -OutlineColor '#4472C4' -OutlineWidth 1 | Out-Null
+$slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Status Update'
+Add-OfficePowerPointTextBox -Slide $slide1 -Text 'Generated with PSWriteOffice' -X 80 -Y 150 -Width 320 -Height 40
+Add-OfficePowerPointShape -Slide $slide1 -ShapeType Rectangle -X 80 -Y 210 -Width 320 -Height 120 -FillColor '#DDEEFF' -OutlineColor '#4472C4' -OutlineWidth 1
 
-$slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Next Steps' | Out-Null
-Add-OfficePowerPointTextBox -Slide $slide2 -Text '1. Review numbers  2. Plan Q1  3. Ship' -X 80 -Y 150 -Width 360 -Height 80 | Out-Null
+$slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Next Steps'
+Add-OfficePowerPointTextBox -Slide $slide2 -Text '1. Review numbers  2. Plan Q1  3. Ship' -X 80 -Y 150 -Width 360 -Height 80
 
 Save-OfficePowerPoint -Presentation $presentation
 Write-Host "Presentation saved to $path"
diff --git a/Examples/ExamplePowerPoint02-Basic.ps1 b/Examples/ExamplePowerPoint02-Basic.ps1
index 1e3e3d6b..48b400e6 100644
--- a/Examples/ExamplePowerPoint02-Basic.ps1
+++ b/Examples/ExamplePowerPoint02-Basic.ps1
@@ -1,11 +1,10 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'BasicExample.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 
-Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null
+Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
 Save-OfficePowerPoint -Presentation $presentation
 
 Write-Host "Presentation saved to $path"
diff --git a/Examples/ExamplePowerPoint04-Text.ps1 b/Examples/ExamplePowerPoint04-Text.ps1
index c0596444..335bf2bb 100644
--- a/Examples/ExamplePowerPoint04-Text.ps1
+++ b/Examples/ExamplePowerPoint04-Text.ps1
@@ -1,13 +1,12 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'ExamplePowerPoint4.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 
-$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Quarterly Report' | Out-Null
-Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated with PSWriteOffice' -X 90 -Y 160 -Width 320 -Height 50 | Out-Null
+$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Quarterly Report'
+Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated with PSWriteOffice' -X 90 -Y 160 -Width 320 -Height 50
 
 Save-OfficePowerPoint -Presentation $presentation
 Write-Host "Presentation saved to $path"
diff --git a/Examples/ExamplePowerPoint05-Load.ps1 b/Examples/ExamplePowerPoint05-Load.ps1
index 195a15bb..cce0a1dc 100644
--- a/Examples/ExamplePowerPoint05-Load.ps1
+++ b/Examples/ExamplePowerPoint05-Load.ps1
@@ -1,11 +1,10 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'LoadExample.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
-Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null
+$presentation = New-OfficePowerPoint -Path $path -NoSave
+Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
 Save-OfficePowerPoint -Presentation $presentation
 
-$loaded = Get-OfficePowerPoint -FilePath $path
+$loaded = Get-OfficePowerPoint -Path $path
 Write-Host "Loaded presentation with $($loaded.Slides.Count) slide(s)."
diff --git a/Examples/ExamplePowerPoint06-RemoveSlide.ps1 b/Examples/ExamplePowerPoint06-RemoveSlide.ps1
index f4c485f6..d27c785b 100644
--- a/Examples/ExamplePowerPoint06-RemoveSlide.ps1
+++ b/Examples/ExamplePowerPoint06-RemoveSlide.ps1
@@ -1,11 +1,10 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'ExamplePowerPoint6.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
-Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null
-Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null
+$presentation = New-OfficePowerPoint -Path $path -NoSave
+Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
+Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
 
 Remove-OfficePowerPointSlide -Presentation $presentation -Index 0
 Save-OfficePowerPoint -Presentation $presentation
diff --git a/Examples/ExamplePowerPoint07-WhatIf.ps1 b/Examples/ExamplePowerPoint07-WhatIf.ps1
index 08fae844..dd100127 100644
--- a/Examples/ExamplePowerPoint07-WhatIf.ps1
+++ b/Examples/ExamplePowerPoint07-WhatIf.ps1
@@ -1,10 +1,9 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'WhatIfExample.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
-Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null
+$presentation = New-OfficePowerPoint -Path $path -NoSave
+Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
 
 Save-OfficePowerPoint -Presentation $presentation -WhatIf
 Write-Host "WhatIf completed for $path"
diff --git a/Examples/ExamplePowerPoint08-TablesAndShapes.ps1 b/Examples/ExamplePowerPoint08-TablesAndShapes.ps1
index 9b81e93c..6873e5da 100644
--- a/Examples/ExamplePowerPoint08-TablesAndShapes.ps1
+++ b/Examples/ExamplePowerPoint08-TablesAndShapes.ps1
@@ -1,12 +1,11 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'ExamplePowerPoint8-TablesAndShapes.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 
-$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Tables & Shapes' | Out-Null
+$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Tables & Shapes'
 
 $data = @(
     [PSCustomObject]@{ Product = 'Alpha'; Qty = 12; Revenue = 1200 }
@@ -14,9 +13,9 @@ $data = @(
     [PSCustomObject]@{ Product = 'Gamma'; Qty = 20; Revenue = 1840 }
 )
 
-Add-OfficePowerPointTable -Slide $slide -Data $data -X 60 -Y 140 -Width 420 -Height 200 | Out-Null
-Add-OfficePowerPointShape -Slide $slide -ShapeType Ellipse -X 520 -Y 140 -Width 140 -Height 140 -FillColor '#FFE699' -OutlineColor '#C65911' -OutlineWidth 1 | Out-Null
-Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlights' -X 530 -Y 300 -Width 120 -Height 40 | Out-Null
+Add-OfficePowerPointTable -Slide $slide -Data $data -X 60 -Y 140 -Width 420 -Height 200
+Add-OfficePowerPointShape -Slide $slide -ShapeType Ellipse -X 520 -Y 140 -Width 140 -Height 140 -FillColor '#FFE699' -OutlineColor '#C65911' -OutlineWidth 1
+Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlights' -X 530 -Y 300 -Width 120 -Height 40
 
 Save-OfficePowerPoint -Presentation $presentation
 Write-Host "Presentation saved to $path"
diff --git a/Examples/ExamplePowerPoint09-Placeholders.ps1 b/Examples/ExamplePowerPoint09-Placeholders.ps1
index 3bd1dde2..e3f74069 100644
--- a/Examples/ExamplePowerPoint09-Placeholders.ps1
+++ b/Examples/ExamplePowerPoint09-Placeholders.ps1
@@ -1,9 +1,8 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'ExamplePowerPoint9-Placeholders.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 
 $layouts = Get-OfficePowerPointLayout -Presentation $presentation
 $layout = $layouts | Where-Object { $_.Type } | Select-Object -First 1
@@ -12,25 +11,25 @@ if (-not $layout) {
 }
 
 $slide = if ($layout.Type) {
-    Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layout.Type -Master $layout.MasterIndex
+    Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layout.Type -Master $layout.MasterIndex -PassThru
 } elseif ($layout.Name) {
-    Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layout.Name -Master $layout.MasterIndex
+    Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layout.Name -Master $layout.MasterIndex -PassThru
 } else {
-    Add-OfficePowerPointSlide -Presentation $presentation -Layout $layout.LayoutIndex -Master $layout.MasterIndex
+    Add-OfficePowerPointSlide -Presentation $presentation -Layout $layout.LayoutIndex -Master $layout.MasterIndex -PassThru
 }
 
-Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Status Update' | Out-Null
+Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Status Update'
 
 $layoutPlaceholders = Get-OfficePowerPointLayoutPlaceholder -Slide $slide
 $placeholder = $layoutPlaceholders | Where-Object { $_.PlaceholderType } | Select-Object -First 1
 if ($placeholder) {
     $placeholderType = $placeholder.PlaceholderType.ToString()
     Set-OfficePowerPointLayoutPlaceholderBounds -Presentation $presentation -Master $layout.MasterIndex -Layout $layout.LayoutIndex `
-        -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 60 -Top 140 -Width 520 -Height 240 | Out-Null
+        -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 60 -Top 140 -Width 520 -Height 240
     Set-OfficePowerPointLayoutPlaceholderTextMargins -Presentation $presentation -Master $layout.MasterIndex -Layout $layout.LayoutIndex `
-        -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 12 -Top 8 -Right 12 -Bottom 8 | Out-Null
+        -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 12 -Top 8 -Right 12 -Bottom 8
     Set-OfficePowerPointLayoutPlaceholderTextStyle -Presentation $presentation -Master $layout.MasterIndex -Layout $layout.LayoutIndex `
-        -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Style Body -FontSize 18 -Bold $true | Out-Null
+        -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Style Body -FontSize 18 -Bold $true
 }
 
 Save-OfficePowerPoint -Presentation $presentation
diff --git a/Examples/ExamplePowerPoint10-Dsl.ps1 b/Examples/ExamplePowerPoint10-Dsl.ps1
index 39b555ef..83b273c3 100644
--- a/Examples/ExamplePowerPoint10-Dsl.ps1
+++ b/Examples/ExamplePowerPoint10-Dsl.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'DslExample.pptx'
 $data = @(
     [pscustomobject]@{ Item = 'Alpha'; Qty = 10 }
diff --git a/Examples/ExamplePowerPoint11-InspectionDsl.ps1 b/Examples/ExamplePowerPoint11-InspectionDsl.ps1
index 25381697..5738608e 100644
--- a/Examples/ExamplePowerPoint11-InspectionDsl.ps1
+++ b/Examples/ExamplePowerPoint11-InspectionDsl.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'DslInspection.pptx'
 
 New-OfficePowerPoint -Path $path {
diff --git a/Examples/ExamplePowerPoint12-LayoutDsl.ps1 b/Examples/ExamplePowerPoint12-LayoutDsl.ps1
index 990f7326..4dcfe94a 100644
--- a/Examples/ExamplePowerPoint12-LayoutDsl.ps1
+++ b/Examples/ExamplePowerPoint12-LayoutDsl.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'LayoutDslExample.pptx'
 
 New-OfficePowerPoint -Path $path {
diff --git a/Examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1 b/Examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1
index ed34d4f7..eab9962b 100644
--- a/Examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1
+++ b/Examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot 'Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'LayoutPlaceholderAliases.pptx'
 
 New-OfficePowerPoint -Path $path {
diff --git a/Examples/Excel/Example-ExcelAdvanced.ps1 b/Examples/Excel/Example-ExcelAdvanced.ps1
index 1b4c5ec1..5cf9a798 100644
--- a/Examples/Excel/Example-ExcelAdvanced.ps1
+++ b/Examples/Excel/Example-ExcelAdvanced.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Example-ExcelAdvanced.xlsx'
 $data = @(
     [pscustomobject]@{ Region = 'North'; Quarter = 'Q1'; Sales = 1200; Status = 'New' }
@@ -29,7 +28,7 @@ New-OfficeExcel -Path $path {
         ExcelComment -Cell 'C2' -Text 'Review this value'
 
         if (Test-Path $imagePath) {
-            ExcelImage -Path $imagePath -Range 'I8:J12' -Name 'OfficeIMOLogo' -AltText 'OfficeIMO logo' | Out-Null
+            ExcelImage -Path $imagePath -Range 'I8:J12' -Name 'OfficeIMOLogo' -AltText 'OfficeIMO logo'
         }
     }
 
diff --git a/Examples/Excel/Example-ExcelAliasDsl.ps1 b/Examples/Excel/Example-ExcelAliasDsl.ps1
index 2216f650..196e2c8b 100644
--- a/Examples/Excel/Example-ExcelAliasDsl.ps1
+++ b/Examples/Excel/Example-ExcelAliasDsl.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $orders = @(
     [PSCustomObject]@{ Item = 'Router'; Qty = 15; Status = 'In Stock' }
     [PSCustomObject]@{ Item = 'Switch'; Qty = 4; Status = 'Low' }
@@ -18,6 +17,6 @@ New-OfficeExcel -Path $path {
 
         ExcelTable -Data $orders -TableName 'InventoryTable'
     }
-} -PassThru | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Example-ExcelBasic.ps1 b/Examples/Excel/Example-ExcelBasic.ps1
index f6a0398b..fed4ca8a 100644
--- a/Examples/Excel/Example-ExcelBasic.ps1
+++ b/Examples/Excel/Example-ExcelBasic.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $data = @(
     [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; YoY = 0.12 }
     [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; YoY = 0.22 }
@@ -15,6 +14,6 @@ New-OfficeExcel -Path $path {
         Add-OfficeExcelTable -Data $data -TableName 'Sales' -TableStyle 'TableStyleMedium9'
         Set-OfficeExcelColumn -Column 1 -AutoFit
     }
-} -PassThru | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Example-ExcelChartFormatting.ps1 b/Examples/Excel/Example-ExcelChartFormatting.ps1
index 39c633a2..e18cd28c 100644
--- a/Examples/Excel/Example-ExcelChartFormatting.ps1
+++ b/Examples/Excel/Example-ExcelChartFormatting.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-ChartFormatting.xlsx'
 $rows = @(
     [PSCustomObject]@{ Region = 'NA'; Revenue = 100 }
@@ -15,10 +14,10 @@ New-OfficeExcel -Path $path {
 
         $chart = Add-OfficeExcelChart -TableName 'Sales' -Row 6 -Column 1 -Type Pie -Title 'Revenue Mix' -PassThru
         $chart |
-            Set-OfficeExcelChartLegend -Position Right |
-            Set-OfficeExcelChartDataLabels -ShowValue $true -ShowPercent $true -Position OutsideEnd -NumberFormat '0.0%' -SourceLinked:$false |
-            Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 | Out-Null
+            Set-OfficeExcelChartLegend -Position Right -PassThru |
+            Set-OfficeExcelChartDataLabels -ShowValue $true -ShowPercent $true -Position OutsideEnd -NumberFormat '0.0%' -SourceLinked:$false -PassThru |
+            Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10
     }
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1 b/Examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1
index 77bb9f8e..100f4ef1 100644
--- a/Examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1
+++ b/Examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1
@@ -78,7 +78,7 @@ try {
             -AutoFit `
             -FreezeTopRow `
             -BoldTopRow `
-            -ErrorAction Stop | Out-Null
+            -ErrorAction Stop
 
     $table = Import-OfficeExcel `
         -Path $Path `
diff --git a/Examples/Excel/Example-ExcelHtmlReview.ps1 b/Examples/Excel/Example-ExcelHtmlReview.ps1
index ec255af8..a3aa6144 100644
--- a/Examples/Excel/Example-ExcelHtmlReview.ps1
+++ b/Examples/Excel/Example-ExcelHtmlReview.ps1
@@ -1,8 +1,7 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $workbookPath = Join-Path $documents 'Excel-HtmlReview.xlsx'
 $semanticHtmlPath = Join-Path $documents 'Excel-HtmlReview.semantic.html'
 $visualHtmlPath = Join-Path $documents 'Excel-HtmlReview.visual.html'
@@ -21,10 +20,10 @@ New-OfficeExcel -Path $workbookPath {
         Set-OfficeExcelCell -Cell 'E1' -Value 'Total incidents'
         Set-OfficeExcelColumn -Column 1, 2, 3, 4, 5 -AutoFit
     }
-} -PassThru | Out-Null
+}
 
-ConvertTo-OfficeExcelHtml -Path $workbookPath -OutputPath $semanticHtmlPath -Title 'Service Workbook Review' -PassThru | Out-Null
-ConvertTo-OfficeExcelHtml -Path $workbookPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Service Workbook Visual Review' -PassThru | Out-Null
+ConvertTo-OfficeExcelHtml -Path $workbookPath -OutputPath $semanticHtmlPath -Title 'Service Workbook Review'
+ConvertTo-OfficeExcelHtml -Path $workbookPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Service Workbook Visual Review'
 
 Write-Host "Workbook saved to $workbookPath"
 Write-Host "Semantic HTML saved to $semanticHtmlPath"
diff --git a/Examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1 b/Examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1
index 8ad5d00c..1c59561a 100644
--- a/Examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1
+++ b/Examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1
@@ -2,8 +2,7 @@ Import-Module PSParseHTML -ErrorAction Stop
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $outputDirectory = Join-Path $PSScriptRoot '..\Documents'
-New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null
-
+$null = New-Item -ItemType Directory -Path $outputDirectory -Force
 $htmlPath = Join-Path $outputDirectory 'HtmlTables.html'
 $excelPath = Join-Path $outputDirectory 'HtmlTables.xlsx'
 
diff --git a/Examples/Excel/Example-ExcelInternalLinks.ps1 b/Examples/Excel/Example-ExcelInternalLinks.ps1
index 943816c0..af630744 100644
--- a/Examples/Excel/Example-ExcelInternalLinks.ps1
+++ b/Examples/Excel/Example-ExcelInternalLinks.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-InternalLinks.xlsx'
 $rows = @(
     [PSCustomObject]@{ Sheet = 'Alpha'; Target = 'Alpha' }
@@ -24,6 +23,6 @@ New-OfficeExcel -Path $path {
     Add-OfficeExcelSheet -Name 'Beta' -Content {
         Set-OfficeExcelCell -Address 'A1' -Value 'Beta Home'
     }
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Example-ExcelLinksAndImages.ps1 b/Examples/Excel/Example-ExcelLinksAndImages.ps1
index 55729dee..1c36fe33 100644
--- a/Examples/Excel/Example-ExcelLinksAndImages.ps1
+++ b/Examples/Excel/Example-ExcelLinksAndImages.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-LinksAndImages.xlsx'
 
 New-OfficeExcel -Path $path {
@@ -13,6 +12,6 @@ New-OfficeExcel -Path $path {
         Set-OfficeExcelHostHyperlink -Address 'B2' -Url 'https://learn.microsoft.com/office/open-xml/'
         Add-OfficeExcelImageFromUrl -Address 'D2' -Url 'https://raw.githubusercontent.com/github/explore/main/topics/powershell/powershell.png' -WidthPixels 48 -HeightPixels 48
     }
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Example-ExcelModifyExistingTables.ps1 b/Examples/Excel/Example-ExcelModifyExistingTables.ps1
index 776d317d..c97e787c 100644
--- a/Examples/Excel/Example-ExcelModifyExistingTables.ps1
+++ b/Examples/Excel/Example-ExcelModifyExistingTables.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-ModifyExistingTables.xlsx'
 
 $initialRows = @(
@@ -16,7 +15,7 @@ New-OfficeExcel -Path $path {
     ExcelSheet 'Notes' {
         Set-OfficeExcelCell -Address A1 -Value 'This workbook is modified after it is created.'
     }
-} | Out-Null
+}
 
 # Second pass: append rows to the named table without rebuilding the workbook through the DSL.
 $workbook = Get-OfficeExcel -Path $path
@@ -26,8 +25,7 @@ try {
             Service = 'File Services'
             Status  = 'Ready'
             Owner   = 'Storage'
-        }) -PassThru |
-        Out-Null
+        }) -PassThru
 
     $moreRows = @(
         [PSCustomObject]@{ Service = 'Network'; Status = 'Investigating'; Owner = 'Platform' }
@@ -35,8 +33,7 @@ try {
     )
 
     $workbook |
-        Add-OfficeExcelTableRow -Sheet Readiness -TableName ServiceReadiness -InputObject $moreRows |
-        Out-Null
+        Add-OfficeExcelTableRow -Sheet Readiness -TableName ServiceReadiness -InputObject $moreRows
 } finally {
     Close-OfficeExcel -Document $workbook -Save
 }
diff --git a/Examples/Excel/Example-ExcelNavigationAndRanges.ps1 b/Examples/Excel/Example-ExcelNavigationAndRanges.ps1
index e1a51040..3936b71c 100644
--- a/Examples/Excel/Example-ExcelNavigationAndRanges.ps1
+++ b/Examples/Excel/Example-ExcelNavigationAndRanges.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-NavigationAndRanges.xlsx'
 $rows = @(
     [PSCustomObject]@{ Region = 'North America'; Revenue = 125000 }
@@ -19,7 +18,7 @@ New-OfficeExcel -Path $path {
         ExcelRow -Row 2 -Values 'Generated', (Get-Date -Format 'yyyy-MM-dd')
     }
     ExcelTableOfContents -IncludeNamedRanges
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
 Write-Host ''
diff --git a/Examples/Excel/Example-ExcelPictures.ps1 b/Examples/Excel/Example-ExcelPictures.ps1
index 128daeaa..34ba8dca 100644
--- a/Examples/Excel/Example-ExcelPictures.ps1
+++ b/Examples/Excel/Example-ExcelPictures.ps1
@@ -1,8 +1,7 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-Pictures.xlsx'
 $imagePath = Join-Path $PSScriptRoot '..\Word\Example-WordTableCells.fixture.png'
 
@@ -21,6 +20,6 @@ New-OfficeExcel -Path $path {
         ExcelColumn -ColumnName C -Width 18
         ExcelColumn -ColumnName E -Width 24
     }
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Example-ExcelReadObjects.ps1 b/Examples/Excel/Example-ExcelReadObjects.ps1
index 288969a3..39299927 100644
--- a/Examples/Excel/Example-ExcelReadObjects.ps1
+++ b/Examples/Excel/Example-ExcelReadObjects.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-ReadObjects.xlsx'
 $rows = @(
     [PSCustomObject]@{ Region = 'NA'; Revenue = 100 }
@@ -17,7 +16,7 @@ New-OfficeExcel -Path $path {
         Set-OfficeExcelHeaderFooter -HeaderCenter 'Demo' -FooterRight 'Page &P of &N'
         Invoke-OfficeExcelAutoFit -Columns
     }
-} | Out-Null
+}
 
 $data = Get-OfficeExcelData -Path $path -Sheet 'Data'
 $data | Format-Table
diff --git a/Examples/Excel/Example-ExcelTablesAndRanges.ps1 b/Examples/Excel/Example-ExcelTablesAndRanges.ps1
index 4b951392..81d233b9 100644
--- a/Examples/Excel/Example-ExcelTablesAndRanges.ps1
+++ b/Examples/Excel/Example-ExcelTablesAndRanges.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $data = @(
     [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; Owner = 'Ada' }
     [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; Owner = 'Linus' }
@@ -18,7 +17,7 @@ New-OfficeExcel -Path $path {
     ExcelSheet 'Notes' {
         ExcelCell -Address 'A1' -Value 'Generated by PSWriteOffice'
     }
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
 Write-Host 'Tables:'
diff --git a/Examples/Excel/Example-ExcelUrlLinks.ps1 b/Examples/Excel/Example-ExcelUrlLinks.ps1
index ce3cffe3..4f182c2d 100644
--- a/Examples/Excel/Example-ExcelUrlLinks.ps1
+++ b/Examples/Excel/Example-ExcelUrlLinks.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Excel-UrlLinks.xlsx'
 $rows = @(
     [PSCustomObject]@{ RFC = 'rfc7208'; Spec = 'rfc5321' }
@@ -18,6 +17,6 @@ New-OfficeExcel -Path $path {
         Set-OfficeExcelUrlLinksByHeader -Header 'RFC' -TableName 'LinksTable' -UrlScript { param($text) "https://datatracker.ietf.org/doc/html/$text" } -TitleScript { param($text) "Open $text" }
         Set-OfficeExcelUrlLinks -Range 'D2:D3' -UrlScript { param($text) "https://datatracker.ietf.org/doc/html/$text" }
     }
-} | Out-Null
+}
 
 Write-Host "Workbook saved to $path"
diff --git a/Examples/Excel/Recipe-Excel-CompareWorkbooks.ps1 b/Examples/Excel/Recipe-Excel-CompareWorkbooks.ps1
index e1e51d98..34fb89ef 100644
--- a/Examples/Excel/Recipe-Excel-CompareWorkbooks.ps1
+++ b/Examples/Excel/Recipe-Excel-CompareWorkbooks.ps1
@@ -15,4 +15,4 @@ ExcelNew -Path $candidate {
     }
 }
 
-Compare-OfficeExcelWorkbook -InputPath $baseline -DifferencePath $candidate
+Compare-OfficeExcelWorkbook -Path $baseline -DifferencePath $candidate
diff --git a/Examples/Excel/Recipe-Excel-ImportDelimited.ps1 b/Examples/Excel/Recipe-Excel-ImportDelimited.ps1
index bd60652c..e8208d10 100644
--- a/Examples/Excel/Recipe-Excel-ImportDelimited.ps1
+++ b/Examples/Excel/Recipe-Excel-ImportDelimited.ps1
@@ -8,7 +8,7 @@ ExcelNew -Path $workbook {
 }
 
 Import-OfficeExcelDelimitedText `
-    -InputPath $workbook `
+    -Path $workbook `
     -SourcePath $csv `
     -Delimiter ';' `
     -SheetName 'Sales'
diff --git a/Examples/Excel/Recipe-Excel-MergeWorkbooks.ps1 b/Examples/Excel/Recipe-Excel-MergeWorkbooks.ps1
index 2a3e5326..a02275df 100644
--- a/Examples/Excel/Recipe-Excel-MergeWorkbooks.ps1
+++ b/Examples/Excel/Recipe-Excel-MergeWorkbooks.ps1
@@ -19,7 +19,7 @@ ExcelNew -Path $source {
 }
 
 Join-OfficeExcelWorkbook `
-    -InputPath $target `
+    -Path $target `
     -SourcePath $source `
     -SourceSheet 'North', 'South' `
     -SheetNamePrefix 'Region '
diff --git a/Examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1 b/Examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1
new file mode 100644
index 00000000..50661f8f
--- /dev/null
+++ b/Examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1
@@ -0,0 +1,34 @@
+param(
+    [string] $SmtpServer = 'smtp.example.com',
+    [string] $From = 'reports@example.com',
+    [string] $To = 'operations@example.com',
+    [string] $OutputPath = '.\Daily-Service-Report.pdf',
+    [switch] $Send
+)
+
+Import-Module PSWriteOffice -ErrorAction Stop
+Import-Module Mailozaurr -ErrorAction Stop
+
+$services = @(
+    [pscustomobject]@{ Service = 'Directory'; Status = 'Healthy'; Incidents = 0 }
+    [pscustomobject]@{ Service = 'Messaging'; Status = 'Attention'; Incidents = 2 }
+    [pscustomobject]@{ Service = 'Database'; Status = 'Healthy'; Incidents = 0 }
+)
+
+New-OfficePdf -Path $OutputPath -Content {
+    Add-OfficePdfHeading -Text 'Daily service report'
+    Add-OfficePdfParagraph -Text "Generated $((Get-Date).ToString('u'))"
+    Add-OfficePdfTable -InputObject $services
+}
+
+$mail = @{
+    From       = $From
+    To         = $To
+    Subject    = 'Daily service report'
+    Body       = 'The report generated by PSWriteOffice is attached.'
+    SmtpServer = $SmtpServer
+    Attachment = $OutputPath
+    WhatIf     = -not $Send
+}
+
+Send-EmailMessage @mail
diff --git a/Examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1 b/Examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1
new file mode 100644
index 00000000..eb9b335f
--- /dev/null
+++ b/Examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1
@@ -0,0 +1,48 @@
+param(
+    [string] $OutputDirectory = '.',
+    [string] $LogName = 'System',
+    [int] $MaxEvents = 200
+)
+
+Import-Module PSEventViewer -ErrorAction Stop
+Import-Module PSWriteOffice -ErrorAction Stop
+
+$events = @(Get-EVXEvent `
+    -LogName $LogName `
+    -Level 1, 2, 3 `
+    -TimePeriod Last24Hours `
+    -ReadMode Message `
+    -MaxEvents $MaxEvents)
+
+$rows = @($events | Select-Object TimeCreated, Id, ProviderName, LevelDisplayName, MachineName, Message)
+if ($rows.Count -eq 0) {
+    $rows = @([pscustomobject]@{
+        TimeCreated     = Get-Date
+        Id              = $null
+        ProviderName    = $null
+        LevelDisplayName = 'Information'
+        MachineName     = $env:COMPUTERNAME
+        Message         = "No warning or error events were returned from $LogName in the last 24 hours."
+    })
+}
+
+$excelPath = Join-Path $OutputDirectory 'Event-Report.xlsx'
+$wordPath = Join-Path $OutputDirectory 'Event-Report.docx'
+
+$rows | Export-OfficeExcel `
+    -Path $excelPath `
+    -WorksheetName 'Events' `
+    -TableName 'EventReport' `
+    -AutoFit `
+    -FreezeTopRow
+
+New-OfficeWord -Path $wordPath -Content {
+    Add-OfficeWordParagraph -Text "Event report: $LogName" -Style Heading1
+    Add-OfficeWordParagraph -Text "Warnings and errors returned: $($events.Count)"
+    Add-OfficeWordTable -InputObject $rows -Style GridTable4Accent1 -Layout AutoFitToWindow
+}
+
+[pscustomobject]@{
+    ExcelReport = Get-Item -LiteralPath $excelPath
+    WordReport  = Get-Item -LiteralPath $wordPath
+}
diff --git a/Examples/Markdown/Example-MarkdownAdvanced.ps1 b/Examples/Markdown/Example-MarkdownAdvanced.ps1
index f0d9a6a4..c595ca92 100644
--- a/Examples/Markdown/Example-MarkdownAdvanced.ps1
+++ b/Examples/Markdown/Example-MarkdownAdvanced.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Example-MarkdownAdvanced.md'
 $data = @(
     [pscustomobject]@{ Metric = 'Latency'; Value = '120ms' }
@@ -33,6 +32,6 @@ New-OfficeMarkdown -Path $path {
     MarkdownCode -Language 'powershell' -Content 'Get-Service | Select-Object -First 5'
     MarkdownHorizontalRule
     MarkdownQuote -Text 'Availability is a feature.'
-} -PassThru | Out-Null
+}
 
 Write-Host "Markdown saved to $path"
diff --git a/Examples/Markdown/Example-MarkdownDsl.ps1 b/Examples/Markdown/Example-MarkdownDsl.ps1
index 3c95a28d..d3de7f2f 100644
--- a/Examples/Markdown/Example-MarkdownDsl.ps1
+++ b/Examples/Markdown/Example-MarkdownDsl.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Example-MarkdownDsl.md'
 $data = @(
     [pscustomobject]@{ Name = 'Alpha'; Value = 1 }
@@ -16,6 +15,6 @@ New-OfficeMarkdown -Path $path {
     MarkdownCode -Language 'powershell' -Content 'Get-Date'
     MarkdownHorizontalRule
     MarkdownQuote -Text 'Ship fast, learn faster.'
-} -PassThru | Out-Null
+}
 
 Write-Host "Markdown saved to $path"
diff --git a/Examples/Markdown/Recipe-Markdown-InspectContent.ps1 b/Examples/Markdown/Recipe-Markdown-InspectContent.ps1
index 6dcf822b..443e7042 100644
--- a/Examples/Markdown/Recipe-Markdown-InspectContent.ps1
+++ b/Examples/Markdown/Recipe-Markdown-InspectContent.ps1
@@ -7,6 +7,6 @@ MarkdownNew -Path $path {
     MarkdownTable -InputObject @([pscustomobject]@{ Control = 'Backups'; Status = 'Ready' })
 }
 
-Get-OfficeMarkdownFrontMatter -InputPath $path
-Get-OfficeMarkdownHeading -InputPath $path
-Get-OfficeMarkdownTable -InputPath $path -AsObject
+Get-OfficeMarkdownFrontMatter -Path $path
+Get-OfficeMarkdownHeading -Path $path
+Get-OfficeMarkdownTable -Path $path -AsObject
diff --git a/Examples/Markdown/Recipe-Markdown-PublishHtml.ps1 b/Examples/Markdown/Recipe-Markdown-PublishHtml.ps1
index b5c0fc31..c373924f 100644
--- a/Examples/Markdown/Recipe-Markdown-PublishHtml.ps1
+++ b/Examples/Markdown/Recipe-Markdown-PublishHtml.ps1
@@ -7,7 +7,7 @@ MarkdownNew -Path $markdownPath {
 }
 
 ConvertTo-OfficeMarkdownHtml `
-    -InputPath $markdownPath `
+    -Path $markdownPath `
     -OutputPath $htmlPath `
     -DocumentMode `
     -Title 'Operations handbook' `
diff --git a/Examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1 b/Examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1
index 1b20c71a..8332c346 100644
--- a/Examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1
+++ b/Examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1
@@ -7,5 +7,5 @@ MarkdownNew -Path $markdownPath {
     MarkdownList -Items 'Prepare', 'Approve', 'Deploy'
 }
 
-ConvertFrom-OfficeWordMarkdown -FilePath $markdownPath -OutputPath $wordPath
-ConvertTo-OfficeWordMarkdown -FilePath $wordPath -OutputPath $roundTripPath
+ConvertFrom-OfficeWordMarkdown -Path $markdownPath -OutputPath $wordPath
+ConvertTo-OfficeWordMarkdown -Path $wordPath -OutputPath $roundTripPath
diff --git a/Examples/Pdf/Example-OfficePdfExports.ps1 b/Examples/Pdf/Example-OfficePdfExports.ps1
new file mode 100644
index 00000000..f4befcbe
--- /dev/null
+++ b/Examples/Pdf/Example-OfficePdfExports.ps1
@@ -0,0 +1,62 @@
+$ErrorActionPreference = 'Stop'
+
+Import-Module PSWriteOffice -ErrorAction Stop
+
+$documents = Join-Path $PSScriptRoot '..\Documents'
+$null = New-Item -Path $documents -ItemType Directory -Force
+$wordPath = Join-Path $documents 'Example-OfficePdfExport.docx'
+$wordPdf = Join-Path $documents 'Example-OfficePdfExport-Word.pdf'
+$excelPath = Join-Path $documents 'Example-OfficePdfExport.xlsx'
+$excelPdf = Join-Path $documents 'Example-OfficePdfExport-Excel.pdf'
+$markdownPath = Join-Path $documents 'Example-OfficePdfExport.md'
+$markdownPdf = Join-Path $documents 'Example-OfficePdfExport-Markdown.pdf'
+$powerPointPath = Join-Path $documents 'Example-OfficePdfExport.pptx'
+$powerPointPdf = Join-Path $documents 'Example-OfficePdfExport-PowerPoint.pdf'
+
+$rows = @(
+    [pscustomobject]@{ Name = 'Alpha'; Status = 'Ready'; Count = 12 }
+    [pscustomobject]@{ Name = 'Beta'; Status = 'Review'; Count = 7 }
+)
+
+New-OfficeWord -Path $wordPath {
+    WordParagraph -Text 'Word PDF export' -Style Heading1
+    WordParagraph 'Create the source document, then choose the output format explicitly.'
+    WordTable -InputObject $rows -Layout AutoFitToWindow
+}
+Export-OfficeDocumentPdf -InputPath $wordPath -Path $wordPdf
+
+New-OfficeExcel -Path $excelPath {
+    ExcelSheet -Name 'Summary' {
+        ExcelTable -Data $rows
+        ExcelAutoFit
+    }
+}
+Export-OfficeDocumentPdf -InputPath $excelPath -Path $excelPdf
+
+New-OfficeMarkdown -Path $markdownPath {
+    MarkdownHeading -Level 1 -Text 'Markdown PDF export'
+    MarkdownParagraph 'Markdown keeps the same authoring mindset with format-appropriate simplification.'
+    MarkdownTable -InputObject $rows
+}
+$markdownOptions = New-OfficeMarkdownPdfOptions `
+    -Title 'Markdown PDF export' `
+    -Author 'PSWriteOffice' `
+    -CreateOutlineFromHeadings
+Export-OfficeDocumentPdf `
+    -InputPath $markdownPath `
+    -Path $markdownPdf `
+    -MarkdownOptions $markdownOptions `
+    -PdfWarningVariable markdownWarnings `
+    -PdfConversionReportVariable markdownReport
+
+New-OfficePowerPoint -Path $powerPointPath {
+    PptSlide {
+        PptTitle -Title 'PowerPoint PDF export'
+        PptBullets -Bullets 'Create the deck', 'Export the PDF', 'Inspect generated output'
+    }
+}
+Export-OfficeDocumentPdf -InputPath $powerPointPath -Path $powerPointPdf
+
+Get-Item -LiteralPath $wordPdf, $excelPdf, $markdownPdf, $powerPointPdf |
+    Select-Object FullName, Length |
+    Format-Table -AutoSize
diff --git a/Examples/Pdf/Example-OfficePdfSidecars.ps1 b/Examples/Pdf/Example-OfficePdfSidecars.ps1
deleted file mode 100644
index 3cc8a7b5..00000000
--- a/Examples/Pdf/Example-OfficePdfSidecars.ps1
+++ /dev/null
@@ -1,50 +0,0 @@
-$ErrorActionPreference = 'Stop'
-
-Import-Module PSWriteOffice -ErrorAction Stop
-
-$documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
-$wordPath = Join-Path $documents 'Example-OfficePdfSidecar.docx'
-$wordPdf = Join-Path $documents 'Example-OfficePdfSidecar-Word.pdf'
-$excelPath = Join-Path $documents 'Example-OfficePdfSidecar.xlsx'
-$excelPdf = Join-Path $documents 'Example-OfficePdfSidecar-Excel.pdf'
-$markdownPath = Join-Path $documents 'Example-OfficePdfSidecar.md'
-$markdownPdf = Join-Path $documents 'Example-OfficePdfSidecar-Markdown.pdf'
-$powerPointPath = Join-Path $documents 'Example-OfficePdfSidecar.pptx'
-$powerPointPdf = Join-Path $documents 'Example-OfficePdfSidecar-PowerPoint.pdf'
-
-$rows = @(
-    [pscustomobject]@{ Name = 'Alpha'; Status = 'Ready'; Count = 12 }
-    [pscustomobject]@{ Name = 'Beta'; Status = 'Review'; Count = 7 }
-)
-
-New-OfficeWord -Path $wordPath -PdfPath $wordPdf {
-    WordParagraph -Text 'Word PDF sidecar' -Style Heading1
-    WordParagraph 'The Word document and PDF sidecar are saved in one command.'
-    WordTable -InputObject $rows -Layout AutoFitToWindow
-} | Out-Null
-
-New-OfficeExcel -Path $excelPath -PdfPath $excelPdf {
-    ExcelSheet -Name 'Summary' {
-        ExcelTable -Data $rows
-        ExcelAutoFit
-    }
-} | Out-Null
-
-New-OfficeMarkdown -Path $markdownPath -PdfPath $markdownPdf {
-    MarkdownHeading -Level 1 -Text 'Markdown PDF sidecar'
-    MarkdownParagraph 'Markdown keeps the same authoring mindset with format-appropriate simplification.'
-    MarkdownTable -InputObject $rows
-} | Out-Null
-
-New-OfficePowerPoint -Path $powerPointPath -PdfPath $powerPointPdf {
-    PptSlide {
-        PptTitle -Title 'PowerPoint PDF sidecar'
-        PptBullets -Bullets 'Create the deck', 'Save the PDF sidecar', 'Inspect generated output'
-    }
-} | Out-Null
-
-Get-Item -LiteralPath $wordPdf, $excelPdf, $markdownPdf, $powerPointPdf |
-    Select-Object FullName, Length |
-    Format-Table -AutoSize
diff --git a/Examples/Pdf/Example-PdfOperations.ps1 b/Examples/Pdf/Example-PdfOperations.ps1
index 21e8f54d..0e072bad 100644
--- a/Examples/Pdf/Example-PdfOperations.ps1
+++ b/Examples/Pdf/Example-PdfOperations.ps1
@@ -4,7 +4,7 @@ Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
 $splitDirectory = Join-Path $documents 'Example-PdfOperations-Split'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
+$null = New-Item -Path $documents -ItemType Directory -Force
 Remove-Item -Path $splitDirectory -Recurse -Force -ErrorAction SilentlyContinue
 
 $first = Join-Path $documents 'Example-PdfOperations-A.pdf'
@@ -17,18 +17,18 @@ $stamped = Join-Path $documents 'Example-PdfOperations-Stamped.pdf'
 New-OfficePdf -Path $first {
     PdfHeading 'Operations Part A'
     PdfParagraph 'This source PDF is generated by PSWriteOffice.'
-} | Out-Null
+}
 
 New-OfficePdf -Path $second {
     PdfHeading 'Operations Part B'
     PdfParagraph 'This second PDF will be joined, split, rotated, stamped, and inspected.'
-} | Out-Null
+}
 
-Join-OfficePdf -Path $first, $second -OutputPath $joined -PassThru | Out-Null
-Split-OfficePdf -Path $joined -OutputDirectory $splitDirectory -Prefix 'part' | Out-Null
-Set-OfficePdfPage -Path $joined -Rotation 90 -PageRange '2' -OutputPath $rotated | Out-Null
-Set-OfficePdfMetadata -Path $rotated -OutputPath $metadata -Title 'PDF Operations Example' -Author 'PSWriteOffice' -Subject 'Existing PDF operations' | Out-Null
-Add-OfficePdfStamp -Path $metadata -OutputPath $stamped -Text 'REVIEWED' -Color '#0F766E' -FontSize 22 -Rotation 12 -PageRange '1' | Out-Null
+Join-OfficePdf -Path $first, $second -OutputPath $joined
+Split-OfficePdf -Path $joined -OutputDirectory $splitDirectory -Prefix 'part'
+Set-OfficePdfPage -Path $joined -Rotation 90 -PageRange '2' -OutputPath $rotated
+Set-OfficePdfMetadata -Path $rotated -OutputPath $metadata -Title 'PDF Operations Example' -Author 'PSWriteOffice' -Subject 'Existing PDF operations'
+Add-OfficePdfStamp -Path $metadata -OutputPath $stamped -Text 'REVIEWED' -Color '#0F766E' -FontSize 22 -Rotation 12 -PageRange '1'
 
 $markdown = ConvertTo-OfficePdfMarkdown -Path $stamped
 $info = Get-OfficePdfInfo -Path $stamped
diff --git a/Examples/Pdf/Example-PdfReportDsl.ps1 b/Examples/Pdf/Example-PdfReportDsl.ps1
index d0875f1e..8f29f755 100644
--- a/Examples/Pdf/Example-PdfReportDsl.ps1
+++ b/Examples/Pdf/Example-PdfReportDsl.ps1
@@ -3,8 +3,7 @@ $ErrorActionPreference = 'Stop'
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Example-PdfReportDsl.pdf'
 $attachmentPath = Join-Path $documents 'Example-PdfReportDsl-notes.txt'
 Set-Content -LiteralPath $attachmentPath -Value 'Synthetic report notes embedded by PSWriteOffice.' -Encoding UTF8
@@ -66,7 +65,7 @@ New-OfficePdf -Path $path {
 
     PdfSpacer 10
     PdfAttachment -Path $attachmentPath -Description 'Generated example notes'
-} -PassThru | Out-Null
+}
 
 $info = Get-OfficePdfInfo -Path $path
 [pscustomobject]@{
diff --git a/Examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1 b/Examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1
index a48b1f3e..2401d668 100644
--- a/Examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1
+++ b/Examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'PowerPoint-BackgroundsAndLayout.pptx'
 $imagePath = Join-Path $documents 'PowerPoint-Background.bmp'
 
@@ -15,24 +14,24 @@ $imagePath = Join-Path $documents 'PowerPoint-Background.bmp'
     0xFF, 0x00
 [System.IO.File]::WriteAllBytes($imagePath, $bytes)
 
-$ppt = New-OfficePowerPoint -FilePath $path
-Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 30 -HeightCm 20 | Out-Null
+$ppt = New-OfficePowerPoint -Path $path -NoSave
+Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 30 -HeightCm 20
 
-$slide1 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Content Grid' | Out-Null
-Set-OfficePowerPointBackground -Slide $slide1 -Color '#F4F7FB' | Out-Null
+$slide1 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Content Grid'
+Set-OfficePowerPointBackground -Slide $slide1 -Color '#F4F7FB'
 
 $columns = @(Get-OfficePowerPointLayoutBox -Presentation $ppt -ColumnCount 2 -MarginCm 1.5 -GutterCm 1.0)
 foreach ($index in 0..($columns.Count - 1)) {
     $box = $columns[$index]
-    Add-OfficePowerPointTextBox -Slide $slide1 -Text "Column $($index + 1)" -X $box.LeftPoints -Y $box.TopPoints -Width $box.WidthPoints -Height 48 | Out-Null
+    Add-OfficePowerPointTextBox -Slide $slide1 -Text "Column $($index + 1)" -X $box.LeftPoints -Y $box.TopPoints -Width $box.WidthPoints -Height 48
 }
 
-$slide2 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Image Background' | Out-Null
-Set-OfficePowerPointBackground -Slide $slide2 -ImagePath $imagePath | Out-Null
+$slide2 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Image Background'
+Set-OfficePowerPointBackground -Slide $slide2 -ImagePath $imagePath
 
 Save-OfficePowerPoint -Presentation $ppt
-$ppt.Dispose()
+$ppt | Close-OfficePowerPoint
 
 Write-Host "Presentation saved to $path"
diff --git a/Examples/PowerPoint/Example-PowerPointCharts.ps1 b/Examples/PowerPoint/Example-PowerPointCharts.ps1
index d8a09e93..fb43bd28 100644
--- a/Examples/PowerPoint/Example-PowerPointCharts.ps1
+++ b/Examples/PowerPoint/Example-PowerPointCharts.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'PowerPoint-Charts.pptx'
 $rows = @(
     [PSCustomObject]@{ Month = 'Jan'; MonthNumber = 1; Sales = 10; Profit = 4 }
@@ -9,21 +8,21 @@ $rows = @(
     [PSCustomObject]@{ Month = 'Mar'; MonthNumber = 3; Sales = 18; Profit = 8 }
 )
 
-$ppt = New-OfficePowerPoint -FilePath $path
+$ppt = New-OfficePowerPoint -Path $path -NoSave
 
-$columnSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $columnSlide -Title 'Column Chart' | Out-Null
-Add-OfficePowerPointChart -Slide $columnSlide -Data $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Title 'Sales vs Profit' | Out-Null
+$columnSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $columnSlide -Title 'Column Chart'
+Add-OfficePowerPointChart -Slide $columnSlide -Data $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Title 'Sales vs Profit'
 
-$pieSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $pieSlide -Title 'Pie Chart' | Out-Null
-Add-OfficePowerPointChart -Slide $pieSlide -Type Pie -Data $rows -CategoryProperty Month -SeriesProperty Sales -Title 'Sales Mix' | Out-Null
+$pieSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $pieSlide -Title 'Pie Chart'
+Add-OfficePowerPointChart -Slide $pieSlide -Type Pie -Data $rows -CategoryProperty Month -SeriesProperty Sales -Title 'Sales Mix'
 
-$scatterSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $scatterSlide -Title 'Scatter Chart' | Out-Null
-Add-OfficePowerPointChart -Slide $scatterSlide -Type Scatter -Data $rows -XProperty MonthNumber -YProperty Sales, Profit -Title 'Trend Scatter' | Out-Null
+$scatterSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $scatterSlide -Title 'Scatter Chart'
+Add-OfficePowerPointChart -Slide $scatterSlide -Type Scatter -Data $rows -XProperty MonthNumber -YProperty Sales, Profit -Title 'Trend Scatter'
 
 Save-OfficePowerPoint -Presentation $ppt
-$ppt.Dispose()
+$ppt | Close-OfficePowerPoint
 
 Write-Host "Presentation saved to $path"
diff --git a/Examples/PowerPoint/Example-PowerPointCopySlides.ps1 b/Examples/PowerPoint/Example-PowerPointCopySlides.ps1
index 94d73a67..e2800767 100644
--- a/Examples/PowerPoint/Example-PowerPointCopySlides.ps1
+++ b/Examples/PowerPoint/Example-PowerPointCopySlides.ps1
@@ -1,19 +1,18 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'PowerPoint-CopySlides.pptx'
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 
-$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
+$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
 Set-OfficePowerPointSlideTitle -Slide $intro -Title 'Executive Summary'
-Add-OfficePowerPointTextBox -Slide $intro -Text 'Quarterly revenue and margin summary' -X 80 -Y 150 -Width 360 -Height 60 | Out-Null
+Add-OfficePowerPointTextBox -Slide $intro -Text 'Quarterly revenue and margin summary' -X 80 -Y 150 -Width 360 -Height 60
 Set-OfficePowerPointNotes -Slide $intro -Text 'Use this for board prep.'
 
-$closing = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
+$closing = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
 Set-OfficePowerPointSlideTitle -Slide $closing -Title 'Appendix'
 
-Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1 | Out-Null
+Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1
 
 Save-OfficePowerPoint -Presentation $presentation
 
diff --git a/Examples/PowerPoint/Example-PowerPointHtmlReview.ps1 b/Examples/PowerPoint/Example-PowerPointHtmlReview.ps1
index fdf92399..81074d81 100644
--- a/Examples/PowerPoint/Example-PowerPointHtmlReview.ps1
+++ b/Examples/PowerPoint/Example-PowerPointHtmlReview.ps1
@@ -1,31 +1,30 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $presentationPath = Join-Path $documents 'PowerPoint-HtmlReview.pptx'
 $semanticHtmlPath = Join-Path $documents 'PowerPoint-HtmlReview.semantic.html'
 $visualHtmlPath = Join-Path $documents 'PowerPoint-HtmlReview.visual.html'
 
-$presentation = New-OfficePowerPoint -FilePath $presentationPath
+$presentation = New-OfficePowerPoint -Path $presentationPath -NoSave
 
-$statusSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $statusSlide -Title 'Monthly Service Review' | Out-Null
-Add-OfficePowerPointTextBox -Slide $statusSlide -Text 'Identity, Messaging, and Reporting are ready for leadership review.' -X 80 -Y 140 -Width 560 -Height 80 | Out-Null
-Set-OfficePowerPointNotes -Slide $statusSlide -Text 'Use this slide to introduce the operational status summary.' | Out-Null
+$statusSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $statusSlide -Title 'Monthly Service Review'
+Add-OfficePowerPointTextBox -Slide $statusSlide -Text 'Identity, Messaging, and Reporting are ready for leadership review.' -X 80 -Y 140 -Width 560 -Height 80
+Set-OfficePowerPointNotes -Slide $statusSlide -Text 'Use this slide to introduce the operational status summary.'
 
-$tableSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $tableSlide -Title 'Open Items' | Out-Null
+$tableSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $tableSlide -Title 'Open Items'
 Add-OfficePowerPointTable -Slide $tableSlide -Headers 'Area', 'Owner', 'Next Step' -Rows @(
     @('Messaging', 'Collaboration', 'Review retry spikes')
     @('Reporting', 'Analytics', 'Publish refreshed dashboard')
-) -X 70 -Y 130 -Width 600 -Height 160 | Out-Null
+) -X 70 -Y 130 -Width 600 -Height 160
 
 Save-OfficePowerPoint -Presentation $presentation
-$presentation.Dispose()
+$presentation | Close-OfficePowerPoint
 
-ConvertTo-OfficePowerPointHtml -Path $presentationPath -OutputPath $semanticHtmlPath -Title 'Deck Review' -PassThru | Out-Null
-ConvertTo-OfficePowerPointHtml -Path $presentationPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Deck Visual Review' -PassThru | Out-Null
+ConvertTo-OfficePowerPointHtml -Path $presentationPath -OutputPath $semanticHtmlPath -Title 'Deck Review'
+ConvertTo-OfficePowerPointHtml -Path $presentationPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Deck Visual Review'
 
 Write-Host "Presentation saved to $presentationPath"
 Write-Host "Semantic HTML saved to $semanticHtmlPath"
diff --git a/Examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1 b/Examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1
index fd2a8c45..efea2183 100644
--- a/Examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1
+++ b/Examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'PowerPoint-ModifyExistingShapes.pptx'
 
 $initialRows = @(
@@ -9,46 +8,42 @@ $initialRows = @(
     [PSCustomObject]@{ Metric = 'Quality'; State = 'Watching' }
 )
 
-$presentation = New-OfficePowerPoint -FilePath $path
+$presentation = New-OfficePowerPoint -Path $path -NoSave
 try {
-    $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-    Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Release readiness' | Out-Null
-    Add-OfficePowerPointTextBox -Slide $slide -Text 'Status marker: Draft release' -X 70 -Y 110 -Width 420 -Height 45 | Out-Null
-    Add-OfficePowerPointTable -Slide $slide -InputObject $initialRows -X 70 -Y 180 -Width 500 -Height 170 | Out-Null
+    $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+    Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Release readiness'
+    Add-OfficePowerPointTextBox -Slide $slide -Text 'Status marker: Draft release' -X 70 -Y 110 -Width 420 -Height 45
+    Add-OfficePowerPointTable -Slide $slide -InputObject $initialRows -X 70 -Y 180 -Width 500 -Height 170
 } finally {
     Close-OfficePowerPoint -Presentation $presentation -Save
 }
 
 # Second pass: find existing shapes, then modify their content directly.
-$deck = Get-OfficePowerPoint -FilePath $path
+$deck = Get-OfficePowerPoint -Path $path
 try {
     Find-OfficePowerPointShape -Presentation $deck -Text 'Status marker' -Kind TextBox |
-        Set-OfficePowerPointShapeText -Text 'Status marker: Ready for launch' |
-        Out-Null
+        Set-OfficePowerPointShapeText -Text 'Status marker: Ready for launch'
 
     $readinessTable = Find-OfficePowerPointShape -Presentation $deck -Text 'Risk' -Kind Table | Select-Object -First 1
 
     $readinessTable |
-        Add-OfficePowerPointTableRow -Values 'Latency', 'Investigating' |
-        Out-Null
+        Add-OfficePowerPointTableRow -Values 'Latency', 'Investigating'
 
     $readinessTable |
         Add-OfficePowerPointTableRow -Values ([ordered]@{
             Metric = 'Documentation'
             State  = 'Ready'
-        }) |
-        Out-Null
+        })
 
     $readinessTable |
-        Set-OfficePowerPointTableCell -Row 1 -Column 1 -Text 'Mitigating' |
-        Out-Null
+        Set-OfficePowerPointTableCell -Row 1 -Column 1 -Text 'Mitigating'
 } finally {
     Close-OfficePowerPoint -Presentation $deck -Save
 }
 
 Write-Host "Updated PowerPoint deck saved to $path"
 Write-Host 'Matching shapes:'
-$reloaded = Get-OfficePowerPoint -FilePath $path
+$reloaded = Get-OfficePowerPoint -Path $path
 try {
     Find-OfficePowerPointShape -Presentation $reloaded -Text 'Ready' |
         Select-Object SlideIndex, ShapeIndex, Kind, Text |
diff --git a/Examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1 b/Examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1
index 0acd518a..314c0bb2 100644
--- a/Examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1
+++ b/Examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1
@@ -1,41 +1,40 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $sourcePath = Join-Path $documents 'PowerPoint-Source.pptx'
 $targetPath = Join-Path $documents 'PowerPoint-SectionsAndImport.pptx'
 
-$source = New-OfficePowerPoint -FilePath $sourcePath
-$sourceSlide = Add-OfficePowerPointSlide -Presentation $source -Layout 1
+$source = New-OfficePowerPoint -Path $sourcePath -NoSave
+$sourceSlide = Add-OfficePowerPointSlide -Presentation $source -Layout 1 -PassThru
 Set-OfficePowerPointSlideTitle -Slide $sourceSlide -Title 'FY24 Imported'
-Add-OfficePowerPointTextBox -Slide $sourceSlide -Text 'FY24 details from source deck' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null
+Add-OfficePowerPointTextBox -Slide $sourceSlide -Text 'FY24 details from source deck' -X 80 -Y 150 -Width 320 -Height 60
 Set-OfficePowerPointNotes -Slide $sourceSlide -Text 'FY24 source notes'
 Save-OfficePowerPoint -Presentation $source
 
-$target = New-OfficePowerPoint -FilePath $targetPath
-$slide1 = Add-OfficePowerPointSlide -Presentation $target -Layout 1
+$target = New-OfficePowerPoint -Path $targetPath -NoSave
+$slide1 = Add-OfficePowerPointSlide -Presentation $target -Layout 1 -PassThru
 Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'FY24 Overview'
-Add-OfficePowerPointTextBox -Slide $slide1 -Text 'FY24 summary for leadership' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null
+Add-OfficePowerPointTextBox -Slide $slide1 -Text 'FY24 summary for leadership' -X 80 -Y 150 -Width 320 -Height 60
 
-$slide2 = Add-OfficePowerPointSlide -Presentation $target -Layout 1
+$slide2 = Add-OfficePowerPointSlide -Presentation $target -Layout 1 -PassThru
 Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'FY24 Results'
 
-Add-OfficePowerPointSection -Presentation $target -Name 'Intro' -StartSlideIndex 0 | Out-Null
-Add-OfficePowerPointSection -Presentation $target -Name 'Results' -StartSlideIndex 1 | Out-Null
+Add-OfficePowerPointSection -Presentation $target -Name 'Intro' -StartSlideIndex 0
+Add-OfficePowerPointSection -Presentation $target -Name 'Results' -StartSlideIndex 1
 Rename-OfficePowerPointSection -Presentation $target -Name 'Results' -NewName 'Deep Dive'
 
-Update-OfficePowerPointText -Presentation $target -OldValue 'FY24' -NewValue 'FY25' | Out-Null
-Copy-OfficePowerPointSlide -Presentation $target -Index 0 -InsertAt 1 | Out-Null
-Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1 | Out-Null
+Update-OfficePowerPointText -Presentation $target -OldValue 'FY24' -NewValue 'FY25'
+Copy-OfficePowerPointSlide -Presentation $target -Index 0 -InsertAt 1
+Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1
 
 Save-OfficePowerPoint -Presentation $target
 
 Write-Host "Target deck saved to $targetPath"
 Write-Host ''
 Write-Host 'Sections:'
-$reloaded = Get-OfficePowerPoint -FilePath $targetPath
+$reloaded = Get-OfficePowerPoint -Path $targetPath
 try {
     Get-OfficePowerPointSection -Presentation $reloaded | Format-Table
 } finally {
-    $reloaded.Dispose()
+    $reloaded | Close-OfficePowerPoint
 }
diff --git a/Examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1 b/Examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1
index 101b9c80..56ef011d 100644
--- a/Examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1
+++ b/Examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1
@@ -1,12 +1,11 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'PowerPoint-ThemeAndLayout.pptx'
-$ppt = New-OfficePowerPoint -FilePath $path
+$ppt = New-OfficePowerPoint -Path $path -NoSave
 
-$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Theme Demo' | Out-Null
+$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Theme Demo'
 
 $layouts = Get-OfficePowerPointLayout -Presentation $ppt
 $targetLayout = $layouts | Where-Object LayoutIndex -ne $slide.LayoutIndex | Select-Object -First 1
@@ -19,17 +18,17 @@ Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos' -MinorLati
 Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Contoso Theme' -AllMasters
 
 if ($targetLayout.Type) {
-    $slide | Set-OfficePowerPointSlideLayout -LayoutType $targetLayout.Type -Master $targetLayout.MasterIndex | Out-Null
+    $slide | Set-OfficePowerPointSlideLayout -LayoutType $targetLayout.Type -Master $targetLayout.MasterIndex
 } elseif ($targetLayout.Name) {
-    $slide | Set-OfficePowerPointSlideLayout -LayoutName $targetLayout.Name -Master $targetLayout.MasterIndex | Out-Null
+    $slide | Set-OfficePowerPointSlideLayout -LayoutName $targetLayout.Name -Master $targetLayout.MasterIndex
 } else {
-    $slide | Set-OfficePowerPointSlideLayout -Layout $targetLayout.LayoutIndex -Master $targetLayout.MasterIndex | Out-Null
+    $slide | Set-OfficePowerPointSlideLayout -Layout $targetLayout.LayoutIndex -Master $targetLayout.MasterIndex
 }
 
 $theme = Get-OfficePowerPointTheme -Presentation $ppt
 $theme | Format-List
 
 Save-OfficePowerPoint -Presentation $ppt
-$ppt.Dispose()
+$ppt | Close-OfficePowerPoint
 
 Write-Host "Presentation saved to $path"
diff --git a/Examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1 b/Examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1
index 17d63308..f8cec9d1 100644
--- a/Examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1
+++ b/Examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1
@@ -1,19 +1,18 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'PowerPoint-TransitionsAndSizing.pptx'
 
-$presentation = New-OfficePowerPoint -FilePath $path
-Set-OfficePowerPointSlideSize -Presentation $presentation -Preset Screen16x9 | Out-Null
+$presentation = New-OfficePowerPoint -Path $path -NoSave
+Set-OfficePowerPointSlideSize -Presentation $presentation -Preset Screen16x9
 
-$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $intro -Title 'Executive Summary' | Out-Null
-Set-OfficePowerPointSlideTransition -Slide $intro -Transition Fade | Out-Null
+$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $intro -Title 'Executive Summary'
+Set-OfficePowerPointSlideTransition -Slide $intro -Transition Fade
 
-$details = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1
-Set-OfficePowerPointSlideTitle -Slide $details -Title 'Details' | Out-Null
-Set-OfficePowerPointSlideTransition -Slide $details -Transition Morph | Out-Null
+$details = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru
+Set-OfficePowerPointSlideTitle -Slide $details -Title 'Details'
+Set-OfficePowerPointSlideTransition -Slide $details -Transition Morph
 
 Save-OfficePowerPoint -Presentation $presentation
 
diff --git a/Examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1 b/Examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1
index 91da5c85..2bc8571a 100644
--- a/Examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1
+++ b/Examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1
@@ -1,7 +1,7 @@
 $path = '.\PowerPoint-Copy-And-Remove.pptx'
 
 $presentation = New-OfficePowerPoint -Path $path -NoSave
-$overview = Add-OfficePowerPointSlide -Presentation $presentation
+$overview = Add-OfficePowerPointSlide -Presentation $presentation -PassThru
 Set-OfficePowerPointSlideTitle -Slide $overview -Title 'Reusable overview'
 Add-OfficePowerPointTextBox -Slide $overview -Text 'Shared service story' -X 80 -Y 150 -Width 560 -Height 70
 
@@ -9,7 +9,7 @@ Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1
 $copied = Get-OfficePowerPointSlide -Presentation $presentation -Index 1
 Set-OfficePowerPointSlideTitle -Slide $copied -Title 'Customer-specific overview'
 
-$draft = Add-OfficePowerPointSlide -Presentation $presentation
+$draft = Add-OfficePowerPointSlide -Presentation $presentation -PassThru
 Set-OfficePowerPointSlideTitle -Slide $draft -Title 'Draft slide to remove'
 Remove-OfficePowerPointSlide -Presentation $presentation -Index 2
 
diff --git a/Examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1 b/Examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1
index 5f8d1f64..c27022bb 100644
--- a/Examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1
+++ b/Examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1
@@ -11,7 +11,7 @@ PptNew -Path $path {
     }
 }
 
-$presentation = Get-OfficePowerPoint -FilePath $path
+$presentation = Get-OfficePowerPoint -Path $path
 foreach ($index in 0..($presentation.Slides.Count - 1)) {
     $slide = Get-OfficePowerPointSlide -Presentation $presentation -Index $index
     $summary = Get-OfficePowerPointSlideSummary -Slide $slide
diff --git a/Examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1 b/Examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1
index 1e9fe79a..03fe5cf1 100644
--- a/Examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1
+++ b/Examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1
@@ -1,12 +1,12 @@
 $path = '.\PowerPoint-Object-Composition.pptx'
 $presentation = New-OfficePowerPoint -Path $path -NoSave
 
-$titleSlide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Title
+$titleSlide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Title -PassThru
 Set-OfficePowerPointSlideTitle -Slide $titleSlide -Title 'Customer onboarding review'
 Add-OfficePowerPointTextBox -Slide $titleSlide -Text 'Decisions, owners, and the next milestone' -X 90 -Y 190 -Width 700 -Height 70
 Set-OfficePowerPointNotes -Slide $titleSlide -Text 'Open with the customer outcome, then confirm the two decisions.'
 
-$actionSlide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Text
+$actionSlide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Text -PassThru
 Set-OfficePowerPointSlideTitle -Slide $actionSlide -Title 'Actions'
 Add-OfficePowerPointTextBox -Slide $actionSlide -Run @{
     Text = 'Owner: ', 'Delivery', '    Due: ', 'Friday'
diff --git a/Examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1 b/Examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1
index 17d3c349..f5701558 100644
--- a/Examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1
+++ b/Examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1
@@ -15,7 +15,7 @@ PptNew -Path $targetPath {
     }
 }
 
-$target = Get-OfficePowerPoint -FilePath $targetPath
+$target = Get-OfficePowerPoint -Path $targetPath
 Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1
 Copy-OfficePowerPointSlide -Presentation $target -Index 0 -InsertAt 2
 Add-OfficePowerPointSection -Presentation $target -Name 'Shared material' -StartSlideIndex 1
diff --git a/Examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1 b/Examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1
index 81d7089d..26cf77e1 100644
--- a/Examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1
+++ b/Examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1
@@ -1,11 +1,11 @@
 $path = '.\PowerPoint-Sections-And-Notes.pptx'
 
 $presentation = New-OfficePowerPoint -Path $path -NoSave
-$cover = Add-OfficePowerPointSlide -Presentation $presentation
+$cover = Add-OfficePowerPointSlide -Presentation $presentation -PassThru
 Set-OfficePowerPointSlideTitle -Slide $cover -Title 'Service review'
 Set-OfficePowerPointNotes -Slide $cover -Text 'Introduce the reporting period and desired decision.'
 
-$evidence = Add-OfficePowerPointSlide -Presentation $presentation
+$evidence = Add-OfficePowerPointSlide -Presentation $presentation -PassThru
 Set-OfficePowerPointSlideTitle -Slide $evidence -Title 'Evidence'
 Add-OfficePowerPointTextBox -Slide $evidence -Text 'Availability remained above 99.9%.' -X 80 -Y 150 -Width 650 -Height 70
 Set-OfficePowerPointNotes -Slide $evidence -Text 'Pause for questions before moving to actions.'
diff --git a/Examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1 b/Examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1
index 61cc2e6a..38ac80c8 100644
--- a/Examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1
+++ b/Examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1
@@ -11,6 +11,6 @@ PptNew -Path $path {
     }
 }
 
-$presentation = Get-OfficePowerPoint -FilePath $path
+$presentation = Get-OfficePowerPoint -Path $path
 Update-OfficePowerPointText -Presentation $presentation -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes
 Close-OfficePowerPoint -Presentation $presentation -Save
diff --git a/Examples/README.md b/Examples/README.md
index e9ed6f5d..750db1b9 100644
--- a/Examples/README.md
+++ b/Examples/README.md
@@ -1,6 +1,6 @@
 # PSWriteOffice example library
 
-These 58 recipes are complete PowerShell scripts that create, read, update, combine, or convert real files. Start with the workflow you need, then move to the larger showcase scripts when you want to see several features working together.
+These 60 recipes are complete PowerShell scripts that create, read, update, combine, or convert real files. Start with the workflow you need, then move to the larger showcase scripts when you want to see several features working together.
 
 ```powershell
 Install-Module PSWriteOffice -Scope CurrentUser
@@ -52,6 +52,8 @@ The [workflow guide](https://officeimo.com/docs/pswriteoffice/object-workflows/)
 - [Update and convert RTF](Rtf/Recipe-Rtf-UpdateAndConvert.ps1) and [RTF/Markdown round trip](Rtf/Example-RtfMarkdownRoundTrip.ps1)
 - [Safe CSV export](Csv/Recipe-Csv-SafeExport.ps1), [CSV basics](Csv/Example-CsvBasic.ps1), [advanced CSV options](Csv/Example-CsvAdvanced.ps1), and [DbaClientX round trip](Csv/Example-CsvDbaClientXRoundTrip.ps1)
 - [Excel and DbaClientX round trip](Excel/Example-ExcelDbaClientXRoundTrip.ps1)
+- [Generate a PDF and deliver it with Mailozaurr](Integrations/Recipe-Mailozaurr-PdfDelivery.ps1)
+- [Turn PSEventViewer results into Word and Excel reports](Integrations/Recipe-PSEventViewer-OfficeReport.ps1)
 - [HTML review for Word](Word/Example-WordHtmlConvert.ps1), [Excel](Excel/Example-ExcelHtmlReview.ps1), and [PowerPoint](PowerPoint/Example-PowerPointHtmlReview.ps1)
 - [ChartForgeX visuals](Visuals/Example-ChartForgeXVisuals.ps1)
 - [Confluence report publishing](Confluence/Example-ConfluenceAzureTableReport.ps1)
diff --git a/Examples/Rtf/Example-RtfMarkdownRoundTrip.ps1 b/Examples/Rtf/Example-RtfMarkdownRoundTrip.ps1
index 37872f28..93852406 100644
--- a/Examples/Rtf/Example-RtfMarkdownRoundTrip.ps1
+++ b/Examples/Rtf/Example-RtfMarkdownRoundTrip.ps1
@@ -1,8 +1,7 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $markdownPath = Join-Path $documents 'Rtf-MarkdownRoundTrip.md'
 $rtfPath = Join-Path $documents 'Rtf-MarkdownRoundTrip.rtf'
 $roundTripMarkdownPath = Join-Path $documents 'Rtf-MarkdownRoundTrip.from-rtf.md'
@@ -22,8 +21,8 @@ The weekly service review is ready.
 | Reporting | Analytics |
 '@ | Set-Content -Path $markdownPath -Encoding UTF8
 
-ConvertTo-OfficeRtf -MarkdownPath $markdownPath -OutputPath $rtfPath -PassThru | Out-Null
-ConvertFrom-OfficeRtf -Path $rtfPath -As Markdown -OutputPath $roundTripMarkdownPath -PassThru | Out-Null
+ConvertTo-OfficeRtf -MarkdownPath $markdownPath -OutputPath $rtfPath
+ConvertFrom-OfficeRtf -Path $rtfPath -As Markdown -OutputPath $roundTripMarkdownPath
 
 Write-Host "Markdown saved to $markdownPath"
 Write-Host "RTF saved to $rtfPath"
diff --git a/Examples/Showcase/Showcase-Excel-OperationalDashboard.ps1 b/Examples/Showcase/Showcase-Excel-OperationalDashboard.ps1
index 7bdaf6fd..887418dd 100644
--- a/Examples/Showcase/Showcase-Excel-OperationalDashboard.ps1
+++ b/Examples/Showcase/Showcase-Excel-OperationalDashboard.ps1
@@ -5,8 +5,7 @@ param(
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Showcase-Excel-OperationalDashboard.xlsx'
 $logoPath = Join-Path $PSScriptRoot '..\Word\Example-WordTableCells.fixture.png'
 
@@ -74,13 +73,13 @@ New-OfficeExcel -Path $path {
 
         ExcelTable -Data $legend -TableName 'StatusLegend' -StartRow 7 -StartColumn 1 -TableStyle 'TableStyleMedium4' -AutoFit
         ExcelTable -Data $statusMix -TableName 'StatusMix' -StartRow 7 -StartColumn 6 -TableStyle 'TableStyleMedium4' -AutoFit
-        ExcelChart -Range 'F7:G10' -Row 7 -Column 9 -Type Doughnut -Title 'Status Mix' -WidthPixels 440 -HeightPixels 260 |
-            Set-OfficeExcelChartLegend -Position Right |
-            Set-OfficeExcelChartDataLabels -ShowValue $true -ShowCategoryName $true -Position OutsideEnd |
+        ExcelChart -Range 'F7:G10' -Row 7 -Column 9 -Type Doughnut -Title 'Status Mix' -WidthPixels 440 -HeightPixels 260 -PassThru |
+            Set-OfficeExcelChartLegend -Position Right -PassThru |
+            Set-OfficeExcelChartDataLabels -ShowValue $true -ShowCategoryName $true -Position OutsideEnd -PassThru |
             Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10
 
         if (Test-Path $logoPath) {
-            ExcelImage -Path $logoPath -Address 'J1' -WidthPixels 140 -HeightPixels 52 -AltText 'PSWriteOffice operational dashboard logo' | Out-Null
+            ExcelImage -Path $logoPath -Address 'J1' -WidthPixels 140 -HeightPixels 52 -AltText 'PSWriteOffice operational dashboard logo'
         }
 
         ExcelHeaderFooter -HeaderCenter 'PSWriteOffice operational dashboard' -FooterRight 'Page &P of &N'
@@ -95,12 +94,12 @@ New-OfficeExcel -Path $path {
         ExcelValidationList -Range 'F2:F50' -Values 'Healthy','Watch','Risk'
         ExcelConditionalColorScale -Range 'B2:B9' -StartColor '#F8696B' -EndColor '#63BE7B'
         ExcelConditionalDataBar -Range 'C2:C9' -Color '#5B9BD5'
-        ExcelConditionalIconSet -Range 'B2:B9' -IconSet ThreeTrafficLights1 -Reverse $true
+        ExcelConditionalIconSet -Range 'B2:B9' -IconSet ThreeTrafficLights1
         ExcelUrlLinksByHeader -Header 'Evidence' -TableName 'ServiceHealth' -UrlScript { param($text) "https://evotec.xyz/docs/$text" } -TitleScript { param($text) "Open $text" }
         ExcelPivotTable -SourceRange 'A1:F9' -DestinationCell 'J1' -Name 'ServiceStatusPivot' -RowField Status -DataField Incidents -DataDisplayName 'Total Incidents' -PivotStyle PivotStyleMedium9 -RefreshOnOpen
-        ExcelChart -Range 'A1:C9' -Row 12 -Column 1 -Type BarClustered -Title 'Health Score and Incidents' -WidthPixels 760 -HeightPixels 340 |
-            Set-OfficeExcelChartLegend -Position Bottom |
-            Set-OfficeExcelChartDataLabels -ShowValue $true -Position OutsideEnd |
+        ExcelChart -Range 'A1:C9' -Row 12 -Column 1 -Type BarClustered -Title 'Health Score and Incidents' -WidthPixels 760 -HeightPixels 340 -PassThru |
+            Set-OfficeExcelChartLegend -Position Bottom -PassThru |
+            Set-OfficeExcelChartDataLabels -ShowValue $true -Position OutsideEnd -PassThru |
             Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10
         ExcelHeaderFooter -HeaderCenter 'Service details' -FooterRight 'Page &P of &N'
     }
@@ -114,9 +113,9 @@ New-OfficeExcel -Path $path {
         ExcelSparkline -DataRange 'B5:D5' -LocationRange 'E5'
         ExcelSparkline -DataRange 'B6:D6' -LocationRange 'E6'
         ExcelSparkline -DataRange 'B7:D7' -LocationRange 'E7'
-        ExcelChart -TableName 'TrendData' -Row 10 -Column 1 -Type Line -Title 'Availability, Incidents, and Automation' -WidthPixels 780 -HeightPixels 340 |
-            Set-OfficeExcelChartLegend -Position Bottom |
-            Set-OfficeExcelChartDataLabels -ShowValue $true -Position Top |
+        ExcelChart -TableName 'TrendData' -Row 10 -Column 1 -Type Line -Title 'Availability, Incidents, and Automation' -WidthPixels 780 -HeightPixels 340 -PassThru |
+            Set-OfficeExcelChartLegend -Position Bottom -PassThru |
+            Set-OfficeExcelChartDataLabels -ShowValue $true -Position Top -PassThru |
             Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10
         ExcelHeaderFooter -HeaderCenter 'Trend and automation' -FooterRight 'Page &P of &N'
     }
@@ -124,7 +123,7 @@ New-OfficeExcel -Path $path {
     ExcelSheet 'Owner Summary' {
         ExcelTable -Data $ownerSummary -TableName 'OwnerSummary' -StartRow 1 -StartColumn 1 -TableStyle 'TableStyleMedium5' -AutoFit
         ExcelConditionalDataBar -Range 'D2:D20' -Color '#ED7D31'
-        ExcelConditionalIconSet -Range 'C2:C20' -IconSet ThreeTrafficLights1 -Reverse $true
+        ExcelConditionalIconSet -Range 'C2:C20' -IconSet ThreeTrafficLights1
         ExcelHeaderFooter -HeaderCenter 'Owner summary' -FooterRight 'Page &P of &N'
     }
 
@@ -142,7 +141,7 @@ New-OfficeExcel -Path $path {
 } -Open:$Open
 
 $threaded = Add-OfficeExcelThreadedComment -Path $path -Sheet Summary -Address A2 -Text 'Review dashboard posture before sending to service owners.' -Author 'Automation Reviewer' -PassThru
-Add-OfficeExcelThreadedComment -Path $path -Sheet Summary -Address A2 -Text 'Ready for owner review.' -Author 'Report Owner' -ParentId $threaded.Id -Done | Out-Null
+Add-OfficeExcelThreadedComment -Path $path -Sheet Summary -Address A2 -Text 'Ready for owner review.' -Author 'Report Owner' -ParentId $threaded.Id -Done
 
 Add-OfficeExcelPowerQueryMetadata -Path $path `
     -Name 'OperationalDashboardQuery' `
@@ -151,7 +150,7 @@ Add-OfficeExcelPowerQueryMetadata -Path $path `
     -CommandText 'let Source = Excel.CurrentWorkbook(){[Name="ServiceHealth"]}[Content] in Source' `
     -Description 'Refresh metadata for Excel-compatible applications; PSWriteOffice does not execute Power Query.' `
     -RefreshOnOpen `
-    -PassThru | Out-Null
+
 
 $doctor = Test-OfficeExcelWorkbook -Path $path -SkipOpenXmlValidation
 $accessibility = Test-OfficeExcelAccessibility -Path $path
diff --git a/Examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1 b/Examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1
index 820e1e1e..967fcc49 100644
--- a/Examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1
+++ b/Examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1
@@ -5,8 +5,7 @@ param(
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Showcase-PowerPoint-ServiceBrief.pptx'
 
 $process = @(
@@ -73,12 +72,12 @@ New-OfficePowerPoint -Path $path {
     PptSlideSize -Preset Screen16x9
     PptDesignerDeck -Plan $plan -AccentColor '#008C95' -Seed 'pswriteoffice-showcase' -Purpose 'technical service brief' -Name 'PSWriteOffice Showcase' -FooterLeft 'PSWriteOffice' -FooterRight 'OfficeIMO designer' -CreativeDirectionPack TechnicalMap -LayoutStrategy ContentFirst
 
-    $chartSlide = PptSlide
+    $chartSlide = PptSlide -PassThru
     PptTitle -Slide $chartSlide -Title 'Coverage and polish scorecard'
     PptChart -Slide $chartSlide -Type ClusteredColumn -Data $chartRows -CategoryProperty Product -SeriesProperty Coverage, Polish -Title 'Current Surface vs Polish Target' -X 58 -Y 118 -Width 610 -Height 265
     PptNotes -Slide $chartSlide -Text 'Use this slide as the bridge between the designer slides and the concrete backlog.'
 
-    $tableSlide = PptSlide
+    $tableSlide = PptSlide -PassThru
     PptTitle -Slide $tableSlide -Title 'Immediate implementation path'
     PptTable -Slide $tableSlide -Data $tableRows -X 64 -Y 132 -Width 590 -Height 210
     PptNotes -Slide $tableSlide -Text 'Close with the next concrete pull request slices: visual screenshots, blog drafts, and richer wrappers.'
@@ -89,7 +88,7 @@ New-OfficePowerPoint -Path $path {
     Get-OfficePowerPointSlide -Index 0 | PptTransition -Transition Fade
 } -Open:$Open
 
-$presentation = Get-OfficePowerPoint -FilePath $path
+$presentation = Get-OfficePowerPoint -Path $path
 $summary = Get-OfficePowerPointSlideSummary -Presentation $presentation
 $presentation | Close-OfficePowerPoint
 
diff --git a/Examples/Showcase/Showcase-RichTextRuns.ps1 b/Examples/Showcase/Showcase-RichTextRuns.ps1
index 1f32d9e6..c224d2b9 100644
--- a/Examples/Showcase/Showcase-RichTextRuns.ps1
+++ b/Examples/Showcase/Showcase-RichTextRuns.ps1
@@ -8,8 +8,7 @@ if (Test-Path -LiteralPath $moduleManifest) {
 }
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $wordPath = Join-Path $documents 'Showcase-RichTextRuns.docx'
 $excelPath = Join-Path $documents 'Showcase-RichTextRuns.xlsx'
 $pdfPath = Join-Path $documents 'Showcase-RichTextRuns.pdf'
@@ -46,7 +45,7 @@ WordNew -Path $wordPath {
             , @('Backup', (WordTableCellSpec -Run @(WordTextRun 'Watch' -Color DarkOrange -Bold)), 'Operations')
         )
     }
-} -PassThru | Out-Null
+}
 
 ExcelNew -Path $excelPath {
     ExcelSheet -Name 'Summary' -Content {
@@ -62,7 +61,7 @@ ExcelNew -Path $excelPath {
         ExcelTable -Data $serviceRows -TableName 'ServiceReadiness'
         ExcelAutoFit
     }
-} -PassThru | Out-Null
+}
 
 PdfNew -Path $pdfPath {
     PdfHeading 'Rich text runs'
@@ -83,7 +82,7 @@ PdfNew -Path $pdfPath {
         , @((PdfTableCell -Run @(PdfTextRun 'Identity Sync' -Bold; PdfTextRun ' 99.98%' -Color SeaGreen)), 'Ready', 'Platform')
         , @('Backup', (PdfTableCell -Run @(PdfTextRun 'Watch' -Color DarkOrange -Bold)), 'Operations')
     )
-} -PassThru | Out-Null
+}
 
 PptNew -Path $pptPath {
     PptSlide {
@@ -114,7 +113,7 @@ PptNew -Path $pptPath {
             , @('Backup', @{ Run = @(PptTextRun 'Watch' -Color DarkOrange -Bold) }, 'Operations')
         ) -X 70 -Y 190 -Width 560 -Height 220
     }
-} -PassThru | Out-Null
+}
 
 Write-Host "Word document saved to $wordPath"
 Write-Host "Excel workbook saved to $excelPath"
diff --git a/Examples/Showcase/Showcase-Word-ExecutiveReport.ps1 b/Examples/Showcase/Showcase-Word-ExecutiveReport.ps1
index 4fe356ad..a80dcc58 100644
--- a/Examples/Showcase/Showcase-Word-ExecutiveReport.ps1
+++ b/Examples/Showcase/Showcase-Word-ExecutiveReport.ps1
@@ -3,8 +3,7 @@ $ErrorActionPreference = 'Stop'
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Showcase-Word-ExecutiveReport.docx'
 Remove-Item -Path $path -Force -ErrorAction SilentlyContinue
 
@@ -120,7 +119,7 @@ New-OfficeWord -Path $path {
         Update-OfficeWordFields
         Update-OfficeWordTableOfContents
     }
-} | Out-Null
+}
 
 $document = Get-OfficeWord -Path $path -ReadOnly
 try {
@@ -134,5 +133,5 @@ try {
         Endnotes        = @(Get-OfficeWordEndnote -Document $document).Count
     } | Format-List
 } finally {
-    $document.Dispose()
+    $document | Close-OfficeWord
 }
diff --git a/Examples/Visio/Example-Visio-ArchitectureMap.ps1 b/Examples/Visio/Example-Visio-ArchitectureMap.ps1
index fa49809b..705e5535 100644
--- a/Examples/Visio/Example-Visio-ArchitectureMap.ps1
+++ b/Examples/Visio/Example-Visio-ArchitectureMap.ps1
@@ -7,17 +7,16 @@ $ErrorActionPreference = 'Stop'
 
 Import-Module PSWriteOffice -ErrorAction Stop
 
-New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $OutputDirectory -ItemType Directory -Force
 $path = Join-Path $OutputDirectory 'Example-Visio-ArchitectureMap.vsdx'
 $svgPath = Join-Path $OutputDirectory 'Example-Visio-ArchitectureMap.svg'
 $pngPath = Join-Path $OutputDirectory 'Example-Visio-ArchitectureMap.png'
 
 New-OfficeVisio -Path $path -Title 'Service architecture map' -Author 'PSWriteOffice' -Width 12 -Height 7.5 -UseMastersByDefault -RequestRecalcOnOpen {
-    Import-OfficeVisioStencil -BuiltIn Architecture -Name Arch -Default | Out-Null
-    Import-OfficeVisioStencil -BuiltIn Cloud -Name Cloud | Out-Null
-    Import-OfficeVisioStencil -BuiltIn SecurityIdentity -Name Security | Out-Null
-    Import-OfficeVisioStencil -BuiltIn DataPlatform -Name Data | Out-Null
+    Import-OfficeVisioStencil -BuiltIn Architecture -Name Arch -Default
+    Import-OfficeVisioStencil -BuiltIn Cloud -Name Cloud
+    Import-OfficeVisioStencil -BuiltIn SecurityIdentity -Name Security
+    Import-OfficeVisioStencil -BuiltIn DataPlatform -Name Data
 
     VisioTextBox 'SaaS control plane' -X 6 -Y 6.85 -Width 4.2 -Height 0.42 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
     VisioTextBox 'Boundaries, trust points, and platform services are editable Visio shapes.' -X 6 -Y 6.43 -Width 6.8 -Height 0.28 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
@@ -47,10 +46,10 @@ New-OfficeVisio -Path $path -Title 'Service architecture map' -Author 'PSWriteOf
     VisioConnector -From worker -To queue -Kind Straight -FromSide Bottom -ToSide Top -EndArrow Triangle -Label 'async' -LineColor '#0D9488'
     VisioConnector -From queue -To archive -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -LineColor '#C026D3'
     VisioConnector -From sql -To monitor -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -LineColor '#E11D48'
-} | Out-Null
+}
 
-ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null
-ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null
+ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath
+ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath
 
 if ($Open) {
     Invoke-Item $svgPath
diff --git a/Examples/Visio/Example-Visio-NetworkTopology.ps1 b/Examples/Visio/Example-Visio-NetworkTopology.ps1
index 602c4232..fea928c7 100644
--- a/Examples/Visio/Example-Visio-NetworkTopology.ps1
+++ b/Examples/Visio/Example-Visio-NetworkTopology.ps1
@@ -7,15 +7,14 @@ $ErrorActionPreference = 'Stop'
 
 Import-Module PSWriteOffice -ErrorAction Stop
 
-New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $OutputDirectory -ItemType Directory -Force
 $path = Join-Path $OutputDirectory 'Example-Visio-NetworkTopology.vsdx'
 $svgPath = Join-Path $OutputDirectory 'Example-Visio-NetworkTopology.svg'
 $pngPath = Join-Path $OutputDirectory 'Example-Visio-NetworkTopology.png'
 
 New-OfficeVisio -Path $path -Title 'Branch office topology' -Author 'PSWriteOffice' -Width 11 -Height 7 -UseMastersByDefault -RequestRecalcOnOpen {
-    Import-OfficeVisioStencil -BuiltIn Network -Name Net -Default | Out-Null
-    Import-OfficeVisioStencil -BuiltIn Infrastructure -Name Infra | Out-Null
+    Import-OfficeVisioStencil -BuiltIn Network -Name Net -Default
+    Import-OfficeVisioStencil -BuiltIn Infrastructure -Name Infra
 
     VisioTextBox 'Branch office network' -X 5.5 -Y 6.35 -Width 4.5 -Height 0.42 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
     VisioTextBox 'Zones, devices, and traffic paths from the OfficeIMO network stencil catalog.' -X 5.5 -Y 5.98 -Width 6.4 -Height 0.28 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
@@ -43,10 +42,10 @@ New-OfficeVisio -Path $path -Title 'Branch office topology' -Author 'PSWriteOffi
     VisioConnector -From core -To printer -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -LineColor '#64748B'
     VisioConnector -From core -To app -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'VLAN 20' -LineColor '#7C3AED'
     VisioConnector -From app -To nas -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'backup' -LineColor '#C026D3'
-} | Out-Null
+}
 
-ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null
-ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null
+ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath
+ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath
 
 if ($Open) {
     Invoke-Item $svgPath
diff --git a/Examples/Visio/Example-Visio-PackageStencil.ps1 b/Examples/Visio/Example-Visio-PackageStencil.ps1
index 683bd80a..90079ab4 100644
--- a/Examples/Visio/Example-Visio-PackageStencil.ps1
+++ b/Examples/Visio/Example-Visio-PackageStencil.ps1
@@ -24,8 +24,7 @@ if (-not (Test-Path -LiteralPath $StencilPackagePath)) {
     throw "Stencil package was not found. Provide -StencilPackagePath with a .vssx, .vstx, or .vsdx file."
 }
 
-New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $OutputDirectory -ItemType Directory -Force
 $path = Join-Path $OutputDirectory 'Example-Visio-PackageStencil.vsdx'
 $svgPath = Join-Path $OutputDirectory 'Example-Visio-PackageStencil.svg'
 $pngPath = Join-Path $OutputDirectory 'Example-Visio-PackageStencil.png'
@@ -37,7 +36,7 @@ if ($sampleStencils.Count -eq 0) {
 }
 
 New-OfficeVisio -Path $path -Title 'Package-backed stencils' -Author 'PSWriteOffice' -Width 10 -Height 6.5 -UseMastersByDefault -RequestRecalcOnOpen {
-    Import-OfficeVisioStencil -Catalog $catalog -Name Package -Default | Out-Null
+    Import-OfficeVisioStencil -Catalog $catalog -Name Package -Default
     VisioTextBox 'Package-backed stencil import' -X 5 -Y 5.8 -Width 4.6 -Height 0.38 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
     VisioTextBox "Loaded from $([System.IO.Path]::GetFileName($StencilPackagePath))" -X 5 -Y 5.42 -Width 5.2 -Height 0.26 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
 
@@ -50,10 +49,10 @@ New-OfficeVisio -Path $path -Title 'Package-backed stencils' -Author 'PSWriteOff
     VisioStencil -Stencil $third -Key importedC -Text 'Package master C' -X 8 -Y 3.4 -FillColor '#DCFCE7' -LineColor '#16A34A'
     VisioConnector -From importedA -To importedB -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'loaded' -LineColor '#0284C7'
     VisioConnector -From importedB -To importedC -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'reused' -LineColor '#16A34A'
-} | Out-Null
+}
 
-ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null
-ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null
+ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath
+ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath
 
 if ($Open) {
     Invoke-Item $svgPath
diff --git a/Examples/Visio/Example-Visio-StencilFlow.ps1 b/Examples/Visio/Example-Visio-StencilFlow.ps1
index 30937851..82be0756 100644
--- a/Examples/Visio/Example-Visio-StencilFlow.ps1
+++ b/Examples/Visio/Example-Visio-StencilFlow.ps1
@@ -7,14 +7,13 @@ $ErrorActionPreference = 'Stop'
 
 Import-Module PSWriteOffice -ErrorAction Stop
 
-New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $OutputDirectory -ItemType Directory -Force
 $path = Join-Path $OutputDirectory 'Example-Visio-StencilFlow.vsdx'
 $svgPath = Join-Path $OutputDirectory 'Example-Visio-StencilFlow.svg'
 $pngPath = Join-Path $OutputDirectory 'Example-Visio-StencilFlow.png'
 
 New-OfficeVisio -Path $path -Title 'Customer onboarding flow' -Author 'PSWriteOffice' -Width 11 -Height 8.5 -UseMastersByDefault -RequestRecalcOnOpen {
-    Import-OfficeVisioStencil -BuiltIn Flowchart -Name Flow -Default | Out-Null
+    Import-OfficeVisioStencil -BuiltIn Flowchart -Name Flow -Default
 
     VisioTextBox 'Customer onboarding' -X 5.5 -Y 7.55 -Width 5.2 -Height 0.42 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
     VisioTextBox 'A compact, editable flowchart generated from PowerShell and OfficeIMO stencils.' -X 5.5 -Y 7.08 -Width 6.4 -Height 0.32 -FillColor '#FFFFFF' -LineColor '#FFFFFF'
@@ -39,10 +38,10 @@ New-OfficeVisio -Path $path -Title 'Customer onboarding flow' -Author 'PSWriteOf
     VisioConnector -From packet -To done -Kind Straight -FromSide Bottom -ToSide Top -EndArrow Triangle -LineColor '#0F766E'
     VisioConnector -From decision -To rework -Kind Straight -FromSide Bottom -ToSide Top -EndArrow Triangle -Label 'no' -LineColor '#E11D48'
     VisioConnector -From rework -To validate -Kind Straight -FromSide Left -ToSide Bottom -EndArrow Triangle -LineColor '#E11D48'
-} | Out-Null
+}
 
-ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null
-ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null
+ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath
+ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath
 
 if ($Open) {
     Invoke-Item $svgPath
diff --git a/Examples/Visuals/Example-ChartForgeXVisuals.ps1 b/Examples/Visuals/Example-ChartForgeXVisuals.ps1
index 268daa57..560b16f7 100644
--- a/Examples/Visuals/Example-ChartForgeXVisuals.ps1
+++ b/Examples/Visuals/Example-ChartForgeXVisuals.ps1
@@ -4,8 +4,7 @@ Import-Module ImagePlayground -ErrorAction Stop
 Import-Module PSWriteOffice -ErrorAction Stop
 
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $chart = New-ImageTopology -Node @(
     New-ImageTopologyNode -Id api -Label API -Detail (New-ImageTopologyNodeDetail -Label Runtime -Value '.NET 10')
     New-ImageTopologyNode -Id db -Label Database
@@ -21,21 +20,21 @@ $artifact | Export-ImageVisualArtifact -FilePath $svgPath
 $officeVisual = $artifact | ConvertTo-OfficeVisual -Width 420 -SvgPolicy RasterizeWhenNeeded
 
 New-OfficeWord -Path (Join-Path $documents 'service-map.docx') {
-    WordSection { WordParagraph { $officeVisual | Add-OfficeWordVisual | Out-Null } }
-} | Out-Null
+    WordSection { WordParagraph { $officeVisual | Add-OfficeWordVisual  } }
+}
 
 New-OfficeExcel -Path (Join-Path $documents 'service-map.xlsx') {
     Add-OfficeExcelSheet -Name Dashboard -Content {
-        $officeVisual | Add-OfficeExcelVisual -Address B2 | Out-Null
+        $officeVisual | Add-OfficeExcelVisual -Address B2
     }
-} | Out-Null
+}
 
 New-OfficePowerPoint -Path (Join-Path $documents 'service-map.pptx') {
-    PptSlide { $officeVisual | Add-OfficePowerPointVisual -X 48 -Y 72 | Out-Null }
-} | Out-Null
+    PptSlide { $officeVisual | Add-OfficePowerPointVisual -X 48 -Y 72  }
+}
 
 New-OfficePdf -Path (Join-Path $documents 'service-map.pdf') {
     $officeVisual | Add-OfficePdfVisual -Align Center
-} | Out-Null
+}
 
 $officeVisual.Report
diff --git a/Examples/Word/Example-WordAdvanced.ps1 b/Examples/Word/Example-WordAdvanced.ps1
index 25f9df90..633bd323 100644
--- a/Examples/Word/Example-WordAdvanced.ps1
+++ b/Examples/Word/Example-WordAdvanced.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Example-WordAdvanced.docx'
 $data = @(
     [pscustomobject]@{ Item = 'Alpha'; Total = 1200 }
diff --git a/Examples/Word/Example-WordAliasDsl.ps1 b/Examples/Word/Example-WordAliasDsl.ps1
index af8a5326..b9a5ec55 100644
--- a/Examples/Word/Example-WordAliasDsl.ps1
+++ b/Examples/Word/Example-WordAliasDsl.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $orders = @(
     [PSCustomObject]@{ Customer = 'Contoso'; Total = 1850; Status = 'Open' }
     [PSCustomObject]@{ Customer = 'Fabrikam'; Total = 640; Status = 'Closed' }
@@ -40,6 +39,6 @@ New-OfficeWord -Path $docPath {
             WordBold (Get-Date -Format 'yyyy-MM-dd HH:mm')
         }
     }
-} -PassThru | Out-Null
+}
 
 Write-Host "Document saved to $docPath"
diff --git a/Examples/Word/Example-WordBackgroundMailMerge.ps1 b/Examples/Word/Example-WordBackgroundMailMerge.ps1
index 1224980c..6aaa662f 100644
--- a/Examples/Word/Example-WordBackgroundMailMerge.ps1
+++ b/Examples/Word/Example-WordBackgroundMailMerge.ps1
@@ -21,7 +21,7 @@ New-OfficeWord -Path $Path {
         FirstName = 'Ada'
         OrderId   = 4242
     }
-} | Out-Null
+}
 
 Get-OfficeWord -Path $Path -ReadOnly | ForEach-Object {
     try {
@@ -30,6 +30,6 @@ Get-OfficeWord -Path $Path -ReadOnly | ForEach-Object {
         (Find-OfficeWord -Path $Path -Text 'Ada').Count
         (Find-OfficeWord -Path $Path -Text '4242').Count
     } finally {
-        $_.Dispose()
+        $_ | Close-OfficeWord
     }
 }
diff --git a/Examples/Word/Example-WordBasic.ps1 b/Examples/Word/Example-WordBasic.ps1
index 9bc3d79e..18b37448 100644
--- a/Examples/Word/Example-WordBasic.ps1
+++ b/Examples/Word/Example-WordBasic.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $data = @(
     [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; YoY = '12%' }
     [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; YoY = '22%' }
@@ -30,6 +29,6 @@ New-OfficeWord -Path $docPath {
             Add-OfficeWordTableCondition -FilterScript { $_.Revenue -gt 100000 } -BackgroundColor '#e6fffb'
         }
     }
-} -PassThru | Out-Null
+}
 
 Write-Host "Document saved to $docPath"
diff --git a/Examples/Word/Example-WordCharts.ps1 b/Examples/Word/Example-WordCharts.ps1
index d5dbea60..b360fca5 100644
--- a/Examples/Word/Example-WordCharts.ps1
+++ b/Examples/Word/Example-WordCharts.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $rows = @(
     [PSCustomObject]@{ Region = 'North America'; Revenue = 125000 }
     [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000 }
@@ -28,9 +27,13 @@ New-OfficeWord -Path $docPath {
     Add-OfficeWordChart -Type Line -Data $trend -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -XAxisTitle 'Month' -YAxisTitle 'Value' -SeriesColor '#1f77b4', '#ff7f0e'
 
     Add-OfficeWordParagraph -Text 'Pie chart anchored inside a table cell'
-    $table = Add-OfficeWordTable -InputObject $tableRows -Style 'GridTable1LightAccent1' -PassThru
-    $cellParagraph = $table.Rows[1].Cells[1].AddParagraph()
-    Add-OfficeWordChart -Paragraph $cellParagraph -Type Pie -Data $rows -CategoryProperty Region -SeriesProperty Revenue -Title 'Cell Revenue Mix' -WidthPixels 420 -HeightPixels 280
-} | Out-Null
+    Add-OfficeWordTable -InputObject $tableRows -Style 'GridTable1LightAccent1' {
+        WordTableCell -Row 1 -Column 1 {
+            WordParagraph {
+                WordChart -Type Pie -Data $rows -CategoryProperty Region -SeriesProperty Revenue -Title 'Cell Revenue Mix' -WidthPixels 420 -HeightPixels 280
+            }
+        }
+    }
+}
 
 Write-Host "Document saved to $docPath"
diff --git a/Examples/Word/Example-WordFind.ps1 b/Examples/Word/Example-WordFind.ps1
index 5b045ca9..d7a41076 100644
--- a/Examples/Word/Example-WordFind.ps1
+++ b/Examples/Word/Example-WordFind.ps1
@@ -1,18 +1,17 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Word-Find.docx'
 
 New-OfficeWord -Path $path {
     Add-OfficeWordParagraph -Text 'Hello from PSWriteOffice'
-} | Out-Null
+}
 
 $doc = Get-OfficeWord -Path $path
 try {
-    $null = $doc.AddBookmark('Bookmark1')
-    $paragraph = $doc.AddParagraph('Page')
-    $null = $paragraph.AddField([OfficeIMO.Word.WordFieldType]::Page)
+    $paragraph = Add-OfficeWordParagraph -Target $doc -Text 'Page' -PassThru
+    Add-OfficeWordBookmark -Paragraph $paragraph -Name 'Bookmark1'
+    Add-OfficeWordField -Paragraph $paragraph -Type Page
 } finally {
     Close-OfficeWord -Document $doc -Save
 }
diff --git a/Examples/Word/Example-WordHtmlConvert.ps1 b/Examples/Word/Example-WordHtmlConvert.ps1
index aa4b6491..0579379d 100644
--- a/Examples/Word/Example-WordHtmlConvert.ps1
+++ b/Examples/Word/Example-WordHtmlConvert.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $docPath = Join-Path $documents 'Word-HtmlSource.docx'
 $htmlPath = Join-Path $documents 'Word-HtmlSource.html'
 $roundtripPath = Join-Path $documents 'Word-HtmlRoundtrip.docx'
@@ -11,10 +10,10 @@ New-OfficeWord -Path $docPath {
         Add-OfficeWordParagraph -Text 'Hello from HTML conversion.' -Style Heading2
         Add-OfficeWordParagraph -Text 'This document will round-trip to HTML.'
     }
-} | Out-Null
+}
 
-ConvertTo-OfficeWordHtml -Path $docPath -OutputPath $htmlPath -PassThru | Out-Null
-ConvertFrom-OfficeWordHtml -Path $htmlPath -OutputPath $roundtripPath -PassThru | Out-Null
+ConvertTo-OfficeWordHtml -Path $docPath -OutputPath $htmlPath
+ConvertFrom-OfficeWordHtml -Path $htmlPath -OutputPath $roundtripPath
 
 Write-Host "HTML saved to $htmlPath"
 Write-Host "Round-trip document saved to $roundtripPath"
diff --git a/Examples/Word/Example-WordLineBreaks.ps1 b/Examples/Word/Example-WordLineBreaks.ps1
index 415284d8..885352ab 100644
--- a/Examples/Word/Example-WordLineBreaks.ps1
+++ b/Examples/Word/Example-WordLineBreaks.ps1
@@ -1,20 +1,19 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Example-WordLineBreaks.docx'
-$document = New-OfficeWord -Path $path
+$document = New-OfficeWord -Path $path -NoSave
 
-# AddBreak() creates a same-paragraph line break similar to Shift+Enter in Word.
-$paragraph = $document.AddParagraph('Line 1 in the same paragraph')
-$null = $paragraph.AddBreak()
-$null = $paragraph.AddText('Line 2 after AddBreak()')
-$null = $paragraph.AddBreak()
-$null = $paragraph.AddText('Line 3 still in the same paragraph')
+# Add-OfficeWordBreak creates a same-paragraph line break similar to Shift+Enter in Word.
+$paragraph = Add-OfficeWordParagraph -Target $document -Text 'Line 1 in the same paragraph' -PassThru
+Add-OfficeWordBreak -Paragraph $paragraph
+Add-OfficeWordText -Paragraph $paragraph -Text 'Line 2 after the line break'
+Add-OfficeWordBreak -Paragraph $paragraph
+Add-OfficeWordText -Paragraph $paragraph -Text 'Line 3 still in the same paragraph'
 
-# AddParagraph() creates a new paragraph, so an empty paragraph gives a visible blank line.
-$null = $document.AddParagraph()
-$null = $document.AddParagraph('This text comes after an empty paragraph break.')
+# An empty paragraph creates a visible blank line.
+Add-OfficeWordParagraph -Target $document
+Add-OfficeWordParagraph -Target $document -Text 'This text comes after an empty paragraph break.'
 
 Close-OfficeWord -Document $document -Save
 
diff --git a/Examples/Word/Example-WordLinksAndProperties.ps1 b/Examples/Word/Example-WordLinksAndProperties.ps1
index 204fc63d..d8e23bff 100644
--- a/Examples/Word/Example-WordLinksAndProperties.ps1
+++ b/Examples/Word/Example-WordLinksAndProperties.ps1
@@ -19,7 +19,7 @@ New-OfficeWord -Path $Path {
         WordText 'Summary section'
         WordBookmark -Name 'Summary'
     }
-} | Out-Null
+}
 
 $links = Get-OfficeWordHyperlink -Path $Path
 $properties = Get-OfficeWordDocumentProperty -Path $Path
diff --git a/Examples/Word/Example-WordMarkdownConvert.ps1 b/Examples/Word/Example-WordMarkdownConvert.ps1
index e6897b60..984f5536 100644
--- a/Examples/Word/Example-WordMarkdownConvert.ps1
+++ b/Examples/Word/Example-WordMarkdownConvert.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $docPath = Join-Path $documents 'Word-MarkdownSource.docx'
 $markdownPath = Join-Path $documents 'Word-MarkdownSource.md'
 $roundtripPath = Join-Path $documents 'Word-MarkdownRoundtrip.docx'
@@ -13,10 +12,10 @@ New-OfficeWord -Path $docPath {
         Add-OfficeWordListItem -Text 'Alpha'
         Add-OfficeWordListItem -Text 'Beta'
     }
-} | Out-Null
+}
 
-ConvertTo-OfficeWordMarkdown -Path $docPath -OutputPath $markdownPath -PassThru | Out-Null
-ConvertFrom-OfficeWordMarkdown -Path $markdownPath -OutputPath $roundtripPath -PassThru | Out-Null
+ConvertTo-OfficeWordMarkdown -Path $docPath -OutputPath $markdownPath
+ConvertFrom-OfficeWordMarkdown -Path $markdownPath -OutputPath $roundtripPath
 
 Write-Host "Markdown saved to $markdownPath"
 Write-Host "Round-trip document saved to $roundtripPath"
diff --git a/Examples/Word/Example-WordModifyExistingObjects.ps1 b/Examples/Word/Example-WordModifyExistingObjects.ps1
index 3ba4e014..e2027fe3 100644
--- a/Examples/Word/Example-WordModifyExistingObjects.ps1
+++ b/Examples/Word/Example-WordModifyExistingObjects.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Word-ModifyExistingObjects.docx'
 
 $initialRisks = @(
@@ -19,7 +18,7 @@ New-OfficeWord -Path $path {
         WordListItem -Text 'Initial review'
         WordListItem -Text 'Security approval'
     }
-} | Out-Null
+}
 
 # Second pass: treat the file as an existing document that came from a user or template.
 $document = Get-OfficeWord -Path $path
@@ -31,26 +30,21 @@ try {
             Item  = 'Mitigation plan'
             Owner = 'Service Desk'
             State = 'Ready'
-        }) -PassThru |
-        Out-Null
+        }) -PassThru
 
     $riskTable |
-        Add-OfficeWordTableRow -Values 'Release communication', 'Operations', 'Draft' |
-        Out-Null
+        Add-OfficeWordTableRow -Values 'Release communication', 'Operations', 'Draft'
 
     $riskTable |
         Get-OfficeWordTableCell -Row 2 -Column 2 |
-        Set-OfficeWordTableCell -Text 'Investigating' -ShadingFillColor '#fff2cc' -ShadingPattern Clear |
-        Out-Null
+        Set-OfficeWordTableCell -Text 'Investigating' -ShadingFillColor '#fff2cc' -ShadingPattern Clear
 
     Find-OfficeWordList -Document $document -Text 'Initial review' |
-        Add-OfficeWordListItem -Text 'Business sign-off' |
-        Out-Null
+        Add-OfficeWordListItem -Text 'Business sign-off'
 
     Get-OfficeWordList -Document $document |
         Where-Object { $_.ListItems.Text -contains 'Initial review' } |
-        Add-OfficeWordListItem -Text 'Go-live approval' |
-        Out-Null
+        Add-OfficeWordListItem -Text 'Go-live approval'
 } finally {
     Close-OfficeWord -Document $document -Save
 }
diff --git a/Examples/Word/Example-WordProtectionWatermark.ps1 b/Examples/Word/Example-WordProtectionWatermark.ps1
index f6aa6e3e..5ffa2db4 100644
--- a/Examples/Word/Example-WordProtectionWatermark.ps1
+++ b/Examples/Word/Example-WordProtectionWatermark.ps1
@@ -1,13 +1,12 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $path = Join-Path $documents 'Word-ProtectedWatermark.docx'
 
 New-OfficeWord -Path $path {
     Add-OfficeWordParagraph -Text 'Confidential report'
     Add-OfficeWordWatermark -Text 'CONFIDENTIAL'
     Protect-OfficeWordDocument -Password 'secret'
-} | Out-Null
+}
 
 Write-Host "Document saved to $path"
diff --git a/Examples/Word/Example-WordReplaceText.ps1 b/Examples/Word/Example-WordReplaceText.ps1
index e81d8879..59609867 100644
--- a/Examples/Word/Example-WordReplaceText.ps1
+++ b/Examples/Word/Example-WordReplaceText.ps1
@@ -15,7 +15,7 @@ New-OfficeWord -Path $Path {
         WordText 'Summary'
         WordBookmark -Name 'FY24Summary'
     }
-} | Out-Null
+}
 
 Update-OfficeWordText -Path $Path -OldValue 'FY24' -NewValue 'FY25' -IncludeHyperlinkText -IncludeHyperlinkUri -IncludeHyperlinkAnchor -IncludeHyperlinkTooltip
 
diff --git a/Examples/Word/Example-WordTableCalculatedColumns.ps1 b/Examples/Word/Example-WordTableCalculatedColumns.ps1
index 4cfe26fe..cdf114d1 100644
--- a/Examples/Word/Example-WordTableCalculatedColumns.ps1
+++ b/Examples/Word/Example-WordTableCalculatedColumns.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $services = @(
     [PSCustomObject]@{
         Name        = 'Directory API'
@@ -43,6 +42,6 @@ New-OfficeWord -Path $docPath {
     Add-OfficeWordParagraph -Text 'Calculated and projected columns'
     Add-OfficeWordParagraph -Text 'Shape your objects before Add-OfficeWordTable when you want extra columns or friendlier labels.'
     Add-OfficeWordTable -InputObject $tableData -Style 'GridTable1LightAccent1'
-} | Out-Null
+}
 
 Write-Host "Document saved to $docPath"
diff --git a/Examples/Word/Example-WordTableCells.ps1 b/Examples/Word/Example-WordTableCells.ps1
index f4e7e4d1..d11a27c3 100644
--- a/Examples/Word/Example-WordTableCells.ps1
+++ b/Examples/Word/Example-WordTableCells.ps1
@@ -35,7 +35,7 @@ New-OfficeWord -Path $path {
             WordTable -Data $nestedRows -Style TableGrid
         }
     }
-} | Out-Null
+}
 
 Write-Host "Document saved to $path"
 Write-Host "Image fixture saved to $imagePath"
diff --git a/Examples/Word/Example-WordTableConditions.ps1 b/Examples/Word/Example-WordTableConditions.ps1
index dbb3dcae..59452f41 100644
--- a/Examples/Word/Example-WordTableConditions.ps1
+++ b/Examples/Word/Example-WordTableConditions.ps1
@@ -1,7 +1,6 @@
 Import-Module PSWriteOffice -ErrorAction Stop
 $documents = Join-Path $PSScriptRoot '..\Documents'
-New-Item -Path $documents -ItemType Directory -Force | Out-Null
-
+$null = New-Item -Path $documents -ItemType Directory -Force
 $data = @(
     [PSCustomObject]@{ Name = 'Alpha'; Score = 92; Owner = 'Ada' }
     [PSCustomObject]@{ Name = 'Beta'; Score = 76; Owner = 'Linus' }
@@ -18,6 +17,6 @@ New-OfficeWord -Path $docPath {
             WordTableCondition -FilterScript { $_.Score -lt 70 } -BackgroundColor '#ffe6e6'
         }
     }
-} | Out-Null
+}
 
 Write-Host "Document saved to $docPath"
\ No newline at end of file
diff --git a/Examples/Word/Recipe-Word-HtmlToDocument.ps1 b/Examples/Word/Recipe-Word-HtmlToDocument.ps1
index c9775799..0cfd915b 100644
--- a/Examples/Word/Recipe-Word-HtmlToDocument.ps1
+++ b/Examples/Word/Recipe-Word-HtmlToDocument.ps1
@@ -6,4 +6,4 @@ $html = @'
 '@
 
 ConvertFrom-OfficeWordHtml -Html $html -OutputPath '.\Service-Review.docx'
-ConvertTo-OfficeWordMarkdown -FilePath '.\Service-Review.docx' -OutputPath '.\Service-Review.md'
+ConvertTo-OfficeWordMarkdown -Path '.\Service-Review.docx' -OutputPath '.\Service-Review.md'
diff --git a/Examples/Word/Recipe-Word-MergeDocuments.ps1 b/Examples/Word/Recipe-Word-MergeDocuments.ps1
index 42772a99..ec5ae2a6 100644
--- a/Examples/Word/Recipe-Word-MergeDocuments.ps1
+++ b/Examples/Word/Recipe-Word-MergeDocuments.ps1
@@ -23,4 +23,4 @@ WordNew -Path $appendix {
     }
 }
 
-Join-OfficeWordDocument -InputPath $cover -AppendPath $detail,$appendix -OutputPath $merged
+Join-OfficeWordDocument -Path $cover -AppendPath $detail,$appendix -OutputPath $merged
diff --git a/Examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1 b/Examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1
index a446ab53..3bc16ea0 100644
--- a/Examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1
+++ b/Examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1
@@ -10,5 +10,5 @@ $document | Save-OfficeMarkdown -Path $markdownPath
 
 ConvertFrom-OfficeWordMarkdown -Document $document -OutputPath $wordPath
 $word = Get-OfficeWord -Path $wordPath
-$word | Save-OfficeWord -PdfPath $pdfPath
+$word | Export-OfficeDocumentPdf -Path $pdfPath
 $word | Close-OfficeWord
diff --git a/PSWriteOffice.psd1 b/PSWriteOffice.psd1
index 02aba850..3f34f5b5 100644
--- a/PSWriteOffice.psd1
+++ b/PSWriteOffice.psd1
@@ -1,7 +1,7 @@
 @{
     AliasesToExport        = @('Compare-OfficeExcelSheet', 'ConvertFrom-MarkdownHtml', 'ConvertFrom-PdfHtml', 'ConvertFrom-Rtf', 'ConvertFrom-WordHtml', 'ConvertFrom-WordMarkdown', 'ConvertTo-ExcelHtml', 'ConvertTo-MarkdownHtml', 'ConvertTo-PdfExcel', 'ConvertTo-PdfHtml', 'ConvertTo-PdfPowerPoint', 'ConvertTo-PdfWord', 'ConvertTo-PowerPointHtml', 'ConvertTo-Rtf', 'ConvertTo-VisioPng', 'ConvertTo-VisioSvg', 'ConvertTo-WordHtml', 'ConvertTo-WordMarkdown', 'Edit-ExcelRow', 'ExcelAccessibility', 'ExcelActiveSheet', 'ExcelAutoFilter', 'ExcelAutoFilterClear', 'ExcelAutoFilterSet', 'ExcelAutoFit', 'ExcelCell', 'ExcelChart', 'ExcelChartAxis', 'ExcelChartPoint', 'ExcelChartSeries', 'ExcelChartTrendline', 'ExcelColumn', 'ExcelColumnGroup', 'ExcelColumnStyle', 'ExcelColumnStyleByHeader', 'ExcelComment', 'ExcelCommentAudit', 'ExcelCommentClear', 'ExcelCommentRemove', 'ExcelComments', 'ExcelCommentsAudit', 'ExcelCommentUpdate', 'ExcelCompare', 'ExcelConditionalColorScale', 'ExcelConditionalDataBar', 'ExcelConditionalFormatting', 'ExcelConditionalFormattingClear', 'ExcelConditionalIconSet', 'ExcelConditionalRule', 'ExcelConnectionMetadata', 'ExcelCsvImport', 'ExcelDashboard', 'ExcelDashboardChart', 'ExcelDataModel', 'ExcelDataSet', 'ExcelDataValidation', 'ExcelDataValidationClear', 'ExcelDataValidationMessage', 'ExcelDateSystem', 'ExcelDelimitedImport', 'ExcelDoctor', 'ExcelExecutionPolicy', 'ExcelExport', 'ExcelFormula', 'ExcelFormulaAnalysis', 'ExcelFormulaAudit', 'ExcelFreeze', 'ExcelGridlines', 'ExcelHeaderFooter', 'ExcelHyperlink', 'ExcelHyperlinkHost', 'ExcelHyperlinkSmart', 'ExcelImage', 'ExcelImageFromUrl', 'ExcelImport', 'ExcelInternalLinks', 'ExcelInternalLinksByHeader', 'ExcelMargins', 'ExcelNamedRange', 'ExcelNamedRangeRemove', 'ExcelNamedRangeRename', 'ExcelNew', 'ExcelNumberFormatPreset', 'ExcelOrientation', 'ExcelPackageCopy', 'ExcelPackageMetadata', 'ExcelPageBreak', 'ExcelPageBreakClear', 'ExcelPageBreaks', 'ExcelPageSetup', 'ExcelPivotTable', 'ExcelPivotTables', 'ExcelPowerQuery', 'ExcelPowerQueryMetadata', 'ExcelPreflight', 'ExcelPrintArea', 'ExcelPrintLayout', 'ExcelPrintTitles', 'ExcelProtect', 'ExcelQueryMetadata', 'ExcelRangeClear', 'ExcelRefreshOnOpen', 'ExcelRepair', 'ExcelReportCallout', 'ExcelReportKpiRow', 'ExcelReportLegend', 'ExcelReportParagraph', 'ExcelReportSection', 'ExcelReportSheet', 'ExcelReportSpacer', 'ExcelReportTable', 'ExcelReportTitle', 'ExcelRichText', 'ExcelRichTextRuns', 'ExcelRow', 'ExcelRowEdit', 'ExcelRowGroup', 'ExcelRuntimePreflight', 'ExcelSheet', 'ExcelSheetCopy', 'ExcelSheetJoin', 'ExcelSheetMerge', 'ExcelSheetOrder', 'ExcelSheetTabColor', 'ExcelSheetView', 'ExcelSheetVisibility', 'ExcelSlicer', 'ExcelSort', 'ExcelSparkline', 'ExcelStreamingContract', 'ExcelSubtotals', 'ExcelSubtotalSummary', 'ExcelSummary', 'ExcelTable', 'ExcelTableOfContents', 'ExcelTableStyle', 'ExcelTemplate', 'ExcelTemplateApply', 'ExcelTemplateBinding', 'ExcelTemplateMarkers', 'ExcelTemplateOptionalRow', 'ExcelTemplateOptionalRows', 'ExcelTemplateRow', 'ExcelTemplateRows', 'ExcelTemplateSheet', 'ExcelTemplateSheets', 'ExcelTemplateValidate', 'ExcelTextRun', 'ExcelTheme', 'ExcelThreadedComment', 'ExcelTimeline', 'ExcelUnprotect', 'ExcelUrlLinks', 'ExcelUrlLinksByHeader', 'ExcelValidationCustomFormula', 'ExcelValidationDate', 'ExcelValidationDecimal', 'ExcelValidationList', 'ExcelValidationTextLength', 'ExcelValidationTime', 'ExcelValidationWholeNumber', 'ExcelVisual', 'ExcelWorkbookCompare', 'ExcelWorkbookCopy', 'ExcelWorkbookDoctor', 'ExcelWorkbookJoin', 'ExcelWorkbookMerge', 'ExcelWorkbookProtect', 'ExcelWorkbookRepair', 'ExcelWorkbookUnprotect', 'ExcelWorksheetView', 'ExcelWriteReservation', 'ExcelWriteReservationClear', 'ExcelWriteReservationSet', 'Export-OfficeDocumentAsset', 'Export-VisioStencilPreviewGallery', 'Find-VisioStencil', 'Get-OfficeReaderCapability', 'Import-VisioStencil', 'MarkdownCallout', 'MarkdownCode', 'MarkdownDefinitionList', 'MarkdownDetails', 'MarkdownFrontMatter', 'MarkdownHeading', 'MarkdownHorizontalRule', 'MarkdownHr', 'MarkdownImage', 'MarkdownList', 'MarkdownNew', 'MarkdownParagraph', 'MarkdownQuote', 'MarkdownTable', 'MarkdownTableOfContents', 'MarkdownTaskList', 'MarkdownToc', 'Merge-OfficeExcelSheet', 'Merge-OfficeExcelWorkbook', 'Merge-OfficeWordDocument', 'New-VisioGallery', 'OfficeVisual', 'PdfAttachment', 'PdfBackground', 'PdfBackgroundImage', 'PdfBackgroundShape', 'PdfBookmark', 'PdfCanvasStamp', 'PdfCanvasText', 'PdfCompliance', 'PdfElectronicInvoice', 'PdfFooter', 'PdfFormField', 'PdfHeader', 'PdfHeading', 'PdfHorizontalRule', 'PdfHr', 'PdfImage', 'PdfList', 'PdfMetadata', 'PdfNativeTextRun', 'PdfNew', 'PdfPageBorder', 'PdfPageBreak', 'PdfPageOverlay', 'PdfPageSetup', 'PdfPanel', 'PdfParagraph', 'PdfRow', 'PdfSpace', 'PdfSpacer', 'PdfStamp', 'PdfTable', 'PdfTableCell', 'PdfTableCellCheckBox', 'PdfTableCellField', 'PdfTableCellImage', 'PdfText', 'PdfTextRun', 'PdfTheme', 'PdfVisual', 'PdfWatermark', 'PowerPointNew', 'PowerPointTextRun', 'PptArrange', 'PptBackground', 'PptBullets', 'PptChart', 'PptDeckPlan', 'PptDesignerDeck', 'PptImage', 'PptLayoutBox', 'PptLayoutPlaceholderBounds', 'PptLayoutPlaceholderMargins', 'PptLayoutPlaceholders', 'PptLayoutPlaceholderTextStyle', 'PptNew', 'PptNotes', 'PptPlaceholderText', 'PptPlanCapability', 'PptPlanCardGrid', 'PptPlanCaseStudy', 'PptPlanCoverage', 'PptPlanLogoWall', 'PptPlanProcess', 'PptPlanSection', 'PptSection', 'PptShape', 'PptShapeLayout', 'PptSlide', 'PptSlideLayout', 'PptSlideSize', 'PptTable', 'PptTextBox', 'PptTextRun', 'PptTheme', 'PptThemeColor', 'PptThemeFonts', 'PptThemeName', 'PptTitle', 'PptTransition', 'PptVisual', 'Read-OfficeDocument', 'Read-OfficeDocumentAsset', 'Read-OfficeDocumentChunk', 'Read-OfficeDocumentTable', 'Read-OfficeDocumentVisual', 'Replace-OfficeExcelText', 'Replace-OfficePowerPointText', 'Replace-OfficeRtfText', 'Replace-OfficeWordText', 'RtfNew', 'RtfOpen', 'RtfText', 'Set-OfficeExcelSheetOrder', 'TextRun', 'VisioArrange', 'VisioConnector', 'VisioContainer', 'VisioDiamond', 'VisioEllipse', 'VisioInfo', 'VisioLayout', 'VisioNew', 'VisioOpen', 'VisioPage', 'VisioRect', 'VisioRectangle', 'VisioSave', 'VisioStencil', 'VisioStencilCatalog', 'VisioText', 'VisioTextBox', 'WordBold', 'WordBookmark', 'WordBreak', 'WordChart', 'WordCheckBox', 'WordCheckBoxes', 'WordComboBox', 'WordComboBoxes', 'WordContentControl', 'WordContentControls', 'WordCoverPage', 'WordDatePicker', 'WordDatePickers', 'WordDocumentJoin', 'WordDropDownList', 'WordDropDownLists', 'WordEndnote', 'WordEndnotes', 'WordEquation', 'WordField', 'WordFooter', 'WordFootnote', 'WordFootnotes', 'WordHeader', 'WordHyperlink', 'WordImage', 'WordImages', 'WordImageStyle', 'WordItalic', 'WordList', 'WordListItem', 'WordNew', 'WordPageNumber', 'WordPageSetup', 'WordParagraph', 'WordParagraphStyle', 'WordPictureControl', 'WordPictureControls', 'WordRepeatingSection', 'WordRepeatingSections', 'WordSection', 'WordShape', 'WordShapes', 'WordShapeStyle', 'WordStatistics', 'WordTable', 'WordTableCell', 'WordTableCells', 'WordTableCellSpec', 'WordTableCellStyle', 'WordTableCondition', 'WordTableOfContents', 'WordTabStop', 'WordText', 'WordTextBox', 'WordTextRun', 'WordTextStyle', 'WordVisual', 'WordWatermark')
     Author                 = 'Przemyslaw Klys'
-    CmdletsToExport        = @('Add-OfficeExcelAutoFilter', 'Add-OfficeExcelChart', 'Add-OfficeExcelComment', 'Add-OfficeExcelConditionalColorScale', 'Add-OfficeExcelConditionalDataBar', 'Add-OfficeExcelConditionalIconSet', 'Add-OfficeExcelConditionalRule', 'Add-OfficeExcelDashboardChart', 'Add-OfficeExcelDataSet', 'Add-OfficeExcelImage', 'Add-OfficeExcelImageFromUrl', 'Add-OfficeExcelPackageMetadata', 'Add-OfficeExcelPageBreak', 'Add-OfficeExcelPivotTable', 'Add-OfficeExcelPowerQueryMetadata', 'Add-OfficeExcelReportCallout', 'Add-OfficeExcelReportKpiRow', 'Add-OfficeExcelReportLegend', 'Add-OfficeExcelReportParagraph', 'Add-OfficeExcelReportSection', 'Add-OfficeExcelReportSheet', 'Add-OfficeExcelReportSpacer', 'Add-OfficeExcelReportTable', 'Add-OfficeExcelReportTitle', 'Add-OfficeExcelSheet', 'Add-OfficeExcelSlicer', 'Add-OfficeExcelSparkline', 'Add-OfficeExcelSubtotalSummary', 'Add-OfficeExcelTable', 'Add-OfficeExcelTableOfContents', 'Add-OfficeExcelTableRow', 'Add-OfficeExcelThreadedComment', 'Add-OfficeExcelTimeline', 'Add-OfficeExcelValidationCustomFormula', 'Add-OfficeExcelValidationDate', 'Add-OfficeExcelValidationDecimal', 'Add-OfficeExcelValidationList', 'Add-OfficeExcelValidationTextLength', 'Add-OfficeExcelValidationTime', 'Add-OfficeExcelValidationWholeNumber', 'Add-OfficeExcelVisual', 'Add-OfficeMarkdownCallout', 'Add-OfficeMarkdownCode', 'Add-OfficeMarkdownDefinitionList', 'Add-OfficeMarkdownDetails', 'Add-OfficeMarkdownFrontMatter', 'Add-OfficeMarkdownHeading', 'Add-OfficeMarkdownHorizontalRule', 'Add-OfficeMarkdownImage', 'Add-OfficeMarkdownList', 'Add-OfficeMarkdownParagraph', 'Add-OfficeMarkdownQuote', 'Add-OfficeMarkdownTable', 'Add-OfficeMarkdownTableOfContents', 'Add-OfficeMarkdownTaskList', 'Add-OfficePdfAttachment', 'Add-OfficePdfBackgroundShape', 'Add-OfficePdfBookmark', 'Add-OfficePdfCanvas', 'Add-OfficePdfCanvasText', 'Add-OfficePdfFormField', 'Add-OfficePdfHeading', 'Add-OfficePdfHorizontalRule', 'Add-OfficePdfImage', 'Add-OfficePdfList', 'Add-OfficePdfPageBreak', 'Add-OfficePdfPageOverlay', 'Add-OfficePdfPanel', 'Add-OfficePdfParagraph', 'Add-OfficePdfRow', 'Add-OfficePdfSpacer', 'Add-OfficePdfStamp', 'Add-OfficePdfTable', 'Add-OfficePdfText', 'Add-OfficePdfVisual', 'Add-OfficePdfWatermark', 'Add-OfficePowerPointBullets', 'Add-OfficePowerPointChart', 'Add-OfficePowerPointDesignerDeck', 'Add-OfficePowerPointImage', 'Add-OfficePowerPointPlanCapability', 'Add-OfficePowerPointPlanCardGrid', 'Add-OfficePowerPointPlanCaseStudy', 'Add-OfficePowerPointPlanCoverage', 'Add-OfficePowerPointPlanLogoWall', 'Add-OfficePowerPointPlanProcess', 'Add-OfficePowerPointPlanSection', 'Add-OfficePowerPointSection', 'Add-OfficePowerPointShape', 'Add-OfficePowerPointSlide', 'Add-OfficePowerPointTable', 'Add-OfficePowerPointTableRow', 'Add-OfficePowerPointTextBox', 'Add-OfficePowerPointVisual', 'Add-OfficeVisioConnector', 'Add-OfficeVisioContainer', 'Add-OfficeVisioDiamond', 'Add-OfficeVisioEllipse', 'Add-OfficeVisioPage', 'Add-OfficeVisioRectangle', 'Add-OfficeVisioStencilShape', 'Add-OfficeVisioTextBox', 'Add-OfficeWordBookmark', 'Add-OfficeWordBreak', 'Add-OfficeWordChart', 'Add-OfficeWordCheckBox', 'Add-OfficeWordComboBox', 'Add-OfficeWordContentControl', 'Add-OfficeWordCoverPage', 'Add-OfficeWordDatePicker', 'Add-OfficeWordDropDownList', 'Add-OfficeWordEndnote', 'Add-OfficeWordEquation', 'Add-OfficeWordField', 'Add-OfficeWordFooter', 'Add-OfficeWordFootnote', 'Add-OfficeWordHeader', 'Add-OfficeWordHyperlink', 'Add-OfficeWordImage', 'Add-OfficeWordList', 'Add-OfficeWordListItem', 'Add-OfficeWordPageNumber', 'Add-OfficeWordParagraph', 'Add-OfficeWordPictureControl', 'Add-OfficeWordRepeatingSection', 'Add-OfficeWordSection', 'Add-OfficeWordShape', 'Add-OfficeWordTable', 'Add-OfficeWordTableCell', 'Add-OfficeWordTableCondition', 'Add-OfficeWordTableOfContents', 'Add-OfficeWordTableRow', 'Add-OfficeWordTabStop', 'Add-OfficeWordText', 'Add-OfficeWordTextBox', 'Add-OfficeWordVisual', 'Add-OfficeWordWatermark', 'Clear-OfficeExcelAutoFilter', 'Clear-OfficeExcelComment', 'Clear-OfficeExcelConditionalFormatting', 'Clear-OfficeExcelDataValidation', 'Clear-OfficeExcelPageBreak', 'Clear-OfficeExcelRange', 'Clear-OfficeExcelWriteReservation', 'Clear-OfficePdfBackgroundShape', 'Close-OfficeExcel', 'Close-OfficePowerPoint', 'Close-OfficeWord', 'Compare-OfficeExcelRange', 'Compare-OfficeExcelWorkbook', 'Compare-OfficePdfVisual', 'Compare-OfficeWordDocument', 'ConvertFrom-OfficeAsciiDocMarkdown', 'ConvertFrom-OfficeCsv', 'ConvertFrom-OfficeLatexMarkdown', 'ConvertFrom-OfficeMarkdownHtml', 'ConvertFrom-OfficeOpenDocument', 'ConvertFrom-OfficePdfHtml', 'ConvertFrom-OfficeRtf', 'ConvertFrom-OfficeWordHtml', 'ConvertFrom-OfficeWordMarkdown', 'ConvertTo-OfficeAsciiDocMarkdown', 'ConvertTo-OfficeCsv', 'ConvertTo-OfficeExcelHtml', 'ConvertTo-OfficeExcelWorkbook', 'ConvertTo-OfficeLatexMarkdown', 'ConvertTo-OfficeMarkdown', 'ConvertTo-OfficeMarkdownHtml', 'ConvertTo-OfficeOpenDocument', 'ConvertTo-OfficePdfExcel', 'ConvertTo-OfficePdfFlatAnnotation', 'ConvertTo-OfficePdfFlatForm', 'ConvertTo-OfficePdfHtml', 'ConvertTo-OfficePdfMarkdown', 'ConvertTo-OfficePdfOptimized', 'ConvertTo-OfficePdfPowerPoint', 'ConvertTo-OfficePdfRedacted', 'ConvertTo-OfficePdfSanitized', 'ConvertTo-OfficePdfTextRun', 'ConvertTo-OfficePdfWord', 'ConvertTo-OfficePowerPointHtml', 'ConvertTo-OfficeRtf', 'ConvertTo-OfficeVisioPng', 'ConvertTo-OfficeVisioSvg', 'ConvertTo-OfficeVisioVisual', 'ConvertTo-OfficeVisual', 'ConvertTo-OfficeWordDocument', 'ConvertTo-OfficeWordHtml', 'ConvertTo-OfficeWordMarkdown', 'Copy-OfficeExcelSheet', 'Copy-OfficeExcelWorkbook', 'Copy-OfficePdfPage', 'Copy-OfficePowerPointSlide', 'Edit-OfficeExcelRow', 'Export-OfficeCsv', 'Export-OfficeExcel', 'Export-OfficeExcelChartImage', 'Export-OfficeExcelGoogleSpreadsheet', 'Export-OfficeExcelImage', 'Export-OfficeExcelRangeImage', 'Export-OfficeHtmlImage', 'Export-OfficePdfImage', 'Export-OfficePdfLayoutOverlay', 'Export-OfficePdfXfdf', 'Export-OfficePowerPointImage', 'Export-OfficeVisioImage', 'Export-OfficeVisioStencilPreviewGallery', 'Export-OfficeVisioVisual', 'Export-OfficeWordGoogleDocument', 'Export-OfficeWordImage', 'Find-OfficeExcel', 'Find-OfficePowerPointShape', 'Find-OfficeVisioStencil', 'Find-OfficeWord', 'Find-OfficeWordList', 'Find-OfficeWordTable', 'Get-OfficeAsciiDoc', 'Get-OfficeConfluenceAttachment', 'Get-OfficeConfluencePage', 'Get-OfficeCsv', 'Get-OfficeDocument', 'Get-OfficeDocumentAsset', 'Get-OfficeDocumentBatch', 'Get-OfficeDocumentCapability', 'Get-OfficeDocumentChunk', 'Get-OfficeDocumentDetection', 'Get-OfficeDocumentHierarchy', 'Get-OfficeDocumentIngest', 'Get-OfficeDocumentPageMarkdown', 'Get-OfficeDocumentStructured', 'Get-OfficeDocumentTable', 'Get-OfficeDocumentVisual', 'Get-OfficeEmail', 'Get-OfficeEmailMailbox', 'Get-OfficeExcel', 'Get-OfficeExcelComment', 'Get-OfficeExcelCommentAudit', 'Get-OfficeExcelConditionalFormatting', 'Get-OfficeExcelData', 'Get-OfficeExcelDataModel', 'Get-OfficeExcelDataValidation', 'Get-OfficeExcelDocumentProperty', 'Get-OfficeExcelFormulaAnalysis', 'Get-OfficeExcelNamedRange', 'Get-OfficeExcelNumberFormatPreset', 'Get-OfficeExcelPageBreak', 'Get-OfficeExcelPivotTable', 'Get-OfficeExcelPreflight', 'Get-OfficeExcelRange', 'Get-OfficeExcelRichText', 'Get-OfficeExcelRuntimePreflight', 'Get-OfficeExcelStreamingContract', 'Get-OfficeExcelSummary', 'Get-OfficeExcelTable', 'Get-OfficeExcelTableStyle', 'Get-OfficeExcelTemplateMarker', 'Get-OfficeExcelUsedRange', 'Get-OfficeExcelWorksheetView', 'Get-OfficeExcelWriteReservation', 'Get-OfficeLatex', 'Get-OfficeMarkdown', 'Get-OfficeMarkdownFrontMatter', 'Get-OfficeMarkdownHeading', 'Get-OfficeMarkdownNode', 'Get-OfficeMarkdownTable', 'Get-OfficeOpenDocument', 'Get-OfficePdf', 'Get-OfficePdfAnnotation', 'Get-OfficePdfAppendOnlyMutation', 'Get-OfficePdfAttachment', 'Get-OfficePdfCompliance', 'Get-OfficePdfDiagnostic', 'Get-OfficePdfFont', 'Get-OfficePdfFormField', 'Get-OfficePdfImage', 'Get-OfficePdfInfo', 'Get-OfficePdfInteractionMap', 'Get-OfficePdfOptimization', 'Get-OfficePdfPreflight', 'Get-OfficePdfRedactionPlan', 'Get-OfficePdfSignature', 'Get-OfficePdfText', 'Get-OfficePdfTextDiagnostic', 'Get-OfficePowerPoint', 'Get-OfficePowerPointInspection', 'Get-OfficePowerPointLayout', 'Get-OfficePowerPointLayoutBox', 'Get-OfficePowerPointLayoutPlaceholder', 'Get-OfficePowerPointNotes', 'Get-OfficePowerPointPlaceholder', 'Get-OfficePowerPointSection', 'Get-OfficePowerPointShape', 'Get-OfficePowerPointSlide', 'Get-OfficePowerPointSlideSummary', 'Get-OfficePowerPointTheme', 'Get-OfficeProtectionCapability', 'Get-OfficeRtf', 'Get-OfficeVisio', 'Get-OfficeVisioInfo', 'Get-OfficeVisioStencilCatalog', 'Get-OfficeWord', 'Get-OfficeWordBookmark', 'Get-OfficeWordCheckBox', 'Get-OfficeWordComboBox', 'Get-OfficeWordContentControl', 'Get-OfficeWordDatePicker', 'Get-OfficeWordDocumentProperty', 'Get-OfficeWordDropDownList', 'Get-OfficeWordEndnote', 'Get-OfficeWordField', 'Get-OfficeWordFootnote', 'Get-OfficeWordHyperlink', 'Get-OfficeWordImage', 'Get-OfficeWordList', 'Get-OfficeWordParagraph', 'Get-OfficeWordPictureControl', 'Get-OfficeWordRepeatingSection', 'Get-OfficeWordReview', 'Get-OfficeWordSection', 'Get-OfficeWordShape', 'Get-OfficeWordStatistics', 'Get-OfficeWordTable', 'Get-OfficeWordTableCell', 'Get-OfficeWordTableOfContents', 'Get-OfficeWordText', 'Import-OfficeCsv', 'Import-OfficeExcel', 'Import-OfficeExcelDelimitedText', 'Import-OfficePdfXfdf', 'Import-OfficePowerPointSlide', 'Import-OfficeVisioStencil', 'Invoke-OfficeExcelAutoFit', 'Invoke-OfficeExcelSort', 'Invoke-OfficeExcelTemplate', 'Invoke-OfficeExcelTemplateOptionalRow', 'Invoke-OfficeExcelTemplateRow', 'Invoke-OfficeExcelTemplateSheet', 'Invoke-OfficePdfOcrMerge', 'Invoke-OfficeWordMailMerge', 'Join-OfficeExcelSheet', 'Join-OfficeExcelWorkbook', 'Join-OfficePdf', 'Join-OfficeWordDocument', 'Move-OfficeExcelSheet', 'Move-OfficePdfPage', 'New-OfficeConfluenceSession', 'New-OfficeDocumentReader', 'New-OfficeExcel', 'New-OfficeExcelDashboard', 'New-OfficeMarkdown', 'New-OfficeOpenDocument', 'New-OfficePdf', 'New-OfficePdfSignature', 'New-OfficePdfTableCell', 'New-OfficePdfTableCellCheckBox', 'New-OfficePdfTableCellField', 'New-OfficePdfTableCellImage', 'New-OfficePowerPoint', 'New-OfficePowerPointDeckPlan', 'New-OfficeRtf', 'New-OfficeTextRun', 'New-OfficeVisio', 'New-OfficeVisioGallery', 'New-OfficeWord', 'New-OfficeWordTableCell', 'Protect-OfficeExcelSheet', 'Protect-OfficeExcelWorkbook', 'Protect-OfficeWordDocument', 'Publish-OfficeConfluencePage', 'Remove-OfficeConfluencePage', 'Remove-OfficeExcelComment', 'Remove-OfficeExcelNamedRange', 'Remove-OfficePdfAnnotation', 'Remove-OfficePdfPage', 'Remove-OfficePowerPointSlide', 'Remove-OfficeWordTableOfContents', 'Rename-OfficeExcelNamedRange', 'Rename-OfficePowerPointSection', 'Repair-OfficeExcelWorkbook', 'Resolve-OfficeWordRevision', 'Save-OfficeAsciiDoc', 'Save-OfficeEmail', 'Save-OfficeEmailMailbox', 'Save-OfficeExcel', 'Save-OfficeLatex', 'Save-OfficeMarkdown', 'Save-OfficeOpenDocument', 'Save-OfficePdf', 'Save-OfficePowerPoint', 'Save-OfficeVisio', 'Save-OfficeWord', 'Search-OfficeDocument', 'Send-OfficeConfluenceAttachment', 'Set-OfficeConfluenceManagedSection', 'Set-OfficeExcelActiveSheet', 'Set-OfficeExcelAutoFilter', 'Set-OfficeExcelCell', 'Set-OfficeExcelChartAxis', 'Set-OfficeExcelChartDataLabels', 'Set-OfficeExcelChartLegend', 'Set-OfficeExcelChartPoint', 'Set-OfficeExcelChartSeries', 'Set-OfficeExcelChartStyle', 'Set-OfficeExcelChartTrendline', 'Set-OfficeExcelColumn', 'Set-OfficeExcelColumnGroup', 'Set-OfficeExcelColumnStyleByHeader', 'Set-OfficeExcelDataValidationMessage', 'Set-OfficeExcelDateSystem', 'Set-OfficeExcelDocumentProperty', 'Set-OfficeExcelExecutionPolicy', 'Set-OfficeExcelFormula', 'Set-OfficeExcelFreeze', 'Set-OfficeExcelGridlines', 'Set-OfficeExcelHeaderFooter', 'Set-OfficeExcelHostHyperlink', 'Set-OfficeExcelHyperlink', 'Set-OfficeExcelInternalLinks', 'Set-OfficeExcelInternalLinksByHeader', 'Set-OfficeExcelMargins', 'Set-OfficeExcelNamedRange', 'Set-OfficeExcelOrientation', 'Set-OfficeExcelPageSetup', 'Set-OfficeExcelPrintArea', 'Set-OfficeExcelPrintLayout', 'Set-OfficeExcelPrintTitles', 'Set-OfficeExcelRefreshOnOpen', 'Set-OfficeExcelRichText', 'Set-OfficeExcelRow', 'Set-OfficeExcelRowGroup', 'Set-OfficeExcelSheetTabColor', 'Set-OfficeExcelSheetVisibility', 'Set-OfficeExcelSmartHyperlink', 'Set-OfficeExcelTheme', 'Set-OfficeExcelUrlLinks', 'Set-OfficeExcelUrlLinksByHeader', 'Set-OfficeExcelWorksheetView', 'Set-OfficeExcelWriteReservation', 'Set-OfficePdfAnnotation', 'Set-OfficePdfBackground', 'Set-OfficePdfBackgroundImage', 'Set-OfficePdfCompliance', 'Set-OfficePdfElectronicInvoice', 'Set-OfficePdfFooter', 'Set-OfficePdfForm', 'Set-OfficePdfHeader', 'Set-OfficePdfMetadata', 'Set-OfficePdfPage', 'Set-OfficePdfPageBorder', 'Set-OfficePdfPageSetup', 'Set-OfficePdfSignature', 'Set-OfficePdfTheme', 'Set-OfficePowerPointBackground', 'Set-OfficePowerPointLayoutPlaceholderBounds', 'Set-OfficePowerPointLayoutPlaceholderTextMargins', 'Set-OfficePowerPointLayoutPlaceholderTextStyle', 'Set-OfficePowerPointNotes', 'Set-OfficePowerPointPlaceholderText', 'Set-OfficePowerPointShapeLayout', 'Set-OfficePowerPointShapeText', 'Set-OfficePowerPointSlideLayout', 'Set-OfficePowerPointSlideSize', 'Set-OfficePowerPointSlideTitle', 'Set-OfficePowerPointSlideTransition', 'Set-OfficePowerPointTableCell', 'Set-OfficePowerPointThemeColor', 'Set-OfficePowerPointThemeFonts', 'Set-OfficePowerPointThemeName', 'Set-OfficeVisioShapeLayout', 'Set-OfficeWordBackground', 'Set-OfficeWordDocumentProperty', 'Set-OfficeWordImage', 'Set-OfficeWordPageSetup', 'Set-OfficeWordParagraphStyle', 'Set-OfficeWordShape', 'Set-OfficeWordTableCell', 'Set-OfficeWordTableOfContents', 'Set-OfficeWordTextStyle', 'Split-OfficePdf', 'Test-OfficeExcelAccessibility', 'Test-OfficeExcelTemplateBinding', 'Test-OfficeExcelWorkbook', 'Test-OfficePdfRewrite', 'Unprotect-OfficeExcelSheet', 'Unprotect-OfficeExcelWorkbook', 'Update-OfficeExcelComment', 'Update-OfficeExcelText', 'Update-OfficePowerPointText', 'Update-OfficeRtfText', 'Update-OfficeWordFields', 'Update-OfficeWordTableOfContents', 'Update-OfficeWordText')
+    CmdletsToExport        = @('Add-OfficeExcelAutoFilter', 'Add-OfficeExcelChart', 'Add-OfficeExcelComment', 'Add-OfficeExcelConditionalColorScale', 'Add-OfficeExcelConditionalDataBar', 'Add-OfficeExcelConditionalIconSet', 'Add-OfficeExcelConditionalRule', 'Add-OfficeExcelDashboardChart', 'Add-OfficeExcelDataSet', 'Add-OfficeExcelImage', 'Add-OfficeExcelImageFromUrl', 'Add-OfficeExcelPackageMetadata', 'Add-OfficeExcelPageBreak', 'Add-OfficeExcelPivotTable', 'Add-OfficeExcelPowerQueryMetadata', 'Add-OfficeExcelReportCallout', 'Add-OfficeExcelReportKpiRow', 'Add-OfficeExcelReportLegend', 'Add-OfficeExcelReportParagraph', 'Add-OfficeExcelReportSection', 'Add-OfficeExcelReportSheet', 'Add-OfficeExcelReportSpacer', 'Add-OfficeExcelReportTable', 'Add-OfficeExcelReportTitle', 'Add-OfficeExcelSheet', 'Add-OfficeExcelSlicer', 'Add-OfficeExcelSparkline', 'Add-OfficeExcelSubtotalSummary', 'Add-OfficeExcelTable', 'Add-OfficeExcelTableOfContents', 'Add-OfficeExcelTableRow', 'Add-OfficeExcelThreadedComment', 'Add-OfficeExcelTimeline', 'Add-OfficeExcelValidationCustomFormula', 'Add-OfficeExcelValidationDate', 'Add-OfficeExcelValidationDecimal', 'Add-OfficeExcelValidationList', 'Add-OfficeExcelValidationTextLength', 'Add-OfficeExcelValidationTime', 'Add-OfficeExcelValidationWholeNumber', 'Add-OfficeExcelVisual', 'Add-OfficeMarkdownCallout', 'Add-OfficeMarkdownCode', 'Add-OfficeMarkdownDefinitionList', 'Add-OfficeMarkdownDetails', 'Add-OfficeMarkdownFrontMatter', 'Add-OfficeMarkdownHeading', 'Add-OfficeMarkdownHorizontalRule', 'Add-OfficeMarkdownImage', 'Add-OfficeMarkdownList', 'Add-OfficeMarkdownParagraph', 'Add-OfficeMarkdownQuote', 'Add-OfficeMarkdownTable', 'Add-OfficeMarkdownTableOfContents', 'Add-OfficeMarkdownTaskList', 'Add-OfficeOpenDocumentHeading', 'Add-OfficeOpenDocumentParagraph', 'Add-OfficeOpenDocumentSheet', 'Add-OfficeOpenDocumentSlide', 'Add-OfficeOpenDocumentTextBox', 'Add-OfficePdfAttachment', 'Add-OfficePdfBackgroundShape', 'Add-OfficePdfBookmark', 'Add-OfficePdfCanvas', 'Add-OfficePdfCanvasText', 'Add-OfficePdfFormField', 'Add-OfficePdfHeading', 'Add-OfficePdfHorizontalRule', 'Add-OfficePdfImage', 'Add-OfficePdfList', 'Add-OfficePdfPageBreak', 'Add-OfficePdfPageOverlay', 'Add-OfficePdfPanel', 'Add-OfficePdfParagraph', 'Add-OfficePdfRow', 'Add-OfficePdfSpacer', 'Add-OfficePdfStamp', 'Add-OfficePdfTable', 'Add-OfficePdfText', 'Add-OfficePdfVisual', 'Add-OfficePdfWatermark', 'Add-OfficePowerPointBullets', 'Add-OfficePowerPointChart', 'Add-OfficePowerPointDesignerDeck', 'Add-OfficePowerPointImage', 'Add-OfficePowerPointPlanCapability', 'Add-OfficePowerPointPlanCardGrid', 'Add-OfficePowerPointPlanCaseStudy', 'Add-OfficePowerPointPlanCoverage', 'Add-OfficePowerPointPlanLogoWall', 'Add-OfficePowerPointPlanProcess', 'Add-OfficePowerPointPlanSection', 'Add-OfficePowerPointSection', 'Add-OfficePowerPointShape', 'Add-OfficePowerPointSlide', 'Add-OfficePowerPointTable', 'Add-OfficePowerPointTableRow', 'Add-OfficePowerPointTextBox', 'Add-OfficePowerPointVisual', 'Add-OfficeVisioConnector', 'Add-OfficeVisioContainer', 'Add-OfficeVisioDiamond', 'Add-OfficeVisioEllipse', 'Add-OfficeVisioPage', 'Add-OfficeVisioRectangle', 'Add-OfficeVisioStencilShape', 'Add-OfficeVisioTextBox', 'Add-OfficeWordBookmark', 'Add-OfficeWordBreak', 'Add-OfficeWordChart', 'Add-OfficeWordCheckBox', 'Add-OfficeWordComboBox', 'Add-OfficeWordContentControl', 'Add-OfficeWordCoverPage', 'Add-OfficeWordDatePicker', 'Add-OfficeWordDropDownList', 'Add-OfficeWordEndnote', 'Add-OfficeWordEquation', 'Add-OfficeWordField', 'Add-OfficeWordFooter', 'Add-OfficeWordFootnote', 'Add-OfficeWordHeader', 'Add-OfficeWordHyperlink', 'Add-OfficeWordImage', 'Add-OfficeWordList', 'Add-OfficeWordListItem', 'Add-OfficeWordPageNumber', 'Add-OfficeWordParagraph', 'Add-OfficeWordPictureControl', 'Add-OfficeWordRepeatingSection', 'Add-OfficeWordSection', 'Add-OfficeWordShape', 'Add-OfficeWordTable', 'Add-OfficeWordTableCell', 'Add-OfficeWordTableCondition', 'Add-OfficeWordTableOfContents', 'Add-OfficeWordTableRow', 'Add-OfficeWordTabStop', 'Add-OfficeWordText', 'Add-OfficeWordTextBox', 'Add-OfficeWordVisual', 'Add-OfficeWordWatermark', 'Clear-OfficeExcelAutoFilter', 'Clear-OfficeExcelComment', 'Clear-OfficeExcelConditionalFormatting', 'Clear-OfficeExcelDataValidation', 'Clear-OfficeExcelPageBreak', 'Clear-OfficeExcelRange', 'Clear-OfficeExcelWriteReservation', 'Clear-OfficePdfBackgroundShape', 'Close-OfficeExcel', 'Close-OfficePowerPoint', 'Close-OfficeWord', 'Compare-OfficeExcelRange', 'Compare-OfficeExcelWorkbook', 'Compare-OfficePdfVisual', 'Compare-OfficeWordDocument', 'ConvertFrom-OfficeAsciiDocMarkdown', 'ConvertFrom-OfficeCsv', 'ConvertFrom-OfficeLatexMarkdown', 'ConvertFrom-OfficeMarkdownHtml', 'ConvertFrom-OfficeOpenDocument', 'ConvertFrom-OfficePdfHtml', 'ConvertFrom-OfficeRtf', 'ConvertFrom-OfficeWordHtml', 'ConvertFrom-OfficeWordMarkdown', 'ConvertTo-OfficeAsciiDocMarkdown', 'ConvertTo-OfficeCsv', 'ConvertTo-OfficeExcelHtml', 'ConvertTo-OfficeExcelWorkbook', 'ConvertTo-OfficeLatexMarkdown', 'ConvertTo-OfficeMarkdown', 'ConvertTo-OfficeMarkdownHtml', 'ConvertTo-OfficeOpenDocument', 'ConvertTo-OfficePdfExcel', 'ConvertTo-OfficePdfFlatAnnotation', 'ConvertTo-OfficePdfFlatForm', 'ConvertTo-OfficePdfHtml', 'ConvertTo-OfficePdfMarkdown', 'ConvertTo-OfficePdfOptimized', 'ConvertTo-OfficePdfPowerPoint', 'ConvertTo-OfficePdfRedacted', 'ConvertTo-OfficePdfSanitized', 'ConvertTo-OfficePdfTextRun', 'ConvertTo-OfficePdfWord', 'ConvertTo-OfficePowerPointHtml', 'ConvertTo-OfficeRtf', 'ConvertTo-OfficeVisioPng', 'ConvertTo-OfficeVisioSvg', 'ConvertTo-OfficeVisioVisual', 'ConvertTo-OfficeVisual', 'ConvertTo-OfficeWordDocument', 'ConvertTo-OfficeWordHtml', 'ConvertTo-OfficeWordMarkdown', 'Copy-OfficeExcelSheet', 'Copy-OfficeExcelWorkbook', 'Copy-OfficePdfPage', 'Copy-OfficePowerPointSlide', 'Edit-OfficeExcelRow', 'Export-OfficeCsv', 'Export-OfficeDocumentPdf', 'Export-OfficeExcel', 'Export-OfficeExcelChartImage', 'Export-OfficeExcelGoogleSpreadsheet', 'Export-OfficeExcelImage', 'Export-OfficeExcelRangeImage', 'Export-OfficeHtmlImage', 'Export-OfficePdfImage', 'Export-OfficePdfLayoutOverlay', 'Export-OfficePdfXfdf', 'Export-OfficePowerPointImage', 'Export-OfficeVisioImage', 'Export-OfficeVisioStencilPreviewGallery', 'Export-OfficeVisioVisual', 'Export-OfficeWordGoogleDocument', 'Export-OfficeWordImage', 'Find-OfficeExcel', 'Find-OfficePowerPointShape', 'Find-OfficeVisioStencil', 'Find-OfficeWord', 'Find-OfficeWordList', 'Find-OfficeWordTable', 'Get-OfficeAsciiDoc', 'Get-OfficeConfluenceAttachment', 'Get-OfficeConfluencePage', 'Get-OfficeCsv', 'Get-OfficeDocument', 'Get-OfficeDocumentAsset', 'Get-OfficeDocumentBatch', 'Get-OfficeDocumentCapability', 'Get-OfficeDocumentChunk', 'Get-OfficeDocumentDetection', 'Get-OfficeDocumentHierarchy', 'Get-OfficeDocumentIngest', 'Get-OfficeDocumentPageMarkdown', 'Get-OfficeDocumentStructured', 'Get-OfficeDocumentTable', 'Get-OfficeDocumentVisual', 'Get-OfficeEmail', 'Get-OfficeEmailMailbox', 'Get-OfficeExcel', 'Get-OfficeExcelComment', 'Get-OfficeExcelCommentAudit', 'Get-OfficeExcelConditionalFormatting', 'Get-OfficeExcelData', 'Get-OfficeExcelDataModel', 'Get-OfficeExcelDataValidation', 'Get-OfficeExcelDocumentProperty', 'Get-OfficeExcelFormulaAnalysis', 'Get-OfficeExcelNamedRange', 'Get-OfficeExcelNumberFormatPreset', 'Get-OfficeExcelPageBreak', 'Get-OfficeExcelPivotTable', 'Get-OfficeExcelPreflight', 'Get-OfficeExcelRange', 'Get-OfficeExcelRichText', 'Get-OfficeExcelRuntimePreflight', 'Get-OfficeExcelStreamingContract', 'Get-OfficeExcelSummary', 'Get-OfficeExcelTable', 'Get-OfficeExcelTableStyle', 'Get-OfficeExcelTemplateMarker', 'Get-OfficeExcelUsedRange', 'Get-OfficeExcelWorksheetView', 'Get-OfficeExcelWriteReservation', 'Get-OfficeLatex', 'Get-OfficeMarkdown', 'Get-OfficeMarkdownFrontMatter', 'Get-OfficeMarkdownHeading', 'Get-OfficeMarkdownNode', 'Get-OfficeMarkdownTable', 'Get-OfficeOpenDocument', 'Get-OfficePdf', 'Get-OfficePdfAnnotation', 'Get-OfficePdfAppendOnlyMutation', 'Get-OfficePdfAttachment', 'Get-OfficePdfCompliance', 'Get-OfficePdfDiagnostic', 'Get-OfficePdfFont', 'Get-OfficePdfFormField', 'Get-OfficePdfImage', 'Get-OfficePdfInfo', 'Get-OfficePdfInteractionMap', 'Get-OfficePdfOptimization', 'Get-OfficePdfPreflight', 'Get-OfficePdfRedactionPlan', 'Get-OfficePdfSignature', 'Get-OfficePdfText', 'Get-OfficePdfTextDiagnostic', 'Get-OfficePowerPoint', 'Get-OfficePowerPointInspection', 'Get-OfficePowerPointLayout', 'Get-OfficePowerPointLayoutBox', 'Get-OfficePowerPointLayoutPlaceholder', 'Get-OfficePowerPointNotes', 'Get-OfficePowerPointPlaceholder', 'Get-OfficePowerPointSection', 'Get-OfficePowerPointShape', 'Get-OfficePowerPointSlide', 'Get-OfficePowerPointSlideSummary', 'Get-OfficePowerPointTheme', 'Get-OfficeProtectionCapability', 'Get-OfficeRtf', 'Get-OfficeVisio', 'Get-OfficeVisioInfo', 'Get-OfficeVisioStencilCatalog', 'Get-OfficeWord', 'Get-OfficeWordBookmark', 'Get-OfficeWordCheckBox', 'Get-OfficeWordComboBox', 'Get-OfficeWordContentControl', 'Get-OfficeWordDatePicker', 'Get-OfficeWordDocumentProperty', 'Get-OfficeWordDropDownList', 'Get-OfficeWordEndnote', 'Get-OfficeWordField', 'Get-OfficeWordFootnote', 'Get-OfficeWordHyperlink', 'Get-OfficeWordImage', 'Get-OfficeWordList', 'Get-OfficeWordParagraph', 'Get-OfficeWordPictureControl', 'Get-OfficeWordRepeatingSection', 'Get-OfficeWordReview', 'Get-OfficeWordSection', 'Get-OfficeWordShape', 'Get-OfficeWordStatistics', 'Get-OfficeWordTable', 'Get-OfficeWordTableCell', 'Get-OfficeWordTableOfContents', 'Get-OfficeWordText', 'Import-OfficeCsv', 'Import-OfficeExcel', 'Import-OfficeExcelDelimitedText', 'Import-OfficePdfXfdf', 'Import-OfficePowerPointSlide', 'Import-OfficeVisioStencil', 'Invoke-OfficeExcelAutoFit', 'Invoke-OfficeExcelSort', 'Invoke-OfficeExcelTemplate', 'Invoke-OfficeExcelTemplateOptionalRow', 'Invoke-OfficeExcelTemplateRow', 'Invoke-OfficeExcelTemplateSheet', 'Invoke-OfficePdfOcrMerge', 'Invoke-OfficeWordMailMerge', 'Join-OfficeExcelSheet', 'Join-OfficeExcelWorkbook', 'Join-OfficePdf', 'Join-OfficeWordDocument', 'Move-OfficeExcelSheet', 'Move-OfficePdfPage', 'New-OfficeConfluenceSession', 'New-OfficeDocumentReader', 'New-OfficeEmailMailboxReaderOptions', 'New-OfficeEmailMailboxWriterOptions', 'New-OfficeEmailReaderOptions', 'New-OfficeEmailStoreReaderOptions', 'New-OfficeEmailWriterOptions', 'New-OfficeExcel', 'New-OfficeExcelDashboard', 'New-OfficeExcelImageOptions', 'New-OfficeExcelOpenDocumentOptions', 'New-OfficeExcelPdfOptions', 'New-OfficeExcelWorkbookImageOptions', 'New-OfficeHtmlConversionOptions', 'New-OfficeHtmlRenderOptions', 'New-OfficeMarkdown', 'New-OfficeMarkdownPdfOptions', 'New-OfficeOpenDocument', 'New-OfficePdf', 'New-OfficePdfExcelImportOptions', 'New-OfficePdfImageOptions', 'New-OfficePdfPowerPointImportOptions', 'New-OfficePdfSignature', 'New-OfficePdfTableCell', 'New-OfficePdfTableCellCheckBox', 'New-OfficePdfTableCellField', 'New-OfficePdfTableCellImage', 'New-OfficePdfVisualComparisonOptions', 'New-OfficePdfWordImportOptions', 'New-OfficePowerPoint', 'New-OfficePowerPointDeckPlan', 'New-OfficePowerPointImageOptions', 'New-OfficePowerPointOpenDocumentOptions', 'New-OfficePowerPointPdfOptions', 'New-OfficeReaderHierarchyOptions', 'New-OfficeRtf', 'New-OfficeRtfPdfOptions', 'New-OfficeTextRun', 'New-OfficeVisio', 'New-OfficeVisioGallery', 'New-OfficeVisioImageOptions', 'New-OfficeWord', 'New-OfficeWordComparisonOptions', 'New-OfficeWordImageOptions', 'New-OfficeWordOpenDocumentOptions', 'New-OfficeWordPdfOptions', 'New-OfficeWordRevisionFilter', 'New-OfficeWordTableCell', 'Protect-OfficeExcelSheet', 'Protect-OfficeExcelWorkbook', 'Protect-OfficeWordDocument', 'Publish-OfficeConfluencePage', 'Remove-OfficeConfluencePage', 'Remove-OfficeExcelComment', 'Remove-OfficeExcelNamedRange', 'Remove-OfficePdfAnnotation', 'Remove-OfficePdfPage', 'Remove-OfficePowerPointSlide', 'Remove-OfficeWordTableOfContents', 'Rename-OfficeExcelNamedRange', 'Rename-OfficePowerPointSection', 'Repair-OfficeExcelWorkbook', 'Resolve-OfficeWordRevision', 'Save-OfficeAsciiDoc', 'Save-OfficeEmail', 'Save-OfficeEmailMailbox', 'Save-OfficeExcel', 'Save-OfficeLatex', 'Save-OfficeMarkdown', 'Save-OfficeOpenDocument', 'Save-OfficePdf', 'Save-OfficePowerPoint', 'Save-OfficeVisio', 'Save-OfficeWord', 'Search-OfficeDocument', 'Send-OfficeConfluenceAttachment', 'Set-OfficeConfluenceManagedSection', 'Set-OfficeExcelActiveSheet', 'Set-OfficeExcelAutoFilter', 'Set-OfficeExcelCell', 'Set-OfficeExcelChartAxis', 'Set-OfficeExcelChartDataLabels', 'Set-OfficeExcelChartLegend', 'Set-OfficeExcelChartPoint', 'Set-OfficeExcelChartSeries', 'Set-OfficeExcelChartStyle', 'Set-OfficeExcelChartTrendline', 'Set-OfficeExcelColumn', 'Set-OfficeExcelColumnGroup', 'Set-OfficeExcelColumnStyleByHeader', 'Set-OfficeExcelDataValidationMessage', 'Set-OfficeExcelDateSystem', 'Set-OfficeExcelDocumentProperty', 'Set-OfficeExcelExecutionPolicy', 'Set-OfficeExcelFormula', 'Set-OfficeExcelFreeze', 'Set-OfficeExcelGridlines', 'Set-OfficeExcelHeaderFooter', 'Set-OfficeExcelHostHyperlink', 'Set-OfficeExcelHyperlink', 'Set-OfficeExcelInternalLinks', 'Set-OfficeExcelInternalLinksByHeader', 'Set-OfficeExcelMargins', 'Set-OfficeExcelNamedRange', 'Set-OfficeExcelOrientation', 'Set-OfficeExcelPageSetup', 'Set-OfficeExcelPrintArea', 'Set-OfficeExcelPrintLayout', 'Set-OfficeExcelPrintTitles', 'Set-OfficeExcelRefreshOnOpen', 'Set-OfficeExcelRichText', 'Set-OfficeExcelRow', 'Set-OfficeExcelRowGroup', 'Set-OfficeExcelSheetTabColor', 'Set-OfficeExcelSheetVisibility', 'Set-OfficeExcelSmartHyperlink', 'Set-OfficeExcelTheme', 'Set-OfficeExcelUrlLinks', 'Set-OfficeExcelUrlLinksByHeader', 'Set-OfficeExcelWorksheetView', 'Set-OfficeExcelWriteReservation', 'Set-OfficeOpenDocumentCell', 'Set-OfficePdfAnnotation', 'Set-OfficePdfBackground', 'Set-OfficePdfBackgroundImage', 'Set-OfficePdfCompliance', 'Set-OfficePdfElectronicInvoice', 'Set-OfficePdfFooter', 'Set-OfficePdfForm', 'Set-OfficePdfHeader', 'Set-OfficePdfMetadata', 'Set-OfficePdfPage', 'Set-OfficePdfPageBorder', 'Set-OfficePdfPageSetup', 'Set-OfficePdfSignature', 'Set-OfficePdfTheme', 'Set-OfficePowerPointBackground', 'Set-OfficePowerPointLayoutPlaceholderBounds', 'Set-OfficePowerPointLayoutPlaceholderTextMargins', 'Set-OfficePowerPointLayoutPlaceholderTextStyle', 'Set-OfficePowerPointNotes', 'Set-OfficePowerPointPlaceholderText', 'Set-OfficePowerPointShapeLayout', 'Set-OfficePowerPointShapeText', 'Set-OfficePowerPointSlideLayout', 'Set-OfficePowerPointSlideSize', 'Set-OfficePowerPointSlideTitle', 'Set-OfficePowerPointSlideTransition', 'Set-OfficePowerPointTableCell', 'Set-OfficePowerPointThemeColor', 'Set-OfficePowerPointThemeFonts', 'Set-OfficePowerPointThemeName', 'Set-OfficeVisioShapeLayout', 'Set-OfficeWordBackground', 'Set-OfficeWordDocumentProperty', 'Set-OfficeWordImage', 'Set-OfficeWordPageSetup', 'Set-OfficeWordParagraphStyle', 'Set-OfficeWordShape', 'Set-OfficeWordTableCell', 'Set-OfficeWordTableOfContents', 'Set-OfficeWordTextStyle', 'Split-OfficePdf', 'Test-OfficeExcelAccessibility', 'Test-OfficeExcelTemplateBinding', 'Test-OfficeExcelWorkbook', 'Test-OfficePdfRewrite', 'Unprotect-OfficeExcelSheet', 'Unprotect-OfficeExcelWorkbook', 'Update-OfficeExcelComment', 'Update-OfficeExcelText', 'Update-OfficePowerPointText', 'Update-OfficeRtfText', 'Update-OfficeWordFields', 'Update-OfficeWordTableOfContents', 'Update-OfficeWordText')
     CompanyName            = 'Evotec'
     CompatiblePSEditions   = @('Desktop', 'Core')
     Copyright              = '(c) 2011 - 2026 Przemyslaw Klys @ Evotec. All rights reserved.'
diff --git a/README.MD b/README.MD
index 65d1ddd7..bc0940bd 100644
--- a/README.MD
+++ b/README.MD
@@ -87,12 +87,24 @@ $latex = Get-OfficeMarkdown -Path .\Paper.md |
 Native email and Google Workspace commands keep provider and credential ownership explicit:
 
 ```powershell
-$message = Get-OfficeEmail -Path .\Message.msg -AsResult
+$readerOptions = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+$message = Get-OfficeEmail -Path .\Message.msg -Options $readerOptions -AsResult
 $mailbox = Get-OfficeEmailMailbox -Path .\Archive.mbox -AsResult
 $docsPlan = Export-OfficeWordGoogleDocument -Path .\Report.docx -PlanOnly
 $sheetsBatch = Export-OfficeExcelGoogleSpreadsheet -Path .\Data.xlsx -AsBatch
 ```
 
+PSWriteOffice owns the document-workflow side of email: reading or writing standalone message and mailbox artifacts, and searching supported mail sources through the normalized `OfficeIMO.Reader` model. [Mailozaurr](https://github.com/EvotecIT/Mailozaurr) owns operational email and mailbox management, including transport, authentication, mailbox/store lifecycle, PST/OST import and conversion, querying, export, and delivery. Use PSWriteOffice when mail is an input to a report or mixed-document search; use Mailozaurr to acquire, manage, convert, or send the mail, then pass ordinary paths and attachments between the modules.
+
+The integration recipes make those boundaries executable:
+
+```powershell
+.\Examples\Integrations\Recipe-Mailozaurr-PdfDelivery.ps1 -SmtpServer smtp.example.com
+.\Examples\Integrations\Recipe-PSEventViewer-OfficeReport.ps1 -LogName System -MaxEvents 200
+```
+
+The Mailozaurr recipe generates a real PDF but keeps delivery under `-WhatIf` until `-Send` is supplied. The PSEventViewer recipe queries events once and turns the projected results into Word and Excel reports.
+
 Confluence writes can be reviewed before a session or tenant is involved:
 
 ```powershell
@@ -132,6 +144,38 @@ Install-Module -Name PSWriteOffice -Scope CurrentUser
 Import-Module PSWriteOffice
 ```
 
+### Predictable paths and pipeline output
+
+The public commands use `-Path` for the primary file. Converters use
+`-OutputPath` when they also accept a source `-Path`; copy operations use
+`-DestinationPath`. More specific names such as `-TemplatePath`, `-SourcePath`,
+and `-SignaturePath` are reserved for files with a distinct role. Older
+`-FilePath` spellings remain aliases where they were previously public.
+
+Commands that create, save, or mutate a document are quiet by default. Use
+`-PassThru` only when the next pipeline step needs the result. Use `-NoSave`
+when you want a live OfficeIMO document for incremental composition, and
+`-Open` when the completed file should be opened after it is written. On
+`Close-OfficeWord`, `Close-OfficeExcel`, and `Close-OfficePowerPoint`, combine
+`-Open` with `-Save` or `-Path`; opening never silently decides whether changes
+should be persisted.
+
+```powershell
+# One-shot DSL: save and finish without Out-Null.
+New-OfficeWord -Path .\Report.docx {
+    WordParagraph -Text 'Ready for review'
+}
+
+# Incremental composition: keep the live document until the explicit save.
+$document = New-OfficeWord -Path .\Report.docx -NoSave
+$document | Add-OfficeWordParagraph -Text 'Ready for review'
+$document | Save-OfficeWord
+$document | Close-OfficeWord
+
+# Capture a mutation result only when it is useful.
+$slide = Add-OfficePowerPointSlide -Presentation $presentation -PassThru
+```
+
 ### Word
 
 ```powershell
@@ -200,7 +244,7 @@ New-OfficePowerPoint -Path .\Deck.pptx {
 ```
 
 ```powershell
-$ppt = Get-OfficePowerPoint -FilePath .\Deck.pptx
+$ppt = Get-OfficePowerPoint -Path .\Deck.pptx
 Add-OfficePowerPointSection -Presentation $ppt -Name 'Intro' -StartSlideIndex 0
 Rename-OfficePowerPointSection -Presentation $ppt -Name 'Intro' -NewName 'Opening'
 Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes
@@ -208,12 +252,14 @@ Copy-OfficePowerPointSlide -Presentation $ppt -Index 0
 Get-OfficePowerPointSlide -Presentation $ppt -Index 0 | Set-OfficePowerPointSlideTransition -Transition Fade
 Set-OfficePowerPointSlideSize -Presentation $ppt -Preset Screen16x9
 Import-OfficePowerPointSlide -Presentation $ppt -SourcePath .\SourceDeck.pptx -SourceIndex 0
+$ppt | Save-OfficePowerPoint
+$ppt | Close-OfficePowerPoint
 ```
 
 ### PowerPoint theme and layout helpers
 
 ```powershell
-$ppt = Get-OfficePowerPoint -FilePath .\Deck.pptx
+$ppt = Get-OfficePowerPoint -Path .\Deck.pptx
 Set-OfficePowerPointThemeColor -Presentation $ppt -Colors @{ Accent1 = '#C00000'; Accent2 = '#00B0F0' } -AllMasters
 Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos' -MinorLatin 'Calibri' -AllMasters
 Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Contoso Theme' -AllMasters
@@ -273,6 +319,40 @@ Split-OfficePdf -Path .\Report.pdf -OutputDirectory .\Pages
 Get-OfficePdfText -Path .\Report.pdf
 ```
 
+Export the same authored document to PDF explicitly instead of coupling PDF
+sidecars to each lifecycle command:
+
+```powershell
+Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf
+
+$document = Get-OfficeWord -Path .\Report.docx
+$document | Export-OfficeDocumentPdf -Path .\Report-Live.pdf
+$document | Close-OfficeWord
+```
+
+Format-specific controls are created with discoverable PowerShell commands—no
+hashtable keys or .NET constructors to guess:
+
+```powershell
+$pdfOptions = New-OfficeMarkdownPdfOptions `
+    -Title 'Service report' `
+    -Author 'Evotec' `
+    -IncludeLocalImages `
+    -BaseDirectory .\Assets `
+    -CreateOutlineFromHeadings
+
+Export-OfficeDocumentPdf `
+    -InputPath .\Report.md `
+    -Path .\Report.pdf `
+    -MarkdownOptions $pdfOptions `
+    -PdfWarningVariable pdfWarnings `
+    -PdfConversionReportVariable pdfReport
+```
+
+Equivalent builders are available for Word, Excel, PowerPoint, and RTF:
+`New-OfficeWordPdfOptions`, `New-OfficeExcelPdfOptions`,
+`New-OfficePowerPointPdfOptions`, and `New-OfficeRtfPdfOptions`.
+
 ### Excel chart finishing
 
 ```powershell
@@ -314,7 +394,7 @@ ExcelSheet 'Summary' {
 ### RTF
 
 ```powershell
-New-OfficeRtf -OutputPath .\Report.rtf -Text 'Summary', 'Ready for review'
+New-OfficeRtf -Path .\Report.rtf -Text 'Summary', 'Ready for review'
 Get-OfficeRtf -Path .\Report.rtf
 Update-OfficeRtfText -Path .\Report.rtf -OutputPath .\Report-Updated.rtf -OldText 'review' -NewText 'release'
 ConvertFrom-OfficeRtf -Path .\Report-Updated.rtf -As Pdf -OutputPath .\Report.pdf
@@ -478,12 +558,16 @@ ConvertFrom-OfficeRtf -Path .\Report.rtf -As Html -OutputPath .\Report.html -Inc
 ### Word charts with the current API
 
 ```powershell
-$doc = New-OfficeWord -Path .\Report.docx
-$chart = $doc.AddChart('Revenue Mix')
-$chart.AddPie('North America', 125000).
-    AddPie('EMEA', 98000).
-    AddPie('APAC', 143000) | Out-Null
-Close-OfficeWord -Document $doc -Save
+$doc = New-OfficeWord -Path .\Report.docx -NoSave
+$chartData = @(
+    [PSCustomObject]@{ Region = 'North America'; Revenue = 125000 }
+    [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000 }
+    [PSCustomObject]@{ Region = 'APAC'; Revenue = 143000 }
+)
+Add-OfficeWordChart -Document $doc -Type Pie -InputObject $chartData `
+    -CategoryProperty Region -SeriesProperty Revenue -Title 'Revenue Mix'
+$doc | Save-OfficeWord
+$doc | Close-OfficeWord
 ```
 
 ### Word tables with extra columns
@@ -500,7 +584,7 @@ New-OfficeWord -Path .\Report.docx {
 ### PowerPoint inspection
 
 ```powershell
-$ppt = Get-OfficePowerPoint -FilePath .\Deck.pptx
+$ppt = Get-OfficePowerPoint -Path .\Deck.pptx
 Get-OfficePowerPointSlide -Presentation $ppt
 Get-OfficePowerPointSlideSummary -Presentation $ppt
 Get-OfficePowerPointNotes -Presentation $ppt
diff --git a/Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs b/Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs
index 72948562..df8c94a0 100644
--- a/Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs
@@ -5,6 +5,12 @@
 namespace PSWriteOffice.Cmdlets.AsciiDoc;
 
 /// Saves an OfficeIMO AsciiDoc document.
+/// 
+///   Load, edit, and save an AsciiDoc document.
+///   PS> 
+///   $document = Get-OfficeAsciiDoc -Path .\Guide.adoc
+/// $document | Save-OfficeAsciiDoc -Path .\Guide-normalized.adoc -Mode Canonical
+/// 
 [Cmdlet(VerbsData.Save, "OfficeAsciiDoc", SupportsShouldProcess = true)]
 [OutputType(typeof(AsciiDocDocument))]
 public sealed class SaveOfficeAsciiDocCommand : PSCmdlet
@@ -21,6 +27,15 @@ public sealed class SaveOfficeAsciiDocCommand : PSCmdlet
     [Parameter]
     public AsciiDocWriterOptions? Options { get; set; }
 
+    /// Writer mode. Preserve retains unchanged source; Canonical emits stable formatting.
+    [Parameter]
+    public AsciiDocWriterMode? Mode { get; set; }
+
+    /// Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+    [Parameter]
+    [ValidateSet("LF", "CRLF", "CR")]
+    public string? LineEnding { get; set; }
+
     /// Return the saved document.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
@@ -31,7 +46,24 @@ protected override void ProcessRecord()
         var path = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         if (!ShouldProcess(path, "Save AsciiDoc document")) return;
         Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path) ?? SessionState.Path.CurrentFileSystemLocation.Path);
-        Document.Save(path, Options);
+        Document.Save(path, BuildOptions());
         if (PassThru.IsPresent) WriteObject(Document);
     }
+
+    private AsciiDocWriterOptions BuildOptions() {
+        var options = new AsciiDocWriterOptions {
+            Mode = Options?.Mode ?? AsciiDocWriterMode.Preserve,
+            LineEnding = Options?.LineEnding
+        };
+        if (Mode.HasValue) options.Mode = Mode.Value;
+        if (LineEnding != null) options.LineEnding = ResolveLineEnding(LineEnding);
+        return options;
+    }
+
+    private static string ResolveLineEnding(string value) => value switch {
+        "LF" => "\n",
+        "CRLF" => "\r\n",
+        "CR" => "\r",
+        _ => throw new PSArgumentException("LineEnding must be LF, CRLF, or CR.", nameof(LineEnding))
+    };
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Confluence/RemoveOfficeConfluencePageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Confluence/RemoveOfficeConfluencePageCommand.cs
index 061d7079..e4b590ee 100644
--- a/Sources/PSWriteOffice/Cmdlets/Confluence/RemoveOfficeConfluencePageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Confluence/RemoveOfficeConfluencePageCommand.cs
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.Confluence;
 /// 
 [Cmdlet(VerbsCommon.Remove, "OfficeConfluencePage", SupportsShouldProcess = true)]
 [OutputType(typeof(ConfluencePageWritePlan))]
-public sealed class RemoveOfficeConfluencePageCommand : AsyncPSCmdlet
-{
+public sealed class RemoveOfficeConfluencePageCommand : AsyncPSCmdlet {
     /// Configured session required for a live delete operation.
     [Parameter]
     public ConfluenceSession? Session { get; set; }
@@ -42,27 +41,30 @@ public sealed class RemoveOfficeConfluencePageCommand : AsyncPSCmdlet
     [Parameter]
     public SwitchParameter PlanOnly { get; set; }
 
+    /// Return the completed delete plan after a live operation.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
+    protected override async Task ProcessRecordAsync() {
         ConfluencePageWritePlan plan = ConfluenceClient.PlanDeletePage(PageId, Purge.IsPresent, Draft.IsPresent);
-        if (PlanOnly.IsPresent)
-        {
+        if (PlanOnly.IsPresent) {
             WriteObject(plan);
             return;
         }
 
-        if (Session == null)
-        {
+        if (Session == null) {
             throw new PSInvalidOperationException("Provide -Session for a live operation, or use -PlanOnly.");
         }
 
-        if (!ShouldProcess(PageId, Purge.IsPresent ? "Permanently delete Confluence page" : "Delete Confluence page"))
-        {
+        if (!ShouldProcess(PageId, Purge.IsPresent ? "Permanently delete Confluence page" : "Delete Confluence page")) {
             return;
         }
 
         using var client = Session.CreateClient();
         await client.DeletePageAsync(PageId, Purge.IsPresent, Draft.IsPresent, CancelToken).ConfigureAwait(false);
+        if (PassThru.IsPresent) {
+            WriteObject(plan);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs
index 107d62e2..e05a2536 100644
--- a/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs
@@ -8,6 +8,12 @@
 namespace PSWriteOffice.Cmdlets.Email;
 
 /// Reads a native EML, EMLX, MSG, or TNEF artifact with bounded diagnostics.
+/// 
+///   Read a message without retaining attachment payloads.
+///   PS> 
+///   $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+/// Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult
+/// 
 [Cmdlet(VerbsCommon.Get, "OfficeEmail")]
 [OutputType(typeof(EmailDocument), typeof(EmailReadResult), typeof(EmailStoreReadResult))]
 public sealed class GetOfficeEmailCommand : PSCmdlet
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs
index 2853c7e3..d620793d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs
@@ -4,6 +4,12 @@
 namespace PSWriteOffice.Cmdlets.Email;
 
 /// Reads a native mbox mailbox with bounded per-message diagnostics.
+/// 
+///   Read a bounded mbox mailbox with diagnostics.
+///   PS> 
+///   $options = New-OfficeEmailMailboxReaderOptions -MaxMessageCount 5000
+/// Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult
+/// 
 [Cmdlet(VerbsCommon.Get, "OfficeEmailMailbox")]
 [OutputType(typeof(EmailMailbox), typeof(EmailMailboxReadResult))]
 public sealed class GetOfficeEmailMailboxCommand : PSCmdlet
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxReaderOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxReaderOptionsCommand.cs
new file mode 100644
index 00000000..fb2f9f74
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxReaderOptionsCommand.cs
@@ -0,0 +1,32 @@
+using System.Management.Automation;
+using OfficeIMO.Email;
+
+namespace PSWriteOffice.Cmdlets.Email;
+
+/// Creates bounded mbox reader settings through ordinary PowerShell parameters.
+/// 
+///   Read a bounded mailbox with a reusable per-message policy.
+///   PS> 
+///   $messageOptions = New-OfficeEmailReaderOptions -ExcludeAttachmentContent
+/// $options = New-OfficeEmailMailboxReaderOptions -MessageOptions $messageOptions -MaxMessageCount 5000
+/// Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeEmailMailboxReaderOptions")]
+[OutputType(typeof(EmailMailboxReaderOptions))]
+public sealed class NewOfficeEmailMailboxReaderOptionsCommand : PSCmdlet {
+    /// Bounded policy applied independently to each message.
+    [Parameter(ValueFromPipeline = true)] public EmailReaderOptions? MessageOptions { get; set; }
+    /// Escaping convention to decode.
+    [Parameter] public MboxVariant Variant { get; set; } = MboxVariant.Auto;
+    /// Maximum messages in one mailbox.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxMessageCount { get; set; } = 100000;
+    /// Maximum aggregate source bytes consumed from one mailbox.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxMailboxBytes { get; set; } = 512L * 1024L * 1024L;
+
+    /// 
+    protected override void ProcessRecord() => WriteObject(new EmailMailboxReaderOptions(
+        MaxMailboxBytes,
+        MessageOptions,
+        Variant,
+        MaxMessageCount));
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxWriterOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxWriterOptionsCommand.cs
new file mode 100644
index 00000000..2d3976e0
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxWriterOptionsCommand.cs
@@ -0,0 +1,24 @@
+using System.Management.Automation;
+using OfficeIMO.Email;
+
+namespace PSWriteOffice.Cmdlets.Email;
+
+/// Creates deterministic mbox writer settings through ordinary PowerShell parameters.
+/// 
+///   Write an mboxo mailbox with a reusable per-message policy.
+///   PS> 
+///   $messageOptions = New-OfficeEmailWriterOptions -IncludeBccHeader
+/// $options = New-OfficeEmailMailboxWriterOptions -MessageOptions $messageOptions -Variant Mboxo
+/// $mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeEmailMailboxWriterOptions")]
+[OutputType(typeof(EmailMailboxWriterOptions))]
+public sealed class NewOfficeEmailMailboxWriterOptionsCommand : PSCmdlet {
+    /// Serialization policy applied independently to each message.
+    [Parameter(ValueFromPipeline = true)] public EmailWriterOptions? MessageOptions { get; set; }
+    /// Concrete mbox escaping convention to write.
+    [Parameter] public MboxVariant Variant { get; set; } = MboxVariant.Mboxrd;
+
+    /// 
+    protected override void ProcessRecord() => WriteObject(new EmailMailboxWriterOptions(MessageOptions, Variant));
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailReaderOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailReaderOptionsCommand.cs
new file mode 100644
index 00000000..7b09f183
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailReaderOptionsCommand.cs
@@ -0,0 +1,64 @@
+using System.Management.Automation;
+using OfficeIMO.Email;
+
+namespace PSWriteOffice.Cmdlets.Email;
+
+/// Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters.
+/// 
+///   Read message diagnostics without retaining attachment payloads.
+///   PS> 
+///   $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB
+/// Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeEmailReaderOptions")]
+[OutputType(typeof(EmailReaderOptions))]
+public sealed class NewOfficeEmailReaderOptionsCommand : PSCmdlet {
+    /// Maximum artifact size accepted by the reader.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxInputBytes { get; set; } = 256L * 1024L * 1024L;
+    /// Maximum bytes allowed in one MIME header section.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxHeaderBytes { get; set; } = 1024 * 1024;
+    /// Maximum number of header fields in one entity.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxHeaderCount { get; set; } = 10000;
+    /// Maximum MIME entity count.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxPartCount { get; set; } = 10000;
+    /// Maximum nested MIME depth.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxMimeDepth { get; set; } = 64;
+    /// Maximum decoded bytes for one attachment.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxAttachmentBytes { get; set; } = 128L * 1024L * 1024L;
+    /// Maximum aggregate decoded attachment bytes.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxTotalAttachmentBytes { get; set; } = 512L * 1024L * 1024L;
+    /// Maximum embedded-message recursion depth.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int MaxNestedMessageDepth { get; set; } = 16;
+    /// Do not retain decoded attachment payloads in memory.
+    [Parameter] public SwitchParameter ExcludeAttachmentContent { get; set; }
+    /// Retain original artifact bytes for an explicit lossless write.
+    [Parameter] public SwitchParameter PreserveRawSource { get; set; }
+    /// Maximum CFB directory entries accepted while reading MSG.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxCompoundDirectoryEntries { get; set; } = 65536;
+    /// Maximum aggregate MAPI properties across a message and embedded messages.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxMapiPropertyCount { get; set; } = 100000;
+    /// Maximum aggregate bytes represented by decoded MSG property streams.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxDecodedPropertyBytes { get; set; } = 512L * 1024L * 1024L;
+    /// Maximum number of TNEF attributes.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxTnefAttributeCount { get; set; } = 100000;
+    /// Maximum aggregate attachment count.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxAttachmentCount { get; set; } = 10000;
+
+    /// 
+    protected override void ProcessRecord() => WriteObject(new EmailReaderOptions(
+        MaxInputBytes,
+        MaxHeaderBytes,
+        MaxHeaderCount,
+        MaxPartCount,
+        MaxMimeDepth,
+        MaxAttachmentBytes,
+        MaxTotalAttachmentBytes,
+        MaxNestedMessageDepth,
+        !ExcludeAttachmentContent.IsPresent,
+        PreserveRawSource.IsPresent,
+        MaxCompoundDirectoryEntries,
+        MaxMapiPropertyCount,
+        MaxDecodedPropertyBytes,
+        MaxTnefAttributeCount,
+        MaxAttachmentCount));
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailStoreReaderOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailStoreReaderOptionsCommand.cs
new file mode 100644
index 00000000..8ebae432
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailStoreReaderOptionsCommand.cs
@@ -0,0 +1,104 @@
+using System.Management.Automation;
+using System.Text;
+using OfficeIMO.Email.Store;
+
+namespace PSWriteOffice.Cmdlets.Email;
+
+/// Creates bounded email-store reader settings without requiring .NET constructor syntax.
+/// 
+///   Read an EMLX message without retaining attachment payloads.
+///   PS> 
+///   $options = New-OfficeEmailStoreReaderOptions -ExcludeAttachmentContent -MaxAttachmentsPerItem 100
+/// Get-OfficeEmail -Path .\Message.emlx -StoreOptions $options -AsResult
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeEmailStoreReaderOptions")]
+[OutputType(typeof(EmailStoreReaderOptions))]
+public sealed class NewOfficeEmailStoreReaderOptionsCommand : PSCmdlet {
+    /// Maximum seekable source length.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxInputBytes { get; set; } = 1L * 1024 * 1024 * 1024 * 1024;
+    /// Maximum NDB nodes and blocks visited.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxNodeCount { get; set; } = 25_000_000;
+    /// Maximum tree traversal depth.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxBTreeDepth { get; set; } = 32;
+    /// Maximum PST/OST B-tree pages retained by the cache.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxCachedBTreePages { get; set; } = 512;
+    /// Maximum folders materialized.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxFolderCount { get; set; } = 100000;
+    /// Maximum items materialized.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxItemCount { get; set; } = 1000000;
+    /// Maximum MAPI properties decoded per item.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxPropertiesPerItem { get; set; } = 16384;
+    /// Maximum decoded property bytes per item.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxDecodedPropertyBytesPerItem { get; set; } = 128L * 1024 * 1024;
+    /// Maximum attachments per item.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxAttachmentsPerItem { get; set; } = 10000;
+    /// Maximum decoded bytes in one attachment.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxAttachmentBytes { get; set; } = 512L * 1024 * 1024;
+    /// Maximum decoded attachment bytes across the read.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxTotalAttachmentBytes { get; set; } = 4L * 1024 * 1024 * 1024;
+    /// Do not retain decoded attachment payloads in memory.
+    [Parameter] public SwitchParameter ExcludeAttachmentContent { get; set; }
+    /// Password used to validate legacy protected PST files.
+    [Parameter] public string? PstPassword { get; set; }
+    /// Encoding name used for the legacy PST password checksum.
+    [Parameter] public string PstPasswordEncoding { get; set; } = "us-ascii";
+    /// Materialize folder-associated information items.
+    [Parameter] public SwitchParameter IncludeAssociatedItems { get; set; }
+    /// Recover item nodes absent from folder contents tables.
+    [Parameter] public SwitchParameter IncludeOrphanedItems { get; set; }
+    /// Maximum embedded-message recursion depth.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int MaxNestedMessageDepth { get; set; } = 16;
+    /// Maximum entries accepted from a compressed email-store archive.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxArchiveEntries { get; set; } = 500000;
+    /// Maximum decoded size declared by one archive entry.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxArchiveEntryBytes { get; set; } = 512L * 1024 * 1024;
+    /// Maximum total decoded size declared by archive entries.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxArchiveDecodedBytes { get; set; } = 8L * 1024 * 1024 * 1024;
+    /// Maximum XML characters parsed from one archive item.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxXmlCharactersPerItem { get; set; } = 64L * 1024 * 1024;
+    /// Maximum RFC 5322/MIME message bytes accepted from one item.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxMessageBytes { get; set; } = 256L * 1024 * 1024;
+    /// Maximum directory depth traversed by mailbox-directory sessions.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxDirectoryDepth { get; set; } = 64;
+    /// Maximum EML, EMLX, and Maildir files indexed by one directory session.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int MaxDirectoryFileCount { get; set; } = 1000000;
+    /// Maximum decoded bytes traversed from one PST/OST table data tree.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxDecodedTableBytes { get; set; } = 8L * 1024 * 1024 * 1024;
+
+    /// 
+    protected override void ProcessRecord() {
+        Encoding encoding;
+        try {
+            encoding = Encoding.GetEncoding(PstPasswordEncoding);
+        } catch (System.Exception) {
+            throw new PSArgumentException($"Unknown PST password encoding '{PstPasswordEncoding}'.", nameof(PstPasswordEncoding));
+        }
+
+        WriteObject(new EmailStoreReaderOptions(
+            MaxInputBytes,
+            MaxNodeCount,
+            MaxBTreeDepth,
+            MaxCachedBTreePages,
+            MaxFolderCount,
+            MaxItemCount,
+            MaxPropertiesPerItem,
+            MaxDecodedPropertyBytesPerItem,
+            MaxAttachmentsPerItem,
+            MaxAttachmentBytes,
+            MaxTotalAttachmentBytes,
+            !ExcludeAttachmentContent.IsPresent,
+            PstPassword,
+            encoding,
+            IncludeAssociatedItems.IsPresent,
+            IncludeOrphanedItems.IsPresent,
+            MaxNestedMessageDepth,
+            MaxArchiveEntries,
+            MaxArchiveEntryBytes,
+            MaxArchiveDecodedBytes,
+            MaxXmlCharactersPerItem,
+            MaxMessageBytes,
+            MaxDirectoryDepth,
+            MaxDirectoryFileCount,
+            MaxDecodedTableBytes));
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailWriterOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailWriterOptionsCommand.cs
new file mode 100644
index 00000000..c00f25f6
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailWriterOptionsCommand.cs
@@ -0,0 +1,43 @@
+using System.Management.Automation;
+using OfficeIMO.Email;
+
+namespace PSWriteOffice.Cmdlets.Email;
+
+/// Creates deterministic email writer settings through ordinary PowerShell parameters.
+/// 
+///   Preserve the original source when possible and block semantic loss.
+///   PS> 
+///   $options = New-OfficeEmailWriterOptions -UsePreservedRawSource -ConversionLossPolicy Block
+/// $message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeEmailWriterOptions")]
+[OutputType(typeof(EmailWriterOptions))]
+public sealed class NewOfficeEmailWriterOptionsCommand : PSCmdlet {
+    /// Policy applied when the requested format cannot preserve known message semantics.
+    [Parameter] public EmailConversionLossPolicy ConversionLossPolicy { get; set; } = EmailConversionLossPolicy.Block;
+    /// Emit an unchanged preserved source instead of regenerating the artifact when possible.
+    [Parameter] public SwitchParameter UsePreservedRawSource { get; set; }
+    /// Write Bcc recipients into the message header.
+    [Parameter] public SwitchParameter IncludeBccHeader { get; set; }
+    /// Maximum encoded characters on one Base64 body line.
+    [Parameter] [ValidateRange(4, 996)] public int Base64LineLength { get; set; } = 76;
+    /// Maximum embedded-message write depth.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int MaxNestedMessageDepth { get; set; } = 16;
+    /// Maximum serialized artifact size.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long MaxOutputBytes { get; set; } = 512L * 1024L * 1024L;
+
+    /// 
+    protected override void ProcessRecord() {
+        if (Base64LineLength % 4 != 0) {
+            throw new PSArgumentOutOfRangeException(nameof(Base64LineLength), Base64LineLength, "Base64 line length must be a multiple of four.");
+        }
+
+        WriteObject(new EmailWriterOptions(
+            ConversionLossPolicy,
+            UsePreservedRawSource.IsPresent,
+            IncludeBccHeader.IsPresent,
+            Base64LineLength,
+            MaxNestedMessageDepth,
+            MaxOutputBytes));
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs
index 59ad2ae8..2369e4f7 100644
--- a/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs
@@ -6,10 +6,15 @@
 namespace PSWriteOffice.Cmdlets.Email;
 
 /// Saves an email document as EML, EMLX, MSG, or TNEF with fidelity diagnostics.
+/// 
+///   Save a message with an explicit loss policy.
+///   PS> 
+///   $options = New-OfficeEmailWriterOptions -ConversionLossPolicy Block
+/// $message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru
+/// 
 [Cmdlet(VerbsData.Save, "OfficeEmail", SupportsShouldProcess = true)]
 [OutputType(typeof(EmailWriteResult))]
-public sealed class SaveOfficeEmailCommand : PSCmdlet
-{
+public sealed class SaveOfficeEmailCommand : OfficeMutationCmdlet {
     /// Email document to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public EmailDocument Document { get; set; } = null!;
@@ -27,27 +32,25 @@ public sealed class SaveOfficeEmailCommand : PSCmdlet
     public EmailWriterOptions? Options { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var output = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         if (!ShouldProcess(output, "Save email artifact")) return;
         Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
         if (Format == EmailFileFormat.Emlx ||
-            (!Format.HasValue && string.Equals(System.IO.Path.GetExtension(output), ".emlx", System.StringComparison.OrdinalIgnoreCase)))
-        {
+            (!Format.HasValue && string.Equals(System.IO.Path.GetExtension(output), ".emlx", System.StringComparison.OrdinalIgnoreCase))) {
             var writer = new EmailStoreEmlxWriter(new EmailStoreEmlxWriterOptions(Options));
             var result = writer.Write(Document, output);
-            if (result.HasErrors)
-            {
+            if (result.HasErrors) {
                 result.RequireNoLoss();
             }
 
-            WriteObject(result);
+            WritePassThru(result);
             return;
         }
 
-        WriteObject(Format.HasValue
+        var saveResult = Format.HasValue
             ? Document.Save(output, Format.Value, Options)
-            : Document.Save(output, Options));
+            : Document.Save(output, Options);
+        WritePassThru(saveResult);
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs b/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs
index 815b222c..c54a60bd 100644
--- a/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs
@@ -5,10 +5,15 @@
 namespace PSWriteOffice.Cmdlets.Email;
 
 /// Saves a native mbox mailbox with output diagnostics.
+/// 
+///   Save an mboxrd mailbox and return its diagnostics.
+///   PS> 
+///   $options = New-OfficeEmailMailboxWriterOptions -Variant Mboxrd
+/// $mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru
+/// 
 [Cmdlet(VerbsData.Save, "OfficeEmailMailbox", SupportsShouldProcess = true)]
 [OutputType(typeof(EmailWriteResult))]
-public sealed class SaveOfficeEmailMailboxCommand : PSCmdlet
-{
+public sealed class SaveOfficeEmailMailboxCommand : OfficeMutationCmdlet {
     /// Mailbox to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public EmailMailbox Mailbox { get; set; } = null!;
@@ -22,11 +27,10 @@ public sealed class SaveOfficeEmailMailboxCommand : PSCmdlet
     public EmailMailboxWriterOptions? Options { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var output = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         if (!ShouldProcess(output, "Save mbox mailbox")) return;
         Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
-        WriteObject(Mailbox.Save(output, Options));
+        WritePassThru(Mailbox.Save(output, Options));
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelAutoFilterCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelAutoFilterCommand.cs
index 7945170d..e522ddde 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelAutoFilterCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelAutoFilterCommand.cs
@@ -24,8 +24,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelAutoFilter", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelAutoFilter")]
-public sealed class AddOfficeExcelAutoFilterCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelAutoFilterCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
 
@@ -50,19 +49,16 @@ public sealed class AddOfficeExcelAutoFilterCommand : PSCmdlet
     public Hashtable? Criteria { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var sheet = ResolveSheet();
         var criteria = ConvertCriteria(Criteria);
         sheet.AddAutoFilter(Range, criteria);
+        WritePassThru(sheet);
     }
 
-    private ExcelSheet ResolveSheet()
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
-            if (Document == null)
-            {
+    private ExcelSheet ResolveSheet() {
+        if (ParameterSetName == ParameterSetDocument) {
+            if (Document == null) {
                 throw new PSArgumentException("Provide an Excel document.");
             }
 
@@ -73,29 +69,23 @@ private ExcelSheet ResolveSheet()
         return context.RequireSheet();
     }
 
-    private static Dictionary>? ConvertCriteria(Hashtable? criteria)
-    {
-        if (criteria == null || criteria.Count == 0)
-        {
+    private static Dictionary>? ConvertCriteria(Hashtable? criteria) {
+        if (criteria == null || criteria.Count == 0) {
             return null;
         }
 
         var converted = new Dictionary>();
-        foreach (DictionaryEntry entry in criteria)
-        {
-            if (entry.Key == null)
-            {
+        foreach (DictionaryEntry entry in criteria) {
+            if (entry.Key == null) {
                 continue;
             }
 
-            if (!TryGetColumnIndex(entry.Key, out uint index))
-            {
+            if (!TryGetColumnIndex(entry.Key, out uint index)) {
                 throw new PSArgumentException($"Invalid column index '{entry.Key}'. Use an integer index (0-based within the filter range).");
             }
 
             var values = NormalizeValues(entry.Value).ToArray();
-            if (values.Length == 0)
-            {
+            if (values.Length == 0) {
                 continue;
             }
 
@@ -105,11 +95,9 @@ private ExcelSheet ResolveSheet()
         return converted.Count == 0 ? null : converted;
     }
 
-    private static bool TryGetColumnIndex(object key, out uint index)
-    {
+    private static bool TryGetColumnIndex(object key, out uint index) {
         index = 0;
-        switch (key)
-        {
+        switch (key) {
             case byte b:
                 index = b;
                 return true;
@@ -141,30 +129,23 @@ private static bool TryGetColumnIndex(object key, out uint index)
         }
     }
 
-    private static IEnumerable NormalizeValues(object? value)
-    {
-        if (value == null)
-        {
+    private static IEnumerable NormalizeValues(object? value) {
+        if (value == null) {
             yield break;
         }
 
-        if (value is string text)
-        {
-            if (!string.IsNullOrWhiteSpace(text))
-            {
+        if (value is string text) {
+            if (!string.IsNullOrWhiteSpace(text)) {
                 yield return text;
             }
             yield break;
         }
 
-        if (value is IEnumerable enumerable)
-        {
-            foreach (var item in enumerable)
-            {
+        if (value is IEnumerable enumerable) {
+            foreach (var item in enumerable) {
                 if (item == null) continue;
                 var itemText = item.ToString();
-                if (!string.IsNullOrWhiteSpace(itemText))
-                {
+                if (!string.IsNullOrWhiteSpace(itemText)) {
                     yield return itemText!;
                 }
             }
@@ -172,9 +153,8 @@ private static IEnumerable NormalizeValues(object? value)
         }
 
         var single = value.ToString();
-        if (!string.IsNullOrWhiteSpace(single))
-        {
+        if (!string.IsNullOrWhiteSpace(single)) {
             yield return single!;
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPackageMetadataCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPackageMetadataCommand.cs
index 744e2b67..7a1327a1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPackageMetadataCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPackageMetadataCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelPackageMetadata", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelPackageMetadata", "ExcelConnectionMetadata")]
 [OutputType(typeof(PSObject))]
-public sealed class AddOfficeExcelPackageMetadataCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelPackageMetadataCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -50,11 +49,9 @@ public sealed class AddOfficeExcelPackageMetadataCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -62,21 +59,17 @@ protected override void ProcessRecord()
 
         string? sheetName = null;
         ExcelPackagePartInfo part;
-        if (string.Equals(Kind, "QueryTable", StringComparison.OrdinalIgnoreCase))
-        {
+        if (string.Equals(Kind, "QueryTable", StringComparison.OrdinalIgnoreCase)) {
             sheetName = ExcelWorkbookCommandService.ResolveSheetNameOrCurrent(this, document, ParameterSetName, WorksheetName);
             part = document.AddWorksheetQueryTableMetadata(sheetName, Xml);
-        }
-        else
-        {
+        } else {
             part = document.AddWorkbookConnectionMetadata(Xml);
         }
 
         string contentType = part.ContentType;
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var result = new PSObject();
             result.Properties.Add(new PSNoteProperty("Kind", Kind));
             result.Properties.Add(new PSNoteProperty("WorksheetName", sheetName));
@@ -84,4 +77,4 @@ protected override void ProcessRecord()
             WriteObject(result);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPageBreakCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPageBreakCommand.cs
index 03569e6a..d5d7ae2d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPageBreakCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPageBreakCommand.cs
@@ -13,16 +13,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelPageBreak", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelPageBreak")]
-public sealed class AddOfficeExcelPageBreakCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelPageBreakCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -50,18 +49,14 @@ public sealed class AddOfficeExcelPageBreakCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Row.Length == 0 && Column.Length == 0)
-        {
+    protected override void ProcessRecord() {
+        if (Row.Length == 0 && Column.Length == 0) {
             throw new PSArgumentException("Provide at least one row or column page break.");
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
 
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-
-        {
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
 
             return;
 
@@ -69,41 +64,34 @@ protected override void ProcessRecord()
 
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
 
-        foreach (var row in Row)
-        {
+        foreach (var row in Row) {
             sheet.AddManualRowPageBreak(row, save: false);
         }
 
-        foreach (var column in Column)
-        {
+        foreach (var column in Column) {
             sheet.AddManualColumnPageBreak(column, save: false);
         }
 
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WritePageBreaks(sheet);
         }
     }
 
-    private void WritePageBreaks(ExcelSheet sheet)
-    {
-        foreach (var row in sheet.GetManualRowPageBreaks())
-        {
+    private void WritePageBreaks(ExcelSheet sheet) {
+        foreach (var row in sheet.GetManualRowPageBreaks()) {
             WriteObject(ExcelPageBreakRecordService.Create("Row", row, sheet.Name, PathForRecord()));
         }
 
-        foreach (var column in sheet.GetManualColumnPageBreaks())
-        {
+        foreach (var column in sheet.GetManualColumnPageBreaks()) {
             WriteObject(ExcelPageBreakRecordService.Create("Column", column, sheet.Name, PathForRecord()));
         }
     }
 
-    private string? PathForRecord()
-    {
+    private string? PathForRecord() {
         return string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPowerQueryMetadataCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPowerQueryMetadataCommand.cs
index 16effbc5..20b7699d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPowerQueryMetadataCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelPowerQueryMetadataCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelPowerQueryMetadata", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelPowerQueryMetadata", "ExcelQueryMetadata")]
 [OutputType(typeof(PSObject))]
-public sealed class AddOfficeExcelPowerQueryMetadataCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelPowerQueryMetadataCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetContext = "Context";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document to update.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -65,22 +64,18 @@ public sealed class AddOfficeExcelPowerQueryMetadataCommand : PSCmdlet
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
         string? sheetName = WorksheetName;
-        if (string.IsNullOrWhiteSpace(sheetName) && string.Equals(ParameterSetName, ParameterSetContext, System.StringComparison.OrdinalIgnoreCase))
-        {
+        if (string.IsNullOrWhiteSpace(sheetName) && string.Equals(ParameterSetName, ParameterSetContext, System.StringComparison.OrdinalIgnoreCase)) {
             sheetName = ExcelDslContext.Require(this).RequireSheet().Name;
         }
 
-        var result = workbook.Document.AddPowerQueryMetadata(new ExcelPowerQueryMetadataOptions
-        {
+        var result = workbook.Document.AddPowerQueryMetadata(new ExcelPowerQueryMetadataOptions {
             Name = Name,
             WorksheetName = sheetName,
             QueryTableName = QueryTableName,
@@ -90,8 +85,7 @@ protected override void ProcessRecord()
         });
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var output = new PSObject();
             output.Properties.Add(new PSNoteProperty("Path", workbook.Document.FilePath));
             output.Properties.Add(new PSNoteProperty("ConnectionName", result.ConnectionName));
@@ -104,4 +98,4 @@ protected override void ProcessRecord()
         }
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelSlicerCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelSlicerCommand.cs
index 2bd25f71..252dd327 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelSlicerCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelSlicerCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelSlicer", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelSlicer")]
 [OutputType(typeof(PSObject))]
-public sealed class AddOfficeExcelSlicerCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelSlicerCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -52,16 +51,13 @@ public sealed class AddOfficeExcelSlicerCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
-        ExcelPackagePartInfo part = workbook.Document.AddWorkbookSlicerCache(new ExcelSlicerCacheOptions
-        {
+        ExcelPackagePartInfo part = workbook.Document.AddWorkbookSlicerCache(new ExcelSlicerCacheOptions {
             Name = Name,
             SourceName = SourceName,
             PivotTableName = PivotTableName,
@@ -71,8 +67,7 @@ protected override void ProcessRecord()
         string contentType = part.ContentType;
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var result = new PSObject();
             result.Properties.Add(new PSNoteProperty("Name", Name));
             result.Properties.Add(new PSNoteProperty("Kind", "Slicer"));
@@ -80,4 +75,4 @@ protected override void ProcessRecord()
             WriteObject(result);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableOfContentsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableOfContentsCommand.cs
index 924dc335..8009a53a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableOfContentsCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableOfContentsCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelTableOfContents", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelTableOfContents")]
 [OutputType(typeof(ExcelDocument), typeof(FileInfo))]
-public sealed class AddOfficeExcelTableOfContentsCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelTableOfContentsCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Path to the workbook to update in place.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -76,7 +75,7 @@ public sealed class AddOfficeExcelTableOfContentsCommand : PSCmdlet
     [Parameter]
     public string BackLinkText { get; set; } = "\u2190 TOC";
 
-    /// Open the workbook after saving when  is used.
+    /// Open the workbook after saving when  is used.
     [Parameter]
     public SwitchParameter Open { get; set; }
 
@@ -85,20 +84,16 @@ public sealed class AddOfficeExcelTableOfContentsCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (BackLinkRow < 1)
-        {
+    protected override void ProcessRecord() {
+        if (BackLinkRow < 1) {
             throw new PSArgumentOutOfRangeException(nameof(BackLinkRow));
         }
 
-        if (BackLinkColumn < 1)
-        {
+        if (BackLinkColumn < 1) {
             throw new PSArgumentOutOfRangeException(nameof(BackLinkColumn));
         }
 
-        if (ParameterSetName == ParameterSetPath)
-        {
+        if (ParameterSetName == ParameterSetPath) {
             ProcessPath();
             return;
         }
@@ -109,41 +104,33 @@ protected override void ProcessRecord()
 
         Apply(document);
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(document);
         }
     }
 
-    private void ProcessPath()
-    {
-        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-        if (!File.Exists(resolvedPath))
-        {
+    private void ProcessPath() {
+        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        if (!File.Exists(resolvedPath)) {
             throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
         }
 
         var fileInfo = new FileInfo(resolvedPath);
         var document = ExcelDocumentService.LoadDocument(resolvedPath, readOnly: false, autoSave: false);
-        try
-        {
+        try {
             Apply(document);
             ExcelDocumentService.SaveDocument(document, Open.IsPresent, resolvedPath);
-        }
-        catch
-        {
+        } catch {
             ExcelDocumentService.CloseDocument(document);
             throw;
         }
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(fileInfo);
         }
     }
 
-    private void Apply(ExcelDocument document)
-    {
+    private void Apply(ExcelDocument document) {
         document.AddTableOfContents(
             sheetName: SheetName,
             placeFirst: !DoNotPlaceFirst.IsPresent,
@@ -152,20 +139,17 @@ private void Apply(ExcelDocument document)
             includeHiddenNamedRanges: IncludeHiddenNamedRanges.IsPresent,
             styled: !NoStyle.IsPresent);
 
-        if (AddBackLinks.IsPresent)
-        {
+        if (AddBackLinks.IsPresent) {
             AddBackLinksToSheets(document);
         }
     }
 
-    private void AddBackLinksToSheets(ExcelDocument document)
-    {
+    private void AddBackLinksToSheets(ExcelDocument document) {
         var useExplicitPlacement =
             MyInvocation.BoundParameters.ContainsKey(nameof(BackLinkRow)) ||
             MyInvocation.BoundParameters.ContainsKey(nameof(BackLinkColumn));
 
-        if (useExplicitPlacement)
-        {
+        if (useExplicitPlacement) {
             document.AddBackLinksToToc(
                 tocSheetName: SheetName,
                 row: BackLinkRow,
@@ -175,10 +159,8 @@ private void AddBackLinksToSheets(ExcelDocument document)
         }
 
         var tocSheet = document[SheetName];
-        foreach (var sheet in document.Sheets)
-        {
-            if (string.Equals(sheet.Name, tocSheet.Name, System.StringComparison.OrdinalIgnoreCase))
-            {
+        foreach (var sheet in document.Sheets) {
+            if (string.Equals(sheet.Name, tocSheet.Name, System.StringComparison.OrdinalIgnoreCase)) {
                 continue;
             }
 
@@ -188,4 +170,4 @@ private void AddBackLinksToSheets(ExcelDocument document)
             sheet.SetInternalLink(row, 1, tocSheet, "A1", BackLinkText);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableRowCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableRowCommand.cs
index 7cb187f9..bdc826fb 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableRowCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTableRowCommand.cs
@@ -41,8 +41,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelTableRow", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [OutputType(typeof(ExcelTable))]
-public sealed class AddOfficeExcelTableRowCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelTableRowCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetTable = "Table";
@@ -51,8 +50,8 @@ public sealed class AddOfficeExcelTableRowCommand : PSCmdlet
 
     /// Workbook path to open, update, save, and close.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Open workbook to update. The caller remains responsible for saving and closing it.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -92,10 +91,8 @@ public sealed class AddOfficeExcelTableRowCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase))
-        {
+    protected override void ProcessRecord() {
+        if (string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)) {
             TableInputCollector.AddInput(_items, InputObject, preserveTabularInput: true);
             return;
         }
@@ -104,50 +101,39 @@ protected override void ProcessRecord()
     }
 
     /// 
-    protected override void EndProcessing()
-    {
-        if (!string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase))
-        {
+    protected override void EndProcessing() {
+        if (!string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)) {
             return;
         }
 
         AppendRows(ExcelTabularInputService.ToDataTable(_items, TableName), saveOwnedWorkbook: true);
     }
 
-    private void AppendRows(System.Data.DataTable data, bool saveOwnedWorkbook)
-    {
+    private void AppendRows(System.Data.DataTable data, bool saveOwnedWorkbook) {
         ExcelTable table;
 
-        if (ParameterSetName == ParameterSetTable)
-        {
+        if (ParameterSetName == ParameterSetTable) {
             table = Table ?? throw new PSArgumentException("Provide an Excel table.", nameof(Table));
-            if (!ExcelShouldProcessService.ShouldProcessTarget(this, "Excel table", "Append Excel table rows"))
-            {
+            if (!ExcelShouldProcessService.ShouldProcessTarget(this, "Excel table", "Append Excel table rows")) {
                 return;
             }
 
             table.AppendDataTable(data);
-        }
-        else
-        {
-            using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-            if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Append Excel table rows"))
-            {
+        } else {
+            using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+            if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Append Excel table rows")) {
                 return;
             }
 
             table = ResolveTable(workbook.Document);
             table.AppendDataTable(data);
-            if (saveOwnedWorkbook)
-            {
+            if (saveOwnedWorkbook) {
                 workbook.SaveIfOwned();
             }
         }
 
-        if (PassThru.IsPresent)
-        {
-            if (string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase))
-            {
+        if (PassThru.IsPresent) {
+            if (string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)) {
                 WriteWarning("Path-owned workbooks are saved and closed by Add-OfficeExcelTableRow; no live ExcelTable is emitted. Open the workbook with Get-OfficeExcel when chaining table edits.");
                 return;
             }
@@ -156,17 +142,14 @@ private void AppendRows(System.Data.DataTable data, bool saveOwnedWorkbook)
         }
     }
 
-    private System.Data.DataTable CreateDataTable(object? value)
-    {
+    private System.Data.DataTable CreateDataTable(object? value) {
         var items = new List();
         TableInputCollector.AddInput(items, value, preserveTabularInput: true);
         return ExcelTabularInputService.ToDataTable(items, TableName);
     }
 
-    private ExcelTable ResolveTable(ExcelDocument document)
-    {
-        if (!string.IsNullOrWhiteSpace(Sheet) || SheetIndex.HasValue)
-        {
+    private ExcelTable ResolveTable(ExcelDocument document) {
+        if (!string.IsNullOrWhiteSpace(Sheet) || SheetIndex.HasValue) {
             var sheet = ExcelWorkbookCommandService.ResolveSheet(this, document, ParameterSetName, Sheet, SheetIndex);
             return sheet.Table(TableName);
         }
@@ -175,13 +158,11 @@ private ExcelTable ResolveTable(ExcelDocument document)
             .Where(sheet => sheet.GetTableRange(TableName) != null)
             .ToArray();
 
-        if (matches.Length == 0)
-        {
+        if (matches.Length == 0) {
             throw new PSArgumentException($"Table '{TableName}' was not found in the workbook.", nameof(TableName));
         }
 
-        if (matches.Length > 1)
-        {
+        if (matches.Length > 1) {
             throw new PSArgumentException(
                 $"Table '{TableName}' exists on multiple worksheets. Specify -Sheet or -SheetIndex to select one.",
                 nameof(TableName));
@@ -189,4 +170,4 @@ private ExcelTable ResolveTable(ExcelDocument document)
 
         return matches[0].Table(TableName);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelThreadedCommentCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelThreadedCommentCommand.cs
index 356d8bff..df0c5dd2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelThreadedCommentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelThreadedCommentCommand.cs
@@ -19,16 +19,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelThreadedComment", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelThreadedComment")]
 [OutputType(typeof(PSObject))]
-public sealed class AddOfficeExcelThreadedCommentCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelThreadedCommentCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to operate on outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -80,19 +79,15 @@ public sealed class AddOfficeExcelThreadedCommentCommand : PSCmdlet
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        if (ParameterSetName == ParameterSetPath)
-        {
-            using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, null!, readOnly: false);
-            if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-            {
+    protected override void ProcessRecord() {
+        if (ParameterSetName == ParameterSetPath) {
+            using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, null!, readOnly: false);
+            if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
                 return;
             }
 
             var result = AddComment(ExcelSheetResolver.Resolve(workbook.Document, Sheet, SheetIndex));
-            if (!NoSave.IsPresent)
-            {
+            if (!NoSave.IsPresent) {
                 workbook.SaveIfOwned();
             }
 
@@ -103,18 +98,15 @@ protected override void ProcessRecord()
         ExcelSheet sheet = ParameterSetName == ParameterSetDocument
             ? ExcelSheetResolver.Resolve(Document, Sheet, SheetIndex)
             : ExcelDslContext.Require(this).RequireSheet();
-        if (!ExcelShouldProcessService.ShouldProcessTarget(this, sheet.Name, "Add Excel threaded comment"))
-        {
+        if (!ExcelShouldProcessService.ShouldProcessTarget(this, sheet.Name, "Add Excel threaded comment")) {
             return;
         }
 
         WriteResult(AddComment(sheet));
     }
 
-    private ExcelThreadedCommentResult AddComment(ExcelSheet sheet)
-    {
-        return sheet.AddThreadedComment(new ExcelThreadedCommentOptions
-        {
+    private ExcelThreadedCommentResult AddComment(ExcelSheet sheet) {
+        return sheet.AddThreadedComment(new ExcelThreadedCommentOptions {
             Address = Address,
             Text = Text,
             Author = string.IsNullOrWhiteSpace(Author) ? Environment.UserName : Author!,
@@ -125,10 +117,8 @@ private ExcelThreadedCommentResult AddComment(ExcelSheet sheet)
         });
     }
 
-    private void WriteResult(ExcelThreadedCommentResult result)
-    {
-        if (!PassThru.IsPresent)
-        {
+    private void WriteResult(ExcelThreadedCommentResult result) {
+        if (!PassThru.IsPresent) {
             return;
         }
 
@@ -143,4 +133,4 @@ private void WriteResult(ExcelThreadedCommentResult result)
         WriteObject(output);
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTimelineCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTimelineCommand.cs
index 926d2d49..549bed44 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTimelineCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelTimelineCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelTimeline", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelTimeline")]
 [OutputType(typeof(PSObject))]
-public sealed class AddOfficeExcelTimelineCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelTimelineCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -52,16 +51,13 @@ public sealed class AddOfficeExcelTimelineCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
-        ExcelPackagePartInfo part = workbook.Document.AddWorkbookTimelineCache(new ExcelTimelineCacheOptions
-        {
+        ExcelPackagePartInfo part = workbook.Document.AddWorkbookTimelineCache(new ExcelTimelineCacheOptions {
             Name = Name,
             SourceName = SourceName,
             PivotTableName = PivotTableName,
@@ -71,8 +67,7 @@ protected override void ProcessRecord()
         string contentType = part.ContentType;
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var result = new PSObject();
             result.Properties.Add(new PSNoteProperty("Name", Name));
             result.Properties.Add(new PSNoteProperty("Kind", "Timeline"));
@@ -80,4 +75,4 @@ protected override void ProcessRecord()
             WriteObject(result);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelVisualCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelVisualCommand.cs
index 63d74d8e..03077ee1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelVisualCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/AddOfficeExcelVisualCommand.cs
@@ -10,8 +10,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Add, "OfficeExcelVisual")]
 [Alias("ExcelVisual")]
 [OutputType(typeof(ExcelImage))]
-public sealed class AddOfficeExcelVisualCommand : OfficeVisualCommandBase
-{
+public sealed class AddOfficeExcelVisualCommand : OfficeVisualCommandBase {
     /// ChartForgeX VisualArtifact, OfficeVisualSource, OfficeVisualConversionResult, or SVG file path.
     [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
     public object InputObject { get; set; } = null!;
@@ -41,11 +40,17 @@ public sealed class AddOfficeExcelVisualCommand : OfficeVisualCommandBase
     [Parameter]
     public int OffsetY { get; set; }
 
+    /// Emit the image added to the worksheet.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         ExcelSheet worksheet = Worksheet ?? ExcelDslContext.Require(this).RequireSheet();
         (int row, int column) = ExcelHostExtensions.ResolveCellAddress(Row, Column, Address);
-        WriteObject(worksheet.AddVisualArtifact(row, column, ResolveVisual(InputObject), OffsetX, OffsetY));
+        var image = worksheet.AddVisualArtifact(row, column, ResolveVisual(InputObject), OffsetX, OffsetY);
+        if (PassThru.IsPresent) {
+            WriteObject(image);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelAutoFilterCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelAutoFilterCommand.cs
index ffb52f63..5b760a3b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelAutoFilterCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelAutoFilterCommand.cs
@@ -13,8 +13,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Clear, "OfficeExcelAutoFilter", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelAutoFilterClear")]
-public sealed class ClearOfficeExcelAutoFilterCommand : PSCmdlet
-{
+public sealed class ClearOfficeExcelAutoFilterCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
 
@@ -31,18 +30,15 @@ public sealed class ClearOfficeExcelAutoFilterCommand : PSCmdlet
     public int? SheetIndex { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var sheet = ResolveSheet();
         sheet.AutoFilterClear();
+        WritePassThru(sheet);
     }
 
-    private ExcelSheet ResolveSheet()
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
-            if (Document == null)
-            {
+    private ExcelSheet ResolveSheet() {
+        if (ParameterSetName == ParameterSetDocument) {
+            if (Document == null) {
                 throw new PSArgumentException("Provide an Excel document.");
             }
 
@@ -52,4 +48,4 @@ private ExcelSheet ResolveSheet()
         var context = ExcelDslContext.Require(this);
         return context.RequireSheet();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelCommentCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelCommentCommand.cs
index 0ac4ac22..432b32ef 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelCommentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelCommentCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Clear, "OfficeExcelComment", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelCommentClear")]
 [OutputType(typeof(int))]
-public sealed class ClearOfficeExcelCommentCommand : PSCmdlet
-{
+public sealed class ClearOfficeExcelCommentCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -65,17 +64,14 @@ public sealed class ClearOfficeExcelCommentCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var filter = CreateRequiredFilter();
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var cleared = 0;
         var shouldSave = false;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
-            if (!ShouldProcess(sheet.Name, "Clear Excel comments"))
-            {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
+            if (!ShouldProcess(sheet.Name, "Clear Excel comments")) {
                 continue;
             }
 
@@ -83,21 +79,17 @@ protected override void ProcessRecord()
             cleared += sheet.ClearComments(filter);
         }
 
-        if (shouldSave)
-        {
+        if (shouldSave) {
             workbook.SaveIfOwned();
         }
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(cleared);
         }
     }
 
-    private ExcelCommentFilter CreateRequiredFilter()
-    {
-        if (!string.IsNullOrWhiteSpace(Address) && !string.IsNullOrWhiteSpace(Range))
-        {
+    private ExcelCommentFilter CreateRequiredFilter() {
+        if (!string.IsNullOrWhiteSpace(Address) && !string.IsNullOrWhiteSpace(Range)) {
             throw new PSArgumentException("Specify either -Address or -Range, not both.");
         }
 
@@ -105,16 +97,14 @@ private ExcelCommentFilter CreateRequiredFilter()
             || !string.IsNullOrWhiteSpace(Range)
             || !string.IsNullOrWhiteSpace(Author)
             || !string.IsNullOrWhiteSpace(TextContains);
-        if (!hasFilter && !All.IsPresent)
-        {
+        if (!hasFilter && !All.IsPresent) {
             throw new PSArgumentException("Specify a comment filter or use -All.");
         }
 
-        return new ExcelCommentFilter
-        {
+        return new ExcelCommentFilter {
             A1Range = !string.IsNullOrWhiteSpace(Address) ? Address : Range,
             Author = Author,
             TextContains = TextContains
         };
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelConditionalFormattingCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelConditionalFormattingCommand.cs
index f739f404..fe56fb62 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelConditionalFormattingCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelConditionalFormattingCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Clear, "OfficeExcelConditionalFormatting", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelConditionalFormattingClear")]
-public sealed class ClearOfficeExcelConditionalFormattingCommand : PSCmdlet
-{
+public sealed class ClearOfficeExcelConditionalFormattingCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -60,17 +59,14 @@ public sealed class ClearOfficeExcelConditionalFormattingCommand : PSCmdlet
     public SwitchParameter IncludeHeader { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var shouldSave = false;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
             string? targetRange = ExcelTargetRangeResolver.ResolveOptional(sheet, Range, HeaderName, TableName, HeaderRow, IncludeHeader.IsPresent);
             var target = string.IsNullOrWhiteSpace(targetRange) ? sheet.Name : $"{sheet.Name}!{targetRange}";
-            if (!ShouldProcess(target, "Clear Excel conditional formatting"))
-            {
+            if (!ShouldProcess(target, "Clear Excel conditional formatting")) {
                 continue;
             }
 
@@ -78,9 +74,9 @@ protected override void ProcessRecord()
             sheet.ClearConditionalFormatting(targetRange);
         }
 
-        if (shouldSave)
-        {
+        if (shouldSave) {
             workbook.SaveIfOwned();
+            WritePassThru(workbook.Document, workbook.OwnsDocument, Path);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelDataValidationCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelDataValidationCommand.cs
index d738ace6..7e3d9081 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelDataValidationCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelDataValidationCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Clear, "OfficeExcelDataValidation", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelDataValidationClear")]
-public sealed class ClearOfficeExcelDataValidationCommand : PSCmdlet
-{
+public sealed class ClearOfficeExcelDataValidationCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -60,17 +59,14 @@ public sealed class ClearOfficeExcelDataValidationCommand : PSCmdlet
     public SwitchParameter IncludeHeader { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var shouldSave = false;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
             string? targetRange = ExcelTargetRangeResolver.ResolveOptional(sheet, Range, HeaderName, TableName, HeaderRow, IncludeHeader.IsPresent);
             var target = string.IsNullOrWhiteSpace(targetRange) ? sheet.Name : $"{sheet.Name}!{targetRange}";
-            if (!ShouldProcess(target, "Clear Excel data validations"))
-            {
+            if (!ShouldProcess(target, "Clear Excel data validations")) {
                 continue;
             }
 
@@ -78,9 +74,9 @@ protected override void ProcessRecord()
             sheet.RemoveDataValidations(targetRange);
         }
 
-        if (shouldSave)
-        {
+        if (shouldSave) {
             workbook.SaveIfOwned();
+            WritePassThru(workbook.Document, workbook.OwnsDocument, Path);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelPageBreakCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelPageBreakCommand.cs
index a30213ee..18f5bf7d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelPageBreakCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelPageBreakCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Clear, "OfficeExcelPageBreak", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelPageBreakClear")]
-public sealed class ClearOfficeExcelPageBreakCommand : PSCmdlet
-{
+public sealed class ClearOfficeExcelPageBreakCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -52,42 +51,35 @@ public sealed class ClearOfficeExcelPageBreakCommand : PSCmdlet
     public SwitchParameter All { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!All.IsPresent && Row.Length == 0 && Column.Length == 0)
-        {
+    protected override void ProcessRecord() {
+        if (!All.IsPresent && Row.Length == 0 && Column.Length == 0) {
             throw new PSArgumentException("Provide row breaks, column breaks, or -All.");
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var shouldSave = false;
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
-            if (!ShouldProcess(sheet.Name, "Clear Excel manual page breaks"))
-            {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
+            if (!ShouldProcess(sheet.Name, "Clear Excel manual page breaks")) {
                 continue;
             }
 
-            if (All.IsPresent)
-            {
+            if (All.IsPresent) {
                 shouldSave |= sheet.ClearManualPageBreaks(save: false);
                 continue;
             }
 
-            foreach (var row in Row)
-            {
+            foreach (var row in Row) {
                 shouldSave |= sheet.RemoveManualRowPageBreak(row, save: false);
             }
 
-            foreach (var column in Column)
-            {
+            foreach (var column in Column) {
                 shouldSave |= sheet.RemoveManualColumnPageBreak(column, save: false);
             }
         }
 
-        if (shouldSave)
-        {
+        if (shouldSave) {
             workbook.SaveIfOwned();
+            WritePassThru(workbook.Document, workbook.OwnsDocument, Path);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelRangeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelRangeCommand.cs
index 20ce4bdc..b879c9c8 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelRangeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ClearOfficeExcelRangeCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Clear, "OfficeExcelRange", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelRangeClear")]
-public sealed class ClearOfficeExcelRangeCommand : PSCmdlet
-{
+public sealed class ClearOfficeExcelRangeCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -90,30 +89,26 @@ public sealed class ClearOfficeExcelRangeCommand : PSCmdlet
     public SwitchParameter All { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var options = ResolveOptions();
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
         var target = $"{sheet.Name}!{Range}";
 
-        if (ShouldProcess(target, $"Clear Excel range ({options})"))
-        {
+        if (ShouldProcess(target, $"Clear Excel range ({options})")) {
             sheet.ClearRange(Range, options);
             workbook.SaveIfOwned();
+            WritePassThru(workbook.Document, workbook.OwnsDocument, Path);
         }
     }
 
-    private ExcelClearOptions ResolveOptions()
-    {
-        if (All.IsPresent || !AnyOptionSwitchPresent())
-        {
+    private ExcelClearOptions ResolveOptions() {
+        if (All.IsPresent || !AnyOptionSwitchPresent()) {
             return ExcelClearOptions.All;
         }
 
         var options = ExcelClearOptions.None;
-        if (Contents.IsPresent)
-        {
+        if (Contents.IsPresent) {
             options |= ExcelClearOptions.Values | ExcelClearOptions.Formulas;
         }
 
@@ -129,8 +124,7 @@ private ExcelClearOptions ResolveOptions()
         return options;
     }
 
-    private bool AnyOptionSwitchPresent()
-    {
+    private bool AnyOptionSwitchPresent() {
         return Contents.IsPresent
             || Values.IsPresent
             || Formulas.IsPresent
@@ -142,4 +136,4 @@ private bool AnyOptionSwitchPresent()
             || Merges.IsPresent
             || Sparklines.IsPresent;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/CloseOfficeExcelCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/CloseOfficeExcelCommand.cs
index ab451365..7daae4c5 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/CloseOfficeExcelCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/CloseOfficeExcelCommand.cs
@@ -19,9 +19,8 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// $workbook | Close-OfficeExcel -Save -Path .\report-final.xlsx -SafePreflight -ValidateOpenXml
 ///   Saves pending changes through OfficeIMO's normal save path, validates the package, and releases the workbook.
 /// 
-[Cmdlet(VerbsCommon.Close, "OfficeExcel")]
-public sealed class CloseOfficeExcelCommand : PSCmdlet
-{
+[Cmdlet(VerbsCommon.Close, "OfficeExcel", SupportsShouldProcess = true)]
+public sealed class CloseOfficeExcelCommand : PSCmdlet {
     /// Workbook to close.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public ExcelDocument Document { get; set; } = null!;
@@ -34,9 +33,10 @@ public sealed class CloseOfficeExcelCommand : PSCmdlet
     [Parameter]
     public string? Path { get; set; }
 
-    /// Open the workbook in Excel after saving.
+    /// Open the workbook after saving. Requires -Save or -Path.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Password used to save the workbook as an encrypted package.
     [Parameter]
@@ -80,15 +80,22 @@ public sealed class CloseOfficeExcelCommand : PSCmdlet
     public string? DateSystem { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Document == null)
-        {
+    protected override void ProcessRecord() {
+        if (Document == null) {
             return;
         }
 
-        if (Save.IsPresent || !string.IsNullOrEmpty(Path))
-        {
+        if (Open.IsPresent && !Save.IsPresent && string.IsNullOrWhiteSpace(Path)) {
+            throw new PSArgumentException("Use -Save or -Path with -Open so the workbook is persisted before it is opened.", nameof(Open));
+        }
+
+        var shouldSave = Save.IsPresent || !string.IsNullOrWhiteSpace(Path);
+        var action = shouldSave ? "Save and close" : "Close";
+        if (!ShouldProcess("Excel workbook", action)) {
+            return;
+        }
+
+        if (shouldSave) {
             ExcelDateSystemService.ApplyIfSpecified(Document, DateSystem, nameof(DateSystem));
             var resolvedPath = !string.IsNullOrWhiteSpace(Path)
                 ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)
@@ -102,10 +109,8 @@ protected override void ProcessRecord()
                 ClearCachedFormulaResults.IsPresent,
                 MarkFormulasDirty.IsPresent,
                 ForceFullCalculationOnOpen.IsPresent);
-            ExcelDocumentService.SaveDocument(Document, Show.IsPresent, resolvedPath, Password, saveOptions);
-        }
-        else
-        {
+            ExcelDocumentService.SaveDocument(Document, Open.IsPresent, resolvedPath, Password, saveOptions);
+        } else {
             ExcelDocumentService.CloseDocument(Document);
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelRangeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelRangeCommand.cs
index 6d953af5..5a32e436 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelRangeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelRangeCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsData.Compare, "OfficeExcelRange", DefaultParameterSetName = ParameterSetPath)]
 [Alias("Compare-OfficeExcelSheet", "ExcelCompare")]
 [OutputType(typeof(ExcelRangeDifference))]
-public sealed class CompareOfficeExcelRangeCommand : PSCmdlet
-{
+public sealed class CompareOfficeExcelRangeCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Left workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath", "LeftPath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath", "LeftPath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Left workbook object.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -78,17 +77,15 @@ public sealed class CompareOfficeExcelRangeCommand : PSCmdlet
     public SwitchParameter StrictNullEmpty { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var leftWorkbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var leftWorkbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var leftDocument = leftWorkbook.Document;
         using var rightWorkbook = ResolveRightWorkbook(leftDocument);
         var rightDocument = rightWorkbook.Document;
         var leftSheet = ExcelWorkbookCommandService.ResolveSheet(this, leftDocument, ParameterSetName, LeftSheet, LeftSheetIndex);
         var rightSheet = ResolveRightSheet(rightDocument, leftSheet.Name);
 
-        var options = new ExcelRangeCompareOptions
-        {
+        var options = new ExcelRangeCompareOptions {
             TrimStrings = TrimStrings.IsPresent,
             IgnoreCase = IgnoreCase.IsPresent,
             TreatNullAndEmptyStringAsEqual = !StrictNullEmpty.IsPresent
@@ -104,23 +101,19 @@ protected override void ProcessRecord()
         WriteObject(differences, enumerateCollection: true);
     }
 
-    private ExcelWorkbookCommandScope ResolveRightWorkbook(ExcelDocument leftDocument)
-    {
-        if (ParameterSetName == ParameterSetPath && !string.IsNullOrWhiteSpace(RightPath))
-        {
+    private ExcelWorkbookCommandScope ResolveRightWorkbook(ExcelDocument leftDocument) {
+        if (ParameterSetName == ParameterSetPath && !string.IsNullOrWhiteSpace(RightPath)) {
             return ExcelWorkbookCommandService.OpenWorkbook(this, RightPath!, readOnly: true);
         }
 
         return new ExcelWorkbookCommandScope(RightDocument ?? leftDocument, ownsDocument: false);
     }
 
-    private ExcelSheet ResolveRightSheet(ExcelDocument document, string leftSheetName)
-    {
-        if (!string.IsNullOrWhiteSpace(RightSheet) || RightSheetIndex.HasValue)
-        {
+    private ExcelSheet ResolveRightSheet(ExcelDocument document, string leftSheetName) {
+        if (!string.IsNullOrWhiteSpace(RightSheet) || RightSheetIndex.HasValue) {
             return ExcelSheetResolver.Resolve(document, RightSheet, RightSheetIndex);
         }
 
         return document[leftSheetName];
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelWorkbookCommand.cs
index e7565a04..82b0b865 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/CompareOfficeExcelWorkbookCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsData.Compare, "OfficeExcelWorkbook", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelWorkbookCompare")]
 [OutputType(typeof(PSObject))]
-public sealed class CompareOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class CompareOfficeExcelWorkbookCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "ReferencePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "ReferencePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook path to compare against.
     [Parameter(Mandatory = true, Position = 1, ParameterSetName = ParameterSetPath)]
@@ -65,15 +64,13 @@ public sealed class CompareOfficeExcelWorkbookCommand : PSCmdlet
     [Parameter]
     public SwitchParameter SkipComments { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var left = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var left = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         using var right = ParameterSetName == ParameterSetPath
             ? ExcelWorkbookCommandService.OpenWorkbook(this, DifferencePath, readOnly: true)
             : new ExcelWorkbookCommandScope(DifferenceDocument, ownsDocument: false);
 
-        var report = left.Document.CompareWorkbook(right.Document, new ExcelWorkbookDiffOptions
-        {
+        var report = left.Document.CompareWorkbook(right.Document, new ExcelWorkbookDiffOptions {
             MaxDifferences = MaxDifferences,
             CompareCells = !SkipCells.IsPresent,
             CompareCellStyles = !SkipCellStyles.IsPresent,
@@ -89,8 +86,7 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 
-    private static PSObject CreateDifference(ExcelWorkbookDifference difference)
-    {
+    private static PSObject CreateDifference(ExcelWorkbookDifference difference) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Category", difference.Category));
         item.Properties.Add(new PSNoteProperty("Message", difference.Message));
@@ -101,4 +97,4 @@ private static PSObject CreateDifference(ExcelWorkbookDifference difference)
         return item;
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelSheetCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelSheetCommand.cs
index d7ff304b..91c1f980 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelSheetCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelSheetCommand.cs
@@ -27,16 +27,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Copy, "OfficeExcelSheet", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelSheetCopy")]
 [OutputType(typeof(ExcelSheet))]
-public sealed class CopyOfficeExcelSheetCommand : PSCmdlet
-{
+public sealed class CopyOfficeExcelSheetCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Target workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Target workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -73,11 +72,9 @@ public sealed class CopyOfficeExcelSheetCommand : PSCmdlet
     public ExcelWorksheetCopyMode CopyMode { get; set; } = ExcelWorksheetCopyMode.Package;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var targetWorkbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, targetWorkbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var targetWorkbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, targetWorkbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -95,6 +92,6 @@ protected override void ProcessRecord()
                 new ExcelWorksheetCopyOptions { CopyMode = CopyMode });
 
         targetWorkbook.SaveIfOwned();
-        WriteObject(copied);
+        WritePassThru(copied);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelWorkbookCommand.cs
index c8b378cc..b135b277 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/CopyOfficeExcelWorkbookCommand.cs
@@ -16,12 +16,11 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Copy, "OfficeExcelWorkbook", SupportsShouldProcess = true)]
 [Alias("ExcelWorkbookCopy", "ExcelPackageCopy")]
 [OutputType(typeof(FileInfo))]
-public sealed class CopyOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class CopyOfficeExcelWorkbookCommand : PSCmdlet {
     /// Source workbook or template package path.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("Path", "InputPath", "SourcePath")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath", "InputPath", "SourcePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Destination workbook path.
     [Parameter(Mandatory = true, Position = 1)]
@@ -37,21 +36,18 @@ public sealed class CopyOfficeExcelWorkbookCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        string sourcePath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
+    protected override void ProcessRecord() {
+        string sourcePath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         string destinationPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(DestinationPath);
 
-        if (!ShouldProcess(destinationPath, $"Copy workbook package from '{sourcePath}'"))
-        {
+        if (!ShouldProcess(destinationPath, $"Copy workbook package from '{sourcePath}'")) {
             return;
         }
 
         ExcelDocumentService.CopyWorkbookPackage(sourcePath, destinationPath, Force.IsPresent);
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(new FileInfo(destinationPath));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/EditOfficeExcelRowCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/EditOfficeExcelRowCommand.cs
index 572c5ef3..6eff2012 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/EditOfficeExcelRowCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/EditOfficeExcelRowCommand.cs
@@ -14,16 +14,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsData.Edit, "OfficeExcelRow", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("Edit-ExcelRow", "ExcelRowEdit")]
 [OutputType(typeof(ExcelPowerShellRowEdit))]
-public sealed class EditOfficeExcelRowCommand : PSCmdlet
-{
+public sealed class EditOfficeExcelRowCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -55,11 +54,9 @@ public sealed class EditOfficeExcelRowCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -74,14 +71,12 @@ protected override void ProcessRecord()
 
         using var reader = document.CreateDataReader(options);
         var headers = new string[reader.FieldCount];
-        for (var columnIndex = 0; columnIndex < headers.Length; columnIndex++)
-        {
+        for (var columnIndex = 0; columnIndex < headers.Length; columnIndex++) {
             headers[columnIndex] = reader.GetName(columnIndex);
         }
 
         var dataRowIndex = 0;
-        while (reader.Read())
-        {
+        while (reader.Read()) {
             var values = new object[reader.FieldCount];
             reader.GetValues(values);
             var row = new ExcelPowerShellRowEdit(
@@ -92,8 +87,7 @@ protected override void ProcessRecord()
                 values,
                 options.Culture);
             ScriptBlock.Invoke(row);
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 WriteObject(row);
             }
 
@@ -102,4 +96,4 @@ protected override void ProcessRecord()
 
         workbook.SaveIfOwned();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelChartImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelChartImageCommand.cs
index 9fef4218..0a093ab1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelChartImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelChartImageCommand.cs
@@ -47,6 +47,10 @@ public sealed class ExportOfficeExcelChartImageCommand : PSCmdlet
     [Parameter]
     public SwitchParameter Force { get; set; }
 
+    /// Emit the structured image export result when a destination path is used.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -86,7 +90,7 @@ protected override void ProcessRecord()
                     ? OfficeImageExportFileConflictPolicy.Replace
                     : OfficeImageExportFileConflictPolicy.FailIfExists);
             }
-            WriteObject(result);
+            if (output == null || PassThru.IsPresent) WriteObject(result);
         }
         finally
         {
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelImageCommand.cs
index 8681f87d..4c9e7af5 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelImageCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 ///   Export visible sheets as PNG files.
 ///   PS> 
 ///   Export-OfficeExcelImage -Path .\Report.xlsx -OutputPath .\Images
-///   Writes one image per selected sheet and returns OfficeImageExportResult objects.
+///   Writes one image per selected sheet. Add -PassThru to receive the structured export results.
 /// 
 [Cmdlet(VerbsData.Export, "OfficeExcelImage", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
@@ -38,6 +38,10 @@ public sealed class ExportOfficeExcelImageCommand : PSCmdlet
     [Parameter]
     public ExcelWorkbookImageExportOptions? Options { get; set; }
 
+    /// Emit one structured image export result per saved sheet.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -55,7 +59,7 @@ protected override void ProcessRecord()
                 document = owned;
             }
             IReadOnlyList results = document.SaveAsImages(output, Format, Options);
-            WriteObject(results, enumerateCollection: true);
+            if (PassThru.IsPresent) WriteObject(results, enumerateCollection: true);
         }
         finally
         {
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelRangeImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelRangeImageCommand.cs
index 893dcba7..9b4c92b4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelRangeImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ExportOfficeExcelRangeImageCommand.cs
@@ -47,6 +47,10 @@ public sealed class ExportOfficeExcelRangeImageCommand : PSCmdlet
     [Parameter]
     public SwitchParameter Force { get; set; }
 
+    /// Emit the structured image export result when a destination path is used.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -84,7 +88,7 @@ protected override void ProcessRecord()
                     ? OfficeImageExportFileConflictPolicy.Replace
                     : OfficeImageExportFileConflictPolicy.FailIfExists);
             }
-            WriteObject(result);
+            if (output == null || PassThru.IsPresent) WriteObject(result);
         }
         finally
         {
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/FindOfficeExcelCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/FindOfficeExcelCommand.cs
index f448a397..ff8d64f0 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/FindOfficeExcelCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/FindOfficeExcelCommand.cs
@@ -19,16 +19,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Find, "OfficeExcel", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(PSObject))]
-public sealed class FindOfficeExcelCommand : PSCmdlet
-{
+public sealed class FindOfficeExcelCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -64,29 +63,23 @@ public sealed class FindOfficeExcelCommand : PSCmdlet
     public SwitchParameter Exact { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var document = workbook.Document;
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, document, ParameterSetName, Sheet, SheetIndex)) {
             var range = string.IsNullOrWhiteSpace(Range) ? sheet.UsedRangeA1 : Range!;
-            foreach (var cell in sheet.EnumerateRange(range))
-            {
+            foreach (var cell in sheet.EnumerateRange(range)) {
                 var cellText = Convert.ToString(cell.Value, CultureInfo.InvariantCulture) ?? string.Empty;
-                if (IsMatch(cellText))
-                {
+                if (IsMatch(cellText)) {
                     WriteObject(CreateRecord(sheet.Name, cell.Row, cell.Column, cell.Value));
                 }
             }
         }
     }
 
-    private bool IsMatch(string value)
-    {
+    private bool IsMatch(string value) {
         var comparison = CaseSensitive.IsPresent ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
-        if (Regex.IsPresent)
-        {
+        if (Regex.IsPresent) {
             var options = CaseSensitive.IsPresent ? RegexOptions.None : RegexOptions.IgnoreCase;
             return System.Text.RegularExpressions.Regex.IsMatch(value, Text, options);
         }
@@ -96,8 +89,7 @@ private bool IsMatch(string value)
             : value.IndexOf(Text, comparison) >= 0;
     }
 
-    private static PSObject CreateRecord(string sheetName, int row, int column, object? value)
-    {
+    private static PSObject CreateRecord(string sheetName, int row, int column, object? value) {
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("Sheet", sheetName));
         record.Properties.Add(new PSNoteProperty("Address", A1.CellReference(row, column)));
@@ -106,4 +98,4 @@ private static PSObject CreateRecord(string sheetName, int row, int column, obje
         record.Properties.Add(new PSNoteProperty("Value", value));
         return record;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommand.cs
index 06885a84..d05036e4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommand.cs
@@ -16,15 +16,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 ///   Loads report.xlsx for inspection without enabling writes.
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeExcel", DefaultParameterSetName = ParameterSetPath)]
-public sealed class GetOfficeExcelCommand : AsyncPSCmdlet
-{
+public sealed class GetOfficeExcelCommand : AsyncPSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetUri = "Uri";
 
     /// Path to the workbook to load.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Remote workbook URI to load.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetUri)]
@@ -39,26 +38,14 @@ public sealed class GetOfficeExcelCommand : AsyncPSCmdlet
     [Parameter]
     public SwitchParameter ReadOnly { get; set; }
 
-    /// Enable automatic saves on the underlying document.
-    [Parameter]
-    public SwitchParameter AutoSave { get; set; }
-
     /// Password used to open an encrypted workbook package.
     [Parameter]
     public string? Password { get; set; }
 
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
-        if (ParameterSetName == ParameterSetUri)
-        {
-            if (AutoSave.IsPresent)
-            {
-                throw new PSArgumentException("Remote workbooks cannot be opened with AutoSave. Save to a local path explicitly after loading.");
-            }
-
-            if (Uri == null)
-            {
+    protected override async Task ProcessRecordAsync() {
+        if (ParameterSetName == ParameterSetUri) {
+            if (Uri == null) {
                 throw new PSArgumentException("Workbook URI was not provided.", nameof(Uri));
             }
 
@@ -72,13 +59,12 @@ protected override async Task ProcessRecordAsync()
             return;
         }
 
-        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-        if (!File.Exists(resolvedPath))
-        {
+        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        if (!File.Exists(resolvedPath)) {
             throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
         }
 
-        ExcelDocument document = ExcelDocumentService.LoadDocument(resolvedPath, ReadOnly.IsPresent, AutoSave.IsPresent, Password);
+        ExcelDocument document = ExcelDocumentService.LoadDocument(resolvedPath, ReadOnly.IsPresent, autoSave: false, Password);
         WriteObject(document);
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentAuditCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentAuditCommand.cs
index d914493b..81588fd1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentAuditCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentAuditCommand.cs
@@ -18,15 +18,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelCommentAudit", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelCommentAudit", "ExcelCommentsAudit")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelCommentAuditCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelCommentAuditCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -36,9 +35,8 @@ public sealed class GetOfficeExcelCommentAuditCommand : PSCmdlet
     [Parameter]
     public SwitchParameter IncludeComments { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var report = workbook.Document.InspectComments();
         var output = new PSObject();
         output.Properties.Add(new PSNoteProperty("Path", workbook.Document.FilePath));
@@ -47,8 +45,7 @@ protected override void ProcessRecord()
         output.Properties.Add(new PSNoteProperty("ThreadedCommentCount", report.ThreadedCommentCount));
         output.Properties.Add(new PSNoteProperty("IssueCount", report.Issues.Count));
         output.Properties.Add(new PSNoteProperty("Issues", report.Issues.Select(CreateIssue).ToArray()));
-        if (IncludeComments.IsPresent)
-        {
+        if (IncludeComments.IsPresent) {
             output.Properties.Add(new PSNoteProperty("Comments", report.Comments.Select(CreateComment).ToArray()));
             output.Properties.Add(new PSNoteProperty("ThreadedComments", report.ThreadedComments.Select(CreateThreadedComment).ToArray()));
         }
@@ -56,8 +53,7 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 
-    private static PSObject CreateIssue(ExcelWorkbookDiagnosticIssue issue)
-    {
+    private static PSObject CreateIssue(ExcelWorkbookDiagnosticIssue issue) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Category", issue.Category));
         item.Properties.Add(new PSNoteProperty("Severity", issue.Severity.ToString()));
@@ -67,8 +63,7 @@ private static PSObject CreateIssue(ExcelWorkbookDiagnosticIssue issue)
         return item;
     }
 
-    private static PSObject CreateComment(ExcelCommentRecord comment)
-    {
+    private static PSObject CreateComment(ExcelCommentRecord comment) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("SheetName", comment.SheetName));
         item.Properties.Add(new PSNoteProperty("CellReference", comment.CellReference));
@@ -77,8 +72,7 @@ private static PSObject CreateComment(ExcelCommentRecord comment)
         return item;
     }
 
-    private static PSObject CreateThreadedComment(ExcelThreadedCommentSnapshot comment)
-    {
+    private static PSObject CreateThreadedComment(ExcelThreadedCommentSnapshot comment) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("SheetName", comment.SheetName));
         item.Properties.Add(new PSNoteProperty("CellReference", comment.CellReference));
@@ -91,4 +85,4 @@ private static PSObject CreateThreadedComment(ExcelThreadedCommentSnapshot comme
         return item;
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentCommand.cs
index e9a5ffeb..456dad1f 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelCommentCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelComment", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelComments")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelCommentCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelCommentCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -57,40 +56,33 @@ public sealed class GetOfficeExcelCommentCommand : PSCmdlet
     public string? TextContains { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var path = string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
         var filter = CreateFilter();
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
-            foreach (var comment in sheet.FindComments(filter))
-            {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
+            foreach (var comment in sheet.FindComments(filter)) {
                 WriteObject(ExcelCommentRecordService.CreateRecord(comment, sheet.Name, path));
             }
         }
     }
 
-    private ExcelCommentFilter? CreateFilter()
-    {
-        if (!string.IsNullOrWhiteSpace(Address) && !string.IsNullOrWhiteSpace(Range))
-        {
+    private ExcelCommentFilter? CreateFilter() {
+        if (!string.IsNullOrWhiteSpace(Address) && !string.IsNullOrWhiteSpace(Range)) {
             throw new PSArgumentException("Specify either -Address or -Range, not both.");
         }
 
-        if (string.IsNullOrWhiteSpace(Address) && string.IsNullOrWhiteSpace(Range) && string.IsNullOrWhiteSpace(Author) && string.IsNullOrWhiteSpace(TextContains))
-        {
+        if (string.IsNullOrWhiteSpace(Address) && string.IsNullOrWhiteSpace(Range) && string.IsNullOrWhiteSpace(Author) && string.IsNullOrWhiteSpace(TextContains)) {
             return null;
         }
 
-        return new ExcelCommentFilter
-        {
+        return new ExcelCommentFilter {
             A1Range = !string.IsNullOrWhiteSpace(Address) ? Address : Range,
             Author = Author,
             TextContains = TextContains
         };
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelConditionalFormattingCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelConditionalFormattingCommand.cs
index 81d9cdc2..e6282b7f 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelConditionalFormattingCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelConditionalFormattingCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelConditionalFormatting", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelConditionalFormatting")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelConditionalFormattingCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelConditionalFormattingCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -60,20 +59,17 @@ public sealed class GetOfficeExcelConditionalFormattingCommand : PSCmdlet
     public SwitchParameter IncludeHeader { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var path = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
             string? targetRange = ExcelTargetRangeResolver.ResolveOptional(sheet, Range, HeaderName, TableName, HeaderRow, IncludeHeader.IsPresent);
-            foreach (var rule in sheet.GetConditionalFormattingRules(targetRange))
-            {
+            foreach (var rule in sheet.GetConditionalFormattingRules(targetRange)) {
                 WriteObject(ExcelRuleRecordService.CreateConditionalFormattingRecord(rule, sheet.Name, path));
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataModelCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataModelCommand.cs
index 1846d0b7..7cd60b81 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataModelCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataModelCommand.cs
@@ -18,23 +18,21 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelDataModel", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelDataModel", "ExcelPowerQuery")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelDataModelCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelDataModelCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
     public ExcelDocument Document { get; set; } = null!;
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var report = workbook.Document.InspectDataModel();
         var output = new PSObject();
         output.Properties.Add(new PSNoteProperty("Path", workbook.Document.FilePath));
@@ -47,4 +45,4 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataValidationCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataValidationCommand.cs
index 244a9697..9babaef1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataValidationCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDataValidationCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelDataValidation", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelDataValidation")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelDataValidationCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelDataValidationCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -60,20 +59,17 @@ public sealed class GetOfficeExcelDataValidationCommand : PSCmdlet
     public SwitchParameter IncludeHeader { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var path = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
             string? targetRange = ExcelTargetRangeResolver.ResolveOptional(sheet, Range, HeaderName, TableName, HeaderRow, IncludeHeader.IsPresent);
-            foreach (var validation in sheet.GetDataValidations(targetRange))
-            {
+            foreach (var validation in sheet.GetDataValidations(targetRange)) {
                 WriteObject(ExcelRuleRecordService.CreateDataValidationRecord(validation, sheet.Name, path));
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDocumentPropertyCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDocumentPropertyCommand.cs
index 3bb00826..c53a9426 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDocumentPropertyCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelDocumentPropertyCommand.cs
@@ -20,15 +20,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeExcelDocumentProperty", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(ExcelDocumentPropertyInfo))]
-public sealed class GetOfficeExcelDocumentPropertyCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelDocumentPropertyCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -52,31 +51,24 @@ public sealed class GetOfficeExcelDocumentPropertyCommand : PSCmdlet
     public SwitchParameter Custom { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         ExcelDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
                 }
 
                 document = ExcelDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Excel workbook was not provided.");
             }
 
@@ -86,33 +78,26 @@ protected override void ProcessRecord()
 
             IEnumerable properties = ExcelDocumentPropertyService.GetProperties(document, includeBuiltIn, includeApplication, includeCustom);
             var patterns = BuildPatterns(Name);
-            if (patterns.Count > 0)
-            {
+            if (patterns.Count > 0) {
                 properties = properties.Where(property => patterns.Any(pattern => pattern.IsMatch(property.Name)));
             }
 
             WriteObject(properties, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private static List BuildPatterns(string[]? patterns)
-    {
+    private static List BuildPatterns(string[]? patterns) {
         var compiled = new List();
-        foreach (var pattern in patterns ?? Array.Empty())
-        {
-            if (!string.IsNullOrWhiteSpace(pattern))
-            {
+        foreach (var pattern in patterns ?? Array.Empty()) {
+            if (!string.IsNullOrWhiteSpace(pattern)) {
                 compiled.Add(new WildcardPattern(pattern, WildcardOptions.IgnoreCase));
             }
         }
 
         return compiled;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelFormulaAnalysisCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelFormulaAnalysisCommand.cs
index 7cdaae9c..443d04b1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelFormulaAnalysisCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelFormulaAnalysisCommand.cs
@@ -19,15 +19,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelFormulaAnalysis", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelFormulaAnalysis", "ExcelFormulaAudit")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelFormulaAnalysisCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelFormulaAnalysisCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -37,25 +36,22 @@ public sealed class GetOfficeExcelFormulaAnalysisCommand : PSCmdlet
     [Parameter]
     public SwitchParameter IncludeFormulas { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var report = workbook.Document.AnalyzeFormulas();
         var output = new PSObject();
         output.Properties.Add(new PSNoteProperty("Path", workbook.Document.FilePath));
         output.Properties.Add(new PSNoteProperty("FormulaCount", report.FormulaCount));
         output.Properties.Add(new PSNoteProperty("VolatileFormulaCount", report.VolatileFormulaCount));
         output.Properties.Add(new PSNoteProperty("ExternalReferenceCount", report.ExternalReferenceCount));
-        if (IncludeFormulas.IsPresent)
-        {
+        if (IncludeFormulas.IsPresent) {
             output.Properties.Add(new PSNoteProperty("Formulas", report.Formulas.Select(CreateFormula).ToArray()));
         }
 
         WriteObject(output);
     }
 
-    private static PSObject CreateFormula(ExcelFormulaInfo formula)
-    {
+    private static PSObject CreateFormula(ExcelFormulaInfo formula) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("SheetName", formula.SheetName));
         item.Properties.Add(new PSNoteProperty("Address", formula.Address));
@@ -67,4 +63,4 @@ private static PSObject CreateFormula(ExcelFormulaInfo formula)
         return item;
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelNamedRangeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelNamedRangeCommand.cs
index accbbcdd..467cce83 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelNamedRangeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelNamedRangeCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeExcelNamedRange", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelNamedRangeCommand : AsyncPSCmdlet
-{
+public sealed class GetOfficeExcelNamedRangeCommand : AsyncPSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetUri = "Uri";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Remote workbook URI to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetUri)]
@@ -58,27 +57,20 @@ public sealed class GetOfficeExcelNamedRangeCommand : AsyncPSCmdlet
     public int? SheetIndex { get; set; }
 
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
+    protected override async Task ProcessRecordAsync() {
         ExcelDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
                 }
                 document = ExcelDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else if (ParameterSetName == ParameterSetUri)
-            {
-                if (Uri == null)
-                {
+            } else if (ParameterSetName == ParameterSetUri) {
+                if (Uri == null) {
                     throw new PSArgumentException("Workbook URI was not provided.", nameof(Uri));
                 }
 
@@ -88,65 +80,52 @@ protected override async Task ProcessRecordAsync()
                     allowHttp: AllowHttp.IsPresent,
                     cancellationToken: CancelToken).ConfigureAwait(false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Excel workbook was not provided.");
             }
 
             var scope = ResolveSheet(document);
 
-            if (!string.IsNullOrWhiteSpace(Name))
-            {
+            if (!string.IsNullOrWhiteSpace(Name)) {
                 var range = document.GetNamedRange(Name!, scope);
-                if (range != null)
-                {
+                if (range != null) {
                     WriteObject(CreateRecord(
                         Name!,
                         range,
                         scope,
-                        ParameterSetName == ParameterSetPath ? InputPath : null,
+                        ParameterSetName == ParameterSetPath ? Path : null,
                         ParameterSetName == ParameterSetUri ? Uri : null));
                 }
                 return;
             }
 
             var ranges = document.GetAllNamedRanges(scope);
-            foreach (var entry in ranges)
-            {
+            foreach (var entry in ranges) {
                 WriteObject(CreateRecord(
                     entry.Key,
                     entry.Value,
                     scope,
-                    ParameterSetName == ParameterSetPath ? InputPath : null,
+                    ParameterSetName == ParameterSetPath ? Path : null,
                     ParameterSetName == ParameterSetUri ? Uri : null));
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private ExcelSheet? ResolveSheet(ExcelDocument document)
-    {
-        if (!string.IsNullOrWhiteSpace(Sheet))
-        {
+    private ExcelSheet? ResolveSheet(ExcelDocument document) {
+        if (!string.IsNullOrWhiteSpace(Sheet)) {
             return document[Sheet!];
         }
 
-        if (SheetIndex.HasValue)
-        {
-            if (SheetIndex.Value < 0 || SheetIndex.Value >= document.Sheets.Count)
-            {
+        if (SheetIndex.HasValue) {
+            if (SheetIndex.Value < 0 || SheetIndex.Value >= document.Sheets.Count) {
                 throw new ArgumentOutOfRangeException(nameof(SheetIndex), "SheetIndex is out of range.");
             }
             return document.Sheets[SheetIndex.Value];
@@ -155,40 +134,33 @@ protected override async Task ProcessRecordAsync()
         return null;
     }
 
-    private static PSObject CreateRecord(string name, string range, ExcelSheet? scope, string? path, Uri? uri)
-    {
+    private static PSObject CreateRecord(string name, string range, ExcelSheet? scope, string? path, Uri? uri) {
         var record = new PSObject();
         var sheetName = scope?.Name;
         record.Properties.Add(new PSNoteProperty("Name", name));
         record.Properties.Add(new PSNoteProperty("Range", NormalizeRange(range)));
         record.Properties.Add(new PSNoteProperty("Scope", sheetName ?? "Workbook"));
-        if (!string.IsNullOrWhiteSpace(sheetName))
-        {
+        if (!string.IsNullOrWhiteSpace(sheetName)) {
             record.Properties.Add(new PSNoteProperty("Sheet", sheetName));
             record.Properties.Add(new PSNoteProperty("WorksheetName", sheetName));
         }
-        if (!string.IsNullOrWhiteSpace(path))
-        {
+        if (!string.IsNullOrWhiteSpace(path)) {
+            record.Properties.Add(new PSNoteProperty("Path", path));
             record.Properties.Add(new PSNoteProperty("Path", path));
-            record.Properties.Add(new PSNoteProperty("InputPath", path));
         }
-        if (uri != null)
-        {
+        if (uri != null) {
             record.Properties.Add(new PSNoteProperty("Uri", uri));
         }
         return record;
     }
 
-    private static string NormalizeRange(string range)
-    {
-        if (string.IsNullOrWhiteSpace(range))
-        {
+    private static string NormalizeRange(string range) {
+        if (string.IsNullOrWhiteSpace(range)) {
             return range;
         }
 
         var separatorIndex = FindSheetSeparator(range);
-        if (separatorIndex >= 0)
-        {
+        if (separatorIndex >= 0) {
             var prefix = range.Substring(0, separatorIndex + 1);
             var reference = range.Substring(separatorIndex + 1);
             return prefix + NormalizeA1Reference(reference);
@@ -197,22 +169,17 @@ private static string NormalizeRange(string range)
         return NormalizeA1Reference(range);
     }
 
-    private static string NormalizeA1Reference(string reference)
-    {
+    private static string NormalizeA1Reference(string reference) {
         return Regex.IsMatch(reference, @"^\$?[A-Za-z]{1,3}\$?\d+(?::\$?[A-Za-z]{1,3}\$?\d+)?$")
             ? reference.Replace("$", string.Empty)
             : reference;
     }
 
-    private static int FindSheetSeparator(string range)
-    {
+    private static int FindSheetSeparator(string range) {
         var inQuotedSheetName = false;
-        for (var i = 0; i < range.Length; i++)
-        {
-            if (range[i] == '\'')
-            {
-                if (inQuotedSheetName && i + 1 < range.Length && range[i + 1] == '\'')
-                {
+        for (var i = 0; i < range.Length; i++) {
+            if (range[i] == '\'') {
+                if (inQuotedSheetName && i + 1 < range.Length && range[i + 1] == '\'') {
                     i++;
                     continue;
                 }
@@ -221,12 +188,11 @@ private static int FindSheetSeparator(string range)
                 continue;
             }
 
-            if (!inQuotedSheetName && range[i] == '!')
-            {
+            if (!inQuotedSheetName && range[i] == '!') {
                 return i;
             }
         }
 
         return -1;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPageBreakCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPageBreakCommand.cs
index 5413fd98..5b27e302 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPageBreakCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPageBreakCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelPageBreak", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelPageBreaks")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelPageBreakCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelPageBreakCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -49,32 +48,26 @@ public sealed class GetOfficeExcelPageBreakCommand : PSCmdlet
     public SwitchParameter Column { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var path = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
         bool includeRows = Row.IsPresent || !Column.IsPresent;
         bool includeColumns = Column.IsPresent || !Row.IsPresent;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
-            if (includeRows)
-            {
-                foreach (var row in sheet.GetManualRowPageBreaks())
-                {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
+            if (includeRows) {
+                foreach (var row in sheet.GetManualRowPageBreaks()) {
                     WriteObject(ExcelPageBreakRecordService.Create("Row", row, sheet.Name, path));
                 }
             }
 
-            if (includeColumns)
-            {
-                foreach (var column in sheet.GetManualColumnPageBreaks())
-                {
+            if (includeColumns) {
+                foreach (var column in sheet.GetManualColumnPageBreaks()) {
                     WriteObject(ExcelPageBreakRecordService.Create("Column", column, sheet.Name, path));
                 }
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPivotTableCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPivotTableCommand.cs
index c00e152e..50e942a6 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPivotTableCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelPivotTableCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelPivotTable", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelPivotTables")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelPivotTableCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelPivotTableCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -48,73 +47,56 @@ public sealed class GetOfficeExcelPivotTableCommand : PSCmdlet
     public int? SheetIndex { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         ExcelDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
                 }
                 document = ExcelDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Excel workbook was not provided.");
             }
 
             var sheetFilter = ResolveSheetName(document);
             var pivots = document.GetPivotTables();
 
-            foreach (var pivot in pivots)
-            {
+            foreach (var pivot in pivots) {
                 if (!string.IsNullOrWhiteSpace(sheetFilter) &&
-                    !string.Equals(pivot.SheetName, sheetFilter, StringComparison.OrdinalIgnoreCase))
-                {
+                    !string.Equals(pivot.SheetName, sheetFilter, StringComparison.OrdinalIgnoreCase)) {
                     continue;
                 }
 
                 if (!string.IsNullOrWhiteSpace(Name) &&
-                    !string.Equals(pivot.Name, Name, StringComparison.OrdinalIgnoreCase))
-                {
+                    !string.Equals(pivot.Name, Name, StringComparison.OrdinalIgnoreCase)) {
                     continue;
                 }
 
                 WriteObject(CreateRecord(pivot));
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private string? ResolveSheetName(ExcelDocument document)
-    {
-        if (!string.IsNullOrWhiteSpace(Sheet))
-        {
+    private string? ResolveSheetName(ExcelDocument document) {
+        if (!string.IsNullOrWhiteSpace(Sheet)) {
             return Sheet;
         }
 
-        if (SheetIndex.HasValue)
-        {
-            if (SheetIndex.Value < 0 || SheetIndex.Value >= document.Sheets.Count)
-            {
+        if (SheetIndex.HasValue) {
+            if (SheetIndex.Value < 0 || SheetIndex.Value >= document.Sheets.Count) {
                 throw new ArgumentOutOfRangeException(nameof(SheetIndex), "SheetIndex is out of range.");
             }
             return document.Sheets[SheetIndex.Value].Name;
@@ -123,8 +105,7 @@ protected override void ProcessRecord()
         return null;
     }
 
-    private static PSObject CreateRecord(ExcelPivotTableInfo pivot)
-    {
+    private static PSObject CreateRecord(ExcelPivotTableInfo pivot) {
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("Name", pivot.Name));
         record.Properties.Add(new PSNoteProperty("Sheet", pivot.SheetName));
@@ -151,11 +132,9 @@ private static PSObject CreateRecord(ExcelPivotTableInfo pivot)
         return record;
     }
 
-    private static PSObject[] CreateDataFieldRecords(IReadOnlyList dataFields)
-    {
+    private static PSObject[] CreateDataFieldRecords(IReadOnlyList dataFields) {
         var list = new List(dataFields.Count);
-        foreach (var field in dataFields)
-        {
+        foreach (var field in dataFields) {
             var record = new PSObject();
             record.Properties.Add(new PSNoteProperty("FieldName", field.FieldName));
             record.Properties.Add(new PSNoteProperty("Function", field.Function.ToString()));
@@ -164,4 +143,4 @@ private static PSObject[] CreateDataFieldRecords(IReadOnlyListPath to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -53,30 +52,23 @@ public sealed class GetOfficeExcelPreflightCommand : PSCmdlet
     public SwitchParameter ThrowOnFailure { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var document = workbook.Document;
         var report = document.InspectFeatures();
         var capabilities = ResolveCapabilities();
 
-        if (ThrowOnFailure.IsPresent)
-        {
-            if (Capability != null && Capability.Length > 0)
-            {
-                foreach (var capability in capabilities)
-                {
+        if (ThrowOnFailure.IsPresent) {
+            if (Capability != null && Capability.Length > 0) {
+                foreach (var capability in capabilities) {
                     report.EnsureCan(capability);
                 }
-            }
-            else
-            {
+            } else {
                 report.EnsureNoAdvancedFeatures();
             }
         }
 
-        if (AsMarkdown.IsPresent)
-        {
+        if (AsMarkdown.IsPresent) {
             WriteObject(report.ToMarkdown());
             return;
         }
@@ -84,10 +76,8 @@ protected override void ProcessRecord()
         WriteObject(CreatePreflightObject(document, report, capabilities, IncludeFeatures.IsPresent, IncludeRepairHints.IsPresent));
     }
 
-    private ExcelPreflightCapability[] ResolveCapabilities()
-    {
-        if (Capability != null && Capability.Length > 0)
-        {
+    private ExcelPreflightCapability[] ResolveCapabilities() {
+        if (Capability != null && Capability.Length > 0) {
             return Capability;
         }
 
@@ -101,8 +91,7 @@ private static PSObject CreatePreflightObject(
         ExcelFeatureReport report,
         ExcelPreflightCapability[] capabilities,
         bool includeFeatures,
-        bool includeRepairHints)
-    {
+        bool includeRepairHints) {
         var result = new PSObject();
         result.Properties.Add(new PSNoteProperty("Path", document.FilePath));
         result.Properties.Add(new PSNoteProperty("HasAdvancedFeatures", report.HasAdvancedFeatures));
@@ -113,16 +102,14 @@ private static PSObject CreatePreflightObject(
         result.Properties.Add(new PSNoteProperty("UnsupportedFeatureCount", report.UnsupportedFeatures.Count));
         result.Properties.Add(new PSNoteProperty("Capabilities", capabilities.Select(capability => CreateCapabilityObject(report, capability, includeRepairHints)).ToArray()));
 
-        if (includeFeatures)
-        {
+        if (includeFeatures) {
             result.Properties.Add(new PSNoteProperty("Features", report.Features.Select(CreateFeatureObject).ToArray()));
         }
 
         return result;
     }
 
-    private static PSObject CreateCapabilityObject(ExcelFeatureReport report, ExcelPreflightCapability capability, bool includeRepairHints)
-    {
+    private static PSObject CreateCapabilityObject(ExcelFeatureReport report, ExcelPreflightCapability capability, bool includeRepairHints) {
         var diagnostics = report.GetCapabilityDiagnostics(capability).ToArray();
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Name", capability.ToString()));
@@ -130,16 +117,14 @@ private static PSObject CreateCapabilityObject(ExcelFeatureReport report, ExcelP
         item.Properties.Add(new PSNoteProperty("CanAttempt", report.Can(capability)));
         item.Properties.Add(new PSNoteProperty("Diagnostics", diagnostics));
         item.Properties.Add(new PSNoteProperty("DiagnosticText", diagnostics.Length == 0 ? string.Empty : string.Join("; ", diagnostics)));
-        if (includeRepairHints)
-        {
+        if (includeRepairHints) {
             item.Properties.Add(new PSNoteProperty("RepairHints", report.GetRepairHints(capability).Select(CreateRepairHintObject).ToArray()));
         }
 
         return item;
     }
 
-    private static PSObject CreateRepairHintObject(ExcelPreflightRepairHint hint)
-    {
+    private static PSObject CreateRepairHintObject(ExcelPreflightRepairHint hint) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Capability", hint.Capability.ToString()));
         item.Properties.Add(new PSNoteProperty("FeatureName", hint.FeatureName));
@@ -149,8 +134,7 @@ private static PSObject CreateRepairHintObject(ExcelPreflightRepairHint hint)
         return item;
     }
 
-    private static PSObject CreateFeatureObject(ExcelFeatureFinding feature)
-    {
+    private static PSObject CreateFeatureObject(ExcelFeatureFinding feature) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Category", feature.Category));
         item.Properties.Add(new PSNoteProperty("Name", feature.Name));
@@ -161,4 +145,4 @@ private static PSObject CreateFeatureObject(ExcelFeatureFinding feature)
         item.Properties.Add(new PSNoteProperty("Details", feature.Details.ToArray()));
         return item;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRangeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRangeCommand.cs
index 7c255b6c..f84dbcf8 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRangeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRangeCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeExcelRange", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(PSObject), typeof(System.Collections.Hashtable), typeof(DataTable))]
-public sealed class GetOfficeExcelRangeCommand : AsyncPSCmdlet
-{
+public sealed class GetOfficeExcelRangeCommand : AsyncPSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetUri = "Uri";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Remote workbook URI to read.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetUri)]
@@ -74,8 +73,7 @@ public sealed class GetOfficeExcelRangeCommand : AsyncPSCmdlet
     public SwitchParameter AsDataTable { get; set; }
 
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
+    protected override async Task ProcessRecordAsync() {
         var options = ExcelReadOutputService.CreateOptions(NumericAsDecimal.IsPresent);
         options.CancellationToken = CancelToken;
         ExcelReadOutputService.ConfigureSelection(options, Sheet, SheetIndex ?? (Sheet == null ? 0 : null), Range, HeadersInFirstRow);
@@ -85,17 +83,13 @@ protected override async Task ProcessRecordAsync()
         ExcelReadOutputService.WriteOutput(this, table, AsDataTable.IsPresent, AsHashtable.IsPresent);
     }
 
-    private async Task CreateDataReaderAsync(ExcelReadOptions options)
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
+    private async Task CreateDataReaderAsync(ExcelReadOptions options) {
+        if (ParameterSetName == ParameterSetDocument) {
             return Document.CreateDataReader(options);
         }
 
-        if (ParameterSetName == ParameterSetUri)
-        {
-            if (Uri == null)
-            {
+        if (ParameterSetName == ParameterSetUri) {
+            if (Uri == null) {
                 throw new PSArgumentException("Workbook URI was not provided.", nameof(Uri));
             }
 
@@ -103,12 +97,11 @@ private async Task CreateDataReaderAsync(ExcelReadOptio
                 .ConfigureAwait(false);
         }
 
-        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-        if (!File.Exists(resolvedPath))
-        {
+        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        if (!File.Exists(resolvedPath)) {
             throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
         }
 
         return ExcelDocument.OpenDataReader(resolvedPath, options);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRichTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRichTextCommand.cs
index f7684046..b7246d0b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRichTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelRichTextCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelRichText", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelRichTextRuns")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelRichTextCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelRichTextCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -59,19 +58,17 @@ public sealed class GetOfficeExcelRichTextCommand : PSCmdlet
     public string? Address { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
         var (row, column) = ExcelHostExtensions.ResolveCellAddress(Row, Column, Address);
         var address = A1.CellReference(row, column);
         var path = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
         var runs = sheet.GetRichText(row, column);
-        for (var index = 0; index < runs.Count; index++)
-        {
+        for (var index = 0; index < runs.Count; index++) {
             WriteObject(ExcelRichTextRunService.CreateRecord(runs[index], index, address, row, column, sheet.Name, path));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelStreamingContractCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelStreamingContractCommand.cs
index 7e67a337..a0487fca 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelStreamingContractCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelStreamingContractCommand.cs
@@ -20,23 +20,21 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelStreamingContract", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelStreamingContract")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelStreamingContractCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelStreamingContractCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
     public ExcelDocument Document { get; set; } = null!;
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var report = workbook.Document.GetStreamingContract();
         var output = new PSObject();
         output.Properties.Add(new PSNoteProperty("Path", workbook.Document.FilePath));
@@ -48,4 +46,4 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelSummaryCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelSummaryCommand.cs
index 3036265c..808b2ae7 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelSummaryCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelSummaryCommand.cs
@@ -27,15 +27,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelSummary", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelSummary")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelSummaryCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelSummaryCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -50,22 +49,18 @@ public sealed class GetOfficeExcelSummaryCommand : PSCmdlet
     public SwitchParameter IncludeSchema { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         ExcelDocument? loadedDocument = null;
         SpreadsheetDocument? spreadsheet = null;
         var dispose = false;
 
-        try
-        {
+        try {
             ExcelDocument currentDocument;
             string? path;
 
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
                 }
 
@@ -74,11 +69,8 @@ protected override void ProcessRecord()
                 spreadsheet = currentDocument.OpenXmlDocument;
                 path = resolvedPath;
                 dispose = true;
-            }
-            else
-            {
-                if (Document == null)
-                {
+            } else {
+                if (Document == null) {
                     throw new InvalidOperationException("Excel workbook was not provided.");
                 }
 
@@ -88,18 +80,14 @@ protected override void ProcessRecord()
             }
 
             WriteObject(CreateSummary(spreadsheet, path, IncludeSheets.IsPresent, IncludeSchema.IsPresent, currentDocument));
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 loadedDocument?.Dispose();
             }
         }
     }
 
-    private static PSObject CreateSummary(SpreadsheetDocument spreadsheet, string? path, bool includeSheets, bool includeSchema, ExcelDocument? document)
-    {
+    private static PSObject CreateSummary(SpreadsheetDocument spreadsheet, string? path, bool includeSheets, bool includeSchema, ExcelDocument? document) {
         var workbookPart = spreadsheet.WorkbookPart ?? throw new InvalidOperationException("Workbook part was not found.");
         var workbook = workbookPart.Workbook ?? throw new InvalidOperationException("Workbook was not found.");
         var sheets = workbook.Sheets?.Elements().ToList() ?? new List();
@@ -132,21 +120,18 @@ private static PSObject CreateSummary(SpreadsheetDocument spreadsheet, string? p
         summary.Properties.Add(new PSNoteProperty("CommentCount", sheetSummaries.Sum(GetIntProperty("CommentCount"))));
         summary.Properties.Add(new PSNoteProperty("NamedRangeCount", namedRangeCount));
 
-        if (includeSheets)
-        {
+        if (includeSheets) {
             summary.Properties.Add(new PSNoteProperty("Sheets", sheetSummaries));
         }
 
-        if (includeSchema && document != null)
-        {
+        if (includeSchema && document != null) {
             summary.Properties.Add(new PSNoteProperty("Schema", CreateSchemaSummary(document.CreateInspectionSnapshot())));
         }
 
         return summary;
     }
 
-    private static PSObject CreateSchemaSummary(ExcelWorkbookSnapshot snapshot)
-    {
+    private static PSObject CreateSchemaSummary(ExcelWorkbookSnapshot snapshot) {
         var schema = new PSObject();
         schema.Properties.Add(new PSNoteProperty("ActiveWorksheetIndex", snapshot.ActiveWorksheetIndex));
         schema.Properties.Add(new PSNoteProperty("ActiveWorksheetName", snapshot.ActiveWorksheetName));
@@ -168,8 +153,7 @@ private static PSObject CreateSchemaSummary(ExcelWorkbookSnapshot snapshot)
         return schema;
     }
 
-    private static PSObject CreateSchemaWorksheet(ExcelWorksheetSnapshot worksheet)
-    {
+    private static PSObject CreateSchemaWorksheet(ExcelWorksheetSnapshot worksheet) {
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("Name", worksheet.Name));
         record.Properties.Add(new PSNoteProperty("Index", worksheet.Index));
@@ -193,10 +177,8 @@ private static PSObject CreateSchemaWorksheet(ExcelWorksheetSnapshot worksheet)
         return record;
     }
 
-    private static IEnumerable CreateSchemaTables(ExcelWorksheetSnapshot worksheet)
-    {
-        foreach (var table in worksheet.Tables)
-        {
+    private static IEnumerable CreateSchemaTables(ExcelWorksheetSnapshot worksheet) {
+        foreach (var table in worksheet.Tables) {
             var record = new PSObject();
             record.Properties.Add(new PSNoteProperty("SheetName", worksheet.Name));
             record.Properties.Add(new PSNoteProperty("Name", table.Name));
@@ -209,8 +191,7 @@ private static IEnumerable CreateSchemaTables(ExcelWorksheetSnapshot w
         }
     }
 
-    private static PSObject CreateSchemaNamedRange(ExcelNamedRangeSnapshot namedRange)
-    {
+    private static PSObject CreateSchemaNamedRange(ExcelNamedRangeSnapshot namedRange) {
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("Name", namedRange.Name));
         record.Properties.Add(new PSNoteProperty("SheetName", namedRange.SheetName));
@@ -219,10 +200,8 @@ private static PSObject CreateSchemaNamedRange(ExcelNamedRangeSnapshot namedRang
         return record;
     }
 
-    private static IEnumerable CreateSchemaFormulaCells(ExcelWorksheetSnapshot worksheet)
-    {
-        foreach (var cell in worksheet.Cells.Where(cell => !string.IsNullOrWhiteSpace(cell.Formula)))
-        {
+    private static IEnumerable CreateSchemaFormulaCells(ExcelWorksheetSnapshot worksheet) {
+        foreach (var cell in worksheet.Cells.Where(cell => !string.IsNullOrWhiteSpace(cell.Formula))) {
             var record = new PSObject();
             record.Properties.Add(new PSNoteProperty("SheetName", worksheet.Name));
             record.Properties.Add(new PSNoteProperty("Address", A1.CellReference(cell.Row, cell.Column)));
@@ -231,10 +210,8 @@ private static IEnumerable CreateSchemaFormulaCells(ExcelWorksheetSnap
         }
     }
 
-    private static IEnumerable CreateSchemaRows(ExcelWorksheetSnapshot worksheet)
-    {
-        foreach (var row in worksheet.Rows)
-        {
+    private static IEnumerable CreateSchemaRows(ExcelWorksheetSnapshot worksheet) {
+        foreach (var row in worksheet.Rows) {
             var record = new PSObject();
             record.Properties.Add(new PSNoteProperty("SheetName", worksheet.Name));
             record.Properties.Add(new PSNoteProperty("Index", row.Index));
@@ -247,10 +224,8 @@ private static IEnumerable CreateSchemaRows(ExcelWorksheetSnapshot wor
         }
     }
 
-    private static IEnumerable CreateSchemaColumns(ExcelWorksheetSnapshot worksheet)
-    {
-        foreach (var column in worksheet.Columns)
-        {
+    private static IEnumerable CreateSchemaColumns(ExcelWorksheetSnapshot worksheet) {
+        foreach (var column in worksheet.Columns) {
             var record = new PSObject();
             record.Properties.Add(new PSNoteProperty("SheetName", worksheet.Name));
             record.Properties.Add(new PSNoteProperty("StartIndex", column.StartIndex));
@@ -264,8 +239,7 @@ private static IEnumerable CreateSchemaColumns(ExcelWorksheetSnapshot
         }
     }
 
-    private static PSObject CreateSheetSummary(WorkbookPart workbookPart, Sheet sheet, int index, bool isActive)
-    {
+    private static PSObject CreateSheetSummary(WorkbookPart workbookPart, Sheet sheet, int index, bool isActive) {
         var state = NormalizeSheetState(sheet.State?.InnerText);
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("Index", index));
@@ -273,21 +247,18 @@ private static PSObject CreateSheetSummary(WorkbookPart workbookPart, Sheet shee
         record.Properties.Add(new PSNoteProperty("State", state));
         record.Properties.Add(new PSNoteProperty("IsActive", isActive));
 
-        if (sheet.Id?.Value == null)
-        {
+        if (sheet.Id?.Value == null) {
             AddEmptySheetCounts(record);
             return record;
         }
 
         var sheetPart = workbookPart.GetPartById(sheet.Id.Value);
-        if (sheetPart is ChartsheetPart chartsheetPart)
-        {
+        if (sheetPart is ChartsheetPart chartsheetPart) {
             AddChartSheetCounts(record, chartsheetPart);
             return record;
         }
 
-        if (sheetPart is not WorksheetPart worksheetPart)
-        {
+        if (sheetPart is not WorksheetPart worksheetPart) {
             AddEmptySheetCounts(record);
             return record;
         }
@@ -311,10 +282,8 @@ private static PSObject CreateSheetSummary(WorkbookPart workbookPart, Sheet shee
         return record;
     }
 
-    private static int? GetActiveSheetIndex(Workbook workbook, int sheetCount)
-    {
-        if (sheetCount <= 0)
-        {
+    private static int? GetActiveSheetIndex(Workbook workbook, int sheetCount) {
+        if (sheetCount <= 0) {
             return null;
         }
 
@@ -323,8 +292,7 @@ private static PSObject CreateSheetSummary(WorkbookPart workbookPart, Sheet shee
             .FirstOrDefault()?
             .ActiveTab?.Value ?? 0U;
 
-        if (activeTab >= sheetCount)
-        {
+        if (activeTab >= sheetCount) {
             return sheetCount - 1;
         }
 
@@ -336,8 +304,7 @@ private static ExcelDateSystem GetWorkbookDateSystem(Workbook workbook)
             ? ExcelDateSystem.NineteenFour
             : ExcelDateSystem.NineteenHundred;
 
-    private static void AddChartSheetCounts(PSObject record, ChartsheetPart chartsheetPart)
-    {
+    private static void AddChartSheetCounts(PSObject record, ChartsheetPart chartsheetPart) {
         record.Properties.Add(new PSNoteProperty("UsedRange", null));
         record.Properties.Add(new PSNoteProperty("TableCount", 0));
         record.Properties.Add(new PSNoteProperty("ChartCount", CountChartParts(chartsheetPart)));
@@ -348,21 +315,17 @@ private static void AddChartSheetCounts(PSObject record, ChartsheetPart chartshe
         record.Properties.Add(new PSNoteProperty("Tables", Array.Empty()));
     }
 
-    private static int CountChartParts(OpenXmlPartContainer container)
-    {
+    private static int CountChartParts(OpenXmlPartContainer container) {
         return container.Parts.Sum(part =>
             (part.OpenXmlPart is ChartPart ? 1 : 0) + CountChartParts(part.OpenXmlPart));
     }
 
-    private static int CountPackagePartsByContentType(OpenXmlPartContainer container, string marker)
-    {
-        if (string.IsNullOrWhiteSpace(marker))
-        {
+    private static int CountPackagePartsByContentType(OpenXmlPartContainer container, string marker) {
+        if (string.IsNullOrWhiteSpace(marker)) {
             return 0;
         }
 
-        return container.Parts.Sum(part =>
-        {
+        return container.Parts.Sum(part => {
             var openXmlPart = part.OpenXmlPart;
             var count = openXmlPart.ContentType.IndexOf(marker, StringComparison.OrdinalIgnoreCase) >= 0 ? 1 : 0;
             return count + CountPackagePartsByContentType(openXmlPart, marker);
@@ -372,12 +335,10 @@ private static int CountPackagePartsByContentType(OpenXmlPartContainer container
     private static int CountPivotInteractionParts(
         WorkbookPart workbookPart,
         ExcelDocument? document,
-        ExcelPivotInteractionCacheKind kind)
-    {
+        ExcelPivotInteractionCacheKind kind) {
         string marker = kind == ExcelPivotInteractionCacheKind.Slicer ? "slicer" : "timeline";
         int nativeOrLegacyCount = CountPackagePartsByContentType(workbookPart, marker);
-        if (document == null)
-        {
+        if (document == null) {
             return nativeOrLegacyCount;
         }
 
@@ -387,8 +348,7 @@ private static int CountPivotInteractionParts(
         int combinedMetadataPartCount = caches
             .Select(cache => cache.RelationshipId)
             .Distinct(StringComparer.Ordinal)
-            .Count(relationshipId =>
-            {
+            .Count(relationshipId => {
                 OpenXmlPart part = workbookPart.GetPartById(relationshipId);
                 return part.ContentType.IndexOf(marker, StringComparison.OrdinalIgnoreCase) < 0;
             });
@@ -396,21 +356,17 @@ private static int CountPivotInteractionParts(
         return nativeOrLegacyCount + combinedMetadataPartCount;
     }
 
-    private static int CountComments(WorksheetPart worksheetPart)
-    {
+    private static int CountComments(WorksheetPart worksheetPart) {
         var legacyCount = worksheetPart.WorksheetCommentsPart?.Comments?.CommentList?.Elements().Count() ?? 0;
         var threadedCount = worksheetPart.WorksheetThreadedCommentsParts.Sum(part =>
             part.ThreadedComments?.Elements().Count() ?? 0);
         return legacyCount + threadedCount;
     }
 
-    private static IEnumerable GetTableRecords(WorksheetPart worksheetPart)
-    {
-        foreach (var tableDefinitionPart in worksheetPart.TableDefinitionParts)
-        {
+    private static IEnumerable GetTableRecords(WorksheetPart worksheetPart) {
+        foreach (var tableDefinitionPart in worksheetPart.TableDefinitionParts) {
             var table = tableDefinitionPart.Table;
-            if (table == null)
-            {
+            if (table == null) {
                 continue;
             }
 
@@ -422,8 +378,7 @@ private static IEnumerable GetTableRecords(WorksheetPart worksheetPart
         }
     }
 
-    private static void AddEmptySheetCounts(PSObject record)
-    {
+    private static void AddEmptySheetCounts(PSObject record) {
         record.Properties.Add(new PSNoteProperty("UsedRange", null));
         record.Properties.Add(new PSNoteProperty("TableCount", 0));
         record.Properties.Add(new PSNoteProperty("ChartCount", 0));
@@ -434,15 +389,12 @@ private static void AddEmptySheetCounts(PSObject record)
         record.Properties.Add(new PSNoteProperty("Tables", Array.Empty()));
     }
 
-    private static Func GetIntProperty(string name)
-    {
+    private static Func GetIntProperty(string name) {
         return record => record.Properties[name]?.Value is int value ? value : 0;
     }
 
-    private static string NormalizeSheetState(string? state)
-    {
-        if (string.IsNullOrWhiteSpace(state))
-        {
+    private static string NormalizeSheetState(string? state) {
+        if (string.IsNullOrWhiteSpace(state)) {
             return "Visible";
         }
 
@@ -453,18 +405,15 @@ private static string NormalizeSheetState(string? state)
                 : "Visible";
     }
 
-    private static bool IsVisibleSheet(PSObject record)
-    {
+    private static bool IsVisibleSheet(PSObject record) {
         return string.Equals(record.Properties["State"]?.Value as string, "Visible", StringComparison.OrdinalIgnoreCase);
     }
 
-    private static bool IsHiddenSheet(PSObject record)
-    {
+    private static bool IsHiddenSheet(PSObject record) {
         return string.Equals(record.Properties["State"]?.Value as string, "Hidden", StringComparison.OrdinalIgnoreCase);
     }
 
-    private static bool IsVeryHiddenSheet(PSObject record)
-    {
+    private static bool IsVeryHiddenSheet(PSObject record) {
         return string.Equals(record.Properties["State"]?.Value as string, "VeryHidden", StringComparison.OrdinalIgnoreCase);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTableCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTableCommand.cs
index 68481a91..5fad0dbc 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTableCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTableCommand.cs
@@ -19,16 +19,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeExcelTable", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelTableCommand : AsyncPSCmdlet
-{
+public sealed class GetOfficeExcelTableCommand : AsyncPSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetUri = "Uri";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Remote workbook URI to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetUri)]
@@ -56,27 +55,20 @@ public sealed class GetOfficeExcelTableCommand : AsyncPSCmdlet
     public int? SheetIndex { get; set; }
 
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
+    protected override async Task ProcessRecordAsync() {
         ExcelDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
                 }
                 document = ExcelDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else if (ParameterSetName == ParameterSetUri)
-            {
-                if (Uri == null)
-                {
+            } else if (ParameterSetName == ParameterSetUri) {
+                if (Uri == null) {
                     throw new PSArgumentException("Workbook URI was not provided.", nameof(Uri));
                 }
 
@@ -86,31 +78,25 @@ protected override async Task ProcessRecordAsync()
                     allowHttp: AllowHttp.IsPresent,
                     cancellationToken: CancelToken).ConfigureAwait(false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Excel workbook was not provided.");
             }
 
             var sheetFilter = ResolveSheetName(document);
             var tables = document.GetTables();
 
-            foreach (var table in tables)
-            {
+            foreach (var table in tables) {
                 if (!string.IsNullOrWhiteSpace(sheetFilter) &&
-                    !string.Equals(table.SheetName, sheetFilter, StringComparison.OrdinalIgnoreCase))
-                {
+                    !string.Equals(table.SheetName, sheetFilter, StringComparison.OrdinalIgnoreCase)) {
                     continue;
                 }
 
                 if (!string.IsNullOrWhiteSpace(Name) &&
-                    !string.Equals(table.Name, Name, StringComparison.OrdinalIgnoreCase))
-                {
+                    !string.Equals(table.Name, Name, StringComparison.OrdinalIgnoreCase)) {
                     continue;
                 }
 
@@ -118,30 +104,23 @@ protected override async Task ProcessRecordAsync()
                     table.Name,
                     table.Range,
                     table.SheetName,
-                    ParameterSetName == ParameterSetPath ? InputPath : null,
+                    ParameterSetName == ParameterSetPath ? Path : null,
                     ParameterSetName == ParameterSetUri ? Uri : null));
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private string? ResolveSheetName(ExcelDocument document)
-    {
-        if (!string.IsNullOrWhiteSpace(Sheet))
-        {
+    private string? ResolveSheetName(ExcelDocument document) {
+        if (!string.IsNullOrWhiteSpace(Sheet)) {
             return Sheet;
         }
 
-        if (SheetIndex.HasValue)
-        {
-            if (SheetIndex.Value < 0 || SheetIndex.Value >= document.Sheets.Count)
-            {
+        if (SheetIndex.HasValue) {
+            if (SheetIndex.Value < 0 || SheetIndex.Value >= document.Sheets.Count) {
                 throw new ArgumentOutOfRangeException(nameof(SheetIndex), "SheetIndex is out of range.");
             }
             return document.Sheets[SheetIndex.Value].Name;
@@ -150,22 +129,19 @@ protected override async Task ProcessRecordAsync()
         return null;
     }
 
-    private static PSObject CreateRecord(string name, string range, string sheet, string? path, Uri? uri)
-    {
+    private static PSObject CreateRecord(string name, string range, string sheet, string? path, Uri? uri) {
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("Name", name));
         record.Properties.Add(new PSNoteProperty("Range", range));
         record.Properties.Add(new PSNoteProperty("Sheet", sheet));
         record.Properties.Add(new PSNoteProperty("WorksheetName", sheet));
-        if (!string.IsNullOrWhiteSpace(path))
-        {
+        if (!string.IsNullOrWhiteSpace(path)) {
+            record.Properties.Add(new PSNoteProperty("Path", path));
             record.Properties.Add(new PSNoteProperty("Path", path));
-            record.Properties.Add(new PSNoteProperty("InputPath", path));
         }
-        if (uri != null)
-        {
+        if (uri != null) {
             record.Properties.Add(new PSNoteProperty("Uri", uri));
         }
         return record;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTemplateMarkerCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTemplateMarkerCommand.cs
index 38d144be..7239cc6b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTemplateMarkerCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelTemplateMarkerCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelTemplateMarker", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelTemplateMarkers")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelTemplateMarkerCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelTemplateMarkerCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -49,26 +48,22 @@ public sealed class GetOfficeExcelTemplateMarkerCommand : PSCmdlet
     public SwitchParameter MissingOnly { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var path = string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
         var values = Value == null
             ? null
             : ExcelTemplateValueService.ConvertValues(Value);
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
             var inspection = values == null
                 ? sheet.InspectTemplate()
                 : sheet.InspectTemplate(values);
 
-            foreach (var marker in inspection.Markers)
-            {
-                if (MissingOnly.IsPresent && marker.IsBound == true)
-                {
+            foreach (var marker in inspection.Markers) {
+                if (MissingOnly.IsPresent && marker.IsBound == true) {
                     continue;
                 }
 
@@ -76,4 +71,4 @@ protected override void ProcessRecord()
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelUsedRangeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelUsedRangeCommand.cs
index d345a9da..b98b5c6c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelUsedRangeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelUsedRangeCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeExcelUsedRange", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(PSObject), typeof(System.Collections.Hashtable), typeof(DataTable))]
-public sealed class GetOfficeExcelUsedRangeCommand : AsyncPSCmdlet
-{
+public sealed class GetOfficeExcelUsedRangeCommand : AsyncPSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetUri = "Uri";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the workbook.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Remote workbook URI to read.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetUri)]
@@ -70,8 +69,7 @@ public sealed class GetOfficeExcelUsedRangeCommand : AsyncPSCmdlet
     public SwitchParameter AsDataTable { get; set; }
 
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
+    protected override async Task ProcessRecordAsync() {
         var options = ExcelReadOutputService.CreateOptions(NumericAsDecimal.IsPresent);
         options.CancellationToken = CancelToken;
         ExcelReadOutputService.ConfigureSelection(options, Sheet, SheetIndex ?? (Sheet == null ? 0 : null), null, HeadersInFirstRow);
@@ -81,17 +79,13 @@ protected override async Task ProcessRecordAsync()
         ExcelReadOutputService.WriteOutput(this, table, AsDataTable.IsPresent, AsHashtable.IsPresent);
     }
 
-    private async Task CreateDataReaderAsync(ExcelReadOptions options)
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
+    private async Task CreateDataReaderAsync(ExcelReadOptions options) {
+        if (ParameterSetName == ParameterSetDocument) {
             return Document.CreateDataReader(options);
         }
 
-        if (ParameterSetName == ParameterSetUri)
-        {
-            if (Uri == null)
-            {
+        if (ParameterSetName == ParameterSetUri) {
+            if (Uri == null) {
                 throw new PSArgumentException("Workbook URI was not provided.", nameof(Uri));
             }
 
@@ -99,12 +93,11 @@ private async Task CreateDataReaderAsync(ExcelReadOptio
                 .ConfigureAwait(false);
         }
 
-        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-        if (!File.Exists(resolvedPath))
-        {
+        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        if (!File.Exists(resolvedPath)) {
             throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
         }
 
         return ExcelDocument.OpenDataReader(resolvedPath, options);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelWorksheetViewCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelWorksheetViewCommand.cs
index f2ad9c1d..ba156d67 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelWorksheetViewCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/GetOfficeExcelWorksheetViewCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Get, "OfficeExcelWorksheetView", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelWorksheetView")]
 [OutputType(typeof(PSObject))]
-public sealed class GetOfficeExcelWorksheetViewCommand : PSCmdlet
-{
+public sealed class GetOfficeExcelWorksheetViewCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to inspect.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to inspect outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -41,21 +40,18 @@ public sealed class GetOfficeExcelWorksheetViewCommand : PSCmdlet
     public int? SheetIndex { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var path = string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
             WriteObject(CreateViewRecord(sheet, sheet.GetViewInfo(), path));
         }
     }
 
-    private static PSObject CreateViewRecord(ExcelSheet sheet, ExcelWorksheetViewInfo view, string? path)
-    {
+    private static PSObject CreateViewRecord(ExcelSheet sheet, ExcelWorksheetViewInfo view, string? path) {
         var record = new PSObject();
         record.Properties.Add(new PSNoteProperty("SheetName", sheet.Name));
         record.Properties.Add(new PSNoteProperty("Sheet", sheet.Name));
@@ -72,12 +68,11 @@ private static PSObject CreateViewRecord(ExcelSheet sheet, ExcelWorksheetViewInf
         record.Properties.Add(new PSNoteProperty("View", view.View));
         record.Properties.Add(new PSNoteProperty("ZoomScale", view.ZoomScale));
         record.Properties.Add(new PSNoteProperty("ZoomScaleNormal", view.ZoomScaleNormal));
-        if (!string.IsNullOrWhiteSpace(path))
-        {
+        if (!string.IsNullOrWhiteSpace(path)) {
+            record.Properties.Add(new PSNoteProperty("Path", path));
             record.Properties.Add(new PSNoteProperty("Path", path));
-            record.Properties.Add(new PSNoteProperty("InputPath", path));
         }
 
         return record;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ImportOfficeExcelDelimitedTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ImportOfficeExcelDelimitedTextCommand.cs
index 23bce76e..b7055926 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ImportOfficeExcelDelimitedTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ImportOfficeExcelDelimitedTextCommand.cs
@@ -26,15 +26,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsData.Import, "OfficeExcelDelimitedText", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)]
 [Alias("ExcelDelimitedImport", "ExcelCsvImport")]
 [OutputType(typeof(PSObject))]
-public sealed class ImportOfficeExcelDelimitedTextCommand : PSCmdlet
-{
+public sealed class ImportOfficeExcelDelimitedTextCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -70,55 +69,46 @@ public sealed class ImportOfficeExcelDelimitedTextCommand : PSCmdlet
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var source = SessionState.Path.GetUnresolvedProviderPathFromPSPath(SourcePath);
-        if (!File.Exists(source))
-        {
+        if (!File.Exists(source)) {
             throw new FileNotFoundException($"Delimited text file '{source}' was not found.", source);
         }
 
         var target = ResolveTargetPath();
-        if (!ShouldProcess(target ?? "Excel document", "Import delimited text into Excel workbook"))
-        {
+        if (!ShouldProcess(target ?? "Excel document", "Import delimited text into Excel workbook")) {
             return;
         }
 
         using var workbook = ResolveWorkbook(target);
         var culture = string.IsNullOrWhiteSpace(CultureName) ? CultureInfo.InvariantCulture : CultureInfo.GetCultureInfo(CultureName!);
-        var loadOptions = new CsvLoadOptions
-        {
+        var loadOptions = new CsvLoadOptions {
             DetectDelimiter = !Delimiter.HasValue,
             HasHeaderRow = !NoHeader.IsPresent,
             SkipInitialRecords = SkipRows,
             Culture = culture
         };
-        if (Delimiter.HasValue)
-        {
+        if (Delimiter.HasValue) {
             loadOptions.Delimiter = Delimiter.Value;
         }
 
-        var result = workbook.Document.ImportCsvFile(source, new ExcelCsvImportOptions
-        {
+        var result = workbook.Document.ImportCsvFile(source, new ExcelCsvImportOptions {
             SheetName = string.IsNullOrWhiteSpace(SheetName) ? "Import" : SheetName!,
             IncludeHeaders = !NoHeader.IsPresent,
             CreateTable = !NoTable.IsPresent,
             LoadOptions = loadOptions,
-            ReaderOptions = new CsvDataReaderOptions
-            {
+            ReaderOptions = new CsvDataReaderOptions {
                 InferSchema = !NoTypeConversion.IsPresent
             }
         });
 
         workbook.SaveIfOwned();
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var output = new PSObject();
             output.Properties.Add(new PSNoteProperty("SheetName", result.SheetName));
             var rowCount = 0;
             var columnCount = 0;
-            if (!string.IsNullOrWhiteSpace(result.Range))
-            {
+            if (!string.IsNullOrWhiteSpace(result.Range)) {
                 var (firstRow, firstColumn, lastRow, lastColumn) = A1.ParseRange(result.Range);
                 rowCount = Math.Max(0, lastRow - firstRow + (NoHeader.IsPresent ? 1 : 0));
                 columnCount = lastColumn - firstColumn + 1;
@@ -133,32 +123,26 @@ protected override void ProcessRecord()
         }
     }
 
-    private string? ResolveTargetPath()
-    {
-        if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase))
-        {
+    private string? ResolveTargetPath() {
+        if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)) {
             return Document.FilePath;
         }
 
-        return SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        return SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
     }
 
-    private ExcelWorkbookCommandScope ResolveWorkbook(string? targetPath)
-    {
-        if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase))
-        {
+    private ExcelWorkbookCommandScope ResolveWorkbook(string? targetPath) {
+        if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)) {
             return new ExcelWorkbookCommandScope(Document, ownsDocument: false);
         }
 
-        if (string.IsNullOrWhiteSpace(targetPath))
-        {
-            throw new PSArgumentException("Specify a workbook path.", nameof(InputPath));
+        if (string.IsNullOrWhiteSpace(targetPath)) {
+            throw new PSArgumentException("Specify a workbook path.", nameof(Path));
         }
 
         var resolvedPath = targetPath!;
-        var directory = Path.GetDirectoryName(resolvedPath);
-        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-        {
+        var directory = System.IO.Path.GetDirectoryName(resolvedPath);
+        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
             Directory.CreateDirectory(directory);
         }
 
@@ -169,4 +153,4 @@ private ExcelWorkbookCommandScope ResolveWorkbook(string? targetPath)
         return new ExcelWorkbookCommandScope(document, ownsDocument: true);
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateCommand.cs
index f5628743..522b6b41 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsLifecycle.Invoke, "OfficeExcelTemplate", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelTemplate", "ExcelTemplateApply")]
 [OutputType(typeof(int))]
-public sealed class InvokeOfficeExcelTemplateCommand : PSCmdlet
-{
+public sealed class InvokeOfficeExcelTemplateCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -60,18 +59,15 @@ public sealed class InvokeOfficeExcelTemplateCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var values = ExcelTemplateValueService.ConvertValues(Value);
         var options = ExcelTemplateValueService.CreateOptions(CultureName, MissingValueBehavior, ThrowOnMissing.IsPresent);
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var replacements = 0;
         var processedAnySheet = false;
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
-            if (!ShouldProcess(sheet.Name, "Apply Excel template markers"))
-            {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
+            if (!ShouldProcess(sheet.Name, "Apply Excel template markers")) {
                 continue;
             }
 
@@ -79,13 +75,11 @@ protected override void ProcessRecord()
             processedAnySheet = true;
         }
 
-        if (processedAnySheet)
-        {
+        if (processedAnySheet) {
             workbook.SaveIfOwned();
         }
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(replacements);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateOptionalRowCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateOptionalRowCommand.cs
index ac0ad1ec..35340849 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateOptionalRowCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateOptionalRowCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsLifecycle.Invoke, "OfficeExcelTemplateOptionalRow", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelTemplateOptionalRow", "ExcelTemplateOptionalRows")]
 [OutputType(typeof(int))]
-public sealed class InvokeOfficeExcelTemplateOptionalRowCommand : PSCmdlet
-{
+public sealed class InvokeOfficeExcelTemplateOptionalRowCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetDocument)]
@@ -73,10 +72,8 @@ public sealed class InvokeOfficeExcelTemplateOptionalRowCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (FirstRow < 1)
-        {
+    protected override void ProcessRecord() {
+        if (FirstRow < 1) {
             ThrowTerminatingError(new ErrorRecord(
                 new PSArgumentOutOfRangeException(nameof(FirstRow)),
                 "InvalidFirstRow",
@@ -84,8 +81,7 @@ protected override void ProcessRecord()
                 FirstRow));
         }
 
-        if (RowCount < 1)
-        {
+        if (RowCount < 1) {
             ThrowTerminatingError(new ErrorRecord(
                 new PSArgumentOutOfRangeException(nameof(RowCount)),
                 "InvalidRowCount",
@@ -93,14 +89,13 @@ protected override void ProcessRecord()
                 RowCount));
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
         var lastRow = FirstRow + RowCount - 1;
         var action = Remove.IsPresent
             ? "Remove Excel template optional rows"
             : "Apply Excel template optional rows";
-        if (!ShouldProcess($"{sheet.Name}!{FirstRow}:{lastRow}", action))
-        {
+        if (!ShouldProcess($"{sheet.Name}!{FirstRow}:{lastRow}", action)) {
             return;
         }
 
@@ -114,9 +109,8 @@ protected override void ProcessRecord()
                 ExcelTemplateValueService.CreateOptions(CultureName, MissingValueBehavior, ThrowOnMissing.IsPresent));
 
         workbook.SaveIfOwned();
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(replacements);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateRowCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateRowCommand.cs
index a5863927..8e5cd0d7 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateRowCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateRowCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsLifecycle.Invoke, "OfficeExcelTemplateRow", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelTemplateRow", "ExcelTemplateRows")]
 [OutputType(typeof(int))]
-public sealed class InvokeOfficeExcelTemplateRowCommand : PSCmdlet
-{
+public sealed class InvokeOfficeExcelTemplateRowCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
@@ -25,8 +24,8 @@ public sealed class InvokeOfficeExcelTemplateRowCommand : PSCmdlet
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -66,16 +65,13 @@ public sealed class InvokeOfficeExcelTemplateRowCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         TableInputCollector.AddInput(_rows, InputObject);
     }
 
     /// 
-    protected override void EndProcessing()
-    {
-        if (TemplateRow < 1)
-        {
+    protected override void EndProcessing() {
+        if (TemplateRow < 1) {
             ThrowTerminatingError(new ErrorRecord(
                 new PSArgumentOutOfRangeException(nameof(TemplateRow)),
                 "InvalidTemplateRow",
@@ -83,25 +79,22 @@ protected override void EndProcessing()
                 TemplateRow));
         }
 
-        if (_rows.Count == 0)
-        {
+        if (_rows.Count == 0) {
             return;
         }
 
         var rows = ExcelTemplateValueService.ConvertRows(_rows);
         var options = ExcelTemplateValueService.CreateOptions(CultureName, MissingValueBehavior, ThrowOnMissing.IsPresent);
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
-        if (!ShouldProcess($"{sheet.Name}!{TemplateRow}", "Apply Excel template rows"))
-        {
+        if (!ShouldProcess($"{sheet.Name}!{TemplateRow}", "Apply Excel template rows")) {
             return;
         }
 
         var replacements = sheet.ApplyTemplateRows(TemplateRow, rows, options);
         workbook.SaveIfOwned();
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(replacements);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateSheetCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateSheetCommand.cs
index 234caf1b..567b65ba 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateSheetCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/InvokeOfficeExcelTemplateSheetCommand.cs
@@ -17,8 +17,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsLifecycle.Invoke, "OfficeExcelTemplateSheet", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelTemplateSheet", "ExcelTemplateSheets")]
 [OutputType(typeof(int))]
-public sealed class InvokeOfficeExcelTemplateSheetCommand : PSCmdlet
-{
+public sealed class InvokeOfficeExcelTemplateSheetCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
@@ -26,8 +25,8 @@ public sealed class InvokeOfficeExcelTemplateSheetCommand : PSCmdlet
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetDocument)]
@@ -65,39 +64,33 @@ public sealed class InvokeOfficeExcelTemplateSheetCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         TableInputCollector.AddInput(_items, Item);
     }
 
     /// 
-    protected override void EndProcessing()
-    {
-        if (_items.Count == 0)
-        {
+    protected override void EndProcessing() {
+        if (_items.Count == 0) {
             return;
         }
 
         var items = ExcelTemplateValueService.ConvertRows(_items);
         Func, int, string>? sheetNameSelector = null;
-        if (!string.IsNullOrWhiteSpace(SheetNameProperty))
-        {
+        if (!string.IsNullOrWhiteSpace(SheetNameProperty)) {
             sheetNameSelector = (values, _) => ExcelTemplateValueService.GetStringValue(values, SheetNameProperty) ?? string.Empty;
         }
 
         var options = ExcelTemplateValueService.CreateOptions(CultureName, MissingValueBehavior, ThrowOnMissing.IsPresent);
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var templateSheetName = ExcelWorkbookCommandService.ResolveSheetNameOrCurrent(this, workbook.Document, ParameterSetName, TemplateSheet);
-        if (!ShouldProcess(templateSheetName, "Apply Excel template sheets"))
-        {
+        if (!ShouldProcess(templateSheetName, "Apply Excel template sheets")) {
             return;
         }
 
         var replacements = workbook.Document.ApplyTemplateSheets(templateSheetName, items, sheetNameSelector, options);
         workbook.SaveIfOwned();
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(replacements);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelSheetCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelSheetCommand.cs
index 856f30e5..9566414c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelSheetCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelSheetCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Join, "OfficeExcelSheet", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("Merge-OfficeExcelSheet", "ExcelSheetJoin", "ExcelSheetMerge")]
 [OutputType(typeof(ExcelWorksheetMergeResult))]
-public sealed class JoinOfficeExcelSheetCommand : PSCmdlet
-{
+public sealed class JoinOfficeExcelSheetCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Target workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Target workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -88,11 +87,9 @@ public sealed class JoinOfficeExcelSheetCommand : PSCmdlet
     public SwitchParameter OverwriteExistingCells { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var targetWorkbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, targetWorkbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var targetWorkbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, targetWorkbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -106,10 +103,8 @@ protected override void ProcessRecord()
         WriteObject(result);
     }
 
-    private ExcelWorksheetMergeOptions BuildOptions()
-    {
-        return new ExcelWorksheetMergeOptions
-        {
+    private ExcelWorksheetMergeOptions BuildOptions() {
+        return new ExcelWorksheetMergeOptions {
             SourceRange = SourceRange,
             TargetStartRow = TargetStartRow,
             TargetStartColumn = TargetStartColumn,
@@ -122,4 +117,4 @@ private ExcelWorksheetMergeOptions BuildOptions()
         };
     }
 
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelWorkbookCommand.cs
index 73168554..96307307 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/JoinOfficeExcelWorkbookCommand.cs
@@ -26,16 +26,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Join, "OfficeExcelWorkbook", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("Merge-OfficeExcelWorkbook", "ExcelWorkbookJoin", "ExcelWorkbookMerge")]
 [OutputType(typeof(ExcelWorkbookMergeResult))]
-public sealed class JoinOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class JoinOfficeExcelWorkbookCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Target workbook path to create or update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath", "OutputPath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath", "OutputPath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Target workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -68,49 +67,38 @@ public sealed class JoinOfficeExcelWorkbookCommand : PSCmdlet
     public ExcelWorksheetCopyMode CopyMode { get; set; } = ExcelWorksheetCopyMode.Package;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (SourceDocument != null && SourcePath is { Length: > 0 })
-        {
+    protected override void ProcessRecord() {
+        if (SourceDocument != null && SourcePath is { Length: > 0 }) {
             throw new PSArgumentException("Specify either -SourceDocument or -SourcePath, not both.");
         }
 
-        if (SourceDocument == null && (SourcePath == null || SourcePath.Length == 0))
-        {
+        if (SourceDocument == null && (SourcePath == null || SourcePath.Length == 0)) {
             throw new PSArgumentException("Provide SourceDocument or SourcePath.");
         }
 
-        if (string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase))
-        {
-            var resolvedTargetPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        if (string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)) {
+            var resolvedTargetPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
             var action = File.Exists(resolvedTargetPath)
                 ? "Update Excel workbook with merged sheets"
                 : "Write Excel workbook with merged sheets";
-            if (!ShouldProcess(resolvedTargetPath, action))
-            {
+            if (!ShouldProcess(resolvedTargetPath, action)) {
                 return;
             }
         }
 
         using var targetWorkbook = ResolveTargetWorkbook();
         if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase) &&
-            !ExcelShouldProcessService.ShouldProcessWorkbook(this, targetWorkbook.Document, InputPath, "Merge Excel workbook sheets"))
-        {
+            !ExcelShouldProcessService.ShouldProcessWorkbook(this, targetWorkbook.Document, Path, "Merge Excel workbook sheets")) {
             return;
         }
 
         var results = new List();
 
-        if (SourceDocument != null)
-        {
+        if (SourceDocument != null) {
             results.Add(MergeSourceWorkbook(targetWorkbook.Document, SourceDocument));
-        }
-        else
-        {
-            foreach (var sourcePath in SourcePath!)
-            {
-                if (string.IsNullOrWhiteSpace(sourcePath))
-                {
+        } else {
+            foreach (var sourcePath in SourcePath!) {
+                if (string.IsNullOrWhiteSpace(sourcePath)) {
                     continue;
                 }
 
@@ -121,44 +109,37 @@ protected override void ProcessRecord()
         }
 
         targetWorkbook.SaveIfOwned();
-        foreach (var result in results)
-        {
+        foreach (var result in results) {
             WriteObject(result);
         }
     }
 
-    private ExcelWorkbookCommandScope ResolveTargetWorkbook()
-    {
-        if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase))
-        {
-            return ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+    private ExcelWorkbookCommandScope ResolveTargetWorkbook() {
+        if (!string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)) {
+            return ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         }
 
-        var resolvedTargetPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-        var targetDirectory = Path.GetDirectoryName(resolvedTargetPath);
-        if (!string.IsNullOrWhiteSpace(targetDirectory))
-        {
+        var resolvedTargetPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        var targetDirectory = System.IO.Path.GetDirectoryName(resolvedTargetPath);
+        if (!string.IsNullOrWhiteSpace(targetDirectory)) {
             Directory.CreateDirectory(targetDirectory);
         }
 
         var document = File.Exists(resolvedTargetPath)
             ? ExcelDocumentService.LoadDocument(resolvedTargetPath, readOnly: false, autoSave: false)
-            : ExcelDocument.Create(resolvedTargetPath, new ExcelCreateOptions
-            {
+            : ExcelDocument.Create(resolvedTargetPath, new ExcelCreateOptions {
                 PersistenceMode = DocumentPersistenceMode.Explicit
             });
 
         return new ExcelWorkbookCommandScope(document, ownsDocument: true);
     }
 
-    private ExcelWorkbookMergeResult MergeSourceWorkbook(ExcelDocument targetDocument, ExcelDocument sourceDocument)
-    {
-        return targetDocument.MergeWorkbookFrom(sourceDocument, new ExcelWorkbookMergeOptions
-        {
+    private ExcelWorkbookMergeResult MergeSourceWorkbook(ExcelDocument targetDocument, ExcelDocument sourceDocument) {
+        return targetDocument.MergeWorkbookFrom(sourceDocument, new ExcelWorkbookMergeOptions {
             SheetNames = SourceSheet,
             SheetNamePrefix = SheetNamePrefix,
             SheetNameValidationMode = ValidationMode,
             CopyMode = CopyMode
         });
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/MoveOfficeExcelSheetCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/MoveOfficeExcelSheetCommand.cs
index 0dffff7a..5cec0a95 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/MoveOfficeExcelSheetCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/MoveOfficeExcelSheetCommand.cs
@@ -19,16 +19,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Move, "OfficeExcelSheet", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("Set-OfficeExcelSheetOrder", "ExcelSheetOrder")]
-public sealed class MoveOfficeExcelSheetCommand : PSCmdlet
-{
+public sealed class MoveOfficeExcelSheetCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -53,11 +52,9 @@ public sealed class MoveOfficeExcelSheetCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -66,9 +63,8 @@ protected override void ProcessRecord()
         document.ReorderWorksheet(sheet, Index);
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(sheet);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs
index 075a5a1b..77528a6d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs
@@ -2,7 +2,6 @@
 using System.IO;
 using System.Management.Automation;
 using OfficeIMO.Excel;
-using OfficeIMO.Excel.Pdf;
 using PSWriteOffice.Services.Excel;
 using PSWriteOffice.Services.Pdf;
 
@@ -28,12 +27,11 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.New, "OfficeExcel", SupportsShouldProcess = true)]
 [Alias("ExcelNew")]
-public sealed class NewOfficeExcelCommand : PSCmdlet
-{
+public sealed class NewOfficeExcelCommand : PSCmdlet {
     /// Destination path for the workbook.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("Path")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// DSL scriptblock describing workbook content.
     [Parameter(Position = 1)]
@@ -44,10 +42,6 @@ public sealed class NewOfficeExcelCommand : PSCmdlet
     [Alias("Template")]
     public string? TemplatePath { get; set; }
 
-    /// Opt into OfficeIMO automatic saves during operations.
-    [Parameter]
-    public SwitchParameter AutoSave { get; set; }
-
     /// Skip saving the workbook after running the DSL.
     [Parameter]
     public SwitchParameter NoSave { get; set; }
@@ -97,10 +91,6 @@ public sealed class NewOfficeExcelCommand : PSCmdlet
     [ValidateSet("1900", "1904", "NineteenHundred", "NineteenFour")]
     public string? DateSystem { get; set; }
 
-    /// Optional PDF path to create from the same workbook before closing it.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
     /// Emit a  for convenience.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
@@ -146,29 +136,24 @@ public sealed class NewOfficeExcelCommand : PSCmdlet
     public string? LastModifiedBy { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!NoSave.IsPresent && AutoSave.IsPresent && !string.IsNullOrEmpty(Password))
-        {
-            throw new PSArgumentException("Encrypted Excel workbooks require explicit Save-OfficeExcel -Password or Close-OfficeExcel -Save -Password. -AutoSave cannot be used with -Password.");
+    protected override void ProcessRecord() {
+        if (NoSave.IsPresent && Open.IsPresent) {
+            throw new PSArgumentException("-Open cannot be used with -NoSave because no file is written. Save the returned workbook explicitly, then use -Open on Save-OfficeExcel.", nameof(Open));
         }
 
-        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
+        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         var action = NoSave.IsPresent
             ? string.IsNullOrWhiteSpace(TemplatePath)
                 ? "Create in-memory Excel workbook"
                 : "Create Excel workbook from template"
             : "Write new Excel workbook";
-        if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, action))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, action)) {
             return;
         }
 
-        if (!NoSave.IsPresent || !string.IsNullOrWhiteSpace(TemplatePath))
-        {
-            var directory = Path.GetDirectoryName(resolvedPath);
-            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-            {
+        if (!NoSave.IsPresent || !string.IsNullOrWhiteSpace(TemplatePath)) {
+            var directory = System.IO.Path.GetDirectoryName(resolvedPath);
+            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                 Directory.CreateDirectory(directory);
             }
         }
@@ -176,15 +161,14 @@ protected override void ProcessRecord()
         var document = string.IsNullOrWhiteSpace(TemplatePath)
             ? NoSave.IsPresent
                 ? ExcelDocumentService.CreateInMemoryDocument()
-                : ExcelDocumentService.CreateDocument(resolvedPath, AutoSave.IsPresent)
+                : ExcelDocumentService.CreateDocument(resolvedPath, autoSave: false)
             : ExcelDocumentService.CreateDocumentFromTemplate(
                 SessionState.Path.GetUnresolvedProviderPathFromPSPath(TemplatePath!),
                 resolvedPath,
-                AutoSave.IsPresent);
-        try
-        {
-            if (NoSave.IsPresent)
-            {
+                autoSave: false);
+        var closed = false;
+        try {
+            if (NoSave.IsPresent) {
                 ExcelDocumentService.UpdateSaveAssociation(document, resolvedPath, encrypted: false);
             }
 
@@ -202,15 +186,12 @@ protected override void ProcessRecord()
                 ApplicationName,
                 LastModifiedBy);
 
-            using (ExcelDslContext.Enter(document))
-            {
+            using (ExcelDslContext.Enter(document)) {
                 Content?.InvokeReturnAsIs();
             }
 
-            if (!NoSave.IsPresent)
-            {
-                if (document.Sheets.Count == 0)
-                {
+            if (!NoSave.IsPresent) {
+                if (document.Sheets.Count == 0) {
                     document.AddWorksheet(string.Empty, ExcelSheetNameValidationMode.Sanitize);
                 }
                 var saveOptions = ExcelDocumentService.CreateSaveOptions(
@@ -222,41 +203,22 @@ protected override void ProcessRecord()
                     ClearCachedFormulaResults.IsPresent,
                     MarkFormulasDirty.IsPresent,
                     ForceFullCalculationOnOpen.IsPresent);
-                SavePdfIfRequested(document);
                 ExcelDocumentService.SaveDocument(document, Open.IsPresent, resolvedPath, Password, saveOptions);
-            }
-            else
-            {
+                closed = true;
+            } else {
                 WriteObject(document);
                 return;
             }
-        }
-        catch
-        {
-            ExcelDocumentService.CloseDocument(document);
+        } catch {
+            if (!closed) {
+                ExcelDocumentService.CloseDocument(document);
+            }
             throw;
         }
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(new FileInfo(resolvedPath));
         }
     }
 
-    private void SavePdfIfRequested(ExcelDocument document)
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write Excel PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        document.SaveAsPdf(pdfPath).RequireSuccess();
-    }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelDashboardCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelDashboardCommand.cs
index e7c872e2..97117db2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelDashboardCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelDashboardCommand.cs
@@ -18,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.New, "OfficeExcelDashboard", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelDashboard")]
 [OutputType(typeof(PSObject))]
-public sealed class NewOfficeExcelDashboardCommand : PSCmdlet
-{
+public sealed class NewOfficeExcelDashboardCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
@@ -28,8 +27,8 @@ public sealed class NewOfficeExcelDashboardCommand : PSCmdlet
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetDocument)]
@@ -108,34 +107,28 @@ public sealed class NewOfficeExcelDashboardCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         TableInputCollector.AddInput(_items, InputObject, preserveTabularInput: true);
     }
 
     /// 
-    protected override void EndProcessing()
-    {
+    protected override void EndProcessing() {
         var rows = TableInputCollector.RequireRows(_items, nameof(InputObject));
         var table = ExcelTabularInputService.ToDataTable(rows, TableName);
-        if (!Enum.TryParse(TableStyle, ignoreCase: true, out ExcelTableStyle style))
-        {
+        if (!Enum.TryParse(TableStyle, ignoreCase: true, out ExcelTableStyle style)) {
             throw new PSArgumentException($"Unknown table style '{TableStyle}'.", nameof(TableStyle));
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
 
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-
-        {
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
 
             return;
 
         }
 
         ExcelSheet sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
-        ExcelDashboardResult result = sheet.AddDashboard(table, new ExcelDashboardOptions
-        {
+        ExcelDashboardResult result = sheet.AddDashboard(table, new ExcelDashboardOptions {
             Title = Title,
             Subtitle = Subtitle,
             TableRow = TableRow,
@@ -152,8 +145,7 @@ protected override void EndProcessing()
         });
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var output = new PSObject();
             output.Properties.Add(new PSNoteProperty("TableRange", result.TableRange));
             output.Properties.Add(new PSNoteProperty("TableName", result.TableName));
@@ -162,4 +154,4 @@ protected override void EndProcessing()
             WriteObject(output);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelImageOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelImageOptionsCommand.cs
new file mode 100644
index 00000000..ff135bae
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelImageOptionsCommand.cs
@@ -0,0 +1,61 @@
+using System.Management.Automation;
+using OfficeIMO.Excel;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.Excel;
+
+/// Creates discoverable rendering settings for Excel range and chart image export.
+/// 
+///   Render a range with gridlines and hyperlinks visible.
+///   PS> 
+///   $options = New-OfficeExcelImageOptions -ShowGridlines -ShowHyperlinkHints -TargetDpi 144
+/// Export-OfficeExcelRangeImage -Path .\Workbook.xlsx -Worksheet Summary -Range A1:H20 -OutputPath .\Summary.svg -Options $options
+/// 
+/// 
+///   Reuse the same rendering controls for a chart.
+///   PS> 
+///   $options = New-OfficeExcelImageOptions -TargetDpi 144 -MaximumOutputWidth 1600
+/// Export-OfficeExcelChartImage -Path .\Workbook.xlsx -Worksheet Summary -ChartName Revenue -OutputPath .\Revenue.svg -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeExcelImageOptions")]
+[OutputType(typeof(ExcelImageExportOptions))]
+public sealed class NewOfficeExcelImageOptionsCommand : OfficeImageOptionsCommandBase {
+    /// Show worksheet gridlines.
+    [Parameter] public SwitchParameter ShowGridlines { get; set; }
+    /// Include hidden rows and columns.
+    [Parameter] public SwitchParameter IncludeHidden { get; set; }
+    /// Include worksheet images.
+    [Parameter] public SwitchParameter IncludeImages { get; set; }
+    /// Include worksheet charts.
+    [Parameter] public SwitchParameter IncludeCharts { get; set; }
+    /// Include drawing objects.
+    [Parameter] public SwitchParameter IncludeDrawingObjects { get; set; }
+    /// Include conditional formatting.
+    [Parameter] public SwitchParameter IncludeConditionalFormatting { get; set; }
+    /// Show hyperlink hints.
+    [Parameter] public SwitchParameter ShowHyperlinkHints { get; set; }
+    /// Show cell comment bodies.
+    [Parameter] public SwitchParameter ShowCommentBodies { get; set; }
+    /// Maximum cells rendered.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumRenderedCells { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new ExcelImageExportOptions();
+        ApplyExcel(options);
+        WriteObject(options);
+    }
+
+    internal void ApplyExcel(ExcelImageExportOptions options) {
+        ApplyCommon(options);
+        if (IsBound(nameof(ShowGridlines))) options.ShowGridlines = ShowGridlines.IsPresent;
+        if (IsBound(nameof(IncludeHidden))) options.IncludeHidden = IncludeHidden.IsPresent;
+        if (IsBound(nameof(IncludeImages))) options.IncludeImages = IncludeImages.IsPresent;
+        if (IsBound(nameof(IncludeCharts))) options.IncludeCharts = IncludeCharts.IsPresent;
+        if (IsBound(nameof(IncludeDrawingObjects))) options.IncludeDrawingObjects = IncludeDrawingObjects.IsPresent;
+        if (IsBound(nameof(IncludeConditionalFormatting))) options.IncludeConditionalFormatting = IncludeConditionalFormatting.IsPresent;
+        if (IsBound(nameof(ShowHyperlinkHints))) options.ShowHyperlinkHints = ShowHyperlinkHints.IsPresent;
+        if (IsBound(nameof(ShowCommentBodies))) options.ShowCommentBodies = ShowCommentBodies.IsPresent;
+        if (MaximumRenderedCells.HasValue) options.MaximumRenderedCells = MaximumRenderedCells.Value;
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelPdfOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelPdfOptionsCommand.cs
new file mode 100644
index 00000000..6b55bdae
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelPdfOptionsCommand.cs
@@ -0,0 +1,205 @@
+using System.Collections.Generic;
+using System.Management.Automation;
+using OfficeIMO.Drawing;
+using OfficeIMO.Excel.Pdf;
+using OfficeIMO.Pdf;
+
+namespace PSWriteOffice.Cmdlets.Excel;
+
+/// Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf.
+/// 
+///   Export selected visible sheets with workbook layout features.
+///   PS> 
+///   $options = New-OfficeExcelPdfOptions -SheetName Summary,Services -UseWorksheetCharts -UseWorksheetImages
+/// Export-OfficeDocumentPdf -InputPath .\Report.xlsx -Path .\Report.pdf -ExcelOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeExcelPdfOptions")]
+[OutputType(typeof(ExcelPdfSaveOptions))]
+public sealed class NewOfficeExcelPdfOptionsCommand : PSCmdlet {
+    /// Underlying low-level OfficeIMO PDF options.
+    [Parameter]
+    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
+
+    /// Default font family used when the workbook does not specify one.
+    [Parameter]
+    public string? FontFamily { get; set; }
+
+    /// PDF page size.
+    [Parameter]
+    public PageSize? PageSize { get; set; }
+
+    /// Left page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginLeft { get; set; }
+
+    /// Top page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginTop { get; set; }
+
+    /// Right page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginRight { get; set; }
+
+    /// Bottom page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginBottom { get; set; }
+
+    /// Controls how worksheet content is laid out on PDF pages.
+    [Parameter]
+    public ExcelPdfWorksheetLayoutMode? WorksheetLayout { get; set; }
+
+    /// Worksheet names to export. The default exports all eligible sheets.
+    [Parameter]
+    [Alias("SheetNames")]
+    public string[]? SheetName { get; set; }
+
+    /// Exclude workbook sheets marked hidden.
+    [Parameter]
+    public SwitchParameter RespectWorkbookSheetVisibility { get; set; }
+
+    /// Honor worksheet print areas.
+    [Parameter]
+    public SwitchParameter UseWorksheetPrintAreas { get; set; }
+
+    /// Honor worksheet page setup.
+    [Parameter]
+    public SwitchParameter UseWorksheetPageSetup { get; set; }
+
+    /// Honor worksheet rows configured to repeat on printed pages.
+    [Parameter]
+    public SwitchParameter UseWorksheetPrintTitleRows { get; set; }
+
+    /// Honor worksheet page breaks.
+    [Parameter]
+    public SwitchParameter UseWorksheetPageBreaks { get; set; }
+
+    /// Render worksheet headers and footers.
+    [Parameter]
+    public SwitchParameter UseWorksheetHeadersAndFooters { get; set; }
+
+    /// Render images referenced by worksheet headers and footers.
+    [Parameter]
+    public SwitchParameter UseWorksheetHeaderFooterImages { get; set; }
+
+    /// Render worksheet cell styles.
+    [Parameter]
+    public SwitchParameter UseWorksheetCellStyles { get; set; }
+
+    /// Render worksheet hyperlinks.
+    [Parameter]
+    public SwitchParameter UseWorksheetHyperlinks { get; set; }
+
+    /// Render worksheet images.
+    [Parameter]
+    public SwitchParameter UseWorksheetImages { get; set; }
+
+    /// Render worksheet charts.
+    [Parameter]
+    public SwitchParameter UseWorksheetCharts { get; set; }
+
+    /// Chart visual style override.
+    [Parameter]
+    public OfficeChartStyle? ChartStyle { get; set; }
+
+    /// Chart layout override.
+    [Parameter]
+    public OfficeChartLayout? ChartLayout { get; set; }
+
+    /// Render merged worksheet cells.
+    [Parameter]
+    public SwitchParameter UseWorksheetMergedCells { get; set; }
+
+    /// Honor worksheet column widths.
+    [Parameter]
+    public SwitchParameter UseWorksheetColumnWidths { get; set; }
+
+    /// Honor worksheet row heights.
+    [Parameter]
+    public SwitchParameter UseWorksheetRowHeights { get; set; }
+
+    /// Exclude hidden worksheet rows and columns.
+    [Parameter]
+    public SwitchParameter RespectWorksheetHiddenRowsAndColumns { get; set; }
+
+    /// Include worksheet row and column headings.
+    [Parameter]
+    public SwitchParameter IncludeSheetHeadings { get; set; }
+
+    /// Number of leading rows treated as headers.
+    [Parameter]
+    [ValidateRange(0, int.MaxValue)]
+    public int? HeaderRowCount { get; set; }
+
+    /// Maximum worksheet rows to read and render.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaxRowsPerSheet { get; set; }
+
+    /// Use bounded worksheet reads for large workbooks.
+    [Parameter]
+    public SwitchParameter UseBoundedWorksheetRead { get; set; }
+
+    /// Text used when a worksheet cell is empty.
+    [Parameter]
+    public string? EmptyCellText { get; set; }
+
+    /// Allow embedding fonts discovered on the current system.
+    [Parameter]
+    public SwitchParameter AllowSystemFontEmbedding { get; set; }
+
+    /// Allow embedding fonts stored in the workbook.
+    [Parameter]
+    public SwitchParameter AllowDocumentFontEmbedding { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new ExcelPdfSaveOptions();
+        if (PdfOptions != null) options.PdfOptions = PdfOptions;
+        if (!string.IsNullOrWhiteSpace(FontFamily)) options.FontFamily = FontFamily;
+        if (PageSize.HasValue) options.PageSize = PageSize.Value;
+        if (HasMargins()) {
+            PageMargins defaults = PageMargins.Normal;
+            options.Margins = new PageMargins(
+                MarginLeft ?? defaults.Left,
+                MarginTop ?? defaults.Top,
+                MarginRight ?? defaults.Right,
+                MarginBottom ?? defaults.Bottom);
+        }
+        if (WorksheetLayout.HasValue) options.WorksheetLayout = WorksheetLayout.Value;
+        if (SheetName is { Length: > 0 }) options.SheetNames = new List(SheetName);
+        SetBoundSwitch(nameof(RespectWorkbookSheetVisibility), RespectWorkbookSheetVisibility, value => options.RespectWorkbookSheetVisibility = value);
+        SetBoundSwitch(nameof(UseWorksheetPrintAreas), UseWorksheetPrintAreas, value => options.UseWorksheetPrintAreas = value);
+        SetBoundSwitch(nameof(UseWorksheetPageSetup), UseWorksheetPageSetup, value => options.UseWorksheetPageSetup = value);
+        SetBoundSwitch(nameof(UseWorksheetPrintTitleRows), UseWorksheetPrintTitleRows, value => options.UseWorksheetPrintTitleRows = value);
+        SetBoundSwitch(nameof(UseWorksheetPageBreaks), UseWorksheetPageBreaks, value => options.UseWorksheetPageBreaks = value);
+        SetBoundSwitch(nameof(UseWorksheetHeadersAndFooters), UseWorksheetHeadersAndFooters, value => options.UseWorksheetHeadersAndFooters = value);
+        SetBoundSwitch(nameof(UseWorksheetHeaderFooterImages), UseWorksheetHeaderFooterImages, value => options.UseWorksheetHeaderFooterImages = value);
+        SetBoundSwitch(nameof(UseWorksheetCellStyles), UseWorksheetCellStyles, value => options.UseWorksheetCellStyles = value);
+        SetBoundSwitch(nameof(UseWorksheetHyperlinks), UseWorksheetHyperlinks, value => options.UseWorksheetHyperlinks = value);
+        SetBoundSwitch(nameof(UseWorksheetImages), UseWorksheetImages, value => options.UseWorksheetImages = value);
+        SetBoundSwitch(nameof(UseWorksheetCharts), UseWorksheetCharts, value => options.UseWorksheetCharts = value);
+        if (ChartStyle != null) options.ChartStyle = ChartStyle;
+        if (ChartLayout != null) options.ChartLayout = ChartLayout;
+        SetBoundSwitch(nameof(UseWorksheetMergedCells), UseWorksheetMergedCells, value => options.UseWorksheetMergedCells = value);
+        SetBoundSwitch(nameof(UseWorksheetColumnWidths), UseWorksheetColumnWidths, value => options.UseWorksheetColumnWidths = value);
+        SetBoundSwitch(nameof(UseWorksheetRowHeights), UseWorksheetRowHeights, value => options.UseWorksheetRowHeights = value);
+        SetBoundSwitch(nameof(RespectWorksheetHiddenRowsAndColumns), RespectWorksheetHiddenRowsAndColumns, value => options.RespectWorksheetHiddenRowsAndColumns = value);
+        SetBoundSwitch(nameof(IncludeSheetHeadings), IncludeSheetHeadings, value => options.IncludeSheetHeadings = value);
+        if (HeaderRowCount.HasValue) options.HeaderRowCount = HeaderRowCount.Value;
+        if (MaxRowsPerSheet.HasValue) options.MaxRowsPerSheet = MaxRowsPerSheet.Value;
+        SetBoundSwitch(nameof(UseBoundedWorksheetRead), UseBoundedWorksheetRead, value => options.UseBoundedWorksheetRead = value);
+        if (EmptyCellText != null) options.EmptyCellText = EmptyCellText;
+        SetBoundSwitch(nameof(AllowSystemFontEmbedding), AllowSystemFontEmbedding, value => options.ResourcePolicy.AllowSystemFontEmbedding = value);
+        SetBoundSwitch(nameof(AllowDocumentFontEmbedding), AllowDocumentFontEmbedding, value => options.ResourcePolicy.AllowDocumentFontEmbedding = value);
+        WriteObject(options);
+    }
+
+    private bool HasMargins() => MarginLeft.HasValue || MarginTop.HasValue || MarginRight.HasValue || MarginBottom.HasValue;
+    private void SetBoundSwitch(string name, SwitchParameter value, System.Action setter) {
+        if (MyInvocation.BoundParameters.ContainsKey(name)) setter(value.IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelWorkbookImageOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelWorkbookImageOptionsCommand.cs
new file mode 100644
index 00000000..e4b589ea
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelWorkbookImageOptionsCommand.cs
@@ -0,0 +1,57 @@
+using System.Management.Automation;
+using OfficeIMO.Excel;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.Excel;
+
+/// Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage.
+/// 
+///   Render selected worksheets with charts and conditional formatting.
+///   PS> 
+///   $options = New-OfficeExcelWorkbookImageOptions -SheetName Summary,Data -IncludeCharts -IncludeConditionalFormatting
+/// Export-OfficeExcelImage -Path .\Workbook.xlsx -OutputPath .\Sheets -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeExcelWorkbookImageOptions")]
+[OutputType(typeof(ExcelWorkbookImageExportOptions))]
+public sealed class NewOfficeExcelWorkbookImageOptionsCommand : OfficeImageOptionsCommandBase {
+    /// Worksheet names to export.
+    [Parameter] public string[]? SheetName { get; set; }
+    /// Include hidden worksheets.
+    [Parameter] public SwitchParameter IncludeHiddenSheets { get; set; }
+    /// Use worksheet print areas.
+    [Parameter] public SwitchParameter UseWorksheetPrintAreas { get; set; }
+    /// Split worksheets at manual page breaks.
+    [Parameter] public SwitchParameter SplitWorksheetsByManualPageBreaks { get; set; }
+    /// Show worksheet gridlines.
+    [Parameter] public SwitchParameter ShowGridlines { get; set; }
+    /// Include hidden rows and columns.
+    [Parameter] public SwitchParameter IncludeHidden { get; set; }
+    /// Include worksheet images.
+    [Parameter] public SwitchParameter IncludeImages { get; set; }
+    /// Include worksheet charts.
+    [Parameter] public SwitchParameter IncludeCharts { get; set; }
+    /// Include drawing objects.
+    [Parameter] public SwitchParameter IncludeDrawingObjects { get; set; }
+    /// Include conditional formatting.
+    [Parameter] public SwitchParameter IncludeConditionalFormatting { get; set; }
+    /// Maximum cells rendered per worksheet.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumRenderedCells { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new ExcelWorkbookImageExportOptions();
+        ApplyCommon(options);
+        if (SheetName != null) options.SheetNames = SheetName;
+        if (IsBound(nameof(IncludeHiddenSheets))) options.IncludeHiddenSheets = IncludeHiddenSheets.IsPresent;
+        if (IsBound(nameof(UseWorksheetPrintAreas))) options.UseWorksheetPrintAreas = UseWorksheetPrintAreas.IsPresent;
+        if (IsBound(nameof(SplitWorksheetsByManualPageBreaks))) options.SplitWorksheetsByManualPageBreaks = SplitWorksheetsByManualPageBreaks.IsPresent;
+        if (IsBound(nameof(ShowGridlines))) options.ShowGridlines = ShowGridlines.IsPresent;
+        if (IsBound(nameof(IncludeHidden))) options.IncludeHidden = IncludeHidden.IsPresent;
+        if (IsBound(nameof(IncludeImages))) options.IncludeImages = IncludeImages.IsPresent;
+        if (IsBound(nameof(IncludeCharts))) options.IncludeCharts = IncludeCharts.IsPresent;
+        if (IsBound(nameof(IncludeDrawingObjects))) options.IncludeDrawingObjects = IncludeDrawingObjects.IsPresent;
+        if (IsBound(nameof(IncludeConditionalFormatting))) options.IncludeConditionalFormatting = IncludeConditionalFormatting.IsPresent;
+        if (MaximumRenderedCells.HasValue) options.MaximumRenderedCells = MaximumRenderedCells.Value;
+        WriteObject(options);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficePdfExcelImportOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficePdfExcelImportOptionsCommand.cs
new file mode 100644
index 00000000..8c040f6b
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficePdfExcelImportOptionsCommand.cs
@@ -0,0 +1,77 @@
+using System.Globalization;
+using System.Management.Automation;
+using OfficeIMO.Excel;
+using OfficeIMO.Excel.Pdf;
+
+namespace PSWriteOffice.Cmdlets.Excel;
+
+/// Creates discoverable PDF-table-to-Excel reconstruction settings.
+/// 
+///   Import PDF tables with typed columns and filters.
+///   PS> 
+///   $options = New-OfficePdfExcelImportOptions -IncludeAutoFilter -AutoFitColumns -ConvertNumericColumns -ConvertDateTimeColumns
+/// ConvertTo-OfficePdfExcel -Path .\Tables.pdf -OutputPath .\Tables.xlsx -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePdfExcelImportOptions")]
+[OutputType(typeof(PdfExcelTableImportOptions))]
+public sealed class NewOfficePdfExcelImportOptionsCommand : PSCmdlet {
+    /// Maximum body rows imported per detected table; zero means unlimited.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? MaxRows { get; set; }
+    /// Prefix for generated worksheet names.
+    [Parameter] public string? SheetNamePrefix { get; set; }
+    /// Prefix for generated Excel table names.
+    [Parameter] public string? TableNamePrefix { get; set; }
+    /// Excel table style.
+    [Parameter] public ExcelTableStyle? TableStyle { get; set; }
+    /// Add table-scoped AutoFilters.
+    [Parameter] public SwitchParameter IncludeAutoFilter { get; set; }
+    /// Auto-fit worksheet columns.
+    [Parameter] public SwitchParameter AutoFitColumns { get; set; }
+    /// Convert consistently numeric columns.
+    [Parameter] public SwitchParameter ConvertNumericColumns { get; set; }
+    /// Convert consistently boolean columns.
+    [Parameter] public SwitchParameter ConvertBooleanColumns { get; set; }
+    /// Convert unambiguous date columns.
+    [Parameter] public SwitchParameter ConvertDateTimeColumns { get; set; }
+    /// Convert percentage columns to fractional numbers.
+    [Parameter] public SwitchParameter ConvertPercentageColumns { get; set; }
+    /// Culture name used for numeric parsing, such as en-US.
+    [Parameter] public string? NumericCulture { get; set; }
+    /// Merge compatible table segments across pages.
+    [Parameter] public SwitchParameter MergePageContinuations { get; set; }
+    /// Suppress repeated body header rows in merged segments.
+    [Parameter] public SwitchParameter SuppressRepeatedBodyHeaderRows { get; set; }
+    /// Maximum table segments merged into one table.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumContinuationSegments { get; set; }
+    /// Geometry tolerance in PDF points for page continuations.
+    [Parameter] [ValidateRange(0d, double.MaxValue)] public double? ContinuationGeometryTolerancePoints { get; set; }
+    /// Worksheet name used when no tables are detected.
+    [Parameter] public string? EmptyWorkbookSheetName { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PdfExcelTableImportOptions();
+        Apply(nameof(IncludeAutoFilter), value => options.IncludeAutoFilter = value);
+        Apply(nameof(AutoFitColumns), value => options.AutoFitColumns = value);
+        Apply(nameof(ConvertNumericColumns), value => options.ConvertNumericColumns = value);
+        Apply(nameof(ConvertBooleanColumns), value => options.ConvertBooleanColumns = value);
+        Apply(nameof(ConvertDateTimeColumns), value => options.ConvertDateTimeColumns = value);
+        Apply(nameof(ConvertPercentageColumns), value => options.ConvertPercentageColumns = value);
+        Apply(nameof(MergePageContinuations), value => options.MergePageContinuations = value);
+        Apply(nameof(SuppressRepeatedBodyHeaderRows), value => options.SuppressRepeatedBodyHeaderRows = value);
+        if (MaxRows.HasValue) options.MaxRows = MaxRows.Value;
+        if (SheetNamePrefix != null) options.SheetNamePrefix = SheetNamePrefix;
+        if (TableNamePrefix != null) options.TableNamePrefix = TableNamePrefix;
+        if (TableStyle.HasValue) options.TableStyle = TableStyle.Value;
+        if (!string.IsNullOrWhiteSpace(NumericCulture)) options.NumericCulture = CultureInfo.GetCultureInfo(NumericCulture!);
+        if (MaximumContinuationSegments.HasValue) options.MaximumContinuationSegments = MaximumContinuationSegments.Value;
+        if (ContinuationGeometryTolerancePoints.HasValue) options.ContinuationGeometryTolerancePoints = ContinuationGeometryTolerancePoints.Value;
+        if (EmptyWorkbookSheetName != null) options.EmptyWorkbookSheetName = EmptyWorkbookSheetName;
+        WriteObject(options);
+    }
+
+    private void Apply(string name, System.Action setter) {
+        if (!MyInvocation.BoundParameters.ContainsKey(name)) return;
+        setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/OfficeExcelReportBlockCommands.cs b/Sources/PSWriteOffice/Cmdlets/Excel/OfficeExcelReportBlockCommands.cs
index 84837269..6bd95316 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/OfficeExcelReportBlockCommands.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/OfficeExcelReportBlockCommands.cs
@@ -25,8 +25,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportTitle")]
 [Alias("ExcelReportTitle")]
-public sealed class AddOfficeExcelReportTitleCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportTitleCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Title text.
     [Parameter(Mandatory = true, Position = 0)]
     public string Title { get; set; } = string.Empty;
@@ -36,9 +35,10 @@ public sealed class AddOfficeExcelReportTitleCommand : PSCmdlet
     public string? Subtitle { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().Title(Title, Subtitle);
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().Title(Title, Subtitle);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -56,16 +56,16 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportSection")]
 [Alias("ExcelReportSection")]
-public sealed class AddOfficeExcelReportSectionCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportSectionCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Section heading text.
     [Parameter(Mandatory = true, Position = 0)]
     public string Text { get; set; } = string.Empty;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().Section(Text);
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().Section(Text);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -83,16 +83,16 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportParagraph")]
 [Alias("ExcelReportParagraph")]
-public sealed class AddOfficeExcelReportParagraphCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportParagraphCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Paragraph text.
     [Parameter(Mandatory = true, Position = 0)]
     public string Text { get; set; } = string.Empty;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().Paragraph(Text);
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().Paragraph(Text);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -111,16 +111,16 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportSpacer")]
 [Alias("ExcelReportSpacer")]
-public sealed class AddOfficeExcelReportSpacerCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportSpacerCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Rows to advance. Defaults to the composer theme spacing.
     [Parameter(Position = 0)]
     public int Rows { get; set; } = -1;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().Spacer(Rows);
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().Spacer(Rows);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -137,8 +137,7 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportCallout")]
 [Alias("ExcelReportCallout")]
-public sealed class AddOfficeExcelReportCalloutCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportCalloutCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Callout kind. Supported values include info, success, warning, error, and critical.
     [Parameter(Position = 0)]
     [ValidateSet("Info", "Success", "Warning", "Error", "Critical")]
@@ -157,9 +156,10 @@ public sealed class AddOfficeExcelReportCalloutCommand : PSCmdlet
     public int WidthColumns { get; set; } = 8;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().Callout(Kind, Title, Body, WidthColumns);
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().Callout(Kind, Title, Body, WidthColumns);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -176,8 +176,7 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportKpiRow")]
 [Alias("ExcelReportKpiRow")]
-public sealed class AddOfficeExcelReportKpiRowCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportKpiRowCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Hashtable or objects with Label/Value, Key/Value, Name/Value, or Title/Value properties.
     [Parameter(Mandatory = true, Position = 0)]
     [Alias("Data")]
@@ -192,9 +191,10 @@ public sealed class AddOfficeExcelReportKpiRowCommand : PSCmdlet
     public string? LabelFillColor { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().KpiRow(ReportBlockInput.ToPairs(InputObject), PerRow, LabelFillColor);
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().KpiRow(ReportBlockInput.ToPairs(InputObject), PerRow, LabelFillColor);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -215,8 +215,7 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportLegend")]
 [Alias("ExcelReportLegend")]
-public sealed class AddOfficeExcelReportLegendCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportLegendCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Optional legend title.
     [Parameter(Position = 0)]
     public string? Title { get; set; }
@@ -244,14 +243,15 @@ public sealed class AddOfficeExcelReportLegendCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        ExcelDslContext.Require(this).RequireComposer().SectionLegend(
+    protected override void ProcessRecord() {
+        var context = ExcelDslContext.Require(this);
+        context.RequireComposer().SectionLegend(
             Title,
             Header,
             InputObject.Select(row => ReportBlockInput.ToRow(row, Header)),
             ReportBlockInput.ToStringMap(FirstColumnFillByValue, CaseSensitive.IsPresent),
             HeaderFillColor);
+        WritePassThru(context.RequireSheet());
     }
 }
 
@@ -272,8 +272,7 @@ protected override void ProcessRecord()
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeExcelReportTable")]
 [Alias("ExcelReportTable")]
-public sealed class AddOfficeExcelReportTableCommand : PSCmdlet
-{
+public sealed class AddOfficeExcelReportTableCommand : PSCmdlet {
     private readonly List _items = new();
 
     /// Objects to flatten and render as a table.
@@ -355,14 +354,12 @@ public sealed class AddOfficeExcelReportTableCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         TableInputCollector.AddInput(_items, InputObject, preserveTabularInput: true);
     }
 
     /// 
-    protected override void EndProcessing()
-    {
+    protected override void EndProcessing() {
         var inputRows = TableInputCollector.RequireRows(_items, nameof(InputObject));
         var normalizerOptions = PowerShellObjectNormalizerOptions.ForTable(
             CollectionSeparator,
@@ -381,8 +378,7 @@ protected override void EndProcessing()
         var requestedColumns = NormalizePropertyList(Property) ?? sourceColumns;
         var excludedProperties = NormalizePropertyList(ExcludeProperty) ?? Array.Empty();
 
-        if (!Enum.TryParse(TableStyle, ignoreCase: true, out ExcelTableStyle style))
-        {
+        if (!Enum.TryParse(TableStyle, ignoreCase: true, out ExcelTableStyle style)) {
             throw new PSArgumentException($"Unknown table style '{TableStyle}'.", nameof(TableStyle));
         }
 
@@ -390,16 +386,14 @@ protected override void EndProcessing()
         var range = composer.TableFrom(
             table,
             Title,
-            configure: options =>
-            {
+            configure: options => {
                 options.Columns = requestedColumns;
                 options.ExcludeProperties = excludedProperties;
             },
             style: style,
             autoFilter: !NoAutoFilter.IsPresent,
             freezeHeaderRow: !NoFreezeHeaderRow.IsPresent,
-            visuals: options =>
-            {
+            visuals: options => {
                 options.AutoFormatDynamicCollections = !NoAutoFormatDynamicCollections.IsPresent;
                 options.ShowFirstColumn = ExcelTableStyleOptionService.IsSwitchPresent(this, nameof(ShowFirstColumn), ShowFirstColumn);
                 options.ShowLastColumn = ExcelTableStyleOptionService.IsSwitchPresent(this, nameof(ShowLastColumn), ShowLastColumn);
@@ -407,16 +401,13 @@ protected override void EndProcessing()
                 options.ShowColumnStripes = ExcelTableStyleOptionService.IsSwitchPresent(this, nameof(ShowColumnStripes), ShowColumnStripes);
             });
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(range);
         }
     }
 
-    private static string[]? NormalizePropertyList(string[]? properties)
-    {
-        if (properties == null || properties.Length == 0)
-        {
+    private static string[]? NormalizePropertyList(string[]? properties) {
+        if (properties == null || properties.Length == 0) {
             return null;
         }
 
@@ -430,15 +421,11 @@ protected override void EndProcessing()
     }
 }
 
-internal static class ReportBlockInput
-{
-    public static IReadOnlyList<(string Label, object? Value)> ToPairs(object input)
-    {
-        if (input is IDictionary dictionary)
-        {
+internal static class ReportBlockInput {
+    public static IReadOnlyList<(string Label, object? Value)> ToPairs(object input) {
+        if (input is IDictionary dictionary) {
             var pairs = new List<(string Label, object? Value)>();
-            foreach (DictionaryEntry entry in dictionary)
-            {
+            foreach (DictionaryEntry entry in dictionary) {
                 pairs.Add((Convert.ToString(entry.Key, CultureInfo.InvariantCulture) ?? string.Empty, entry.Value));
             }
 
@@ -449,8 +436,7 @@ internal static class ReportBlockInput
             ? enumerable.Cast().Where(item => item != null).ToArray()
             : new[] { input };
 
-        return rows.Select(item =>
-        {
+        return rows.Select(item => {
             var psObject = PSObject.AsPSObject(item);
             var label = GetProperty(psObject, "Label")
                 ?? GetProperty(psObject, "Key")
@@ -463,16 +449,11 @@ internal static class ReportBlockInput
         }).ToArray();
     }
 
-    public static IReadOnlyList ToRow(object input, IReadOnlyList headers)
-    {
-        if (input is IDictionary dictionary)
-        {
-            return headers.Select(header =>
-            {
-                foreach (DictionaryEntry entry in dictionary)
-                {
-                    if (string.Equals(Convert.ToString(entry.Key, CultureInfo.InvariantCulture), header, StringComparison.OrdinalIgnoreCase))
-                    {
+    public static IReadOnlyList ToRow(object input, IReadOnlyList headers) {
+        if (input is IDictionary dictionary) {
+            return headers.Select(header => {
+                foreach (DictionaryEntry entry in dictionary) {
+                    if (string.Equals(Convert.ToString(entry.Key, CultureInfo.InvariantCulture), header, StringComparison.OrdinalIgnoreCase)) {
                         return Convert.ToString(entry.Value, CultureInfo.InvariantCulture) ?? string.Empty;
                     }
                 }
@@ -481,8 +462,7 @@ public static IReadOnlyList ToRow(object input, IReadOnlyList he
             }).ToArray();
         }
 
-        if (input is IEnumerable enumerable and not string)
-        {
+        if (input is IEnumerable enumerable and not string) {
             return enumerable.Cast()
                 .Select(value => Convert.ToString(value, CultureInfo.InvariantCulture) ?? string.Empty)
                 .ToArray();
@@ -492,21 +472,17 @@ public static IReadOnlyList ToRow(object input, IReadOnlyList he
         return headers.Select(header => Convert.ToString(GetPropertyValue(psObject, header), CultureInfo.InvariantCulture) ?? string.Empty).ToArray();
     }
 
-    public static Dictionary? ToStringMap(Hashtable? table, bool caseSensitive = false)
-    {
-        if (table == null || table.Count == 0)
-        {
+    public static Dictionary? ToStringMap(Hashtable? table, bool caseSensitive = false) {
+        if (table == null || table.Count == 0) {
             return null;
         }
 
         var comparer = caseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase;
         var result = new Dictionary(comparer);
-        foreach (DictionaryEntry entry in table)
-        {
+        foreach (DictionaryEntry entry in table) {
             var key = Convert.ToString(entry.Key, CultureInfo.InvariantCulture);
             var value = Convert.ToString(entry.Value, CultureInfo.InvariantCulture);
-            if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
-            {
+            if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value)) {
                 result[key] = value;
             }
         }
@@ -514,13 +490,11 @@ public static IReadOnlyList ToRow(object input, IReadOnlyList he
         return result;
     }
 
-    private static string? GetProperty(PSObject psObject, string name)
-    {
+    private static string? GetProperty(PSObject psObject, string name) {
         return Convert.ToString(GetPropertyValue(psObject, name), CultureInfo.InvariantCulture);
     }
 
-    private static object? GetPropertyValue(PSObject psObject, string name)
-    {
+    private static object? GetPropertyValue(PSObject psObject, string name) {
         return psObject.Properties[name]?.Value;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/ProtectOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/ProtectOfficeExcelWorkbookCommand.cs
index f0fe4d0f..136fceee 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/ProtectOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/ProtectOfficeExcelWorkbookCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsSecurity.Protect, "OfficeExcelWorkbook", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelWorkbookProtect")]
 [OutputType(typeof(ExcelDocument), typeof(FileInfo))]
-public sealed class ProtectOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class ProtectOfficeExcelWorkbookCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -53,32 +52,27 @@ public sealed class ProtectOfficeExcelWorkbookCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var protectStructure = !NoStructure.IsPresent;
-        if (!protectStructure && !ProtectWindows.IsPresent)
-        {
+        if (!protectStructure && !ProtectWindows.IsPresent) {
             throw new PSArgumentException("Use -ProtectWindows when -NoStructure is specified.");
         }
 
         var pathPassThru = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase);
         string? resolvedPath = pathPassThru
-            ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath)
+            ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)
             : null;
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
 
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-
-        {
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
 
             return;
 
         }
 
         var document = workbook.Document;
-        document.ProtectWorkbook(new ExcelWorkbookProtectionOptions
-        {
+        document.ProtectWorkbook(new ExcelWorkbookProtectionOptions {
             ProtectStructure = protectStructure,
             ProtectWindows = ProtectWindows.IsPresent,
             Password = Password,
@@ -87,9 +81,8 @@ protected override void ProcessRecord()
 
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(pathPassThru ? new FileInfo(resolvedPath!) : document);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/RepairOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/RepairOfficeExcelWorkbookCommand.cs
index 96f6bbe8..57596d48 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/RepairOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/RepairOfficeExcelWorkbookCommand.cs
@@ -20,15 +20,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsDiagnostic.Repair, "OfficeExcelWorkbook", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("ExcelWorkbookRepair", "ExcelRepair")]
 [OutputType(typeof(PSObject))]
-public sealed class RepairOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class RepairOfficeExcelWorkbookCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path to repair.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Open workbook document to repair.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -66,29 +65,24 @@ public sealed class RepairOfficeExcelWorkbookCommand : PSCmdlet
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var shouldProcessChecked = false;
-        if (ParameterSetName == ParameterSetPath)
-        {
-            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-            if (!ShouldProcess(resolvedPath, "Repair Excel workbook"))
-            {
+        if (ParameterSetName == ParameterSetPath) {
+            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+            if (!ShouldProcess(resolvedPath, "Repair Excel workbook")) {
                 return;
             }
 
             shouldProcessChecked = true;
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         if (!shouldProcessChecked &&
-            !ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Repair Excel workbook"))
-        {
+            !ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Repair Excel workbook")) {
             return;
         }
 
-        var report = workbook.Document.RepairWorkbook(new ExcelWorkbookRepairOptions
-        {
+        var report = workbook.Document.RepairWorkbook(new ExcelWorkbookRepairOptions {
             DefinedNames = !SkipDefinedNames.IsPresent,
             Tables = !SkipTables.IsPresent,
             SheetViews = !SkipSheetViews.IsPresent,
@@ -98,13 +92,11 @@ protected override void ProcessRecord()
             Save = !NoSave.IsPresent
         });
 
-        if (!NoSave.IsPresent)
-        {
+        if (!NoSave.IsPresent) {
             workbook.SaveIfOwned();
         }
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var output = new PSObject();
             output.Properties.Add(new PSNoteProperty("Path", workbook.Document.FilePath));
             output.Properties.Add(new PSNoteProperty("ActionCount", report.ActionCount));
@@ -115,8 +107,7 @@ protected override void ProcessRecord()
         }
     }
 
-    private static PSObject CreateAction(ExcelWorkbookRepairAction action)
-    {
+    private static PSObject CreateAction(ExcelWorkbookRepairAction action) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Category", action.Category));
         item.Properties.Add(new PSNoteProperty("SheetName", action.SheetName));
@@ -124,4 +115,4 @@ private static PSObject CreateAction(ExcelWorkbookRepairAction action)
         return item;
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs
index 6710c6af..27246b34 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs
@@ -1,7 +1,6 @@
 using System;
 using System.Management.Automation;
 using OfficeIMO.Excel;
-using OfficeIMO.Excel.Pdf;
 using PSWriteOffice.Services;
 using PSWriteOffice.Services.Excel;
 using PSWriteOffice.Services.Pdf;
@@ -17,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsData.Save, "OfficeExcel", SupportsShouldProcess = true)]
 [OutputType(typeof(ExcelDocument))]
-public sealed class SaveOfficeExcelCommand : PSCmdlet
-{
+public sealed class SaveOfficeExcelCommand : PSCmdlet {
     /// Workbook to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0)]
     public ExcelDocument Document { get; set; } = null!;
@@ -29,7 +27,8 @@ public sealed class SaveOfficeExcelCommand : PSCmdlet
 
     /// Open the workbook after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Password used to save the workbook as an encrypted package.
     [Parameter]
@@ -67,10 +66,6 @@ public sealed class SaveOfficeExcelCommand : PSCmdlet
     [Parameter]
     public SwitchParameter ForceFullCalculationOnOpen { get; set; }
 
-    /// Optional PDF path to create from the same workbook.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
     /// Workbook date system for Excel date serials.
     [Parameter]
     [ValidateSet("1900", "1904", "NineteenHundred", "NineteenFour")]
@@ -81,16 +76,13 @@ public sealed class SaveOfficeExcelCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Document == null)
-        {
+    protected override void ProcessRecord() {
+        if (Document == null) {
             return;
         }
 
         var associatedPath = ExcelDocumentService.GetAssociatedPath(Document);
-        if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(associatedPath))
-        {
+        if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(associatedPath)) {
             throw new PSInvalidOperationException("No file path provided. Use -Path or open the workbook from disk.");
         }
 
@@ -105,48 +97,35 @@ protected override void ProcessRecord()
             ForceFullCalculationOnOpen.IsPresent);
 
         string savedPath;
-        if (!string.IsNullOrWhiteSpace(Path))
-        {
+        if (!string.IsNullOrWhiteSpace(Path)) {
             var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
-            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Save Excel workbook"))
-            {
+            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Save Excel workbook")) {
                 return;
             }
 
             if (string.IsNullOrEmpty(Password) &&
                 ExcelDocumentService.IsEncryptedSource(Document) &&
-                string.Equals(System.IO.Path.GetFullPath(resolvedPath), System.IO.Path.GetFullPath(associatedPath!), StringComparison.OrdinalIgnoreCase))
-            {
+                string.Equals(System.IO.Path.GetFullPath(resolvedPath), System.IO.Path.GetFullPath(associatedPath!), StringComparison.OrdinalIgnoreCase)) {
                 throw new PSInvalidOperationException("Provide -Password when saving a workbook loaded from an encrypted package.");
             }
 
             ExcelDateSystemService.ApplyIfSpecified(Document, DateSystem, nameof(DateSystem));
-            if (!string.IsNullOrEmpty(Password))
-            {
+            if (!string.IsNullOrEmpty(Password)) {
                 OfficeEncryptedPackageService.SaveExcel(Document, resolvedPath, Password!, false, saveOptions);
-            }
-            else
-            {
+            } else {
                 Document.Save(resolvedPath, saveOptions);
             }
             savedPath = resolvedPath;
-        }
-        else
-        {
-            if (!PdfCommandUtilities.ShouldWrite(this, associatedPath!, "Save Excel workbook"))
-            {
+        } else {
+            if (!PdfCommandUtilities.ShouldWrite(this, associatedPath!, "Save Excel workbook")) {
                 return;
             }
 
             ExcelDateSystemService.ApplyIfSpecified(Document, DateSystem, nameof(DateSystem));
-            if (!string.IsNullOrEmpty(Password))
-            {
+            if (!string.IsNullOrEmpty(Password)) {
                 OfficeEncryptedPackageService.SaveExcel(Document, associatedPath!, Password!, false, saveOptions);
-            }
-            else
-            {
-                if (ExcelDocumentService.IsEncryptedSource(Document))
-                {
+            } else {
+                if (ExcelDocumentService.IsEncryptedSource(Document)) {
                     throw new PSInvalidOperationException("Provide -Password when saving a workbook loaded from an encrypted package.");
                 }
 
@@ -156,33 +135,13 @@ protected override void ProcessRecord()
         }
 
         ExcelDocumentService.UpdateSaveAssociation(Document, savedPath, !string.IsNullOrEmpty(Password));
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(savedPath);
         }
 
-        SavePdfIfRequested();
-
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(Document);
         }
     }
 
-    private void SavePdfIfRequested()
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write Excel PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        Document.SaveAsPdf(pdfPath).RequireSuccess();
-    }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelActiveSheetCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelActiveSheetCommand.cs
index f137523b..48183bdd 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelActiveSheetCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelActiveSheetCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelActiveSheet", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelActiveSheet")]
 [OutputType(typeof(ExcelSheet), typeof(PSObject))]
-public sealed class SetOfficeExcelActiveSheetCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelActiveSheetCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to operate on outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -48,18 +47,14 @@ public sealed class SetOfficeExcelActiveSheetCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!string.IsNullOrWhiteSpace(Sheet) && SheetIndex.HasValue)
-        {
+    protected override void ProcessRecord() {
+        if (!string.IsNullOrWhiteSpace(Sheet) && SheetIndex.HasValue) {
             throw new PSArgumentException("Specify either -Sheet or -SheetIndex, not both.");
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
 
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-
-        {
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
 
             return;
 
@@ -69,30 +64,25 @@ protected override void ProcessRecord()
         workbook.Document.SetActiveWorksheet(sheet);
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)
                 ? CreatePathRecord(workbook.Document, sheet)
                 : sheet);
         }
     }
 
-    private PSObject CreatePathRecord(ExcelDocument document, ExcelSheet sheet)
-    {
+    private PSObject CreatePathRecord(ExcelDocument document, ExcelSheet sheet) {
         var item = new PSObject();
-        item.Properties.Add(new PSNoteProperty("Path", document.FilePath ?? SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath)));
+        item.Properties.Add(new PSNoteProperty("Path", document.FilePath ?? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)));
         item.Properties.Add(new PSNoteProperty("Name", sheet.Name));
         item.Properties.Add(new PSNoteProperty("SheetName", sheet.Name));
         item.Properties.Add(new PSNoteProperty("SheetIndex", ResolveSheetIndex(document, sheet)));
         return item;
     }
 
-    private static int ResolveSheetIndex(ExcelDocument document, ExcelSheet sheet)
-    {
-        for (int i = 0; i < document.Sheets.Count; i++)
-        {
-            if (string.Equals(document.Sheets[i].Name, sheet.Name, StringComparison.OrdinalIgnoreCase))
-            {
+    private static int ResolveSheetIndex(ExcelDocument document, ExcelSheet sheet) {
+        for (int i = 0; i < document.Sheets.Count; i++) {
+            if (string.Equals(document.Sheets[i].Name, sheet.Name, StringComparison.OrdinalIgnoreCase)) {
                 return i;
             }
         }
@@ -100,24 +90,20 @@ private static int ResolveSheetIndex(ExcelDocument document, ExcelSheet sheet)
         return -1;
     }
 
-    private ExcelSheet ResolveTargetSheet(ExcelDocument document)
-    {
-        if (ParameterSetName == ParameterSetContext)
-        {
+    private ExcelSheet ResolveTargetSheet(ExcelDocument document) {
+        if (ParameterSetName == ParameterSetContext) {
             var context = ExcelDslContext.Require(this);
             return context.RequireSheet();
         }
 
-        if (!string.IsNullOrWhiteSpace(Sheet))
-        {
+        if (!string.IsNullOrWhiteSpace(Sheet)) {
             return ExcelSheetResolver.Resolve(document, Sheet, null);
         }
 
-        if (SheetIndex.HasValue)
-        {
+        if (SheetIndex.HasValue) {
             return ExcelSheetResolver.Resolve(document, null, SheetIndex);
         }
 
         throw new PSArgumentException("Specify -Sheet or -SheetIndex.");
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelCellCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelCellCommand.cs
index 2ef21f96..b0cd1838 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelCellCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelCellCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelCell")]
 [Alias("ExcelCell")]
-public sealed class SetOfficeExcelCellCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelCellCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Worksheet to modify outside a DSL context.
     [Parameter(ValueFromPipeline = true)]
     [Alias("SheetObject")]
@@ -80,8 +79,7 @@ public sealed class SetOfficeExcelCellCommand : PSCmdlet
     public double GradientDegree { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var sheet = ResolveSheet();
         var (row, column) = ExcelHostExtensions.ResolveCellAddress(Row, Column, Address);
         var hasValueChange = Value != null || Formula != null || NumberFormat != null;
@@ -89,49 +87,41 @@ protected override void ProcessRecord()
             || !string.IsNullOrWhiteSpace(GradientFrom)
             || !string.IsNullOrWhiteSpace(GradientTo);
 
-        if (!hasValueChange && !hasStyleChange)
-        {
+        if (!hasValueChange && !hasStyleChange) {
             throw new PSArgumentException("Provide -Value, -Formula, -NumberFormat, -BackgroundColor, or -GradientFrom/-GradientTo to modify the cell.");
         }
 
-        if (!string.IsNullOrWhiteSpace(GradientFrom) ^ !string.IsNullOrWhiteSpace(GradientTo))
-        {
+        if (!string.IsNullOrWhiteSpace(GradientFrom) ^ !string.IsNullOrWhiteSpace(GradientTo)) {
             throw new PSArgumentException("Specify both -GradientFrom and -GradientTo for a gradient fill.");
         }
 
-        if (hasValueChange)
-        {
+        if (hasValueChange) {
             sheet.Cell(row, column, Value, Formula, NumberFormat);
         }
 
-        if (!string.IsNullOrWhiteSpace(BackgroundColor))
-        {
+        if (!string.IsNullOrWhiteSpace(BackgroundColor)) {
             sheet.CellBackground(row, column, BackgroundColor!);
         }
 
-        if (!string.IsNullOrWhiteSpace(GradientFrom) && !string.IsNullOrWhiteSpace(GradientTo))
-        {
+        if (!string.IsNullOrWhiteSpace(GradientFrom) && !string.IsNullOrWhiteSpace(GradientTo)) {
             sheet.CellGradientBackground(row, column, GradientFrom!, GradientTo!, GradientDegree);
         }
+        WritePassThru(sheet);
     }
 
-    private ExcelSheet ResolveSheet()
-    {
-        if (Worksheet != null && Document != null)
-        {
+    private ExcelSheet ResolveSheet() {
+        if (Worksheet != null && Document != null) {
             throw new PSArgumentException("Use either -Worksheet or -Document, not both.");
         }
 
-        if (Worksheet != null)
-        {
+        if (Worksheet != null) {
             return Worksheet;
         }
 
-        if (Document != null)
-        {
+        if (Document != null) {
             return ExcelSheetResolver.Resolve(Document, Sheet, SheetIndex);
         }
 
         return ExcelDslContext.Require(this).RequireSheet();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartAxisCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartAxisCommand.cs
index 2ca86097..fff58cd8 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartAxisCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartAxisCommand.cs
@@ -23,8 +23,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartAxis")]
 [Alias("ExcelChartAxis")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartAxisCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartAxisCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Chart to update.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public ExcelChart Chart { get; set; } = null!;
@@ -114,41 +113,33 @@ public sealed class SetOfficeExcelChartAxisCommand : PSCmdlet
     public double? GridlineWidthPoints { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var categoryTitle = CategoryTitle;
-            if (!string.IsNullOrWhiteSpace(categoryTitle))
-            {
+            if (!string.IsNullOrWhiteSpace(categoryTitle)) {
                 Chart.SetCategoryAxisTitle(categoryTitle!, AxisGroup);
             }
 
             var valueTitle = ValueTitle;
-            if (!string.IsNullOrWhiteSpace(valueTitle))
-            {
+            if (!string.IsNullOrWhiteSpace(valueTitle)) {
                 Chart.SetValueAxisTitle(valueTitle!, AxisGroup);
             }
 
             var categoryNumberFormat = CategoryNumberFormat;
-            if (!string.IsNullOrWhiteSpace(categoryNumberFormat))
-            {
+            if (!string.IsNullOrWhiteSpace(categoryNumberFormat)) {
                 Chart.SetCategoryAxisNumberFormat(categoryNumberFormat!, SourceLinked, AxisGroup);
             }
 
             var valueNumberFormat = ValueNumberFormat;
-            if (!string.IsNullOrWhiteSpace(valueNumberFormat))
-            {
+            if (!string.IsNullOrWhiteSpace(valueNumberFormat)) {
                 Chart.SetValueAxisNumberFormat(valueNumberFormat!, SourceLinked, AxisGroup);
             }
 
-            if (ValueMinimum.HasValue || ValueMaximum.HasValue || ValueMajorUnit.HasValue || ValueMinorUnit.HasValue)
-            {
+            if (ValueMinimum.HasValue || ValueMaximum.HasValue || ValueMajorUnit.HasValue || ValueMinorUnit.HasValue) {
                 Chart.SetValueAxisScale(ValueMinimum, ValueMaximum, ValueMajorUnit, ValueMinorUnit, axisGroup: AxisGroup);
             }
 
-            if (CategoryMinimum.HasValue || CategoryMaximum.HasValue || CategoryMajorUnit.HasValue || CategoryMinorUnit.HasValue)
-            {
+            if (CategoryMinimum.HasValue || CategoryMaximum.HasValue || CategoryMajorUnit.HasValue || CategoryMinorUnit.HasValue) {
                 Chart.SetCategoryAxisScale(CategoryMinimum, CategoryMaximum, CategoryMajorUnit, CategoryMinorUnit, axisGroup: AxisGroup);
             }
 
@@ -165,8 +156,7 @@ protected override void ProcessRecord()
 
             bool categoryStyleRequested = !string.IsNullOrWhiteSpace(categoryGridlineColor) ||
                 (GridlineWidthPoints.HasValue && (categoryGridlinesRequested || widthOnlyRequest));
-            if (categoryGridlinesRequested || widthOnlyRequest)
-            {
+            if (categoryGridlinesRequested || widthOnlyRequest) {
                 bool showMajor = ShowCategoryMajorGridlines.IsPresent || ShowCategoryMinorGridlines.IsPresent || categoryStyleRequested;
                 Chart.SetCategoryAxisGridlines(showMajor,
                     ShowCategoryMinorGridlines.IsPresent, categoryGridlineColor, GridlineWidthPoints, AxisGroup);
@@ -174,18 +164,15 @@ protected override void ProcessRecord()
 
             bool valueStyleRequested = !string.IsNullOrWhiteSpace(valueGridlineColor) ||
                 (GridlineWidthPoints.HasValue && (valueGridlinesRequested || widthOnlyRequest));
-            if (valueGridlinesRequested || widthOnlyRequest)
-            {
+            if (valueGridlinesRequested || widthOnlyRequest) {
                 bool showMajor = ShowValueMajorGridlines.IsPresent || ShowValueMinorGridlines.IsPresent || valueStyleRequested;
                 Chart.SetValueAxisGridlines(showMajor,
                     ShowValueMinorGridlines.IsPresent, valueGridlineColor, GridlineWidthPoints, AxisGroup);
             }
 
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartAxisFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartDataLabelsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartDataLabelsCommand.cs
index 5bf4d8c4..9bcec32d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartDataLabelsCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartDataLabelsCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartDataLabels")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartDataLabelsCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartDataLabelsCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Chart to update.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public ExcelChart Chart { get; set; } = null!;
@@ -95,36 +94,28 @@ public sealed class SetOfficeExcelChartDataLabelsCommand : PSCmdlet
     public SwitchParameter NoLine { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             Chart.SetDataLabels(ShowValue, ShowCategoryName, ShowSeriesName, ShowLegendKey, ShowPercent, ResolveDataLabelPosition(Position), NumberFormat, SourceLinked);
 
             if (FontSizePoints.HasValue || Bold.HasValue || Italic.HasValue ||
-                !string.IsNullOrWhiteSpace(Color) || !string.IsNullOrWhiteSpace(FontName))
-            {
+                !string.IsNullOrWhiteSpace(Color) || !string.IsNullOrWhiteSpace(FontName)) {
                 Chart.SetDataLabelTextStyle(FontSizePoints, Bold, Italic, Color, FontName);
             }
 
             if (!string.IsNullOrWhiteSpace(FillColor) || !string.IsNullOrWhiteSpace(LineColor) ||
-                LineWidthPoints.HasValue || NoFill.IsPresent || NoLine.IsPresent)
-            {
+                LineWidthPoints.HasValue || NoFill.IsPresent || NoLine.IsPresent) {
                 Chart.SetDataLabelShapeStyle(FillColor, LineColor, LineWidthPoints, NoFill.IsPresent, NoLine.IsPresent);
             }
 
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartDataLabelsFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
 
-    private static OfficeChartDataLabelPosition? ResolveDataLabelPosition(string? value)
-    {
-        return value switch
-        {
+    private static OfficeChartDataLabelPosition? ResolveDataLabelPosition(string? value) {
+        return value switch {
             null => null,
             "BestFit" => OfficeChartDataLabelPosition.BestFit,
             "Bottom" => OfficeChartDataLabelPosition.Bottom,
@@ -138,4 +129,4 @@ protected override void ProcessRecord()
             _ => throw new PSArgumentException($"Unsupported data label position '{value}'.")
         };
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartLegendCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartLegendCommand.cs
index 4e6d006c..1ee9a2d4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartLegendCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartLegendCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartLegend")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartLegendCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartLegendCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Chart to update.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public ExcelChart Chart { get; set; } = null!;
@@ -55,37 +54,27 @@ public sealed class SetOfficeExcelChartLegendCommand : PSCmdlet
     public string? FontName { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (Hide.IsPresent)
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (Hide.IsPresent) {
                 Chart.HideLegend();
-            }
-            else
-            {
+            } else {
                 Chart.SetLegend(ResolveLegendPosition(Position), Overlay);
             }
 
             if (FontSizePoints.HasValue || Bold.HasValue || Italic.HasValue ||
-                !string.IsNullOrWhiteSpace(Color) || !string.IsNullOrWhiteSpace(FontName))
-            {
+                !string.IsNullOrWhiteSpace(Color) || !string.IsNullOrWhiteSpace(FontName)) {
                 Chart.SetLegendTextStyle(FontSizePoints, Bold, Italic, Color, FontName);
             }
 
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartLegendFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
 
-    private static OfficeChartLegendPosition ResolveLegendPosition(string value)
-    {
-        return value switch
-        {
+    private static OfficeChartLegendPosition ResolveLegendPosition(string value) {
+        return value switch {
             "Bottom" => OfficeChartLegendPosition.Bottom,
             "Left" => OfficeChartLegendPosition.Left,
             "Right" => OfficeChartLegendPosition.Right,
@@ -94,4 +83,4 @@ private static OfficeChartLegendPosition ResolveLegendPosition(string value)
             _ => throw new PSArgumentException($"Unsupported legend position '{value}'.")
         };
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartPointCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartPointCommand.cs
index 7ecf9d5b..20dcbe83 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartPointCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartPointCommand.cs
@@ -14,8 +14,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartPoint", DefaultParameterSetName = ParameterSetIndex)]
 [Alias("ExcelChartPoint")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartPointCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartPointCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetIndex = "Index";
     private const string ParameterSetSeriesName = "Name";
 
@@ -52,35 +51,26 @@ public sealed class SetOfficeExcelChartPointCommand : PSCmdlet
     public double? LineWidthPoints { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             bool hasFill = !string.IsNullOrWhiteSpace(FillColor);
             bool hasLine = !string.IsNullOrWhiteSpace(LineColor);
-            if (!hasFill && !hasLine && !LineWidthPoints.HasValue)
-            {
+            if (!hasFill && !hasLine && !LineWidthPoints.HasValue) {
                 throw new PSArgumentException("Specify FillColor, LineColor, or LineWidthPoints to style the chart point.");
             }
-            if (LineWidthPoints.HasValue && !hasLine)
-            {
+            if (LineWidthPoints.HasValue && !hasLine) {
                 throw new PSArgumentException("LineColor is required when LineWidthPoints is used.");
             }
 
-            if (ParameterSetName == ParameterSetSeriesName)
-            {
+            if (ParameterSetName == ParameterSetSeriesName) {
                 Chart.SetDataPointColor(SeriesName, PointIndex, FillColor, LineColor, LineWidthPoints, IgnoreCase);
-            }
-            else
-            {
+            } else {
                 Chart.SetDataPointColor(SeriesIndex, PointIndex, FillColor, LineColor, LineWidthPoints);
             }
 
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartPointFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartSeriesCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartSeriesCommand.cs
index 6ee342a1..911d44d2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartSeriesCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartSeriesCommand.cs
@@ -17,8 +17,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartSeries", DefaultParameterSetName = ParameterSetIndex)]
 [Alias("ExcelChartSeries")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartSeriesCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartSeriesCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetIndex = "Index";
     private const string ParameterSetSeriesName = "Name";
 
@@ -71,37 +70,26 @@ public sealed class SetOfficeExcelChartSeriesCommand : PSCmdlet
     public double? MarkerLineWidthPoints { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var fillColor = FillColor;
-            if (!string.IsNullOrWhiteSpace(fillColor))
-            {
-                if (ParameterSetName == ParameterSetSeriesName)
-                {
+            if (!string.IsNullOrWhiteSpace(fillColor)) {
+                if (ParameterSetName == ParameterSetSeriesName) {
                     Chart.SetSeriesFillColor(SeriesName, fillColor!, IgnoreCase);
-                }
-                else
-                {
+                } else {
                     Chart.SetSeriesFillColor(SeriesIndex, fillColor!);
                 }
             }
 
             var lineColor = LineColor;
-            if (!string.IsNullOrWhiteSpace(lineColor) || LineWidthPoints.HasValue)
-            {
-                if (string.IsNullOrWhiteSpace(lineColor))
-                {
+            if (!string.IsNullOrWhiteSpace(lineColor) || LineWidthPoints.HasValue) {
+                if (string.IsNullOrWhiteSpace(lineColor)) {
                     throw new PSArgumentException("LineColor is required when LineWidthPoints is used because the current OfficeIMO chart API applies series line width together with a line color.");
                 }
 
-                if (ParameterSetName == ParameterSetSeriesName)
-                {
+                if (ParameterSetName == ParameterSetSeriesName) {
                     Chart.SetSeriesLineColor(SeriesName, lineColor!, LineWidthPoints, IgnoreCase);
-                }
-                else
-                {
+                } else {
                     Chart.SetSeriesLineColor(SeriesIndex, lineColor!, LineWidthPoints);
                 }
             }
@@ -109,28 +97,21 @@ protected override void ProcessRecord()
             var markerStyleName = string.IsNullOrWhiteSpace(MarkerStyle) ? "Circle" : MarkerStyle!;
             bool markerRequested = !string.IsNullOrWhiteSpace(MarkerStyle) || MarkerSize.HasValue ||
                 !string.IsNullOrWhiteSpace(MarkerFillColor) || !string.IsNullOrWhiteSpace(MarkerLineColor) || MarkerLineWidthPoints.HasValue;
-            if (markerRequested)
-            {
-                if (!OpenXmlValueParser.TryParse(markerStyleName, out OfficeChartMarkerShape markerStyle))
-                {
+            if (markerRequested) {
+                if (!OpenXmlValueParser.TryParse(markerStyleName, out OfficeChartMarkerShape markerStyle)) {
                     throw new PSArgumentException($"Unknown MarkerStyle '{MarkerStyle}'.");
                 }
 
-                if (ParameterSetName == ParameterSetSeriesName)
-                {
+                if (ParameterSetName == ParameterSetSeriesName) {
                     Chart.SetSeriesMarker(SeriesName, markerStyle, MarkerSize, MarkerFillColor, MarkerLineColor, MarkerLineWidthPoints, IgnoreCase);
-                }
-                else
-                {
+                } else {
                     Chart.SetSeriesMarker(SeriesIndex, markerStyle, MarkerSize, MarkerFillColor, MarkerLineColor, MarkerLineWidthPoints);
                 }
             }
 
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartSeriesFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartStyleCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartStyleCommand.cs
index 2eb88fb9..fc423aee 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartStyleCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartStyleCommand.cs
@@ -13,8 +13,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartStyle")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartStyleCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartStyleCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Chart to update.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public ExcelChart Chart { get; set; } = null!;
@@ -28,16 +27,12 @@ public sealed class SetOfficeExcelChartStyleCommand : PSCmdlet
     public int ColorStyleId { get; set; } = 10;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             Chart.ApplyStylePreset(StyleId, ColorStyleId);
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartStyleFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartTrendlineCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartTrendlineCommand.cs
index f4e6f840..2c38713e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartTrendlineCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelChartTrendlineCommand.cs
@@ -17,8 +17,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelChartTrendline", DefaultParameterSetName = ParameterSetIndex)]
 [Alias("ExcelChartTrendline")]
 [OutputType(typeof(ExcelChart))]
-public sealed class SetOfficeExcelChartTrendlineCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelChartTrendlineCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetIndex = "Index";
     private const string ParameterSetSeriesName = "Name";
 
@@ -79,29 +78,21 @@ public sealed class SetOfficeExcelChartTrendlineCommand : PSCmdlet
     public double? LineWidthPoints { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (!OpenXmlValueParser.TryParse(Type, out OfficeChartTrendlineType trendlineType))
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (!OpenXmlValueParser.TryParse(Type, out OfficeChartTrendlineType trendlineType)) {
                 throw new PSArgumentException($"Unknown trendline type '{Type}'.");
             }
 
-            if (ParameterSetName == ParameterSetSeriesName)
-            {
+            if (ParameterSetName == ParameterSetSeriesName) {
                 Chart.SetSeriesTrendline(SeriesName, trendlineType, Order, Period, Forward, Backward, Intercept, DisplayEquation.IsPresent, DisplayRSquared.IsPresent, LineColor, LineWidthPoints, IgnoreCase);
-            }
-            else
-            {
+            } else {
                 Chart.SetSeriesTrendline(SeriesIndex, trendlineType, Order, Period, Forward, Backward, Intercept, DisplayEquation.IsPresent, DisplayRSquared.IsPresent, LineColor, LineWidthPoints);
             }
 
-            WriteObject(Chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(Chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "ExcelChartTrendlineFailed", ErrorCategory.InvalidOperation, Chart));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnCommand.cs
index 63862e06..f53b0b7d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelColumn")]
 [Alias("ExcelColumn")]
-public sealed class SetOfficeExcelColumnCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelColumnCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// 1-based column index.
     [Parameter(Position = 0)]
     public int? Column { get; set; }
@@ -47,29 +46,24 @@ public sealed class SetOfficeExcelColumnCommand : PSCmdlet
     public SwitchParameter AutoFit { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = ExcelDslContext.Require(this);
         var sheet = context.RequireSheet();
 
         var columnIndex = ExcelHostExtensions.ResolveColumnIndex(Column, ColumnName);
-        if (columnIndex < 1)
-        {
+        if (columnIndex < 1) {
             throw new ArgumentOutOfRangeException(nameof(Column), "Column index must be 1 or greater.");
         }
 
         var hasAction = false;
 
-        if (Values != null && Values.Length > 0)
-        {
-            if (StartRow < 1)
-            {
+        if (Values != null && Values.Length > 0) {
+            if (StartRow < 1) {
                 throw new ArgumentOutOfRangeException(nameof(StartRow), "StartRow must be 1 or greater.");
             }
 
             var cells = new List<(int Row, int Column, object Value)>(Values.Length);
-            for (int i = 0; i < Values.Length; i++)
-            {
+            for (int i = 0; i < Values.Length; i++) {
                 var value = Values[i] ?? string.Empty;
                 cells.Add((StartRow + i, columnIndex, value));
             }
@@ -77,27 +71,24 @@ protected override void ProcessRecord()
             hasAction = true;
         }
 
-        if (Width.HasValue)
-        {
+        if (Width.HasValue) {
             sheet.SetColumnWidth(columnIndex, Width.Value);
             hasAction = true;
         }
 
-        if (Hidden.HasValue)
-        {
+        if (Hidden.HasValue) {
             sheet.SetColumnHidden(columnIndex, Hidden.Value);
             hasAction = true;
         }
 
-        if (AutoFit.IsPresent)
-        {
+        if (AutoFit.IsPresent) {
             sheet.AutoFitColumn(columnIndex);
             hasAction = true;
         }
 
-        if (!hasAction)
-        {
+        if (!hasAction) {
             throw new PSArgumentException("Provide -Values, -Width, -Hidden, or -AutoFit to update the column.");
         }
+        WritePassThru(sheet);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnGroupCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnGroupCommand.cs
index aa1f5223..e257534c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnGroupCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnGroupCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelColumnGroup")]
 [Alias("ExcelColumnGroup")]
-public sealed class SetOfficeExcelColumnGroupCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelColumnGroupCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// First 1-based column in the group.
     [Parameter(Position = 0)]
     [Alias("Column")]
@@ -61,8 +60,7 @@ public sealed class SetOfficeExcelColumnGroupCommand : PSCmdlet
     public bool? SummaryRight { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = ExcelDslContext.Require(this);
         var sheet = context.RequireSheet();
 
@@ -71,58 +69,45 @@ protected override void ProcessRecord()
             ? ResolveColumn(EndColumn, EndColumnName, nameof(EndColumn))
             : startColumn;
 
-        if (OutlineLevel < 1 || OutlineLevel > 7)
-        {
+        if (OutlineLevel < 1 || OutlineLevel > 7) {
             throw new PSArgumentOutOfRangeException(nameof(OutlineLevel), OutlineLevel, "Excel outline level must be between 1 and 7.");
         }
 
-        if (SummaryRight.HasValue)
-        {
+        if (SummaryRight.HasValue) {
             sheet.SetOutlineSummary(summaryRight: SummaryRight.Value);
         }
 
-        if (Clear.IsPresent)
-        {
+        if (Clear.IsPresent) {
             sheet.ClearColumnGroup(startColumn, endColumn, unhide: !KeepHidden.IsPresent);
+            WritePassThru(sheet);
             return;
         }
 
         sheet.GroupColumns(startColumn, endColumn, (byte)OutlineLevel, Collapsed.IsPresent, Hidden.IsPresent);
+        WritePassThru(sheet);
     }
 
-    private static int ResolveColumn(object? indexOrName, string? name, string parameterName)
-    {
+    private static int ResolveColumn(object? indexOrName, string? name, string parameterName) {
         int? index = null;
         string? columnName = name;
 
-        if (indexOrName is int intValue)
-        {
+        if (indexOrName is int intValue) {
             index = intValue;
-        }
-        else if (indexOrName is long longValue)
-        {
+        } else if (indexOrName is long longValue) {
             index = checked((int)longValue);
-        }
-        else if (indexOrName != null)
-        {
+        } else if (indexOrName != null) {
             var text = Convert.ToString(indexOrName, CultureInfo.InvariantCulture);
-            if (int.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out int parsed))
-            {
+            if (int.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out int parsed)) {
                 index = parsed;
-            }
-            else
-            {
+            } else {
                 columnName = text;
             }
         }
 
-        try
-        {
+        try {
             return ExcelHostExtensions.ResolveColumnIndex(index, columnName);
-        }
-        catch (Exception exception) when (exception is ArgumentException or FormatException)
-        {
+        } catch (Exception exception) when (exception is ArgumentException or FormatException) {
             throw new PSArgumentException(exception.Message, parameterName);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnStyleByHeaderCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnStyleByHeaderCommand.cs
index 542687a8..578dff77 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnStyleByHeaderCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelColumnStyleByHeaderCommand.cs
@@ -21,8 +21,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelColumnStyleByHeader", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelColumnStyleByHeader", "ExcelColumnStyle")]
-public sealed class SetOfficeExcelColumnStyleByHeaderCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelColumnStyleByHeaderCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
 
@@ -113,15 +112,12 @@ public sealed class SetOfficeExcelColumnStyleByHeaderCommand : PSCmdlet
     public SwitchParameter IgnoreMissing { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (string.IsNullOrWhiteSpace(Header))
-        {
+    protected override void ProcessRecord() {
+        if (string.IsNullOrWhiteSpace(Header)) {
             throw new PSArgumentException("Header cannot be empty.", nameof(Header));
         }
 
-        if (Decimals < 0)
-        {
+        if (Decimals < 0) {
             throw new ArgumentOutOfRangeException(nameof(Decimals), "Decimals must be zero or greater.");
         }
 
@@ -139,10 +135,8 @@ protected override void ProcessRecord()
             IncludeHeader.IsPresent,
             out var builder,
             out var columnIndex,
-            preferDirectTabularMetadata: !requiresCellMaterialization))
-        {
-            if (IgnoreMissing.IsPresent)
-            {
+            preferDirectTabularMetadata: !requiresCellMaterialization)) {
+            if (IgnoreMissing.IsPresent) {
                 return;
             }
 
@@ -151,39 +145,31 @@ protected override void ProcessRecord()
 
         var hasAction = false;
 
-        if (!string.IsNullOrWhiteSpace(Style))
-        {
+        if (!string.IsNullOrWhiteSpace(Style)) {
             ApplyPreset(builder, Style!);
             hasAction = true;
-        }
-        else if (!string.IsNullOrWhiteSpace(NumberFormat))
-        {
+        } else if (!string.IsNullOrWhiteSpace(NumberFormat)) {
             builder.NumberFormat(NumberFormat!);
             hasAction = true;
         }
 
-        if (Bold.IsPresent)
-        {
+        if (Bold.IsPresent) {
             builder.Bold();
             hasAction = true;
         }
 
-        if (!string.IsNullOrWhiteSpace(BackgroundColor))
-        {
+        if (!string.IsNullOrWhiteSpace(BackgroundColor)) {
             builder.Background(BackgroundColor!);
             hasAction = true;
         }
 
-        if (!string.IsNullOrWhiteSpace(FontColor))
-        {
+        if (!string.IsNullOrWhiteSpace(FontColor)) {
             builder.FontColor(FontColor!);
             hasAction = true;
         }
 
-        if (!string.IsNullOrWhiteSpace(Alignment))
-        {
-            switch (Alignment)
-            {
+        if (!string.IsNullOrWhiteSpace(Alignment)) {
+            switch (Alignment) {
                 case "Left":
                     builder.AlignLeft();
                     break;
@@ -197,49 +183,41 @@ protected override void ProcessRecord()
             hasAction = true;
         }
 
-        if (BackgroundByText != null && BackgroundByText.Count > 0)
-        {
+        if (BackgroundByText != null && BackgroundByText.Count > 0) {
             builder.BackgroundByTextMap(ToStringMap(BackgroundByText, CaseSensitive.IsPresent), !CaseSensitive.IsPresent);
             hasAction = true;
         }
 
-        if (FontColorByText != null && FontColorByText.Count > 0)
-        {
+        if (FontColorByText != null && FontColorByText.Count > 0) {
             builder.FontColorByTextMap(ToStringMap(FontColorByText, CaseSensitive.IsPresent), !CaseSensitive.IsPresent);
             hasAction = true;
         }
 
-        if (BoldByText != null && BoldByText.Length > 0)
-        {
+        if (BoldByText != null && BoldByText.Length > 0) {
             var comparer = CaseSensitive.IsPresent ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase;
             builder.BoldByTextSet(new HashSet(BoldByText, comparer), !CaseSensitive.IsPresent);
             hasAction = true;
         }
 
-        if (Width.HasValue)
-        {
+        if (Width.HasValue) {
             sheet.SetColumnWidth(columnIndex, Width.Value);
             hasAction = true;
         }
 
-        if (AutoFit.IsPresent)
-        {
+        if (AutoFit.IsPresent) {
             sheet.AutoFitColumn(columnIndex);
             hasAction = true;
         }
 
-        if (!hasAction)
-        {
+        if (!hasAction) {
             throw new PSArgumentException("Provide a style, color, width, AutoFit, or text map option to update the column.");
         }
+        WritePassThru(sheet);
     }
 
-    private ExcelSheet ResolveSheet()
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
-            if (Document == null)
-            {
+    private ExcelSheet ResolveSheet() {
+        if (ParameterSetName == ParameterSetDocument) {
+            if (Document == null) {
                 throw new PSArgumentException("Provide an Excel document.");
             }
 
@@ -249,10 +227,8 @@ private ExcelSheet ResolveSheet()
         return ExcelDslContext.Require(this).RequireSheet();
     }
 
-    private void ApplyPreset(ExcelColumnStyleByHeaderBuilder builder, string style)
-    {
-        switch (style)
-        {
+    private void ApplyPreset(ExcelColumnStyleByHeaderBuilder builder, string style) {
+        switch (style) {
             case "Number":
                 builder.Number(Decimals);
                 break;
@@ -281,8 +257,7 @@ private void ApplyPreset(ExcelColumnStyleByHeaderBuilder builder, string style)
                 builder.Text();
                 break;
             case "NumberFormat":
-                if (string.IsNullOrWhiteSpace(NumberFormat))
-                {
+                if (string.IsNullOrWhiteSpace(NumberFormat)) {
                     throw new PSArgumentException("Provide -NumberFormat when -Style NumberFormat is used.", nameof(NumberFormat));
                 }
                 builder.NumberFormat(NumberFormat!);
@@ -290,30 +265,25 @@ private void ApplyPreset(ExcelColumnStyleByHeaderBuilder builder, string style)
         }
     }
 
-    private CultureInfo? ResolveCulture()
-    {
-        if (string.IsNullOrWhiteSpace(CultureName))
-        {
+    private CultureInfo? ResolveCulture() {
+        if (string.IsNullOrWhiteSpace(CultureName)) {
             return null;
         }
 
         return CultureInfo.GetCultureInfo(CultureName!);
     }
 
-    private static Dictionary ToStringMap(Hashtable table, bool caseSensitive)
-    {
+    private static Dictionary ToStringMap(Hashtable table, bool caseSensitive) {
         var comparer = caseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase;
         var result = new Dictionary(comparer);
-        foreach (DictionaryEntry entry in table)
-        {
+        foreach (DictionaryEntry entry in table) {
             var key = Convert.ToString(entry.Key, CultureInfo.InvariantCulture);
             var value = Convert.ToString(entry.Value, CultureInfo.InvariantCulture);
-            if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
-            {
+            if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value)) {
                 result[key] = value;
             }
         }
 
         return result;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelDataValidationMessageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelDataValidationMessageCommand.cs
index d6d31307..10e1de49 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelDataValidationMessageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelDataValidationMessageCommand.cs
@@ -19,16 +19,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelDataValidationMessage", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Low, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelDataValidationMessage")]
 [OutputType(typeof(PSObject))]
-public sealed class SetOfficeExcelDataValidationMessageCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelDataValidationMessageCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -93,19 +92,16 @@ public sealed class SetOfficeExcelDataValidationMessageCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!HasMessageOption())
-        {
+    protected override void ProcessRecord() {
+        if (!HasMessageOption()) {
             throw new PSArgumentException("Specify at least one prompt, error, or display option.");
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, workbook.Document, ParameterSetName, Sheet, SheetIndex);
         string targetRange = ExcelTargetRangeResolver.Resolve(sheet, Range, HeaderName, TableName, HeaderRow, IncludeHeader.IsPresent);
         var target = $"{sheet.Name}!{targetRange}";
-        if (!ShouldProcess(target, "Set Excel data validation messages"))
-        {
+        if (!ShouldProcess(target, "Set Excel data validation messages")) {
             return;
         }
 
@@ -119,8 +115,7 @@ protected override void ProcessRecord()
         bool? boundShowErrorMessage = ResolveBoundDisplayFlag(nameof(ShowErrorMessage), ShowErrorMessage);
         bool showInputMessage = boundShowInputMessage ?? HasMessageText(promptTitle, prompt);
         bool showErrorMessage = boundShowErrorMessage ?? HasMessageText(errorTitle, errorMessage);
-        SetDataValidationMessages(sheet, targetRange, new ExcelDataValidationMessageOptions
-        {
+        SetDataValidationMessages(sheet, targetRange, new ExcelDataValidationMessageOptions {
             PromptTitle = promptTitle,
             Prompt = prompt,
             ErrorTitle = errorTitle,
@@ -144,20 +139,17 @@ protected override void ProcessRecord()
 
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var path = string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)
-                ? InputPath
+                ? Path
                 : null;
-            foreach (var validation in GetDataValidations(sheet, targetRange).Select(validation => ExcelRuleRecordService.CreateDataValidationRecord(validation, sheet.Name, path)))
-            {
+            foreach (var validation in GetDataValidations(sheet, targetRange).Select(validation => ExcelRuleRecordService.CreateDataValidationRecord(validation, sheet.Name, path))) {
                 WriteObject(validation);
             }
         }
     }
 
-    private bool HasMessageOption()
-    {
+    private bool HasMessageOption() {
         return MyInvocation.BoundParameters.ContainsKey(nameof(PromptTitle))
             || MyInvocation.BoundParameters.ContainsKey(nameof(Prompt))
             || MyInvocation.BoundParameters.ContainsKey(nameof(ErrorTitle))
@@ -166,13 +158,11 @@ private bool HasMessageOption()
             || MyInvocation.BoundParameters.ContainsKey(nameof(ShowErrorMessage));
     }
 
-    private string? ResolveMessageValue(string parameterName, string? value, string? existing)
-    {
+    private string? ResolveMessageValue(string parameterName, string? value, string? existing) {
         return MyInvocation.BoundParameters.ContainsKey(parameterName) ? value : existing;
     }
 
-    private bool? ResolveBoundDisplayFlag(string parameterName, SwitchParameter value)
-    {
+    private bool? ResolveBoundDisplayFlag(string parameterName, SwitchParameter value) {
         return MyInvocation.BoundParameters.ContainsKey(parameterName)
             ? value.IsPresent
             : null;
@@ -184,18 +174,13 @@ private static bool HasMessageText(string? title, string? message)
     private static ExcelDataValidationInfo? GetFirstDataValidation(ExcelSheet sheet, string targetRange)
         => GetDataValidations(sheet, targetRange).FirstOrDefault();
 
-    private static IReadOnlyList GetDataValidations(ExcelSheet sheet, string targetRange)
-    {
-        try
-        {
+    private static IReadOnlyList GetDataValidations(ExcelSheet sheet, string targetRange) {
+        try {
             var filtered = sheet.GetDataValidations(targetRange);
-            if (filtered.Count > 0)
-            {
+            if (filtered.Count > 0) {
                 return filtered;
             }
-        }
-        catch (ArgumentException)
-        {
+        } catch (ArgumentException) {
         }
 
         return sheet.GetDataValidations()
@@ -203,18 +188,13 @@ private static IReadOnlyList GetDataValidations(ExcelSh
             .ToArray();
     }
 
-    private static void SetDataValidationMessages(ExcelSheet sheet, string targetRange, ExcelDataValidationMessageOptions options)
-    {
-        try
-        {
+    private static void SetDataValidationMessages(ExcelSheet sheet, string targetRange, ExcelDataValidationMessageOptions options) {
+        try {
             sheet.SetDataValidationMessages(targetRange, options);
-        }
-        catch (ArgumentException)
-        {
-            if (!GetDataValidations(sheet, targetRange).Any())
-            {
+        } catch (ArgumentException) {
+            if (!GetDataValidations(sheet, targetRange).Any()) {
                 throw;
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFormulaCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFormulaCommand.cs
index 9cac4203..b99907de 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFormulaCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFormulaCommand.cs
@@ -14,8 +14,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelFormula")]
 [Alias("ExcelFormula")]
-public sealed class SetOfficeExcelFormulaCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelFormulaCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// 1-based row index.
     [Parameter(ParameterSetName = "Coordinates")]
     public int? Row { get; set; }
@@ -33,11 +32,11 @@ public sealed class SetOfficeExcelFormulaCommand : PSCmdlet
     public string Formula { get; set; } = string.Empty;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = ExcelDslContext.Require(this);
         var sheet = context.RequireSheet();
         var (row, column) = ExcelHostExtensions.ResolveCellAddress(Row, Column, Address);
         sheet.Cell(row, column, value: null, formula: Formula, numberFormat: null);
+        WritePassThru(sheet);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFreezeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFreezeCommand.cs
index 5b9b4fa8..4ad27057 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFreezeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelFreezeCommand.cs
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelFreeze", DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelFreeze")]
-public sealed class SetOfficeExcelFreezeCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelFreezeCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
 
@@ -44,28 +43,23 @@ public sealed class SetOfficeExcelFreezeCommand : PSCmdlet
     public int LeftColumns { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (TopRows < 0 || LeftColumns < 0)
-        {
+    protected override void ProcessRecord() {
+        if (TopRows < 0 || LeftColumns < 0) {
             throw new PSArgumentException("TopRows and LeftColumns must be zero or greater.");
         }
 
-        if (TopRows == 0 && LeftColumns == 0)
-        {
+        if (TopRows == 0 && LeftColumns == 0) {
             throw new PSArgumentException("Specify TopRows and/or LeftColumns to freeze.");
         }
 
         var sheet = ResolveSheet();
         sheet.Freeze(TopRows, LeftColumns);
+        WritePassThru(sheet);
     }
 
-    private ExcelSheet ResolveSheet()
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
-            if (Document == null)
-            {
+    private ExcelSheet ResolveSheet() {
+        if (ParameterSetName == ParameterSetDocument) {
+            if (Document == null) {
                 throw new PSArgumentException("Provide an Excel document.");
             }
 
@@ -75,4 +69,4 @@ private ExcelSheet ResolveSheet()
         var context = ExcelDslContext.Require(this);
         return context.RequireSheet();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintAreaCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintAreaCommand.cs
index a8a35d4b..dc0cc5bc 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintAreaCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintAreaCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelPrintArea", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelPrintArea")]
-public sealed class SetOfficeExcelPrintAreaCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelPrintAreaCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -50,11 +49,9 @@ public sealed class SetOfficeExcelPrintAreaCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -63,9 +60,8 @@ protected override void ProcessRecord()
         document.SetPrintArea(sheet, Range, save: false);
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(sheet);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintLayoutCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintLayoutCommand.cs
index 43c57f65..0e107bba 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintLayoutCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintLayoutCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelPrintLayout", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelPrintLayout")]
 [OutputType(typeof(ExcelSheet), typeof(PSObject))]
-public sealed class SetOfficeExcelPrintLayoutCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelPrintLayoutCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -97,18 +96,15 @@ public sealed class SetOfficeExcelPrintLayoutCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
         var document = workbook.Document;
         var sheet = ExcelWorkbookCommandService.ResolveSheet(this, document, ParameterSetName, Sheet, SheetIndex);
-        sheet.ApplyPrintLayout(new ExcelPrintLayoutOptions
-        {
+        sheet.ApplyPrintLayout(new ExcelPrintLayoutOptions {
             Preset = Preset,
             PrintArea = PrintArea,
             Orientation = Orientation,
@@ -126,18 +122,16 @@ protected override void ProcessRecord()
 
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(string.Equals(ParameterSetName, ParameterSetPath, StringComparison.OrdinalIgnoreCase)
                 ? CreatePathRecord(document, sheet)
                 : sheet);
         }
     }
 
-    private PSObject CreatePathRecord(ExcelDocument document, ExcelSheet sheet)
-    {
+    private PSObject CreatePathRecord(ExcelDocument document, ExcelSheet sheet) {
         var item = new PSObject();
-        item.Properties.Add(new PSNoteProperty("Path", document.FilePath ?? SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath)));
+        item.Properties.Add(new PSNoteProperty("Path", document.FilePath ?? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)));
         item.Properties.Add(new PSNoteProperty("Name", sheet.Name));
         item.Properties.Add(new PSNoteProperty("SheetName", sheet.Name));
         item.Properties.Add(new PSNoteProperty("SheetIndex", ResolveSheetIndex(document, sheet)));
@@ -145,16 +139,13 @@ private PSObject CreatePathRecord(ExcelDocument document, ExcelSheet sheet)
         return item;
     }
 
-    private static int ResolveSheetIndex(ExcelDocument document, ExcelSheet sheet)
-    {
-        for (int i = 0; i < document.Sheets.Count; i++)
-        {
-            if (string.Equals(document.Sheets[i].Name, sheet.Name, StringComparison.OrdinalIgnoreCase))
-            {
+    private static int ResolveSheetIndex(ExcelDocument document, ExcelSheet sheet) {
+        for (int i = 0; i < document.Sheets.Count; i++) {
+            if (string.Equals(document.Sheets[i].Name, sheet.Name, StringComparison.OrdinalIgnoreCase)) {
                 return i;
             }
         }
 
         return -1;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintTitlesCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintTitlesCommand.cs
index 0758a685..a5439716 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintTitlesCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelPrintTitlesCommand.cs
@@ -18,16 +18,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelPrintTitles", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelPrintTitles")]
-public sealed class SetOfficeExcelPrintTitlesCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelPrintTitlesCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -67,18 +66,14 @@ public sealed class SetOfficeExcelPrintTitlesCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!Clear.IsPresent && !HasRows() && !HasColumns())
-        {
+    protected override void ProcessRecord() {
+        if (!Clear.IsPresent && !HasRows() && !HasColumns()) {
             throw new PSArgumentException("Provide row titles, column titles, or -Clear.");
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
 
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-
-        {
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
 
             return;
 
@@ -95,20 +90,17 @@ protected override void ProcessRecord()
             save: false);
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(sheet);
         }
     }
 
-    private bool HasRows()
-    {
+    private bool HasRows() {
         return FirstRow.HasValue && LastRow.HasValue;
     }
 
-    private bool HasColumns()
-    {
+    private bool HasColumns() {
         return FirstColumn.HasValue && LastColumn.HasValue;
     }
 
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRefreshOnOpenCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRefreshOnOpenCommand.cs
index aa887297..ae1df329 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRefreshOnOpenCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRefreshOnOpenCommand.cs
@@ -16,16 +16,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelRefreshOnOpen", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelRefreshOnOpen")]
 [OutputType(typeof(PSObject))]
-public sealed class SetOfficeExcelRefreshOnOpenCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelRefreshOnOpenCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -56,11 +55,9 @@ public sealed class SetOfficeExcelRefreshOnOpenCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -76,8 +73,7 @@ protected override void ProcessRecord()
 
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var output = new PSObject();
             output.Properties.Add(new PSNoteProperty("Enabled", result.Enabled));
             output.Properties.Add(new PSNoteProperty("PivotCacheCount", result.PivotCacheCount));
@@ -86,23 +82,19 @@ protected override void ProcessRecord()
         }
     }
 
-    private bool? ResolveSavePivotSourceData()
-    {
-        if (SavePivotSourceData.IsPresent && NoSavePivotSourceData.IsPresent)
-        {
+    private bool? ResolveSavePivotSourceData() {
+        if (SavePivotSourceData.IsPresent && NoSavePivotSourceData.IsPresent) {
             throw new PSArgumentException("Specify either SavePivotSourceData or NoSavePivotSourceData, not both.");
         }
 
-        if (SavePivotSourceData.IsPresent)
-        {
+        if (SavePivotSourceData.IsPresent) {
             return true;
         }
 
-        if (NoSavePivotSourceData.IsPresent)
-        {
+        if (NoSavePivotSourceData.IsPresent) {
             return false;
         }
 
         return null;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRichTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRichTextCommand.cs
index 769efbcc..3bd5bb73 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRichTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRichTextCommand.cs
@@ -15,16 +15,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelRichText", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelRichText")]
-public sealed class SetOfficeExcelRichTextCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelRichTextCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -67,12 +66,10 @@ public sealed class SetOfficeExcelRichTextCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var runs = ExcelRichTextRunService.ToRuns(Run);
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
@@ -81,22 +78,19 @@ protected override void ProcessRecord()
         sheet.SetRichText(row, column, runs);
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteRuns(sheet, row, column);
         }
     }
 
-    private void WriteRuns(ExcelSheet sheet, int row, int column)
-    {
+    private void WriteRuns(ExcelSheet sheet, int row, int column) {
         var address = A1.CellReference(row, column);
         var path = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase)
-            ? InputPath
+            ? Path
             : null;
         var runs = sheet.GetRichText(row, column);
-        for (var index = 0; index < runs.Count; index++)
-        {
+        for (var index = 0; index < runs.Count; index++) {
             WriteObject(ExcelRichTextRunService.CreateRecord(runs[index], index, address, row, column, sheet.Name, path));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowCommand.cs
index 22dd5aeb..0827dbed 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelRow")]
 [Alias("ExcelRow")]
-public sealed class SetOfficeExcelRowCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelRowCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// 1-based row index.
     [Parameter(Mandatory = true, Position = 0)]
     public int Row { get; set; }
@@ -78,33 +77,27 @@ public sealed class SetOfficeExcelRowCommand : PSCmdlet
     public int? LastColumn { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = ExcelDslContext.Require(this);
         var sheet = context.RequireSheet();
 
-        if (Row < 1)
-        {
+        if (Row < 1) {
             throw new ArgumentOutOfRangeException(nameof(Row), "Row index must be 1 or greater.");
         }
 
-        if (StartColumn < 1)
-        {
+        if (StartColumn < 1) {
             throw new ArgumentOutOfRangeException(nameof(StartColumn), "StartColumn must be 1 or greater.");
         }
 
         var values = Values ?? Array.Empty();
         var hasLayout = HasLayoutOptions();
-        if (values.Length == 0 && !hasLayout)
-        {
+        if (values.Length == 0 && !hasLayout) {
             throw new PSArgumentException("Provide row values or at least one layout/style option.", nameof(Values));
         }
 
-        if (values.Length > 0)
-        {
+        if (values.Length > 0) {
             var cells = new List<(int Row, int Column, object Value)>(values.Length);
-            for (int i = 0; i < values.Length; i++)
-            {
+            for (int i = 0; i < values.Length; i++) {
                 var value = values[i] ?? string.Empty;
                 cells.Add((Row, StartColumn + i, value));
             }
@@ -112,8 +105,7 @@ protected override void ProcessRecord()
             sheet.CellValues(cells);
         }
 
-        if (hasLayout)
-        {
+        if (hasLayout) {
             sheet.SetRowLayout(Row, new ExcelRowLayoutOptions {
                 Height = Height,
                 ClearHeight = ClearHeight.IsPresent,
@@ -129,10 +121,10 @@ protected override void ProcessRecord()
                 LastColumn = LastColumn ?? (values.Length > 0 ? StartColumn + values.Length - 1 : null)
             });
         }
+        WritePassThru(sheet);
     }
 
-    private bool HasLayoutOptions()
-    {
+    private bool HasLayoutOptions() {
         return Height.HasValue ||
             ClearHeight.IsPresent ||
             AutoFit.IsPresent ||
@@ -146,4 +138,4 @@ private bool HasLayoutOptions()
             FirstColumn.HasValue ||
             LastColumn.HasValue;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowGroupCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowGroupCommand.cs
index 445dcb6a..730c901e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowGroupCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelRowGroupCommand.cs
@@ -14,8 +14,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficeExcelRowGroup")]
 [Alias("ExcelRowGroup")]
-public sealed class SetOfficeExcelRowGroupCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelRowGroupCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// First 1-based row in the group.
     [Parameter(Mandatory = true, Position = 0)]
     public int StartRow { get; set; }
@@ -49,28 +48,26 @@ public sealed class SetOfficeExcelRowGroupCommand : PSCmdlet
     public bool? SummaryBelow { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = ExcelDslContext.Require(this);
         var sheet = context.RequireSheet();
         var lastRow = EndRow ?? StartRow;
 
-        if (OutlineLevel < 1 || OutlineLevel > 7)
-        {
+        if (OutlineLevel < 1 || OutlineLevel > 7) {
             throw new PSArgumentOutOfRangeException(nameof(OutlineLevel), OutlineLevel, "Excel outline level must be between 1 and 7.");
         }
 
-        if (SummaryBelow.HasValue)
-        {
+        if (SummaryBelow.HasValue) {
             sheet.SetOutlineSummary(summaryBelow: SummaryBelow.Value);
         }
 
-        if (Clear.IsPresent)
-        {
+        if (Clear.IsPresent) {
             sheet.ClearRowGroup(StartRow, lastRow, unhide: !KeepHidden.IsPresent);
+            WritePassThru(sheet);
             return;
         }
 
         sheet.GroupRows(StartRow, lastRow, (byte)OutlineLevel, Collapsed.IsPresent, Hidden.IsPresent);
+        WritePassThru(sheet);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelThemeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelThemeCommand.cs
index 069de7ff..6f69c7a5 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelThemeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelThemeCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsCommon.Set, "OfficeExcelTheme", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelTheme")]
 [OutputType(typeof(PSObject))]
-public sealed class SetOfficeExcelThemeCommand : PSCmdlet
-{
+public sealed class SetOfficeExcelThemeCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -53,42 +52,31 @@ public sealed class SetOfficeExcelThemeCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-        {
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
             return;
         }
 
 
         string? xml = ResolveThemeXml();
-        if (Default.IsPresent)
-        {
+        if (Default.IsPresent) {
             workbook.Document.ResetWorkbookTheme(Name);
-        }
-        else if (xml != null)
-        {
+        } else if (xml != null) {
             workbook.Document.SetWorkbookThemeXml(xml);
-            if (!string.IsNullOrWhiteSpace(Name))
-            {
+            if (!string.IsNullOrWhiteSpace(Name)) {
                 workbook.Document.SetWorkbookThemeName(Name!);
             }
-        }
-        else if (!string.IsNullOrWhiteSpace(Name))
-        {
+        } else if (!string.IsNullOrWhiteSpace(Name)) {
             workbook.Document.SetWorkbookThemeName(Name!);
-        }
-        else
-        {
+        } else {
             throw new PSArgumentException("Specify -Default, -Xml, -XmlPath, or -Name.");
         }
 
         ExcelWorkbookThemeInfo info = workbook.Document.GetWorkbookTheme(includeXml: false);
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             var result = new PSObject();
             result.Properties.Add(new PSNoteProperty("HasTheme", info.HasTheme));
             result.Properties.Add(new PSNoteProperty("Name", info.Name));
@@ -96,24 +84,20 @@ protected override void ProcessRecord()
         }
     }
 
-    private string? ResolveThemeXml()
-    {
-        if (!string.IsNullOrWhiteSpace(Xml) && !string.IsNullOrWhiteSpace(XmlPath))
-        {
+    private string? ResolveThemeXml() {
+        if (!string.IsNullOrWhiteSpace(Xml) && !string.IsNullOrWhiteSpace(XmlPath)) {
             throw new PSArgumentException("Specify either Xml or XmlPath, not both.");
         }
 
-        if (!string.IsNullOrWhiteSpace(Xml))
-        {
+        if (!string.IsNullOrWhiteSpace(Xml)) {
             return Xml;
         }
 
-        if (string.IsNullOrWhiteSpace(XmlPath))
-        {
+        if (string.IsNullOrWhiteSpace(XmlPath)) {
             return null;
         }
 
         string resolved = SessionState.Path.GetUnresolvedProviderPathFromPSPath(XmlPath!);
         return File.ReadAllText(resolved);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelAccessibilityCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelAccessibilityCommand.cs
index 3b3d82a9..788a2667 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelAccessibilityCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelAccessibilityCommand.cs
@@ -19,15 +19,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsDiagnostic.Test, "OfficeExcelAccessibility", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelAccessibility")]
 [OutputType(typeof(PSObject))]
-public sealed class TestOfficeExcelAccessibilityCommand : PSCmdlet
-{
+public sealed class TestOfficeExcelAccessibilityCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -37,12 +36,10 @@ public sealed class TestOfficeExcelAccessibilityCommand : PSCmdlet
     [Parameter]
     public SwitchParameter Quiet { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var report = workbook.Document.AnalyzeAccessibility();
-        if (Quiet.IsPresent)
-        {
+        if (Quiet.IsPresent) {
             WriteObject(!report.HasWarnings);
             return;
         }
@@ -55,8 +52,7 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 
-    private static PSObject CreateFinding(ExcelAccessibilityFinding finding)
-    {
+    private static PSObject CreateFinding(ExcelAccessibilityFinding finding) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Category", finding.Category));
         item.Properties.Add(new PSNoteProperty("Severity", finding.Severity.ToString()));
@@ -66,4 +62,4 @@ private static PSObject CreateFinding(ExcelAccessibilityFinding finding)
         return item;
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelTemplateBindingCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelTemplateBindingCommand.cs
index fe9708e5..6967abf6 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelTemplateBindingCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelTemplateBindingCommand.cs
@@ -23,15 +23,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsDiagnostic.Test, "OfficeExcelTemplateBinding", DefaultParameterSetName = ParameterSetPath)]
 [Alias("ExcelTemplateBinding", "ExcelTemplateValidate")]
 [OutputType(typeof(PSObject), typeof(string), typeof(bool))]
-public sealed class TestOfficeExcelTemplateBindingCommand : PSCmdlet
-{
+public sealed class TestOfficeExcelTemplateBindingCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -53,22 +52,18 @@ public sealed class TestOfficeExcelTemplateBindingCommand : PSCmdlet
     [Parameter]
     public SwitchParameter ThrowOnMissing { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: true);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: true);
         var bindings = Binding.Cast().ToDictionary(entry => entry.Key.ToString() ?? string.Empty, entry => entry.Value, System.StringComparer.OrdinalIgnoreCase);
         var report = workbook.Document.ValidateTemplateBindings(bindings);
-        if (ThrowOnMissing.IsPresent)
-        {
+        if (ThrowOnMissing.IsPresent) {
             report.Inspection.EnsureAllMarkersBound();
         }
-        if (Quiet.IsPresent)
-        {
+        if (Quiet.IsPresent) {
             WriteObject(report.Passed);
             return;
         }
-        if (AsMarkdown.IsPresent)
-        {
+        if (AsMarkdown.IsPresent) {
             WriteObject(report.Markdown);
             return;
         }
@@ -82,4 +77,4 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelWorkbookCommand.cs
index d396399b..7ca2c738 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/TestOfficeExcelWorkbookCommand.cs
@@ -22,15 +22,14 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsDiagnostic.Test, "OfficeExcelWorkbook", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("ExcelWorkbookDoctor", "ExcelDoctor")]
 [OutputType(typeof(PSObject))]
-public sealed class TestOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class TestOfficeExcelWorkbookCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Workbook path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook document.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -46,28 +45,23 @@ public sealed class TestOfficeExcelWorkbookCommand : PSCmdlet
     [Parameter]
     public SwitchParameter Quiet { get; set; }
 
-    protected override void ProcessRecord()
-    {
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: !RepairDefinedNames.IsPresent);
+    protected override void ProcessRecord() {
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: !RepairDefinedNames.IsPresent);
         if (RepairDefinedNames.IsPresent &&
-            !ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Repair Excel workbook diagnostics"))
-        {
+            !ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Repair Excel workbook diagnostics")) {
             return;
         }
 
-        var report = workbook.Document.RunWorkbookDoctor(new ExcelWorkbookDoctorOptions
-        {
+        var report = workbook.Document.RunWorkbookDoctor(new ExcelWorkbookDoctorOptions {
             ValidateOpenXml = !SkipOpenXmlValidation.IsPresent,
             RepairDefinedNames = RepairDefinedNames.IsPresent
         });
 
-        if (RepairDefinedNames.IsPresent)
-        {
+        if (RepairDefinedNames.IsPresent) {
             workbook.SaveIfOwned();
         }
 
-        if (Quiet.IsPresent)
-        {
+        if (Quiet.IsPresent) {
             WriteObject(!report.HasErrors);
             return;
         }
@@ -82,8 +76,7 @@ protected override void ProcessRecord()
         WriteObject(output);
     }
 
-    private static PSObject CreateIssue(ExcelWorkbookDiagnosticIssue issue)
-    {
+    private static PSObject CreateIssue(ExcelWorkbookDiagnosticIssue issue) {
         var item = new PSObject();
         item.Properties.Add(new PSNoteProperty("Category", issue.Category));
         item.Properties.Add(new PSNoteProperty("Severity", issue.Severity.ToString()));
@@ -94,4 +87,4 @@ private static PSObject CreateIssue(ExcelWorkbookDiagnosticIssue issue)
         return item;
     }
 }
-#pragma warning restore CS1591
+#pragma warning restore CS1591
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/UnprotectOfficeExcelWorkbookCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/UnprotectOfficeExcelWorkbookCommand.cs
index dd264afe..a7b43ef4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/UnprotectOfficeExcelWorkbookCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/UnprotectOfficeExcelWorkbookCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsSecurity.Unprotect, "OfficeExcelWorkbook", DefaultParameterSetName = ParameterSetContext, SupportsShouldProcess = true)]
 [Alias("ExcelWorkbookUnprotect")]
 [OutputType(typeof(ExcelDocument), typeof(FileInfo))]
-public sealed class UnprotectOfficeExcelWorkbookCommand : PSCmdlet
-{
+public sealed class UnprotectOfficeExcelWorkbookCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -37,18 +36,15 @@ public sealed class UnprotectOfficeExcelWorkbookCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var pathPassThru = string.Equals(ParameterSetName, ParameterSetPath, System.StringComparison.OrdinalIgnoreCase);
         string? resolvedPath = pathPassThru
-            ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath)
+            ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)
             : null;
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
 
-        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, InputPath, "Update Excel workbook"))
-
-        {
+        if (!ExcelShouldProcessService.ShouldProcessWorkbook(this, workbook.Document, Path, "Update Excel workbook")) {
 
             return;
 
@@ -58,9 +54,8 @@ protected override void ProcessRecord()
         document.UnprotectWorkbook();
         workbook.SaveIfOwned();
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(pathPassThru ? new FileInfo(resolvedPath!) : document);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelCommentCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelCommentCommand.cs
index a143b453..d5da4c6e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelCommentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelCommentCommand.cs
@@ -17,16 +17,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsData.Update, "OfficeExcelComment", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium, DefaultParameterSetName = ParameterSetContext)]
 [Alias("ExcelCommentUpdate")]
 [OutputType(typeof(int))]
-public sealed class UpdateOfficeExcelCommentCommand : PSCmdlet
-{
+public sealed class UpdateOfficeExcelCommentCommand : PSCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -82,20 +81,16 @@ public sealed class UpdateOfficeExcelCommentCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var filter = CreateRequiredFilter();
-        if (string.IsNullOrWhiteSpace(Text) == (Run == null || Run.Length == 0))
-        {
+        if (string.IsNullOrWhiteSpace(Text) == (Run == null || Run.Length == 0)) {
             throw new PSArgumentException("Specify exactly one of -Text or -Run.");
         }
 
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var updated = 0;
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex))
-        {
-            if (!ShouldProcess(sheet.Name, "Update Excel comments"))
-            {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, workbook.Document, ParameterSetName, Sheet, SheetIndex)) {
+            if (!ShouldProcess(sheet.Name, "Update Excel comments")) {
                 continue;
             }
 
@@ -104,21 +99,17 @@ protected override void ProcessRecord()
                 : sheet.UpdateCommentsRichText(filter, ExcelRichTextRunService.ToRuns(Run), Author, Initials);
         }
 
-        if (updated > 0)
-        {
+        if (updated > 0) {
             workbook.SaveIfOwned();
         }
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(updated);
         }
     }
 
-    private ExcelCommentFilter CreateRequiredFilter()
-    {
-        if (!string.IsNullOrWhiteSpace(Address) && !string.IsNullOrWhiteSpace(Range))
-        {
+    private ExcelCommentFilter CreateRequiredFilter() {
+        if (!string.IsNullOrWhiteSpace(Address) && !string.IsNullOrWhiteSpace(Range)) {
             throw new PSArgumentException("Specify either -Address or -Range, not both.");
         }
 
@@ -126,16 +117,14 @@ private ExcelCommentFilter CreateRequiredFilter()
             || !string.IsNullOrWhiteSpace(Range)
             || !string.IsNullOrWhiteSpace(MatchAuthor)
             || !string.IsNullOrWhiteSpace(TextContains);
-        if (!hasFilter && !All.IsPresent)
-        {
+        if (!hasFilter && !All.IsPresent) {
             throw new PSArgumentException("Specify a comment filter or use -All.");
         }
 
-        return new ExcelCommentFilter
-        {
+        return new ExcelCommentFilter {
             A1Range = !string.IsNullOrWhiteSpace(Address) ? Address : Range,
             Author = MatchAuthor,
             TextContains = TextContains
         };
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelTextCommand.cs
index a0ec6fba..b31122de 100644
--- a/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Excel/UpdateOfficeExcelTextCommand.cs
@@ -11,7 +11,7 @@ namespace PSWriteOffice.Cmdlets.Excel;
 /// 
 ///   Replace status text and verify the update count.
 ///   PS> 
-///   $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready
+///   $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready -PassThru
 /// [pscustomobject]@{
 ///     Path = '.\Report.xlsx'
 ///     Replacements = $count
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Excel;
 [Cmdlet(VerbsData.Update, "OfficeExcelText", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("Replace-OfficeExcelText")]
 [OutputType(typeof(int))]
-public sealed class UpdateOfficeExcelTextCommand : PSCmdlet
-{
+public sealed class UpdateOfficeExcelTextCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetContext = "Context";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
 
     /// Workbook path to update.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "FilePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Workbook to update outside the DSL context.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -67,62 +66,53 @@ public sealed class UpdateOfficeExcelTextCommand : PSCmdlet
 
     /// Open the file after saving when using -Path.
     [Parameter(ParameterSetName = ParameterSetPath)]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (ParameterSetName == ParameterSetPath)
-        {
-            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-            if (!ShouldProcess(resolvedPath, "Update Excel workbook text"))
-            {
+    protected override void ProcessRecord() {
+        if (ParameterSetName == ParameterSetPath) {
+            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+            if (!ShouldProcess(resolvedPath, "Update Excel workbook text")) {
                 return;
             }
         }
 
         var replacements = 0;
-        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, InputPath, Document, readOnly: false);
+        using var workbook = ExcelWorkbookCommandService.ResolveWorkbook(this, ParameterSetName, Path, Document, readOnly: false);
         var document = workbook.Document;
         if (ParameterSetName != ParameterSetPath &&
-            !ExcelShouldProcessService.ShouldProcessWorkbook(this, document, null, "Update Excel workbook text"))
-        {
+            !ExcelShouldProcessService.ShouldProcessWorkbook(this, document, null, "Update Excel workbook text")) {
             return;
         }
 
-        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, document, ParameterSetName, Sheet, SheetIndex))
-        {
+        foreach (var sheet in ExcelWorkbookCommandService.ResolveSheets(this, document, ParameterSetName, Sheet, SheetIndex)) {
             replacements += ReplaceInSheet(sheet);
         }
 
         workbook.SaveIfOwned();
-        var openPath = workbook.OwnsDocument && Show.IsPresent
-            ? document.FilePath ?? InputPath
+        var openPath = workbook.OwnsDocument && Open.IsPresent
+            ? document.FilePath ?? Path
             : null;
 
-        if (!string.IsNullOrWhiteSpace(openPath))
-        {
+        if (!string.IsNullOrWhiteSpace(openPath)) {
             workbook.Dispose();
             FileOpenService.Open(openPath!);
         }
 
-        WriteObject(replacements);
+        WritePassThru(replacements);
     }
 
-    private int ReplaceInSheet(ExcelSheet sheet)
-    {
+    private int ReplaceInSheet(ExcelSheet sheet) {
         var count = 0;
         var range = string.IsNullOrWhiteSpace(Range) ? sheet.UsedRangeA1 : Range!;
-        foreach (var cell in sheet.EnumerateRange(range))
-        {
-            if (cell.Value is not string text)
-            {
+        foreach (var cell in sheet.EnumerateRange(range)) {
+            if (cell.Value is not string text) {
                 continue;
             }
 
             var updated = ReplaceString(text, out var cellReplacements);
-            if (cellReplacements == 0)
-            {
+            if (cellReplacements == 0) {
                 continue;
             }
 
@@ -133,18 +123,15 @@ private int ReplaceInSheet(ExcelSheet sheet)
         return count;
     }
 
-    private string ReplaceString(string value, out int replacements)
-    {
+    private string ReplaceString(string value, out int replacements) {
         replacements = 0;
-        if (Regex.IsPresent)
-        {
+        if (Regex.IsPresent) {
             var options = CaseSensitive.IsPresent ? RegexOptions.None : RegexOptions.IgnoreCase;
             var count = 0;
             var updated = System.Text.RegularExpressions.Regex.Replace(
                 value,
                 OldValue,
-                match =>
-                {
+                match => {
                     count++;
                     return NewValue;
                 },
@@ -155,14 +142,12 @@ private string ReplaceString(string value, out int replacements)
 
         var comparison = CaseSensitive.IsPresent ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
         var index = value.IndexOf(OldValue, comparison);
-        if (index < 0)
-        {
+        if (index < 0) {
             return value;
         }
 
         var result = value;
-        while (index >= 0)
-        {
+        while (index >= 0) {
             result = result.Substring(0, index) + NewValue + result.Substring(index + OldValue.Length);
             replacements++;
             index = result.IndexOf(OldValue, index + NewValue.Length, comparison);
diff --git a/Sources/PSWriteOffice/Cmdlets/Html/ExportOfficeHtmlImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Html/ExportOfficeHtmlImageCommand.cs
index 09c1c0d8..0e0d5a7b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Html/ExportOfficeHtmlImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Html/ExportOfficeHtmlImageCommand.cs
@@ -11,7 +11,7 @@ namespace PSWriteOffice.Cmdlets.Html;
 ///   Render an HTML file to PNG.
 ///   PS> 
 ///   Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.png
-///   Uses the dependency-free OfficeIMO HTML renderer and returns OfficeImageExportResult.
+///   Uses the dependency-free OfficeIMO HTML renderer. Add -PassThru to receive the structured export result.
 /// 
 [Cmdlet(VerbsData.Export, "OfficeHtmlImage", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
@@ -19,6 +19,8 @@ public sealed class ExportOfficeHtmlImageCommand : PSCmdlet
 {
     private readonly StringBuilder _pipelineHtml = new();
     private bool _hasPipelineHtml;
+    private bool _shouldExport;
+    private string _resolvedOutput = string.Empty;
 
     /// Path to an HTML file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = "Path")]
@@ -32,7 +34,7 @@ public sealed class ExportOfficeHtmlImageCommand : PSCmdlet
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = "Document")]
     public HtmlConversionDocument Document { get; set; } = null!;
 
-    /// Destination PNG or SVG path.
+    /// Destination PNG, JPEG, TIFF, SVG, or WebP path.
     [Parameter(Mandatory = true, Position = 1)]
     public string OutputPath { get; set; } = string.Empty;
 
@@ -53,9 +55,22 @@ public sealed class ExportOfficeHtmlImageCommand : PSCmdlet
     [Parameter]
     public HtmlRenderOptions? RenderOptions { get; set; }
 
+    /// Emit the structured image export result.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void BeginProcessing()
+    {
+        _resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
+        _shouldExport = ShouldProcess(_resolvedOutput, $"Export HTML page as {Format}");
+    }
+
     /// 
     protected override void ProcessRecord()
     {
+        if (!_shouldExport) return;
+
         if (ParameterSetName == "Html")
         {
             if (_hasPipelineHtml) _pipelineHtml.Append('\n');
@@ -73,7 +88,7 @@ protected override void ProcessRecord()
     /// 
     protected override void EndProcessing()
     {
-        if (ParameterSetName == "Html")
+        if (_shouldExport && ParameterSetName == "Html")
         {
             Export(HtmlConversionDocument.Parse(_pipelineHtml.ToString(), DocumentOptions));
         }
@@ -81,11 +96,8 @@ protected override void EndProcessing()
 
     private void Export(HtmlConversionDocument document)
     {
-        var output = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-        if (!ShouldProcess(output, $"Export HTML page as {Format}")) return;
-        Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
-        WriteObject(Format == OfficeImageExportFormat.Svg
-            ? document.SaveAsSvg(output, RenderOptions, PageIndex)
-            : document.SaveAsPng(output, RenderOptions, PageIndex));
+        Directory.CreateDirectory(System.IO.Path.GetDirectoryName(_resolvedOutput) ?? SessionState.Path.CurrentFileSystemLocation.Path);
+        OfficeImageExportResult result = document.ExportImage(Format, RenderOptions, PageIndex).Save(_resolvedOutput);
+        if (PassThru.IsPresent) WriteObject(result);
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Html/HtmlOptionsCommandUtilities.cs b/Sources/PSWriteOffice/Cmdlets/Html/HtmlOptionsCommandUtilities.cs
new file mode 100644
index 00000000..f1b7fcec
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Html/HtmlOptionsCommandUtilities.cs
@@ -0,0 +1,28 @@
+using System;
+using System.IO;
+using System.Management.Automation;
+
+namespace PSWriteOffice.Cmdlets.Html;
+
+internal static class HtmlOptionsCommandUtilities {
+    internal static Uri NormalizeBaseUri(SessionState sessionState, string value) {
+        if (Uri.TryCreate(value, UriKind.Absolute, out Uri? absoluteUri) &&
+            !absoluteUri.IsFile &&
+            absoluteUri.Scheme.Length > 1) {
+            return absoluteUri;
+        }
+
+        string providerPath = absoluteUri?.IsFile == true
+            ? absoluteUri.LocalPath
+            : sessionState.Path.GetUnresolvedProviderPathFromPSPath(value);
+        string fullPath = Path.GetFullPath(providerPath);
+        bool isDirectory = Directory.Exists(fullPath) ||
+            value.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) ||
+            value.EndsWith(Path.AltDirectorySeparatorChar.ToString(), StringComparison.Ordinal);
+        if (isDirectory) {
+            fullPath = fullPath.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Path.DirectorySeparatorChar;
+        }
+
+        return new Uri(fullPath, UriKind.Absolute);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlConversionOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlConversionOptionsCommand.cs
new file mode 100644
index 00000000..c5d72260
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlConversionOptionsCommand.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Management.Automation;
+using OfficeIMO.Html;
+
+namespace PSWriteOffice.Cmdlets.Html;
+
+/// Creates discoverable parsing, trust, and document settings for HTML conversion.
+/// 
+///   Resolve relative resources from a trusted report directory.
+///   PS> 
+///   $document = New-OfficeHtmlConversionOptions -BaseUri (Resolve-Path .\Assets) -UseBodyContentsOnly
+/// Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -DocumentOptions $document
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeHtmlConversionOptions")]
+[OutputType(typeof(HtmlConversionDocumentOptions))]
+public sealed class NewOfficeHtmlConversionOptionsCommand : PSCmdlet {
+    /// Built-in conversion profile.
+    [Parameter] public HtmlConversionProfile? Profile { get; set; }
+    /// Input trust level.
+    [Parameter] public HtmlInputTrust? Trust { get; set; }
+    /// Base URI used to resolve relative references.
+    [Parameter] public string? BaseUri { get; set; }
+    /// Convert only body contents.
+    [Parameter] public SwitchParameter UseBodyContentsOnly { get; set; }
+    /// Retain normalized HTML in the conversion document.
+    [Parameter] public SwitchParameter IncludeNormalizedHtml { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new HtmlConversionDocumentOptions();
+        if (Profile.HasValue) options.Profile = Profile.Value;
+        if (Trust.HasValue) options.Trust = Trust.Value;
+        if (!string.IsNullOrWhiteSpace(BaseUri)) options.BaseUri = HtmlOptionsCommandUtilities.NormalizeBaseUri(SessionState, BaseUri!);
+        if (IsBound(nameof(UseBodyContentsOnly))) options.UseBodyContentsOnly = UseBodyContentsOnly.IsPresent;
+        if (IsBound(nameof(IncludeNormalizedHtml))) options.IncludeNormalizedHtml = IncludeNormalizedHtml.IsPresent;
+        WriteObject(options);
+    }
+    private bool IsBound(string name) => MyInvocation.BoundParameters.ContainsKey(name);
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlRenderOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlRenderOptionsCommand.cs
new file mode 100644
index 00000000..4837f124
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlRenderOptionsCommand.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Management.Automation;
+using OfficeIMO.Drawing;
+using OfficeIMO.Html;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.Html;
+
+/// Creates discoverable layout, resource-limit, and rendering settings for HTML image export.
+/// 
+///   Render HTML with a bounded viewport and resource budget.
+///   PS> 
+///   $render = New-OfficeHtmlRenderOptions -ViewportWidth 1280 -ViewportHeight 720 -MaxPageCount 10
+/// Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -RenderOptions $render
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeHtmlRenderOptions")]
+[OutputType(typeof(HtmlRenderOptions))]
+public sealed class NewOfficeHtmlRenderOptionsCommand : OfficeImageOptionsCommandBase {
+    /// HTML render mode.
+    [Parameter] public HtmlRenderMode? Mode { get; set; }
+    /// Fidelity policy for unsupported content.
+    [Parameter] public HtmlRenderFidelityPolicy? FidelityPolicy { get; set; }
+    /// Viewport width in CSS pixels.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? ViewportWidth { get; set; }
+    /// Optional viewport height in CSS pixels.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? ViewportHeight { get; set; }
+    /// Page size used by paged rendering.
+    [Parameter] public OfficePageSize? PageSize { get; set; }
+    /// Honor CSS page rules.
+    [Parameter] public SwitchParameter HonorCssPageRules { get; set; }
+    /// Default font family.
+    [Parameter] public string? DefaultFontFamily { get; set; }
+    /// Default font size.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? DefaultFontSize { get; set; }
+    /// Default line-height multiplier.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? DefaultLineHeight { get; set; }
+    /// Base URI for relative resources.
+    [Parameter] public string? BaseUri { get; set; }
+    /// Maximum rendered page count.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxPageCount { get; set; }
+    /// Maximum HTML input characters.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxInputCharacters { get; set; }
+    /// Maximum HTML nodes.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxHtmlNodes { get; set; }
+    /// Maximum resource bytes loaded for the document.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxTotalResourceBytes { get; set; }
+    /// Maximum duration allowed for one resource load.
+    [Parameter] [ValidateRange(double.Epsilon, 2147483d)] public double? ResourceTimeoutSeconds { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new HtmlRenderOptions();
+        ApplyCommon(options);
+        if (Mode.HasValue) options.Mode = Mode.Value;
+        if (FidelityPolicy.HasValue) options.FidelityPolicy = FidelityPolicy.Value;
+        if (ViewportWidth.HasValue) options.ViewportWidth = ViewportWidth.Value;
+        if (ViewportHeight.HasValue) options.ViewportHeight = ViewportHeight.Value;
+        if (PageSize.HasValue) options.PageSize = PageSize.Value;
+        if (IsBound(nameof(HonorCssPageRules))) options.HonorCssPageRules = HonorCssPageRules.IsPresent;
+        if (DefaultFontFamily != null) options.DefaultFontFamily = DefaultFontFamily;
+        if (DefaultFontSize.HasValue) options.DefaultFontSize = DefaultFontSize.Value;
+        if (DefaultLineHeight.HasValue) options.DefaultLineHeight = DefaultLineHeight.Value;
+        if (!string.IsNullOrWhiteSpace(BaseUri)) options.BaseUri = HtmlOptionsCommandUtilities.NormalizeBaseUri(SessionState, BaseUri!);
+        if (MaxPageCount.HasValue) options.MaxPageCount = MaxPageCount.Value;
+        if (MaxInputCharacters.HasValue) options.MaxInputCharacters = MaxInputCharacters.Value;
+        if (MaxHtmlNodes.HasValue) options.MaxHtmlNodes = MaxHtmlNodes.Value;
+        if (MaxTotalResourceBytes.HasValue) options.MaxTotalResourceBytes = MaxTotalResourceBytes.Value;
+        if (ResourceTimeoutSeconds.HasValue) options.ResourceTimeout = TimeSpan.FromSeconds(ResourceTimeoutSeconds.Value);
+        WriteObject(options);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Imaging/OfficeImageOptionsCommandBase.cs b/Sources/PSWriteOffice/Cmdlets/Imaging/OfficeImageOptionsCommandBase.cs
new file mode 100644
index 00000000..5cf930d4
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Imaging/OfficeImageOptionsCommandBase.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Management.Automation;
+using OfficeIMO.Drawing;
+
+namespace PSWriteOffice.Cmdlets.Imaging;
+
+/// Shared PowerShell-native parameters for OfficeIMO image export option builders.
+public abstract class OfficeImageOptionsCommandBase : PSCmdlet where TOptions : OfficeImageExportOptions {
+    /// Output scale multiplier.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? Scale { get; set; }
+    /// Maximum output width in pixels.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumOutputWidth { get; set; }
+    /// Maximum output height in pixels.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumOutputHeight { get; set; }
+    /// Background color name or hex value.
+    [Parameter] public string? BackgroundColor { get; set; }
+    /// Target output density in dots per inch.
+    [Parameter] [ValidateRange(double.Epsilon, 65535d)] public double? TargetDpi { get; set; }
+    /// Maximum pixels allocated for one raster image.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaximumRasterPixels { get; set; }
+    /// Reduce or reject oversized raster output.
+    [Parameter] public OfficeRasterOverflowBehavior? RasterOverflowBehavior { get; set; }
+    /// Maximum images accepted from one batch export.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumOutputCount { get; set; }
+    /// Maximum aggregate raster pixels accepted from one batch.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaximumTotalRasterPixels { get; set; }
+    /// Maximum aggregate encoded bytes accepted from one batch.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaximumTotalEncodedBytes { get; set; }
+    /// Maximum seconds allowed for one render.
+    [Parameter] [ValidateRange(double.Epsilon, 2147483d)] public double? RenderTimeoutSeconds { get; set; }
+    /// Maximum independent renders processed concurrently.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaximumDegreeOfParallelism { get; set; }
+    /// BCP 47 language hint for text shaping.
+    [Parameter] public string? TextShapingLanguage { get; set; }
+
+    /// Applies shared settings to a format-specific option object.
+    protected void ApplyCommon(TOptions options) {
+        if (Scale.HasValue) options.Scale = Scale.Value;
+        if (MaximumOutputWidth.HasValue) options.MaximumOutputWidth = MaximumOutputWidth.Value;
+        if (MaximumOutputHeight.HasValue) options.MaximumOutputHeight = MaximumOutputHeight.Value;
+        if (!string.IsNullOrWhiteSpace(BackgroundColor)) options.BackgroundColor = OfficeColor.Parse(BackgroundColor!);
+        if (TargetDpi.HasValue) options.TargetDpi = TargetDpi.Value;
+        if (MaximumRasterPixels.HasValue) options.MaximumRasterPixels = MaximumRasterPixels.Value;
+        if (RasterOverflowBehavior.HasValue) options.RasterOverflowBehavior = RasterOverflowBehavior.Value;
+        if (MaximumOutputCount.HasValue) options.MaximumOutputCount = MaximumOutputCount.Value;
+        if (MaximumTotalRasterPixels.HasValue) options.MaximumTotalRasterPixels = MaximumTotalRasterPixels.Value;
+        if (MaximumTotalEncodedBytes.HasValue) options.MaximumTotalEncodedBytes = MaximumTotalEncodedBytes.Value;
+        if (RenderTimeoutSeconds.HasValue) options.RenderTimeout = TimeSpan.FromSeconds(RenderTimeoutSeconds.Value);
+        if (MaximumDegreeOfParallelism.HasValue) options.MaximumDegreeOfParallelism = MaximumDegreeOfParallelism.Value;
+        if (TextShapingLanguage != null) options.TextShapingLanguage = TextShapingLanguage;
+    }
+
+    /// Returns whether PowerShell bound a parameter, including an explicitly false switch.
+    protected bool IsBound(string name) => MyInvocation.BoundParameters.ContainsKey(name);
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs b/Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs
index 2bf9691e..953bd0b2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs
@@ -5,6 +5,12 @@
 namespace PSWriteOffice.Cmdlets.Latex;
 
 /// Saves an OfficeIMO LaTeX document.
+/// 
+///   Load and save a canonical LaTeX document.
+///   PS> 
+///   $document = Get-OfficeLatex -Path .\Article.tex
+/// $document | Save-OfficeLatex -Path .\Article-normalized.tex -Mode Canonical
+/// 
 [Cmdlet(VerbsData.Save, "OfficeLatex", SupportsShouldProcess = true)]
 [OutputType(typeof(LatexDocument))]
 public sealed class SaveOfficeLatexCommand : PSCmdlet
@@ -21,6 +27,15 @@ public sealed class SaveOfficeLatexCommand : PSCmdlet
     [Parameter]
     public LatexWriterOptions? Options { get; set; }
 
+    /// Writer mode. Preserve retains unchanged source; Canonical normalizes output.
+    [Parameter]
+    public LatexWriterMode? Mode { get; set; }
+
+    /// Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference.
+    [Parameter]
+    [ValidateSet("LF", "CRLF", "CR")]
+    public string? LineEnding { get; set; }
+
     /// Return the saved document.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
@@ -31,7 +46,24 @@ protected override void ProcessRecord()
         var path = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         if (!ShouldProcess(path, "Save LaTeX document")) return;
         Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path) ?? SessionState.Path.CurrentFileSystemLocation.Path);
-        Document.Save(path, Options);
+        Document.Save(path, BuildOptions());
         if (PassThru.IsPresent) WriteObject(Document);
     }
+
+    private LatexWriterOptions BuildOptions() {
+        var options = new LatexWriterOptions {
+            Mode = Options?.Mode ?? LatexWriterMode.Preserve,
+            LineEnding = Options?.LineEnding
+        };
+        if (Mode.HasValue) options.Mode = Mode.Value;
+        if (LineEnding != null) options.LineEnding = ResolveLineEnding(LineEnding);
+        return options;
+    }
+
+    private static string ResolveLineEnding(string value) => value switch {
+        "LF" => "\n",
+        "CRLF" => "\r\n",
+        "CR" => "\r",
+        _ => throw new PSArgumentException("LineEnding must be LF, CRLF, or CR.", nameof(LineEnding))
+    };
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertFromOfficeMarkdownHtmlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertFromOfficeMarkdownHtmlCommand.cs
index 3384074d..01d5eb1d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertFromOfficeMarkdownHtmlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertFromOfficeMarkdownHtmlCommand.cs
@@ -27,8 +27,7 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Alias("ConvertFrom-MarkdownHtml")]
 [OutputType(typeof(string), typeof(FileInfo), typeof(MarkdownDoc))]
 public sealed class ConvertFromOfficeMarkdownHtmlCommand : PSCmdlet
-    , IMarkdownWriteOptionSource
-{
+    , IMarkdownWriteOptionSource {
     private const string ParameterSetHtml = "Html";
     private const string ParameterSetPath = "Path";
 
@@ -38,8 +37,8 @@ public sealed class ConvertFromOfficeMarkdownHtmlCommand : PSCmdlet
 
     /// Path to an HTML file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Optional output path for the Markdown file.
     [Parameter]
@@ -123,36 +122,29 @@ public sealed class ConvertFromOfficeMarkdownHtmlCommand : PSCmdlet
     public string? UnorderedListMarker { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (Options != null && Portable.IsPresent)
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (Options != null && Portable.IsPresent) {
                 throw new PSArgumentException("Specify either -Options or -Portable, not both.");
             }
 
-            if (AsDocument.IsPresent && !string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (AsDocument.IsPresent && !string.IsNullOrWhiteSpace(OutputPath)) {
                 throw new PSArgumentException("Specify either -AsDocument or -OutputPath, not both.");
             }
 
             var html = Html;
             string? htmlFileDirectory = null;
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
                 }
 
                 html = File.ReadAllText(resolvedPath);
-                htmlFileDirectory = Path.GetDirectoryName(resolvedPath);
+                htmlFileDirectory = System.IO.Path.GetDirectoryName(resolvedPath);
             }
 
-            if (string.IsNullOrWhiteSpace(html))
-            {
+            if (string.IsNullOrWhiteSpace(html)) {
                 ThrowTerminatingError(new ErrorRecord(
                     new ArgumentException("HTML content cannot be empty."),
                     "HtmlEmpty",
@@ -164,53 +156,42 @@ protected override void ProcessRecord()
             var options = BuildOptions(htmlFileDirectory);
             if (string.IsNullOrWhiteSpace(OutputPath) &&
                 RequiresImageExtraction(options) &&
-                !ShouldProcess(options.Base64ImageOutputDirectory, "Extract Markdown images from HTML"))
-            {
+                !ShouldProcess(options.Base64ImageOutputDirectory, "Extract Markdown images from HTML")) {
                 return;
             }
 
-            if (AsDocument.IsPresent)
-            {
+            if (AsDocument.IsPresent) {
                 WriteObject(HtmlConversionDocument.Parse(html).ToMarkdownDocument(options));
                 return;
             }
 
-            if (!string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (!string.IsNullOrWhiteSpace(OutputPath)) {
                 var resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-                if (!ShouldProcess(resolvedOutput, "Write Markdown converted from HTML"))
-                {
+                if (!ShouldProcess(resolvedOutput, "Write Markdown converted from HTML")) {
                     return;
                 }
 
                 var markdown = HtmlConversionDocument.Parse(html).ToMarkdown(options);
-                var directory = Path.GetDirectoryName(resolvedOutput);
-                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-                {
+                var directory = System.IO.Path.GetDirectoryName(resolvedOutput);
+                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                     Directory.CreateDirectory(directory);
                 }
 
                 File.WriteAllText(resolvedOutput, markdown, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
-                if (PassThru.IsPresent)
-                {
+                if (PassThru.IsPresent) {
                     WriteObject(new FileInfo(resolvedOutput));
                 }
-            }
-            else
-            {
+            } else {
                 var markdown = HtmlConversionDocument.Parse(html).ToMarkdown(options);
                 WriteObject(markdown);
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "HtmlToMarkdownFailed", ErrorCategory.InvalidOperation,
-                ParameterSetName == ParameterSetPath ? InputPath : Html));
+                ParameterSetName == ParameterSetPath ? Path : Html));
         }
     }
 
-    private HtmlToMarkdownOptions BuildOptions(string? htmlFileDirectory)
-    {
+    private HtmlToMarkdownOptions BuildOptions(string? htmlFileDirectory) {
         var options = Options?.Clone()
             ?? (Portable.IsPresent
                 ? HtmlToMarkdownOptions.CreatePortableProfile()
@@ -221,44 +202,35 @@ private HtmlToMarkdownOptions BuildOptions(string? htmlFileDirectory)
         options.PreserveUnsupportedBlocks = !DropUnsupportedBlocks.IsPresent;
         options.PreserveUnsupportedInlineHtml = !DropUnsupportedInlineHtml.IsPresent;
 
-        if (MaxInputCharacters.HasValue)
-        {
+        if (MaxInputCharacters.HasValue) {
             options.MaxInputCharacters = MaxInputCharacters.Value;
         }
 
-        if (Base64ImageHandling.HasValue)
-        {
+        if (Base64ImageHandling.HasValue) {
             options.Base64Images = Base64ImageHandling.Value;
         }
 
-        if (!string.IsNullOrWhiteSpace(Base64ImageOutputDirectory))
-        {
+        if (!string.IsNullOrWhiteSpace(Base64ImageOutputDirectory)) {
             options.Base64ImageOutputDirectory = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Base64ImageOutputDirectory);
         }
 
-        if (ListingCardMetadataMode.HasValue)
-        {
+        if (ListingCardMetadataMode.HasValue) {
             options.ListingCardMetadataMode = ListingCardMetadataMode.Value;
         }
 
-        if (MaxTableExpandedColumns.HasValue)
-        {
+        if (MaxTableExpandedColumns.HasValue) {
             options.MaxTableExpandedColumns = MaxTableExpandedColumns.Value;
         }
 
         var writeOptions = MarkdownOptionUtilities.BuildWriteOptions(this);
-        if (writeOptions != null)
-        {
+        if (writeOptions != null) {
             options.MarkdownWriteOptions = writeOptions;
         }
 
-        if (!string.IsNullOrWhiteSpace(BaseUri))
-        {
+        if (!string.IsNullOrWhiteSpace(BaseUri)) {
             options.BaseUri = new Uri(BaseUri, UriKind.Absolute);
-        }
-        else if (!string.IsNullOrWhiteSpace(htmlFileDirectory))
-        {
-            options.BaseUri = new Uri(Path.GetFullPath(htmlFileDirectory!) + Path.DirectorySeparatorChar);
+        } else if (!string.IsNullOrWhiteSpace(htmlFileDirectory)) {
+            options.BaseUri = new Uri(System.IO.Path.GetFullPath(htmlFileDirectory!) + System.IO.Path.DirectorySeparatorChar);
         }
 
         return options;
@@ -267,4 +239,4 @@ private HtmlToMarkdownOptions BuildOptions(string? htmlFileDirectory)
     private static bool RequiresImageExtraction(HtmlToMarkdownOptions options)
         => options.Base64Images == HtmlBase64ImageHandling.SaveToFile &&
            !string.IsNullOrWhiteSpace(options.Base64ImageOutputDirectory);
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertToOfficeMarkdownHtmlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertToOfficeMarkdownHtmlCommand.cs
index 3975efd8..6a35e14d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertToOfficeMarkdownHtmlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/ConvertToOfficeMarkdownHtmlCommand.cs
@@ -25,16 +25,15 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Alias("ConvertTo-MarkdownHtml")]
 [OutputType(typeof(string), typeof(FileInfo))]
 public sealed class ConvertToOfficeMarkdownHtmlCommand : PSCmdlet
-    , IMarkdownReaderOptionSource
-{
+    , IMarkdownReaderOptionSource {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetText = "Text";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown text to convert.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetText)]
@@ -182,31 +181,23 @@ public sealed class ConvertToOfficeMarkdownHtmlCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var readerOptions = MarkdownOptionUtilities.BuildReaderOptions(this);
 
         MarkdownDoc document;
-        if (ParameterSetName == ParameterSetDocument)
-        {
+        if (ParameterSetName == ParameterSetDocument) {
             document = Document ?? throw new InvalidOperationException("Markdown document was not provided.");
-        }
-        else if (ParameterSetName == ParameterSetPath)
-        {
-            var resolved = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-            if (!File.Exists(resolved))
-            {
+        } else if (ParameterSetName == ParameterSetPath) {
+            var resolved = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+            if (!File.Exists(resolved)) {
                 throw new FileNotFoundException($"File '{resolved}' was not found.", resolved);
             }
             document = MarkdownDoc.Load(resolved, readerOptions);
-        }
-        else
-        {
+        } else {
             document = MarkdownReader.Parse(Text ?? string.Empty, readerOptions);
         }
 
-        var options = new HtmlOptions
-        {
+        var options = new HtmlOptions {
             Kind = DocumentMode.IsPresent ? HtmlKind.Document : HtmlKind.Fragment,
             Style = Style,
             CssDelivery = CssDelivery,
@@ -215,48 +206,38 @@ protected override void ProcessRecord()
 
         ApplyHtmlOptions(options);
 
-        if (!string.IsNullOrWhiteSpace(Title))
-        {
+        if (!string.IsNullOrWhiteSpace(Title)) {
             options.Title = Title!;
         }
 
-        if (!string.IsNullOrWhiteSpace(OutputPath))
-        {
+        if (!string.IsNullOrWhiteSpace(OutputPath)) {
             var resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-            if (!ShouldProcess(resolvedOutput, "Write HTML converted from Markdown"))
-            {
+            if (!ShouldProcess(resolvedOutput, "Write HTML converted from Markdown")) {
                 return;
             }
 
-            var directory = Path.GetDirectoryName(resolvedOutput);
-            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-            {
+            var directory = System.IO.Path.GetDirectoryName(resolvedOutput);
+            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                 Directory.CreateDirectory(directory);
             }
 
             document.SaveAsHtml(resolvedOutput, options);
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 WriteObject(new FileInfo(resolvedOutput));
             }
-        }
-        else
-        {
+        } else {
             WriteObject(options.Kind == HtmlKind.Document
                 ? document.ToHtmlDocument(options)
                 : document.ToHtmlFragment(options));
         }
     }
 
-    private void ApplyHtmlOptions(HtmlOptions options)
-    {
-        if (Theme.HasValue)
-        {
+    private void ApplyHtmlOptions(HtmlOptions options) {
+        if (Theme.HasValue) {
             options.Theme = MarkdownOptionUtilities.CreateTheme(Theme.Value);
         }
 
-        if (RawHtmlHandling.HasValue)
-        {
+        if (RawHtmlHandling.HasValue) {
             options.RawHtmlHandling = RawHtmlHandling.Value;
         }
 
@@ -270,23 +251,19 @@ private void ApplyHtmlOptions(HtmlOptions options)
         options.ImagesLoadingLazy = ImagesLoadingLazy.IsPresent;
         options.ImagesDecodingAsync = ImagesDecodingAsync.IsPresent;
 
-        if (!string.IsNullOrWhiteSpace(BaseUri) && Uri.TryCreate(BaseUri, UriKind.Absolute, out var baseUri))
-        {
+        if (!string.IsNullOrWhiteSpace(BaseUri) && Uri.TryCreate(BaseUri, UriKind.Absolute, out var baseUri)) {
             options.BaseUri = baseUri;
         }
 
-        if (!string.IsNullOrWhiteSpace(ExternalLinksRel))
-        {
+        if (!string.IsNullOrWhiteSpace(ExternalLinksRel)) {
             options.ExternalLinksRel = ExternalLinksRel!;
         }
 
-        if (!string.IsNullOrWhiteSpace(ExternalLinksReferrerPolicy))
-        {
+        if (!string.IsNullOrWhiteSpace(ExternalLinksReferrerPolicy)) {
             options.ExternalLinksReferrerPolicy = ExternalLinksReferrerPolicy!;
         }
 
-        if (!string.IsNullOrWhiteSpace(ImagesReferrerPolicy))
-        {
+        if (!string.IsNullOrWhiteSpace(ImagesReferrerPolicy)) {
             options.ImagesReferrerPolicy = ImagesReferrerPolicy!;
         }
 
@@ -294,19 +271,15 @@ private void ApplyHtmlOptions(HtmlOptions options)
         AddRange(options.AllowedHttpImageHosts, AllowedHttpImageHost);
     }
 
-    private static void AddRange(System.Collections.Generic.ICollection target, string[]? values)
-    {
-        if (values == null)
-        {
+    private static void AddRange(System.Collections.Generic.ICollection target, string[]? values) {
+        if (values == null) {
             return;
         }
 
-        foreach (var value in values)
-        {
-            if (!string.IsNullOrWhiteSpace(value))
-            {
+        foreach (var value in values) {
+            if (!string.IsNullOrWhiteSpace(value)) {
                 target.Add(value);
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownCommand.cs
index 0ef641e1..d69fefe5 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownCommand.cs
@@ -22,15 +22,14 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Cmdlet(VerbsCommon.Get, "OfficeMarkdown", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(MarkdownDoc))]
 public sealed class GetOfficeMarkdownCommand : PSCmdlet
-    , IMarkdownReaderOptionSource
-{
+    , IMarkdownReaderOptionSource {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetText = "Text";
 
     /// Path to the Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown text to parse.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetText)]
@@ -84,26 +83,21 @@ public sealed class GetOfficeMarkdownCommand : PSCmdlet
     MarkdownReaderOptions? IMarkdownReaderOptionSource.ReaderOptions => Options;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var options = MarkdownOptionUtilities.BuildReaderOptions(this);
 
         MarkdownDoc document;
-        if (ParameterSetName == ParameterSetPath)
-        {
-            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-            if (!File.Exists(resolvedPath))
-            {
+        if (ParameterSetName == ParameterSetPath) {
+            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+            if (!File.Exists(resolvedPath)) {
                 throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
             }
 
             document = MarkdownDoc.Load(resolvedPath, options);
-        }
-        else
-        {
+        } else {
             document = MarkdownReader.Parse(Text ?? string.Empty, options);
         }
 
         WriteObject(document);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownFrontMatterCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownFrontMatterCommand.cs
index 91181c4f..316fab61 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownFrontMatterCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownFrontMatterCommand.cs
@@ -25,8 +25,7 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Cmdlet(VerbsCommon.Get, "OfficeMarkdownFrontMatter", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(FrontMatterBlock.Entry))]
 public sealed class GetOfficeMarkdownFrontMatterCommand : PSCmdlet
-    , IMarkdownReaderOptionSource
-{
+    , IMarkdownReaderOptionSource {
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
     private const string ParameterSetText = "Text";
@@ -37,8 +36,8 @@ public sealed class GetOfficeMarkdownFrontMatterCommand : PSCmdlet
 
     /// Path to the Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown text to parse.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetText)]
@@ -100,14 +99,13 @@ public sealed class GetOfficeMarkdownFrontMatterCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var document = MarkdownDocumentResolver.Resolve(
             this,
             ParameterSetName,
             ParameterSetDocument,
             Document,
-            InputPath,
+            Path,
             Text,
             this);
 
@@ -118,14 +116,12 @@ protected override void ProcessRecord()
             ? null
             : new WildcardPattern(Key, wildcardOptions);
 
-        foreach (var entry in document.FrontMatterEntries)
-        {
-            if (keyPattern != null && !keyPattern.IsMatch(entry.Key))
-            {
+        foreach (var entry in document.FrontMatterEntries) {
+            if (keyPattern != null && !keyPattern.IsMatch(entry.Key)) {
                 continue;
             }
 
             WriteObject(entry);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownHeadingCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownHeadingCommand.cs
index dd81d523..a8c3062e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownHeadingCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownHeadingCommand.cs
@@ -21,8 +21,7 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Cmdlet(VerbsCommon.Get, "OfficeMarkdownHeading", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(MarkdownDoc.HeadingInfo))]
 public sealed class GetOfficeMarkdownHeadingCommand : PSCmdlet
-    , IMarkdownReaderOptionSource
-{
+    , IMarkdownReaderOptionSource {
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
     private const string ParameterSetText = "Text";
@@ -33,8 +32,8 @@ public sealed class GetOfficeMarkdownHeadingCommand : PSCmdlet
 
     /// Path to the Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown text to parse.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetText)]
@@ -110,10 +109,8 @@ public sealed class GetOfficeMarkdownHeadingCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (MinLevel > MaxLevel)
-        {
+    protected override void ProcessRecord() {
+        if (MinLevel > MaxLevel) {
             throw new PSArgumentException("-MinLevel cannot be greater than -MaxLevel.");
         }
 
@@ -122,7 +119,7 @@ protected override void ProcessRecord()
             ParameterSetName,
             ParameterSetDocument,
             Document,
-            InputPath,
+            Path,
             Text,
             this);
 
@@ -136,24 +133,20 @@ protected override void ProcessRecord()
             ? null
             : new WildcardPattern(Anchor!.TrimStart('#'), wildcardOptions);
 
-        foreach (var heading in document.GetHeadingInfos())
-        {
-            if (heading.Level < MinLevel || heading.Level > MaxLevel)
-            {
+        foreach (var heading in document.GetHeadingInfos()) {
+            if (heading.Level < MinLevel || heading.Level > MaxLevel) {
                 continue;
             }
 
-            if (textPattern != null && !textPattern.IsMatch(heading.Text))
-            {
+            if (textPattern != null && !textPattern.IsMatch(heading.Text)) {
                 continue;
             }
 
-            if (anchorPattern != null && !anchorPattern.IsMatch(heading.Anchor))
-            {
+            if (anchorPattern != null && !anchorPattern.IsMatch(heading.Anchor)) {
                 continue;
             }
 
             WriteObject(heading);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownNodeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownNodeCommand.cs
index 52290bbb..8c629cee 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownNodeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownNodeCommand.cs
@@ -24,8 +24,7 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Cmdlet(VerbsCommon.Get, "OfficeMarkdownNode", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(PSObject), typeof(MarkdownObject))]
 public sealed class GetOfficeMarkdownNodeCommand : PSCmdlet
-    , IMarkdownReaderOptionSource
-{
+    , IMarkdownReaderOptionSource {
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
     private const string ParameterSetText = "Text";
@@ -36,8 +35,8 @@ public sealed class GetOfficeMarkdownNodeCommand : PSCmdlet
 
     /// Path to the Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown text to parse.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetText)]
@@ -108,8 +107,7 @@ public sealed class GetOfficeMarkdownNodeCommand : PSCmdlet
     public SwitchParameter Raw { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var document = ResolveDocument();
         var wildcardOptions = CaseSensitive
             ? WildcardOptions.None
@@ -121,63 +119,51 @@ protected override void ProcessRecord()
         WriteNode(document, depth: 0, path: "Document", nodeTypePattern);
     }
 
-    private MarkdownDoc ResolveDocument()
-    {
-        if (ParameterSetName == ParameterSetDocument)
-        {
+    private MarkdownDoc ResolveDocument() {
+        if (ParameterSetName == ParameterSetDocument) {
             return Document ?? throw new PSArgumentException("Provide a Markdown document.");
         }
 
         var options = MarkdownOptionUtilities.BuildReaderOptions(this);
 
         string markdown;
-        if (ParameterSetName == ParameterSetPath)
-        {
-            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-            if (!File.Exists(resolvedPath))
-            {
+        if (ParameterSetName == ParameterSetPath) {
+            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+            if (!File.Exists(resolvedPath)) {
                 throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
             }
 
             markdown = File.ReadAllText(resolvedPath, Encoding.UTF8);
-        }
-        else
-        {
+        } else {
             markdown = Text ?? string.Empty;
         }
 
         return MarkdownReader.ParseWithSyntaxTree(markdown, options).Document;
     }
 
-    private void WriteNode(MarkdownObject node, int depth, string path, WildcardPattern? nodeTypePattern)
-    {
-        if (depth > MaxDepth)
-        {
+    private void WriteNode(MarkdownObject node, int depth, string path, WildcardPattern? nodeTypePattern) {
+        if (depth > MaxDepth) {
             return;
         }
 
         var typeName = node.GetType().Name;
-        if (nodeTypePattern == null || nodeTypePattern.IsMatch(typeName))
-        {
+        if (nodeTypePattern == null || nodeTypePattern.IsMatch(typeName)) {
             WriteObject(Raw ? node : CreateNodeRecord(node, depth, path, typeName));
         }
 
-        if (depth == MaxDepth)
-        {
+        if (depth == MaxDepth) {
             return;
         }
 
         var children = node.ChildObjects;
-        for (var i = 0; i < children.Count; i++)
-        {
+        for (var i = 0; i < children.Count; i++) {
             var child = children[i];
             var childPath = path + "/" + child.GetType().Name + "[" + i.ToString(System.Globalization.CultureInfo.InvariantCulture) + "]";
             WriteNode(child, depth + 1, childPath, nodeTypePattern);
         }
     }
 
-    private static PSObject CreateNodeRecord(MarkdownObject node, int depth, string path, string typeName)
-    {
+    private static PSObject CreateNodeRecord(MarkdownObject node, int depth, string path, string typeName) {
         var record = new PSObject();
         var span = node.SourceSpan;
 
@@ -197,10 +183,8 @@ private static PSObject CreateNodeRecord(MarkdownObject node, int depth, string
         return record;
     }
 
-    private static string? GetText(MarkdownObject node)
-    {
-        return node switch
-        {
+    private static string? GetText(MarkdownObject node) {
+        return node switch {
             HeadingBlock heading => heading.Text,
             CodeBlock code => code.Content,
             ImageBlock image => image.Alt,
@@ -208,16 +192,13 @@ private static PSObject CreateNodeRecord(MarkdownObject node, int depth, string
         };
     }
 
-    private static string? GetMarkdownPreview(MarkdownObject node)
-    {
-        if (node is not IMarkdownBlock block)
-        {
+    private static string? GetMarkdownPreview(MarkdownObject node) {
+        if (node is not IMarkdownBlock block) {
             return null;
         }
 
         var markdown = block.RenderMarkdown();
-        if (string.IsNullOrWhiteSpace(markdown))
-        {
+        if (string.IsNullOrWhiteSpace(markdown)) {
             return null;
         }
 
@@ -227,4 +208,4 @@ private static PSObject CreateNodeRecord(MarkdownObject node, int depth, string
             ? markdown
             : markdown.Substring(0, maxLength) + "...";
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownTableCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownTableCommand.cs
index d5c6c1e6..393cb05d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownTableCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/GetOfficeMarkdownTableCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Cmdlet(VerbsCommon.Get, "OfficeMarkdownTable", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(TableBlock), typeof(PSObject))]
 public sealed class GetOfficeMarkdownTableCommand : PSCmdlet
-    , IMarkdownReaderOptionSource
-{
+    , IMarkdownReaderOptionSource {
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
     private const string ParameterSetText = "Text";
@@ -28,8 +27,8 @@ public sealed class GetOfficeMarkdownTableCommand : PSCmdlet
 
     /// Path to the Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown text to parse.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetText)]
@@ -87,41 +86,34 @@ public sealed class GetOfficeMarkdownTableCommand : PSCmdlet
     MarkdownReaderOptions? IMarkdownReaderOptionSource.ReaderOptions => Options;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var document = MarkdownDocumentResolver.Resolve(
             this,
             ParameterSetName,
             ParameterSetDocument,
             Document,
-            InputPath,
+            Path,
             Text,
             this);
 
-        foreach (var table in document.DescendantTables())
-        {
-            if (!AsObject)
-            {
+        foreach (var table in document.DescendantTables()) {
+            if (!AsObject) {
                 WriteObject(table);
                 continue;
             }
 
-            foreach (var row in ConvertTableRows(table))
-            {
+            foreach (var row in ConvertTableRows(table)) {
                 WriteObject(row);
             }
         }
     }
 
-    private static IEnumerable ConvertTableRows(TableBlock table)
-    {
+    private static IEnumerable ConvertTableRows(TableBlock table) {
         var columnNames = GetColumnNames(table);
 
-        foreach (var row in table.Rows)
-        {
+        foreach (var row in table.Rows) {
             var item = new PSObject();
-            for (var i = 0; i < columnNames.Count; i++)
-            {
+            for (var i = 0; i < columnNames.Count; i++) {
                 var value = i < row.Count ? row[i] : string.Empty;
                 item.Properties.Add(new PSNoteProperty(columnNames[i], value));
             }
@@ -130,36 +122,28 @@ private static IEnumerable ConvertTableRows(TableBlock table)
         }
     }
 
-    private static IReadOnlyList GetColumnNames(TableBlock table)
-    {
+    private static IReadOnlyList GetColumnNames(TableBlock table) {
         var columnCount = table.Headers.Count;
-        foreach (var row in table.Rows)
-        {
-            if (row.Count > columnCount)
-            {
+        foreach (var row in table.Rows) {
+            if (row.Count > columnCount) {
                 columnCount = row.Count;
             }
         }
 
         var names = new List(columnCount);
         var seen = new Dictionary(StringComparer.OrdinalIgnoreCase);
-        for (var i = 0; i < columnCount; i++)
-        {
+        for (var i = 0; i < columnCount; i++) {
             var name = i < table.Headers.Count ? table.Headers[i] : null;
-            if (string.IsNullOrWhiteSpace(name))
-            {
+            if (string.IsNullOrWhiteSpace(name)) {
                 name = "Column" + (i + 1).ToString(System.Globalization.CultureInfo.InvariantCulture);
             }
 
             var baseName = name!.Trim();
-            if (seen.TryGetValue(baseName, out var duplicateCount))
-            {
+            if (seen.TryGetValue(baseName, out var duplicateCount)) {
                 duplicateCount++;
                 seen[baseName] = duplicateCount;
                 baseName += duplicateCount.ToString(System.Globalization.CultureInfo.InvariantCulture);
-            }
-            else
-            {
+            } else {
                 seen[baseName] = 1;
             }
 
@@ -168,4 +152,4 @@ private static IReadOnlyList GetColumnNames(TableBlock table)
 
         return names;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs
index 449be781..9d6b881e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs
@@ -2,9 +2,7 @@
 using System.IO;
 using System.Management.Automation;
 using System.Text;
-using OfficeIMO.Drawing;
 using OfficeIMO.Markdown;
-using OfficeIMO.Markdown.Pdf;
 using PSWriteOffice.Services.Markdown;
 using PSWriteOffice.Services.Pdf;
 
@@ -33,13 +31,11 @@ namespace PSWriteOffice.Cmdlets.Markdown;
 [Alias("MarkdownNew")]
 [OutputType(typeof(FileInfo), typeof(MarkdownDoc))]
 public sealed class NewOfficeMarkdownCommand : PSCmdlet
-    , IMarkdownWriteOptionSource
-    , IMarkdownPdfOptionSource
-{
+    , IMarkdownWriteOptionSource {
     /// Destination path for the Markdown file.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("FilePath", "Path")]
-    public string OutputPath { get; set; } = string.Empty;
+    [Alias("FilePath", "OutputPath")]
+    public string Path { get; set; } = string.Empty;
 
     /// DSL scriptblock describing Markdown content.
     [Parameter(Position = 1)]
@@ -53,10 +49,6 @@ public sealed class NewOfficeMarkdownCommand : PSCmdlet
     [Parameter]
     public SwitchParameter NoSave { get; set; }
 
-    /// Optional PDF path to create from the same Markdown document.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
     /// Optional Markdown writer options.
     [Parameter]
     public MarkdownWriteOptions? WriteOptions { get; set; }
@@ -77,162 +69,41 @@ public sealed class NewOfficeMarkdownCommand : PSCmdlet
     [Parameter]
     public string? UnorderedListMarker { get; set; }
 
-    /// Advanced Markdown PDF options. Friendly PDF parameters override matching values.
-    [Parameter]
-    public MarkdownPdfSaveOptions? MarkdownPdfOptions { get; set; }
-
-    /// Underlying OfficeIMO.Pdf options used by Markdown PDF export.
-    [Parameter]
-    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
-
-    /// Built-in Markdown PDF visual theme.
-    [Parameter]
-    public OfficeVisualThemeKind? PdfTheme { get; set; }
-
-    /// Default font family used by Markdown PDF export.
-    [Parameter]
-    public string? PdfFontFamily { get; set; }
-
-    /// PDF title metadata.
-    [Parameter]
-    public string? PdfTitle { get; set; }
-
-    /// PDF author metadata.
-    [Parameter]
-    public string? PdfAuthor { get; set; }
-
-    /// PDF subject metadata.
-    [Parameter]
-    public string? PdfSubject { get; set; }
-
-    /// PDF keywords metadata.
-    [Parameter]
-    public string? PdfKeywords { get; set; }
-
-    /// Base directory used to resolve local Markdown images during PDF export.
-    [Parameter]
-    public string? PdfBaseDirectory { get; set; }
-
-    /// Apply the built-in Word-like Markdown PDF baseline theme.
-    [Parameter]
-    public bool? PdfApplyWordLikeTheme { get; set; }
-
-    /// Embed supported local image files in Markdown PDF output.
-    [Parameter]
-    public bool? PdfIncludeLocalImages { get; set; }
-
-    /// Embed supported data URI images in Markdown PDF output.
-    [Parameter]
-    public bool? PdfIncludeDataUriImages { get; set; }
-
-    /// Require local images to resolve under the base directory.
-    [Parameter]
-    public bool? PdfRestrictLocalImagesToBaseDirectory { get; set; }
-
-    /// Maximum decoded bytes for one data URI image in Markdown PDF output.
-    [Parameter]
-    public int? PdfMaximumDataUriImageBytes { get; set; }
-
-    /// Fallback PDF image width in points.
-    [Parameter]
-    public double? PdfDefaultImageWidth { get; set; }
-
-    /// Fallback PDF image height in points.
-    [Parameter]
-    public double? PdfDefaultImageHeight { get; set; }
-
-    /// Controls how YAML front matter appears in the PDF body.
-    [Parameter]
-    public MarkdownPdfFrontMatterRenderMode? PdfFrontMatterRenderMode { get; set; }
-
-    /// Use front matter values to select a visual theme.
-    [Parameter]
-    public bool? PdfUseFrontMatterVisualTheme { get; set; }
-
-    /// Use front matter values as PDF metadata.
-    [Parameter]
-    public bool? PdfUseFrontMatterMetadata { get; set; }
-
-    /// Use the first Markdown heading as the PDF title when no title is supplied.
-    [Parameter]
-    public bool? PdfUseFirstHeadingAsTitle { get; set; }
-
-    /// Create PDF outlines from Markdown headings.
-    [Parameter]
-    public bool? PdfCreateOutlineFromHeadings { get; set; }
-
-    /// Variable name that receives Markdown PDF export warnings.
-    [Parameter]
-    public string? PdfWarningVariable { get; set; }
-
-    /// Variable name that receives the Markdown PDF conversion report.
-    [Parameter]
-    public string? PdfConversionReportVariable { get; set; }
-
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var fullPath = GetResolvedPath();
-        if (!NoSave.IsPresent && !PdfCommandUtilities.ShouldWrite(this, fullPath, "Write new Markdown document"))
-        {
+        if (!NoSave.IsPresent && !PdfCommandUtilities.ShouldWrite(this, fullPath, "Write new Markdown document")) {
             return;
         }
 
         var document = MarkdownDoc.Create();
-        if (Content != null)
-        {
-            using (MarkdownDslContext.Enter(document))
-            {
+        if (Content != null) {
+            using (MarkdownDslContext.Enter(document)) {
                 Content.InvokeReturnAsIs();
             }
         }
 
-        if (NoSave.IsPresent)
-        {
+        if (NoSave.IsPresent) {
             WriteObject(document);
             return;
         }
 
-        var directory = Path.GetDirectoryName(fullPath);
-        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-        {
+        var directory = System.IO.Path.GetDirectoryName(fullPath);
+        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
             Directory.CreateDirectory(directory);
         }
 
         File.WriteAllText(fullPath, document.ToMarkdown(MarkdownOptionUtilities.BuildWriteOptions(this)), new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
-        SavePdfIfRequested(document, Path.GetDirectoryName(fullPath));
-
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(new FileInfo(fullPath));
         }
     }
 
-    private string GetResolvedPath()
-    {
-        var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-        return Path.IsPathRooted(providerPath)
+    private string GetResolvedPath() {
+        var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        return System.IO.Path.IsPathRooted(providerPath)
             ? providerPath
-            : Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
+            : System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
     }
 
-    private void SavePdfIfRequested(MarkdownDoc document, string? fallbackBaseDirectory)
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write Markdown PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        var options = MarkdownOptionUtilities.BuildPdfOptions(this, this, fallbackBaseDirectory);
-        var result = document.SaveAsPdf(pdfPath, options);
-        MarkdownOptionUtilities.SetPdfResultVariables(this, this, result);
-        result.RequireSuccess();
-    }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownPdfOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownPdfOptionsCommand.cs
new file mode 100644
index 00000000..55815961
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownPdfOptionsCommand.cs
@@ -0,0 +1,137 @@
+using System.Management.Automation;
+using OfficeIMO.Drawing;
+using OfficeIMO.Markdown.Pdf;
+using PSWriteOffice.Services.Markdown;
+
+namespace PSWriteOffice.Cmdlets.Markdown;
+
+/// Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf.
+/// 
+///   Allow local report images and apply PDF metadata.
+///   PS> 
+///   $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -Author 'Evotec' -IncludeLocalImages -BaseDirectory .\Assets
+/// Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options
+///   Builds a typed options object through ordinary PowerShell parameters; no hashtable or .NET construction is required.
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeMarkdownPdfOptions")]
+[OutputType(typeof(MarkdownPdfSaveOptions))]
+public sealed class NewOfficeMarkdownPdfOptionsCommand : PSCmdlet, IMarkdownPdfOptionSource {
+    /// Existing Markdown PDF options to clone and override.
+    [Parameter(ValueFromPipeline = true)]
+    public MarkdownPdfSaveOptions? Options { get; set; }
+
+    /// Underlying low-level OfficeIMO PDF options.
+    [Parameter]
+    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
+
+    /// Built-in visual theme.
+    [Parameter]
+    public OfficeVisualThemeKind? Theme { get; set; }
+
+    /// Default font family.
+    [Parameter]
+    public string? FontFamily { get; set; }
+
+    /// PDF title metadata.
+    [Parameter]
+    public string? Title { get; set; }
+
+    /// PDF author metadata.
+    [Parameter]
+    public string? Author { get; set; }
+
+    /// PDF subject metadata.
+    [Parameter]
+    public string? Subject { get; set; }
+
+    /// PDF keywords metadata.
+    [Parameter]
+    public string? Keywords { get; set; }
+
+    /// Base directory used to resolve local Markdown images.
+    [Parameter]
+    public string? BaseDirectory { get; set; }
+
+    /// Apply the built-in Word-like Markdown PDF baseline theme.
+    [Parameter]
+    public SwitchParameter ApplyWordLikeTheme { get; set; }
+
+    /// Embed supported local image files.
+    [Parameter]
+    public SwitchParameter IncludeLocalImages { get; set; }
+
+    /// Embed supported data URI images.
+    [Parameter]
+    public SwitchParameter IncludeDataUriImages { get; set; }
+
+    /// Require local images to resolve under BaseDirectory.
+    [Parameter]
+    public SwitchParameter RestrictLocalImagesToBaseDirectory { get; set; }
+
+    /// Maximum decoded bytes for one data URI image.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaximumDataUriImageBytes { get; set; }
+
+    /// Fallback image width in PDF points.
+    [Parameter]
+    [ValidateRange(double.Epsilon, double.MaxValue)]
+    public double? DefaultImageWidth { get; set; }
+
+    /// Fallback image height in PDF points.
+    [Parameter]
+    [ValidateRange(double.Epsilon, double.MaxValue)]
+    public double? DefaultImageHeight { get; set; }
+
+    /// Controls how YAML front matter appears in the PDF body.
+    [Parameter]
+    public MarkdownPdfFrontMatterRenderMode? FrontMatterRenderMode { get; set; }
+
+    /// Use front matter values to select a visual theme.
+    [Parameter]
+    public SwitchParameter UseFrontMatterVisualTheme { get; set; }
+
+    /// Use front matter values as PDF metadata.
+    [Parameter]
+    public SwitchParameter UseFrontMatterMetadata { get; set; }
+
+    /// Use the first Markdown heading as the PDF title when no title is supplied.
+    [Parameter]
+    public SwitchParameter UseFirstHeadingAsTitle { get; set; }
+
+    /// Create PDF outlines from Markdown headings.
+    [Parameter]
+    public SwitchParameter CreateOutlineFromHeadings { get; set; }
+
+    MarkdownPdfSaveOptions? IMarkdownPdfOptionSource.MarkdownPdfOptions => Options;
+    OfficeIMO.Pdf.PdfOptions? IMarkdownPdfOptionSource.PdfOptions => PdfOptions;
+    OfficeVisualThemeKind? IMarkdownPdfOptionSource.PdfTheme => Theme;
+    string? IMarkdownPdfOptionSource.PdfFontFamily => FontFamily;
+    string? IMarkdownPdfOptionSource.PdfTitle => Title;
+    string? IMarkdownPdfOptionSource.PdfAuthor => Author;
+    string? IMarkdownPdfOptionSource.PdfSubject => Subject;
+    string? IMarkdownPdfOptionSource.PdfKeywords => Keywords;
+    string? IMarkdownPdfOptionSource.PdfBaseDirectory => BaseDirectory;
+    bool? IMarkdownPdfOptionSource.PdfApplyWordLikeTheme => GetBoundSwitch(nameof(ApplyWordLikeTheme), ApplyWordLikeTheme);
+    bool? IMarkdownPdfOptionSource.PdfIncludeLocalImages => GetBoundSwitch(nameof(IncludeLocalImages), IncludeLocalImages);
+    bool? IMarkdownPdfOptionSource.PdfIncludeDataUriImages => GetBoundSwitch(nameof(IncludeDataUriImages), IncludeDataUriImages);
+    bool? IMarkdownPdfOptionSource.PdfRestrictLocalImagesToBaseDirectory => GetBoundSwitch(nameof(RestrictLocalImagesToBaseDirectory), RestrictLocalImagesToBaseDirectory);
+    int? IMarkdownPdfOptionSource.PdfMaximumDataUriImageBytes => MaximumDataUriImageBytes;
+    double? IMarkdownPdfOptionSource.PdfDefaultImageWidth => DefaultImageWidth;
+    double? IMarkdownPdfOptionSource.PdfDefaultImageHeight => DefaultImageHeight;
+    MarkdownPdfFrontMatterRenderMode? IMarkdownPdfOptionSource.PdfFrontMatterRenderMode => FrontMatterRenderMode;
+    bool? IMarkdownPdfOptionSource.PdfUseFrontMatterVisualTheme => GetBoundSwitch(nameof(UseFrontMatterVisualTheme), UseFrontMatterVisualTheme);
+    bool? IMarkdownPdfOptionSource.PdfUseFrontMatterMetadata => GetBoundSwitch(nameof(UseFrontMatterMetadata), UseFrontMatterMetadata);
+    bool? IMarkdownPdfOptionSource.PdfUseFirstHeadingAsTitle => GetBoundSwitch(nameof(UseFirstHeadingAsTitle), UseFirstHeadingAsTitle);
+    bool? IMarkdownPdfOptionSource.PdfCreateOutlineFromHeadings => GetBoundSwitch(nameof(CreateOutlineFromHeadings), CreateOutlineFromHeadings);
+    string? IMarkdownPdfOptionSource.PdfWarningVariable => null;
+    string? IMarkdownPdfOptionSource.PdfConversionReportVariable => null;
+
+    /// 
+    protected override void ProcessRecord() {
+        WriteObject(MarkdownOptionUtilities.BuildPdfOptions(this, this, fallbackBaseDirectory: null));
+    }
+
+    private bool? GetBoundSwitch(string name, SwitchParameter value) =>
+        MyInvocation.BoundParameters.ContainsKey(name) ? value.IsPresent : null;
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs b/Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs
index 20e72d1e..8d52b4de 100644
--- a/Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs
@@ -1,39 +1,31 @@
 using System.IO;
 using System.Management.Automation;
 using System.Text;
-using OfficeIMO.Drawing;
 using OfficeIMO.Markdown;
-using OfficeIMO.Markdown.Pdf;
 using PSWriteOffice.Services.Markdown;
 using PSWriteOffice.Services.Pdf;
 
 namespace PSWriteOffice.Cmdlets.Markdown;
 
-/// Saves a Markdown document and optionally creates a PDF sidecar.
+/// Saves a Markdown document without changing its lifetime.
 /// 
-///   Save Markdown and PDF outputs.
+///   Save a Markdown document.
 ///   PS> 
-///   $doc | Save-OfficeMarkdown -Path .\Report.md -PdfPath .\Report.pdf
-///   Writes both artifacts from the same Markdown document model.
+///   $doc | Save-OfficeMarkdown -Path .\Report.md
+///   Writes the Markdown artifact and keeps the document available for further changes.
 /// 
 [Cmdlet(VerbsData.Save, "OfficeMarkdown", SupportsShouldProcess = true)]
-[OutputType(typeof(MarkdownDoc), typeof(FileInfo))]
+[OutputType(typeof(MarkdownDoc))]
 public sealed class SaveOfficeMarkdownCommand : PSCmdlet
-    , IMarkdownWriteOptionSource
-    , IMarkdownPdfOptionSource
-{
+    , IMarkdownWriteOptionSource {
     /// Markdown document to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0)]
     public MarkdownDoc Document { get; set; } = null!;
 
     /// Destination Markdown path.
-    [Parameter(Position = 1)]
+    [Parameter(Mandatory = true, Position = 1)]
     [Alias("FilePath")]
-    public string? Path { get; set; }
-
-    /// Optional PDF path to create from the same Markdown document.
-    [Parameter]
-    public string? PdfPath { get; set; }
+    public string Path { get; set; } = string.Empty;
 
     /// Optional Markdown writer options.
     [Parameter]
@@ -55,155 +47,23 @@ public sealed class SaveOfficeMarkdownCommand : PSCmdlet
     [Parameter]
     public string? UnorderedListMarker { get; set; }
 
-    /// Advanced Markdown PDF options. Friendly PDF parameters override matching values.
-    [Parameter]
-    public MarkdownPdfSaveOptions? MarkdownPdfOptions { get; set; }
-
-    /// Underlying OfficeIMO.Pdf options used by Markdown PDF export.
-    [Parameter]
-    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
-
-    /// Built-in Markdown PDF visual theme.
-    [Parameter]
-    public OfficeVisualThemeKind? PdfTheme { get; set; }
-
-    /// Default font family used by Markdown PDF export.
-    [Parameter]
-    public string? PdfFontFamily { get; set; }
-
-    /// PDF title metadata.
-    [Parameter]
-    public string? PdfTitle { get; set; }
-
-    /// PDF author metadata.
-    [Parameter]
-    public string? PdfAuthor { get; set; }
-
-    /// PDF subject metadata.
-    [Parameter]
-    public string? PdfSubject { get; set; }
-
-    /// PDF keywords metadata.
-    [Parameter]
-    public string? PdfKeywords { get; set; }
-
-    /// Base directory used to resolve local Markdown images during PDF export.
-    [Parameter]
-    public string? PdfBaseDirectory { get; set; }
-
-    /// Apply the built-in Word-like Markdown PDF baseline theme.
-    [Parameter]
-    public bool? PdfApplyWordLikeTheme { get; set; }
-
-    /// Embed supported local image files in Markdown PDF output.
-    [Parameter]
-    public bool? PdfIncludeLocalImages { get; set; }
-
-    /// Embed supported data URI images in Markdown PDF output.
-    [Parameter]
-    public bool? PdfIncludeDataUriImages { get; set; }
-
-    /// Require local images to resolve under the base directory.
-    [Parameter]
-    public bool? PdfRestrictLocalImagesToBaseDirectory { get; set; }
-
-    /// Maximum decoded bytes for one data URI image in Markdown PDF output.
-    [Parameter]
-    public int? PdfMaximumDataUriImageBytes { get; set; }
-
-    /// Fallback PDF image width in points.
-    [Parameter]
-    public double? PdfDefaultImageWidth { get; set; }
-
-    /// Fallback PDF image height in points.
-    [Parameter]
-    public double? PdfDefaultImageHeight { get; set; }
-
-    /// Controls how YAML front matter appears in the PDF body.
-    [Parameter]
-    public MarkdownPdfFrontMatterRenderMode? PdfFrontMatterRenderMode { get; set; }
-
-    /// Use front matter values to select a visual theme.
-    [Parameter]
-    public bool? PdfUseFrontMatterVisualTheme { get; set; }
-
-    /// Use front matter values as PDF metadata.
-    [Parameter]
-    public bool? PdfUseFrontMatterMetadata { get; set; }
-
-    /// Use the first Markdown heading as the PDF title when no title is supplied.
-    [Parameter]
-    public bool? PdfUseFirstHeadingAsTitle { get; set; }
-
-    /// Create PDF outlines from Markdown headings.
-    [Parameter]
-    public bool? PdfCreateOutlineFromHeadings { get; set; }
-
-    /// Variable name that receives Markdown PDF export warnings.
-    [Parameter]
-    public string? PdfWarningVariable { get; set; }
-
-    /// Variable name that receives the Markdown PDF conversion report.
-    [Parameter]
-    public string? PdfConversionReportVariable { get; set; }
-
     /// Emit the Markdown document rather than the saved file.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(PdfPath) && !PassThru.IsPresent)
-        {
-            throw new PSInvalidOperationException("Use -Path, -PdfPath, or -PassThru when saving a Markdown document.");
-        }
-
-        FileInfo? savedFile = null;
-        if (!string.IsNullOrWhiteSpace(Path))
-        {
-            var fullPath = PdfCommandUtilities.ResolvePath(this, Path!);
-            if (!PdfCommandUtilities.ShouldWrite(this, fullPath, "Save Markdown document"))
-            {
-                return;
-            }
-
-            PdfCommandUtilities.EnsureDirectory(fullPath);
-            File.WriteAllText(fullPath, Document.ToMarkdown(MarkdownOptionUtilities.BuildWriteOptions(this)), new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
-            savedFile = new FileInfo(fullPath);
+    protected override void ProcessRecord() {
+        var fullPath = PdfCommandUtilities.ResolvePath(this, Path);
+        if (!PdfCommandUtilities.ShouldWrite(this, fullPath, "Save Markdown document")) {
+            return;
         }
 
-        if (!string.IsNullOrWhiteSpace(PdfPath))
-        {
-            var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-            if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write Markdown PDF"))
-            {
-                return;
-            }
+        PdfCommandUtilities.EnsureDirectory(fullPath);
+        File.WriteAllText(fullPath, Document.ToMarkdown(MarkdownOptionUtilities.BuildWriteOptions(this)), new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
 
-            PdfCommandUtilities.EnsureDirectory(pdfPath);
-            var options = MarkdownOptionUtilities.BuildPdfOptions(this, this, ResolvePdfBaseDirectory(savedFile));
-            var result = Document.SaveAsPdf(pdfPath, options);
-            MarkdownOptionUtilities.SetPdfResultVariables(this, this, result);
-            result.RequireSuccess();
+        if (PassThru.IsPresent) {
+            WriteObject(Document);
         }
-
-        WriteObject(PassThru.IsPresent ? Document : savedFile ?? (object)Document);
     }
 
-    private string? ResolvePdfBaseDirectory(FileInfo? savedFile)
-    {
-        if (savedFile?.DirectoryName != null)
-        {
-            return savedFile.DirectoryName;
-        }
-
-        if (!string.IsNullOrWhiteSpace(PdfPath))
-        {
-            var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-            return System.IO.Path.GetDirectoryName(pdfPath);
-        }
-
-        return null;
-    }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/OfficeMutationCmdlet.cs b/Sources/PSWriteOffice/Cmdlets/OfficeMutationCmdlet.cs
new file mode 100644
index 00000000..56775c13
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OfficeMutationCmdlet.cs
@@ -0,0 +1,37 @@
+using System.IO;
+using System.Management.Automation;
+
+namespace PSWriteOffice.Cmdlets;
+
+/// Base class for mutating commands that are quiet unless -PassThru is requested.
+public abstract class OfficeMutationCmdlet : PSCmdlet {
+    /// Emit the object created or changed by the command.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// Writes the mutated object only when  is present.
+    /// Object created or changed by the command.
+    protected void WritePassThru(object? value) {
+        if (PassThru.IsPresent && value != null) {
+            WriteObject(value);
+        }
+    }
+
+    /// Emits a saved file for an owned path-based document, or the still-live document otherwise.
+    /// Document changed by the command.
+    /// Whether the command opened and will dispose the document.
+    /// Path used to open an owned document.
+    protected void WritePassThru(object document, bool ownsDocument, string? inputPath) {
+        if (!PassThru.IsPresent) {
+            return;
+        }
+
+        if (!ownsDocument) {
+            WriteObject(document);
+            return;
+        }
+
+        var path = SessionState.Path.GetUnresolvedProviderPathFromPSPath(inputPath ?? string.Empty);
+        WriteObject(new FileInfo(path));
+    }
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentHeadingCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentHeadingCommand.cs
new file mode 100644
index 00000000..7708b6c7
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentHeadingCommand.cs
@@ -0,0 +1,39 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Adds a heading to an OpenDocument text document.
+/// 
+///   Add a level-two heading inside an OpenDocument DSL.
+///   PS> 
+///   Add-OfficeOpenDocumentHeading -Text 'Results' -Level 2
+/// 
+[Cmdlet(VerbsCommon.Add, "OfficeOpenDocumentHeading")]
+[OutputType(typeof(OdtParagraph))]
+public sealed class AddOfficeOpenDocumentHeadingCommand : PSCmdlet {
+    /// OpenDocument text document. Omit inside New-OfficeOpenDocument -Content.
+    [Parameter(ValueFromPipeline = true)]
+    public OdtDocument? Document { get; set; }
+
+    /// Heading text.
+    [Parameter(Mandatory = true, Position = 0)]
+    public string Text { get; set; } = string.Empty;
+
+    /// Heading level from 1 through 10.
+    [Parameter]
+    [ValidateRange(1, 10)]
+    public int Level { get; set; } = 1;
+
+    /// Emit the created heading paragraph.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        OdtDocument document = Document ?? OpenDocumentDslContext.Require(this).RequireDocument(this, "text");
+        OdtParagraph heading = document.AddHeading(Text, Level);
+        if (PassThru.IsPresent) WriteObject(heading);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentParagraphCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentParagraphCommand.cs
new file mode 100644
index 00000000..60c63a3d
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentParagraphCommand.cs
@@ -0,0 +1,34 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Adds a paragraph to an OpenDocument text document.
+/// 
+///   Add body text in the OpenDocument DSL.
+///   PS> 
+///   New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content { Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice' }
+/// 
+[Cmdlet(VerbsCommon.Add, "OfficeOpenDocumentParagraph")]
+[OutputType(typeof(OdtParagraph))]
+public sealed class AddOfficeOpenDocumentParagraphCommand : PSCmdlet {
+    /// OpenDocument text document. Omit inside New-OfficeOpenDocument -Content.
+    [Parameter(ValueFromPipeline = true)]
+    public OdtDocument? Document { get; set; }
+
+    /// Paragraph text.
+    [Parameter(Mandatory = true, Position = 0)]
+    public string Text { get; set; } = string.Empty;
+
+    /// Emit the created paragraph.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        OdtDocument document = Document ?? OpenDocumentDslContext.Require(this).RequireDocument(this, "text");
+        OdtParagraph paragraph = document.AddParagraph(Text);
+        if (PassThru.IsPresent) WriteObject(paragraph);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSheetCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSheetCommand.cs
new file mode 100644
index 00000000..bd1e8b03
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSheetCommand.cs
@@ -0,0 +1,45 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content.
+/// 
+///   Add a worksheet inside an OpenDocument DSL.
+///   PS> 
+///   Add-OfficeOpenDocumentSheet -Name 'Data' -Content {
+///     Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Status'
+/// }
+/// 
+[Cmdlet(VerbsCommon.Add, "OfficeOpenDocumentSheet")]
+[OutputType(typeof(OdsSheet))]
+public sealed class AddOfficeOpenDocumentSheetCommand : PSCmdlet {
+    /// OpenDocument spreadsheet. Omit inside New-OfficeOpenDocument -Content.
+    [Parameter(ValueFromPipeline = true)]
+    public OdsDocument? Document { get; set; }
+
+    /// Worksheet name.
+    [Parameter(Mandatory = true, Position = 0)]
+    public string Name { get; set; } = string.Empty;
+
+    /// Nested cell commands that use this worksheet as their current target.
+    [Parameter(Position = 1)]
+    public ScriptBlock? Content { get; set; }
+
+    /// Emit the created worksheet.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        OpenDocumentDslContext? context = OpenDocumentDslContext.Current;
+        OdsDocument document = Document ?? OpenDocumentDslContext.Require(this).RequireDocument(this, "spreadsheet");
+        OdsSheet sheet = document.AddSheet(Name);
+        if (Content != null) {
+            if (context == null) throw new PSInvalidOperationException("Nested -Content requires an active New-OfficeOpenDocument -Content scope. For object composition, pass the returned sheet to Set-OfficeOpenDocumentCell.");
+            using (context.Push(sheet)) Content.InvokeReturnAsIs();
+        }
+        if (PassThru.IsPresent) WriteObject(sheet);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSlideCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSlideCommand.cs
new file mode 100644
index 00000000..1aa8ea5d
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSlideCommand.cs
@@ -0,0 +1,45 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Adds a slide to an OpenDocument presentation and optionally runs nested slide content.
+/// 
+///   Add a slide with positioned text.
+///   PS> 
+///   Add-OfficeOpenDocumentSlide -Name 'Summary' -Content {
+///     Add-OfficeOpenDocumentTextBox -Text 'Quarterly summary' -X 2 -Y 2 -Width 20 -Height 3
+/// }
+/// 
+[Cmdlet(VerbsCommon.Add, "OfficeOpenDocumentSlide")]
+[OutputType(typeof(OdpSlide))]
+public sealed class AddOfficeOpenDocumentSlideCommand : PSCmdlet {
+    /// OpenDocument presentation. Omit inside New-OfficeOpenDocument -Content.
+    [Parameter(ValueFromPipeline = true)]
+    public OdpPresentation? Document { get; set; }
+
+    /// Optional unique slide name.
+    [Parameter(Position = 0)]
+    public string? Name { get; set; }
+
+    /// Nested slide commands that use this slide as their current target.
+    [Parameter(Position = 1)]
+    public ScriptBlock? Content { get; set; }
+
+    /// Emit the created slide.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        OpenDocumentDslContext? context = OpenDocumentDslContext.Current;
+        OdpPresentation document = Document ?? OpenDocumentDslContext.Require(this).RequireDocument(this, "presentation");
+        OdpSlide slide = document.AddSlide(Name);
+        if (Content != null) {
+            if (context == null) throw new PSInvalidOperationException("Nested -Content requires an active New-OfficeOpenDocument -Content scope. For object composition, pass the returned slide to Add-OfficeOpenDocumentTextBox.");
+            using (context.Push(slide)) Content.InvokeReturnAsIs();
+        }
+        if (PassThru.IsPresent) WriteObject(slide);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentTextBoxCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentTextBoxCommand.cs
new file mode 100644
index 00000000..2e9e7295
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentTextBoxCommand.cs
@@ -0,0 +1,43 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Adds a positioned text box to an OpenDocument presentation slide.
+/// 
+///   Place a text box using centimetre coordinates.
+///   PS> 
+///   Add-OfficeOpenDocumentTextBox -Text 'Approved' -X 18 -Y 12 -Width 6 -Height 2
+/// 
+[Cmdlet(VerbsCommon.Add, "OfficeOpenDocumentTextBox")]
+[OutputType(typeof(OdpTextBox))]
+public sealed class AddOfficeOpenDocumentTextBoxCommand : PSCmdlet {
+    /// Slide target. Omit inside Add-OfficeOpenDocumentSlide -Content.
+    [Parameter(ValueFromPipeline = true)]
+    public OdpSlide? Slide { get; set; }
+
+    /// Text box content.
+    [Parameter(Mandatory = true, Position = 0)]
+    public string Text { get; set; } = string.Empty;
+
+    /// Horizontal position in centimeters.
+    [Parameter] public double X { get; set; } = 1;
+    /// Vertical position in centimeters.
+    [Parameter] public double Y { get; set; } = 1;
+    /// Width in centimeters.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double Width { get; set; } = 20;
+    /// Height in centimeters.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double Height { get; set; } = 3;
+    /// Optional shape name.
+    [Parameter] public string? Name { get; set; }
+    /// Emit the created text box.
+    [Parameter] public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        OdpSlide slide = Slide ?? OpenDocumentDslContext.Require(this).RequireSlide();
+        OdpTextBox textBox = slide.AddTextBox(OdfRect.FromCentimeters(X, Y, Width, Height), Text, Name);
+        if (PassThru.IsPresent) WriteObject(textBox);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs
index 1252b2f0..6b2155f0 100644
--- a/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs
@@ -9,6 +9,12 @@
 namespace PSWriteOffice.Cmdlets.OpenDocument;
 
 /// Converts native ODT, ODS, or ODP content to Word, Excel, or PowerPoint with fidelity evidence.
+/// 
+///   Convert an ODS spreadsheet to Excel.
+///   PS> 
+///   $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumExpandedCells 250000
+/// ConvertFrom-OfficeOpenDocument -Path .\Status.ods -OutputPath .\Status.xlsx -ExcelOptions $options
+/// 
 [Cmdlet(VerbsData.ConvertFrom, "OfficeOpenDocument", SupportsShouldProcess = true)]
 public sealed class ConvertFromOfficeOpenDocumentCommand : PSCmdlet
 {
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs
index 94b3a8ea..dbfa5046 100644
--- a/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs
@@ -15,6 +15,12 @@
 namespace PSWriteOffice.Cmdlets.OpenDocument;
 
 /// Converts Word, Excel, or PowerPoint content to native OpenDocument with fidelity evidence.
+/// 
+///   Convert Word to ODT and reject lossy conversion.
+///   PS> 
+///   $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters
+/// ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options -FailOnLoss
+/// 
 [Cmdlet(VerbsData.ConvertTo, "OfficeOpenDocument", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
 [OutputType(typeof(OdfConversionResult), typeof(OdfConversionResult), typeof(OdfConversionResult))]
 public sealed class ConvertToOfficeOpenDocumentCommand : PSCmdlet
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/GetOfficeOpenDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/GetOfficeOpenDocumentCommand.cs
index 38528e26..40f43b3e 100644
--- a/Sources/PSWriteOffice/Cmdlets/OpenDocument/GetOfficeOpenDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/GetOfficeOpenDocumentCommand.cs
@@ -16,7 +16,84 @@ public sealed class GetOfficeOpenDocumentCommand : PSCmdlet
     [Parameter]
     public OdfLoadOptions? Options { get; set; }
 
+    /// Password used to decrypt an encrypted OpenDocument package.
+    [Parameter]
+    public string? Password { get; set; }
+
+    /// Maximum source package size in bytes.
+    [Parameter]
+    [ValidateRange(1L, long.MaxValue)]
+    public long? MaxPackageBytes { get; set; }
+
+    /// Maximum number of ZIP entries.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaxEntries { get; set; }
+
+    /// Maximum uncompressed size of one package entry.
+    [Parameter]
+    [ValidateRange(1L, long.MaxValue)]
+    public long? MaxEntryUncompressedBytes { get; set; }
+
+    /// Maximum aggregate uncompressed package size.
+    [Parameter]
+    [ValidateRange(1L, long.MaxValue)]
+    public long? MaxTotalUncompressedBytes { get; set; }
+
+    /// Maximum aggregate PBKDF2 iterations across encrypted entries.
+    [Parameter]
+    [ValidateRange(1L, long.MaxValue)]
+    public long? MaxTotalKdfIterations { get; set; }
+
+    /// Maximum declared expansion ratio for a compressed entry.
+    [Parameter]
+    [ValidateRange(double.Epsilon, double.MaxValue)]
+    public double? MaxCompressionRatio { get; set; }
+
+    /// Maximum archive path depth.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaxDepth { get; set; }
+
+    /// Maximum characters allowed in one parsed XML part.
+    [Parameter]
+    [ValidateRange(1L, long.MaxValue)]
+    public long? MaxXmlCharacters { get; set; }
+
+    /// Maximum element nesting depth in one parsed XML part.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaxXmlDepth { get; set; }
+
     /// 
     protected override void ProcessRecord() => WriteObject(OdfDocument.Load(
-        SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path), Options));
+        SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path), BuildOptions()));
+
+    private OdfLoadOptions BuildOptions() {
+        var options = Options == null
+            ? new OdfLoadOptions()
+            : new OdfLoadOptions {
+                Password = Options.Password,
+                MaxPackageBytes = Options.MaxPackageBytes,
+                MaxEntries = Options.MaxEntries,
+                MaxEntryUncompressedBytes = Options.MaxEntryUncompressedBytes,
+                MaxTotalUncompressedBytes = Options.MaxTotalUncompressedBytes,
+                MaxTotalKdfIterations = Options.MaxTotalKdfIterations,
+                MaxCompressionRatio = Options.MaxCompressionRatio,
+                MaxDepth = Options.MaxDepth,
+                MaxXmlCharacters = Options.MaxXmlCharacters,
+                MaxXmlDepth = Options.MaxXmlDepth
+            };
+        if (Password != null) options.Password = Password;
+        if (MaxPackageBytes.HasValue) options.MaxPackageBytes = MaxPackageBytes.Value;
+        if (MaxEntries.HasValue) options.MaxEntries = MaxEntries.Value;
+        if (MaxEntryUncompressedBytes.HasValue) options.MaxEntryUncompressedBytes = MaxEntryUncompressedBytes.Value;
+        if (MaxTotalUncompressedBytes.HasValue) options.MaxTotalUncompressedBytes = MaxTotalUncompressedBytes.Value;
+        if (MaxTotalKdfIterations.HasValue) options.MaxTotalKdfIterations = MaxTotalKdfIterations.Value;
+        if (MaxCompressionRatio.HasValue) options.MaxCompressionRatio = MaxCompressionRatio.Value;
+        if (MaxDepth.HasValue) options.MaxDepth = MaxDepth.Value;
+        if (MaxXmlCharacters.HasValue) options.MaxXmlCharacters = MaxXmlCharacters.Value;
+        if (MaxXmlDepth.HasValue) options.MaxXmlDepth = MaxXmlDepth.Value;
+        return options;
+    }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeExcelOpenDocumentOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeExcelOpenDocumentOptionsCommand.cs
new file mode 100644
index 00000000..ffc0cf85
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeExcelOpenDocumentOptionsCommand.cs
@@ -0,0 +1,38 @@
+using System.Management.Automation;
+using OfficeIMO.Excel.OpenDocument;
+using OfficeIMO.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Creates Excel/OpenDocument conversion settings.
+/// 
+///   Convert a bounded worksheet area with basic styles.
+///   PS> 
+///   $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumRows 10000 -MaximumColumns 100
+/// ConvertTo-OfficeOpenDocument -Path .\Data.xlsx -OutputPath .\Data.ods -ExcelOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeExcelOpenDocumentOptions")]
+[OutputType(typeof(ExcelOpenDocumentConversionOptions))]
+public sealed class NewOfficeExcelOpenDocumentOptionsCommand : PSCmdlet {
+    /// Whether conversion loss is reported or rejected.
+    [Parameter] public OdfConversionLossPolicy? LossPolicy { get; set; }
+    /// Copy common font, fill, and number-format styles.
+    [Parameter] public SwitchParameter IncludeBasicStyles { get; set; }
+    /// Maximum cells materialized during conversion.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaximumExpandedCells { get; set; }
+    /// Maximum spreadsheet rows.
+    [Parameter] [ValidateRange(1, 1048576)] public int? MaximumRows { get; set; }
+    /// Maximum spreadsheet columns.
+    [Parameter] [ValidateRange(1, 16384)] public int? MaximumColumns { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new ExcelOpenDocumentConversionOptions();
+        if (LossPolicy.HasValue) options.LossPolicy = LossPolicy.Value;
+        if (MyInvocation.BoundParameters.ContainsKey(nameof(IncludeBasicStyles))) options.IncludeBasicStyles = IncludeBasicStyles.IsPresent;
+        if (MaximumExpandedCells.HasValue) options.MaximumExpandedCells = MaximumExpandedCells.Value;
+        if (MaximumRows.HasValue) options.MaximumRows = MaximumRows.Value;
+        if (MaximumColumns.HasValue) options.MaximumColumns = MaximumColumns.Value;
+        WriteObject(options);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs
index b417c2f1..8a823f1a 100644
--- a/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs
@@ -1,14 +1,34 @@
 using System.IO;
 using System.Management.Automation;
 using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
 
 namespace PSWriteOffice.Cmdlets.OpenDocument;
 
 /// Creates a native ODT, ODS, or ODP document.
+/// 
+///   Create an OpenDocument text report.
+///   PS> 
+///   New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content {
+///     Add-OfficeOpenDocumentHeading -Text 'Service report' -Level 1
+///     Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice.'
+/// }
+/// 
+/// 
+///   Create a spreadsheet with typed cells.
+///   PS> 
+///   New-OfficeOpenDocument -Kind Spreadsheet -Path .\Status.ods -Content {
+///     Add-OfficeOpenDocumentSheet -Name 'Services' -Content {
+///         Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Service'
+///         Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value 'Healthy'
+///         Set-OfficeOpenDocumentCell -Row 1 -Column 0 -Value 'Directory'
+///         Set-OfficeOpenDocumentCell -Row 1 -Column 1 -Value $true
+///     }
+/// }
+/// 
 [Cmdlet(VerbsCommon.New, "OfficeOpenDocument", SupportsShouldProcess = true)]
-[OutputType(typeof(OdfDocument))]
-public sealed class NewOfficeOpenDocumentCommand : PSCmdlet
-{
+[OutputType(typeof(OdfDocument), typeof(FileInfo))]
+public sealed class NewOfficeOpenDocumentCommand : PSCmdlet {
     /// OpenDocument text, spreadsheet, or presentation kind.
     [Parameter(Mandatory = true, Position = 0)]
     public OdfDocumentKind Kind { get; set; }
@@ -17,27 +37,49 @@ public sealed class NewOfficeOpenDocumentCommand : PSCmdlet
     [Parameter(Position = 1)]
     public string? Path { get; set; }
 
+    /// DSL scriptblock describing OpenDocument text, spreadsheet, or presentation content.
+    [Parameter(Position = 2)]
+    public ScriptBlock? Content { get; set; }
+
+    /// Skip saving and emit the live OpenDocument model even when -Path is supplied.
+    [Parameter]
+    public SwitchParameter NoSave { get; set; }
+
+    /// Emit the saved file when a destination path is supplied.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
-    protected override void ProcessRecord()
-    {
-        OdfDocument document = Kind switch
-        {
+    protected override void ProcessRecord() {
+        string? path = null;
+        bool save = !string.IsNullOrWhiteSpace(Path) && !NoSave.IsPresent;
+        if (save) {
+            path = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path!);
+            OpenDocumentCommandUtilities.ValidateOpenDocumentExtension(path, Kind, nameof(Path));
+            if (!ShouldProcess(path, "Create OpenDocument package")) {
+                return;
+            }
+        }
+
+        OdfDocument document = Kind switch {
             OdfDocumentKind.Text => OdtDocument.Create(),
             OdfDocumentKind.Spreadsheet => OdsDocument.Create(),
             OdfDocumentKind.Presentation => OdpPresentation.Create(),
             _ => throw new PSArgumentOutOfRangeException(nameof(Kind), Kind, "Use Text, Spreadsheet, or Presentation.")
         };
-        if (!string.IsNullOrWhiteSpace(Path))
-        {
-            var path = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path!);
-            OpenDocumentCommandUtilities.ValidateOpenDocumentExtension(path, Kind, nameof(Path));
-            if (!ShouldProcess(path, "Create OpenDocument package"))
-            {
-                WriteObject(document);
-                return;
+        if (Content != null) {
+            using (OpenDocumentDslContext.Enter(document)) {
+                Content.InvokeReturnAsIs();
+            }
+        }
+
+        if (save) {
+            Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path!) ?? SessionState.Path.CurrentFileSystemLocation.Path);
+            document.Save(path!);
+            if (PassThru.IsPresent) {
+                WriteObject(new FileInfo(path!));
             }
-            Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path) ?? SessionState.Path.CurrentFileSystemLocation.Path);
-            document.Save(path);
+            return;
         }
         WriteObject(document);
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficePowerPointOpenDocumentOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficePowerPointOpenDocumentOptionsCommand.cs
new file mode 100644
index 00000000..0c9234b0
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficePowerPointOpenDocumentOptionsCommand.cs
@@ -0,0 +1,45 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using OfficeIMO.PowerPoint.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Creates PowerPoint/OpenDocument conversion settings.
+/// 
+///   Include slide images, notes, and basic formatting.
+///   PS> 
+///   $options = New-OfficePowerPointOpenDocumentOptions -IncludeImages -IncludeSpeakerNotes -IncludeBasicFormatting
+/// ConvertTo-OfficeOpenDocument -Path .\Deck.pptx -OutputPath .\Deck.odp -PowerPointOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePowerPointOpenDocumentOptions")]
+[OutputType(typeof(PowerPointOpenDocumentConversionOptions))]
+public sealed class NewOfficePowerPointOpenDocumentOptionsCommand : PSCmdlet {
+    /// Whether conversion loss is reported or rejected.
+    [Parameter] public OdfConversionLossPolicy? LossPolicy { get; set; }
+    /// Copy supported embedded images.
+    [Parameter] public SwitchParameter IncludeImages { get; set; }
+    /// Copy plain speaker-note text.
+    [Parameter] public SwitchParameter IncludeSpeakerNotes { get; set; }
+    /// Copy common fills, outlines, and text-run formatting.
+    [Parameter] public SwitchParameter IncludeBasicFormatting { get; set; }
+    /// Maximum rows in converted presentation tables.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxTableRows { get; set; }
+    /// Maximum columns in converted presentation tables.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxTableColumns { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PowerPointOpenDocumentConversionOptions();
+        if (LossPolicy.HasValue) options.LossPolicy = LossPolicy.Value;
+        Apply(nameof(IncludeImages), value => options.IncludeImages = value);
+        Apply(nameof(IncludeSpeakerNotes), value => options.IncludeSpeakerNotes = value);
+        Apply(nameof(IncludeBasicFormatting), value => options.IncludeBasicFormatting = value);
+        if (MaxTableRows.HasValue) options.MaxTableRows = MaxTableRows.Value;
+        if (MaxTableColumns.HasValue) options.MaxTableColumns = MaxTableColumns.Value;
+        WriteObject(options);
+    }
+    private void Apply(string name, System.Action setter) {
+        if (!MyInvocation.BoundParameters.ContainsKey(name)) return;
+        setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeWordOpenDocumentOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeWordOpenDocumentOptionsCommand.cs
new file mode 100644
index 00000000..92eb11fa
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeWordOpenDocumentOptionsCommand.cs
@@ -0,0 +1,33 @@
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using OfficeIMO.Word.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Creates Word/OpenDocument conversion settings.
+/// 
+///   Include Word images and headers during conversion.
+///   PS> 
+///   $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters
+/// ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeWordOpenDocumentOptions")]
+[OutputType(typeof(WordOpenDocumentConversionOptions))]
+public sealed class NewOfficeWordOpenDocumentOptionsCommand : PSCmdlet {
+    /// Whether conversion loss is reported or rejected.
+    [Parameter] public OdfConversionLossPolicy? LossPolicy { get; set; }
+    /// Copy supported inline images.
+    [Parameter] public SwitchParameter IncludeImages { get; set; }
+    /// Copy default headers and footers.
+    [Parameter] public SwitchParameter IncludeHeadersAndFooters { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new WordOpenDocumentConversionOptions();
+        if (LossPolicy.HasValue) options.LossPolicy = LossPolicy.Value;
+        if (IsBound(nameof(IncludeImages))) options.IncludeImages = IncludeImages.IsPresent;
+        if (IsBound(nameof(IncludeHeadersAndFooters))) options.IncludeHeadersAndFooters = IncludeHeadersAndFooters.IsPresent;
+        WriteObject(options);
+    }
+    private bool IsBound(string name) => MyInvocation.BoundParameters.ContainsKey(name);
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/SaveOfficeOpenDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/SaveOfficeOpenDocumentCommand.cs
index f2ea02ce..5741a3a8 100644
--- a/Sources/PSWriteOffice/Cmdlets/OpenDocument/SaveOfficeOpenDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/SaveOfficeOpenDocumentCommand.cs
@@ -7,8 +7,7 @@ namespace PSWriteOffice.Cmdlets.OpenDocument;
 /// Saves a native OpenDocument model with entry-level preservation diagnostics.
 [Cmdlet(VerbsData.Save, "OfficeOpenDocument", SupportsShouldProcess = true)]
 [OutputType(typeof(OdfSaveResult))]
-public sealed class SaveOfficeOpenDocumentCommand : PSCmdlet
-{
+public sealed class SaveOfficeOpenDocumentCommand : PSCmdlet {
     /// OpenDocument model to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     public OdfDocument Document { get; set; } = null!;
@@ -25,18 +24,22 @@ public sealed class SaveOfficeOpenDocumentCommand : PSCmdlet
     [Parameter]
     public SwitchParameter FailOnLoss { get; set; }
 
+    /// Emit the save result, including preservation diagnostics.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var output = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
         OpenDocumentCommandUtilities.ValidateOpenDocumentExtension(output, Document.Kind, nameof(Path));
         if (!ShouldProcess(output, "Save OpenDocument package")) return;
-        if (FailOnLoss.IsPresent)
-        {
+        if (FailOnLoss.IsPresent) {
             Document.Serialize(Options).RequireNoLoss();
         }
         Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
         var result = Document.Save(output, Options);
-        WriteObject(result);
+        if (PassThru.IsPresent) {
+            WriteObject(result);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/OpenDocument/SetOfficeOpenDocumentCellCommand.cs b/Sources/PSWriteOffice/Cmdlets/OpenDocument/SetOfficeOpenDocumentCellCommand.cs
new file mode 100644
index 00000000..8760ad2c
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/OpenDocument/SetOfficeOpenDocumentCellCommand.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Management.Automation;
+using OfficeIMO.OpenDocument;
+using PSWriteOffice.Services.OpenDocument;
+
+namespace PSWriteOffice.Cmdlets.OpenDocument;
+
+/// Sets a typed zero-based cell value in an OpenDocument spreadsheet.
+/// 
+///   Set typed values inside the active worksheet.
+///   PS> 
+///   Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Healthy'
+/// Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value $true
+/// 
+[Cmdlet(VerbsCommon.Set, "OfficeOpenDocumentCell")]
+[OutputType(typeof(OdsCell))]
+public sealed class SetOfficeOpenDocumentCellCommand : PSCmdlet {
+    /// Worksheet target. Omit inside Add-OfficeOpenDocumentSheet -Content.
+    [Parameter(ValueFromPipeline = true)]
+    public OdsSheet? Sheet { get; set; }
+
+    /// Zero-based row index.
+    [Parameter(Mandatory = true)]
+    [ValidateRange(0, long.MaxValue)]
+    public long Row { get; set; }
+
+    /// Zero-based column index.
+    [Parameter(Mandatory = true)]
+    [ValidateRange(0, long.MaxValue)]
+    public long Column { get; set; }
+
+    /// String, number, decimal, boolean, date, date-time offset, or time span value.
+    [Parameter(Mandatory = true, Position = 0)]
+    [AllowNull]
+    public object? Value { get; set; }
+
+    /// Emit the updated cell.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        OdsSheet sheet = Sheet ?? OpenDocumentDslContext.Require(this).RequireSheet();
+        OdsCell cell = sheet.Cell(Row, Column);
+        object? value = Value is PSObject psObject ? psObject.BaseObject : Value;
+        switch (value) {
+            case null: cell.ClearValue(); break;
+            case bool boolean: cell.SetBoolean(boolean); break;
+            case sbyte number: cell.SetNumber(number); break;
+            case byte number: cell.SetNumber(number); break;
+            case short number: cell.SetNumber(number); break;
+            case ushort number: cell.SetNumber(number); break;
+            case int number: cell.SetNumber(number); break;
+            case uint number: cell.SetNumber(number); break;
+            case long number: cell.SetNumber(number); break;
+            case ulong number: cell.SetNumber(number); break;
+            case float number: cell.SetNumber(number); break;
+            case double number: cell.SetNumber(number); break;
+            case decimal number: cell.SetDecimal(number); break;
+            case DateTime date: cell.SetDate(date); break;
+            case DateTimeOffset dateTime: cell.SetDateTime(dateTime); break;
+            case TimeSpan time: cell.SetDuration(time); break;
+            default: cell.SetString(LanguagePrimitives.ConvertTo(value)); break;
+        }
+        if (PassThru.IsPresent) WriteObject(cell);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasCommand.cs
index d41337ca..98f21908 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasCommand.cs
@@ -23,8 +23,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 [Cmdlet(VerbsCommon.Add, "OfficePdfCanvas", SupportsShouldProcess = true)]
 [Alias("PdfCanvasStamp")]
 [OutputType(typeof(FileInfo))]
-public sealed class AddOfficePdfCanvasCommand : PSCmdlet
-{
+public sealed class AddOfficePdfCanvasCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -68,39 +67,32 @@ public sealed class AddOfficePdfCanvasCommand : PSCmdlet
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write canvas-stamped PDF"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write canvas-stamped PDF")) {
             return;
         }
 
         var readOptions = PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent);
         var document = PdfDocument.Open(PdfCommandUtilities.ResolvePath(this, Path), readOptions);
         PdfOptions? renderingOptions = null;
-        if (ConfigureRendering is not null)
-        {
+        if (ConfigureRendering is not null) {
             renderingOptions = new PdfOptions();
             _ = ConfigureRendering.Invoke(renderingOptions);
         }
 
-        var options = new PdfCanvasStampOptions
-        {
+        var options = new PdfCanvasStampOptions {
             BehindContent = BehindContent.IsPresent,
             Opacity = Opacity,
             RenderingOptions = renderingOptions
         };
-        if (!string.IsNullOrWhiteSpace(PageRange))
-        {
+        if (!string.IsNullOrWhiteSpace(PageRange)) {
             options.UseTargetPages(PageRange!);
         }
 
         var result = document.Stamp.Content(
-            (canvas, page) =>
-            {
-                using (PdfCanvasDslContext.Enter(canvas, page))
-                {
+            (canvas, page) => {
+                using (PdfCanvasDslContext.Enter(canvas, page)) {
                     _ = Content.Invoke(canvas, page);
                 }
             },
@@ -108,6 +100,6 @@ protected override void ProcessRecord()
             readOptions);
         PdfCommandUtilities.EnsureDirectory(outputPath);
         result.Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasTextCommand.cs
index 16f53ed1..4dea2b90 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfCanvasTextCommand.cs
@@ -27,8 +27,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficePdfCanvasText", DefaultParameterSetName = ParameterSetText)]
 [Alias("PdfCanvasText")]
-public sealed class AddOfficePdfCanvasTextCommand : PSCmdlet
-{
+public sealed class AddOfficePdfCanvasTextCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetText = "Text";
     private const string ParameterSetRun = "Run";
 
@@ -104,13 +103,11 @@ public sealed class AddOfficePdfCanvasTextCommand : PSCmdlet
     public PdfTextBaseline Baseline { get; set; } = PdfTextBaseline.Normal;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = PdfCanvasDslContext.Require(this);
         var width = Width ?? context.Page.Width - X;
         var height = Height ?? context.Page.Height - Y;
-        if (width <= 0 || height <= 0)
-        {
+        if (width <= 0 || height <= 0) {
             throw new PSArgumentException(
                 "The text area must remain inside the page. Adjust -X/-Y or provide positive -Width/-Height values.");
         }
@@ -129,12 +126,11 @@ protected override void ProcessRecord()
             Align,
             FontSize,
             LineHeight);
+        WritePassThru(context.Page);
     }
 
-    private PdfTextRun[] CreatePlainTextRuns()
-    {
-        if (Text.Length == 0)
-        {
+    private PdfTextRun[] CreatePlainTextRuns() {
+        if (Text.Length == 0) {
             throw new PSArgumentException("Provide at least one text value.");
         }
 
@@ -153,4 +149,4 @@ private PdfTextRun[] CreatePlainTextRuns()
             }
         });
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfPageOverlayCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfPageOverlayCommand.cs
index 80d545c2..62401694 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfPageOverlayCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfPageOverlayCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 [Cmdlet(VerbsCommon.Add, "OfficePdfPageOverlay", SupportsShouldProcess = true)]
 [Alias("PdfPageOverlay")]
 [OutputType(typeof(FileInfo))]
-public sealed class AddOfficePdfPageOverlayCommand : PSCmdlet
-{
+public sealed class AddOfficePdfPageOverlayCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -102,11 +101,9 @@ public sealed class AddOfficePdfPageOverlayCommand : PSCmdlet
     public PdfReadOptions? SourceReadOptions { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write PDF page overlay"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write PDF page overlay")) {
             return;
         }
 
@@ -118,8 +115,7 @@ protected override void ProcessRecord()
             SourceReadOptions,
             SourcePassword,
             IgnoreSourcePermissionRestrictions.IsPresent);
-        var options = new PdfPageOverlayOptions
-        {
+        var options = new PdfPageOverlayOptions {
             SourcePageNumber = SourcePageNumber,
             Fit = Fit,
             HorizontalAlignment = HorizontalAlign,
@@ -131,8 +127,7 @@ protected override void ProcessRecord()
             Opacity = Opacity,
             SourceReadOptions = sourceReadOptions
         };
-        if (!string.IsNullOrWhiteSpace(PageRange))
-        {
+        if (!string.IsNullOrWhiteSpace(PageRange)) {
             options.UseTargetPages(PageRange!);
         }
 
@@ -147,6 +142,6 @@ protected override void ProcessRecord()
 
         PdfCommandUtilities.EnsureDirectory(outputPath);
         result.Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfStampCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfStampCommand.cs
index ff8ddffa..c86c4dbb 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfStampCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/AddOfficePdfStampCommand.cs
@@ -30,8 +30,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 [Cmdlet(VerbsCommon.Add, "OfficePdfStamp", DefaultParameterSetName = ParameterSetText, SupportsShouldProcess = true)]
 [Alias("PdfStamp")]
 [OutputType(typeof(FileInfo))]
-public sealed class AddOfficePdfStampCommand : PSCmdlet
-{
+public sealed class AddOfficePdfStampCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetText = "Text";
     private const string ParameterSetImage = "Image";
 
@@ -101,11 +100,9 @@ public sealed class AddOfficePdfStampCommand : PSCmdlet
     public SwitchParameter Watermark { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write stamped PDF"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write stamped PDF")) {
             return;
         }
 
@@ -117,13 +114,11 @@ protected override void ProcessRecord()
 
         PdfCommandUtilities.EnsureDirectory(outputPath);
         result.Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
 
-    private PdfDocument StampText(PdfDocument document)
-    {
-        var options = new PdfTextStampOptions
-        {
+    private PdfDocument StampText(PdfDocument document) {
+        var options = new PdfTextStampOptions {
             X = X,
             Y = Y,
             FontSize = FontSize,
@@ -131,8 +126,7 @@ private PdfDocument StampText(PdfDocument document)
             BehindContent = Watermark.IsPresent
         };
         var color = PdfCommandUtilities.ParseColor(Color);
-        if (color.HasValue)
-        {
+        if (color.HasValue) {
             options.Color = color.Value;
         }
 
@@ -142,10 +136,8 @@ private PdfDocument StampText(PdfDocument document)
             : document.Stamp.Text(Text!, options);
     }
 
-    private PdfDocument StampImage(PdfDocument document)
-    {
-        var options = new PdfImageStampOptions
-        {
+    private PdfDocument StampImage(PdfDocument document) {
+        var options = new PdfImageStampOptions {
             X = X,
             Y = Y,
             Width = Width,
@@ -159,4 +151,4 @@ private PdfDocument StampImage(PdfDocument document)
             ? document.Stamp.ImageWatermark(imageBytes, options)
             : document.Stamp.Image(imageBytes, options);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs
index 54704560..e9d12475 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs
@@ -8,7 +8,8 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 ///   Compare selected pages with a small pixel tolerance.
 ///   PS> 
-///   $options = [OfficeIMO.Pdf.PdfVisualComparisonOptions]::new(); $options.AllowedDifferenceRatio = 0.001; Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options
+///   $options = New-OfficePdfVisualComparisonOptions -AllowedDifferenceRatio 0.001 -ChannelTolerance 2
+/// Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options
 ///   Returns per-page difference ratios, images, and diagnostics.
 /// 
 [Cmdlet(VerbsData.Compare, "OfficePdfVisual")]
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/ConvertFromOfficePdfHtmlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/ConvertFromOfficePdfHtmlCommand.cs
index 9bd40457..7b28fcb2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/ConvertFromOfficePdfHtmlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/ConvertFromOfficePdfHtmlCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 [Cmdlet(VerbsData.ConvertFrom, "OfficePdfHtml", DefaultParameterSetName = ParameterSetHtml, SupportsShouldProcess = true)]
 [Alias("ConvertFrom-PdfHtml")]
 [OutputType(typeof(byte[]), typeof(FileInfo))]
-public sealed class ConvertFromOfficePdfHtmlCommand : PSCmdlet
-{
+public sealed class ConvertFromOfficePdfHtmlCommand : PSCmdlet {
     private const string ParameterSetHtml = "Html";
     private const string ParameterSetPath = "Path";
     private readonly StringBuilder _pipelineHtml = new();
@@ -33,8 +32,8 @@ public sealed class ConvertFromOfficePdfHtmlCommand : PSCmdlet
 
     /// Path to an HTML file.
     [Parameter(Mandatory = true, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Optional output path for the PDF file. When omitted, PDF bytes are written to the pipeline.
     [Parameter]
@@ -74,14 +73,10 @@ public sealed class ConvertFromOfficePdfHtmlCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (ParameterSetName == ParameterSetHtml)
-            {
-                if (_receivedHtml)
-                {
+    protected override void ProcessRecord() {
+        try {
+            if (ParameterSetName == ParameterSetHtml) {
+                if (_receivedHtml) {
                     _pipelineHtml.AppendLine();
                 }
 
@@ -90,43 +85,33 @@ protected override void ProcessRecord()
                 return;
             }
 
-            string resolvedPath = PdfCommandUtilities.ResolvePath(this, InputPath);
-            if (!File.Exists(resolvedPath))
-            {
+            string resolvedPath = PdfCommandUtilities.ResolvePath(this, Path);
+            if (!File.Exists(resolvedPath)) {
                 throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
             }
 
-            ConvertHtml(File.ReadAllText(resolvedPath), Path.GetDirectoryName(resolvedPath));
-        }
-        catch (Exception ex)
-        {
+            ConvertHtml(File.ReadAllText(resolvedPath), System.IO.Path.GetDirectoryName(resolvedPath));
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "HtmlToPdfFailed", ErrorCategory.InvalidOperation,
-                ParameterSetName == ParameterSetPath ? InputPath : Html));
+                ParameterSetName == ParameterSetPath ? Path : Html));
         }
     }
 
     /// 
-    protected override void EndProcessing()
-    {
-        if (ParameterSetName != ParameterSetHtml || !_receivedHtml)
-        {
+    protected override void EndProcessing() {
+        if (ParameterSetName != ParameterSetHtml || !_receivedHtml) {
             return;
         }
 
-        try
-        {
+        try {
             ConvertHtml(_pipelineHtml.ToString(), htmlFileDirectory: null);
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "HtmlToPdfFailed", ErrorCategory.InvalidOperation, Html));
         }
     }
 
-    private void ConvertHtml(string html, string? htmlFileDirectory)
-    {
-        if (string.IsNullOrWhiteSpace(html))
-        {
+    private void ConvertHtml(string html, string? htmlFileDirectory) {
+        if (string.IsNullOrWhiteSpace(html)) {
             ThrowTerminatingError(new ErrorRecord(
                 new ArgumentException("HTML content cannot be empty."),
                 "HtmlEmpty",
@@ -137,29 +122,24 @@ private void ConvertHtml(string html, string? htmlFileDirectory)
 
         string preparedHtml = ApplyStylesheets(html);
         HtmlPdfSaveOptions options = BuildOptions(htmlFileDirectory);
-        HtmlConversionDocument document = HtmlConversionDocument.Parse(preparedHtml, new HtmlConversionDocumentOptions
-        {
+        HtmlConversionDocument document = HtmlConversionDocument.Parse(preparedHtml, new HtmlConversionDocumentOptions {
             Profile = Profile,
             Trust = TrustedDocumentProfile.IsPresent ? HtmlInputTrust.Trusted : HtmlInputTrust.Untrusted,
             BaseUri = options.BaseUri
         });
-        if (!string.IsNullOrWhiteSpace(OutputPath))
-        {
+        if (!string.IsNullOrWhiteSpace(OutputPath)) {
             string outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath!);
-            if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write PDF from HTML"))
-            {
+            if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write PDF from HTML")) {
                 return;
             }
 
             PdfCommandUtilities.EnsureDirectory(outputPath);
             document.SaveAsPdf(outputPath, options).RequireSuccess();
-            if (Open.IsPresent)
-            {
+            if (Open.IsPresent) {
                 FileOpenService.Open(outputPath);
             }
 
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 WriteObject(new FileInfo(outputPath));
             }
 
@@ -169,45 +149,34 @@ private void ConvertHtml(string html, string? htmlFileDirectory)
         WriteObject(document.ToPdf(options), enumerateCollection: false);
     }
 
-    private HtmlPdfSaveOptions BuildOptions(string? htmlFileDirectory)
-    {
+    private HtmlPdfSaveOptions BuildOptions(string? htmlFileDirectory) {
         HtmlPdfSaveOptions options = Options?.ClonePdf() ?? new HtmlPdfSaveOptions();
 
         ApplyResourceOptions(options, htmlFileDirectory);
         return options;
     }
 
-    private void ApplyResourceOptions(HtmlPdfSaveOptions options, string? htmlFileDirectory)
-    {
+    private void ApplyResourceOptions(HtmlPdfSaveOptions options, string? htmlFileDirectory) {
         string? resolvedBasePath = null;
-        if (!string.IsNullOrWhiteSpace(BasePath))
-        {
+        if (!string.IsNullOrWhiteSpace(BasePath)) {
             resolvedBasePath = PdfCommandUtilities.ResolvePath(this, BasePath!);
-        }
-        else if (!string.IsNullOrWhiteSpace(htmlFileDirectory))
-        {
+        } else if (!string.IsNullOrWhiteSpace(htmlFileDirectory)) {
             resolvedBasePath = htmlFileDirectory;
         }
 
-        if (!string.IsNullOrWhiteSpace(resolvedBasePath))
-        {
-            options.BaseUri = new Uri(Path.GetFullPath(resolvedBasePath!) + Path.DirectorySeparatorChar);
+        if (!string.IsNullOrWhiteSpace(resolvedBasePath)) {
+            options.BaseUri = new Uri(System.IO.Path.GetFullPath(resolvedBasePath!) + System.IO.Path.DirectorySeparatorChar);
         }
     }
 
-    private string ApplyStylesheets(string html)
-    {
+    private string ApplyStylesheets(string html) {
         var styles = new StringBuilder();
 
-        if (StylesheetPath != null)
-        {
-            foreach (string path in StylesheetPath)
-            {
-                if (!string.IsNullOrWhiteSpace(path))
-                {
+        if (StylesheetPath != null) {
+            foreach (string path in StylesheetPath) {
+                if (!string.IsNullOrWhiteSpace(path)) {
                     string resolvedPath = PdfCommandUtilities.ResolvePath(this, path);
-                    if (!File.Exists(resolvedPath))
-                    {
+                    if (!File.Exists(resolvedPath)) {
                         throw new FileNotFoundException($"Stylesheet file '{resolvedPath}' was not found.", resolvedPath);
                     }
 
@@ -216,12 +185,9 @@ private string ApplyStylesheets(string html)
             }
         }
 
-        if (StylesheetContent != null)
-        {
-            foreach (string content in StylesheetContent)
-            {
-                if (!string.IsNullOrWhiteSpace(content))
-                {
+        if (StylesheetContent != null) {
+            foreach (string content in StylesheetContent) {
+                if (!string.IsNullOrWhiteSpace(content)) {
                     styles.AppendLine(content);
                 }
             }
@@ -231,4 +197,4 @@ private string ApplyStylesheets(string html)
             ? html
             : "" + Environment.NewLine + html;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/CopyOfficePdfPageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/CopyOfficePdfPageCommand.cs
index f762ffc6..6c728c1c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/CopyOfficePdfPageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/CopyOfficePdfPageCommand.cs
@@ -18,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Copy, "OfficePdfPage", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo))]
-public sealed class CopyOfficePdfPageCommand : PSCmdlet
-{
+public sealed class CopyOfficePdfPageCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -42,11 +41,9 @@ public sealed class CopyOfficePdfPageCommand : PSCmdlet
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write copied PDF pages"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write copied PDF pages")) {
             return;
         }
 
@@ -55,6 +52,6 @@ protected override void ProcessRecord()
                 PdfCommandUtilities.ResolvePath(this, Path),
                 PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent))
             .Pages.Extract(PageRange).Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficeDocumentPdfCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficeDocumentPdfCommand.cs
new file mode 100644
index 00000000..242122ea
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficeDocumentPdfCommand.cs
@@ -0,0 +1,211 @@
+using System;
+using System.IO;
+using System.Management.Automation;
+using OfficeIMO.Excel;
+using OfficeIMO.Excel.Pdf;
+using OfficeIMO.Markdown;
+using OfficeIMO.Markdown.Pdf;
+using OfficeIMO.Pdf;
+using OfficeIMO.PowerPoint;
+using OfficeIMO.PowerPoint.Pdf;
+using OfficeIMO.Rtf;
+using OfficeIMO.Rtf.Pdf;
+using OfficeIMO.Word;
+using OfficeIMO.Word.Pdf;
+using PSWriteOffice.Services;
+using PSWriteOffice.Services.Excel;
+using PSWriteOffice.Services.Pdf;
+using PSWriteOffice.Services.PowerPoint;
+using PSWriteOffice.Services.Word;
+
+namespace PSWriteOffice.Cmdlets.Pdf;
+
+/// Exports a Word, Excel, PowerPoint, Markdown, or RTF document to PDF.
+/// Accepts either a live OfficeIMO document from the pipeline or a supported source file.
+/// 
+///   Export a live Word document.
+///   PS> 
+///   $document | Export-OfficeDocumentPdf -Path .\Report.pdf
+/// 
+/// 
+///   Export a supported file without opening it explicitly.
+///   PS> 
+///   Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -PassThru
+/// 
+/// 
+///   Configure Markdown PDF export with ordinary PowerShell parameters.
+///   PS> 
+///   $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -IncludeLocalImages -BaseDirectory .\Assets
+/// Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options
+///   The New-Office*PdfOptions commands build every format-specific options object; no hashtable or .NET constructor is required.
+/// 
+[Cmdlet(VerbsData.Export, "OfficeDocumentPdf", DefaultParameterSetName = ParameterSetDocument, SupportsShouldProcess = true)]
+[OutputType(typeof(FileInfo))]
+public sealed class ExportOfficeDocumentPdfCommand : PSCmdlet {
+    private const string ParameterSetDocument = "Document";
+    private const string ParameterSetPath = "Path";
+
+    /// Live Word, Excel, PowerPoint, Markdown, or RTF document to export. Saved FileInfo and path strings from the pipeline are opened automatically.
+    [Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0, ParameterSetName = ParameterSetDocument)]
+    public object Document { get; set; } = null!;
+
+    /// Source .docx, .xlsx, .pptx, .md, .markdown, or .rtf file.
+    [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = ParameterSetPath)]
+    [Alias("SourcePath", "FullName")]
+    public string InputPath { get; set; } = string.Empty;
+
+    /// Destination PDF path.
+    [Parameter(Mandatory = true, Position = 1)]
+    [Alias("OutputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
+
+    /// Password used to open an encrypted Word, Excel, or PowerPoint source file.
+    [Parameter]
+    public string? Password { get; set; }
+
+    /// Word-specific PDF options.
+    [Parameter]
+    public WordPdfSaveOptions? WordOptions { get; set; }
+
+    /// Excel-specific PDF options.
+    [Parameter]
+    public ExcelPdfSaveOptions? ExcelOptions { get; set; }
+
+    /// PowerPoint-specific PDF options.
+    [Parameter]
+    public PowerPointPdfSaveOptions? PowerPointOptions { get; set; }
+
+    /// Markdown-specific PDF options.
+    [Parameter]
+    public MarkdownPdfSaveOptions? MarkdownOptions { get; set; }
+
+    /// RTF-specific PDF options.
+    [Parameter]
+    public RtfPdfSaveOptions? RtfOptions { get; set; }
+
+    /// Variable name that receives structured PDF conversion warnings.
+    [Parameter]
+    public string? PdfWarningVariable { get; set; }
+
+    /// Variable name that receives the structured PDF conversion report.
+    [Parameter]
+    public string? PdfConversionReportVariable { get; set; }
+
+    /// Open the PDF after exporting it.
+    [Parameter]
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
+
+    /// Emit the saved PDF file.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var outputPath = PdfCommandUtilities.ResolvePath(this, Path);
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Export document to PDF")) {
+            return;
+        }
+
+        PdfCommandUtilities.EnsureDirectory(outputPath);
+        object document;
+        Action? closeOwnedDocument = null;
+        string? sourcePath = null;
+
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                document = LoadDocument(InputPath, out closeOwnedDocument, out sourcePath);
+            } else {
+                document = UnwrapDocument(Document);
+                if (document is FileInfo file) {
+                    document = LoadDocument(file.FullName, out closeOwnedDocument, out sourcePath);
+                } else if (document is string path) {
+                    document = LoadDocument(path, out closeOwnedDocument, out sourcePath);
+                }
+            }
+
+            PdfSaveResult result = SaveDocument(document, outputPath, sourcePath);
+            PdfCommandUtilities.SetVariable(this, PdfWarningVariable, result.Warnings);
+            PdfCommandUtilities.SetVariable(this, PdfConversionReportVariable, result.Report);
+            result.RequireSuccess();
+        } finally {
+            closeOwnedDocument?.Invoke();
+        }
+
+        if (Open.IsPresent) {
+            FileOpenService.Open(outputPath);
+        }
+
+        if (PassThru.IsPresent) {
+            WriteObject(new FileInfo(outputPath));
+        }
+    }
+
+    private object LoadDocument(string inputPath, out Action? closeOwnedDocument, out string sourcePath) {
+        sourcePath = PdfCommandUtilities.ResolveExistingFilePath(this, inputPath);
+        switch (System.IO.Path.GetExtension(sourcePath).ToLowerInvariant()) {
+            case ".docx": {
+                    var document = WordDocumentService.LoadDocument(sourcePath, readOnly: true, autoSave: false, Password);
+                    closeOwnedDocument = () => WordDocumentService.CloseDocument(document);
+                    return document;
+                }
+            case ".xlsx": {
+                    var document = ExcelDocumentService.LoadDocument(sourcePath, readOnly: true, autoSave: false, Password);
+                    closeOwnedDocument = () => ExcelDocumentService.CloseDocument(document);
+                    return document;
+                }
+            case ".pptx": {
+                    var document = PowerPointDocumentService.LoadPresentation(sourcePath, Password, readOnly: true);
+                    closeOwnedDocument = () => PowerPointDocumentService.ClosePresentation(document, save: false, show: false);
+                    return document;
+                }
+            case ".md":
+            case ".markdown":
+                closeOwnedDocument = null;
+                return MarkdownDoc.Load(sourcePath);
+            case ".rtf":
+                closeOwnedDocument = null;
+                return RtfDocument.Load(sourcePath);
+            default:
+                throw new PSArgumentException("Supported PDF source extensions are .docx, .xlsx, .pptx, .md, .markdown, and .rtf.", nameof(InputPath));
+        }
+    }
+
+    private PdfSaveResult SaveDocument(object document, string outputPath, string? sourcePath) {
+        switch (document) {
+            case WordDocument word:
+                return word.SaveAsPdf(outputPath, WordOptions ?? new WordPdfSaveOptions());
+            case ExcelDocument excel:
+                return excel.SaveAsPdf(outputPath, ExcelOptions ?? new ExcelPdfSaveOptions());
+            case PowerPointPresentation powerPoint:
+                return powerPoint.SaveAsPdf(outputPath, PowerPointOptions ?? new PowerPointPdfSaveOptions());
+            case MarkdownDoc markdown:
+                return markdown.SaveAsPdf(outputPath, PrepareMarkdownOptions(sourcePath));
+            case RtfDocument rtf:
+                return rtf.SaveAsPdf(outputPath, RtfOptions ?? new RtfPdfSaveOptions());
+            default:
+                throw new PSArgumentException(
+                    $"Document type '{document?.GetType().FullName ?? ""}' cannot be exported to PDF. Use a WordDocument, ExcelDocument, PowerPointPresentation, MarkdownDoc, or RtfDocument.",
+                    nameof(Document));
+        }
+    }
+
+    private MarkdownPdfSaveOptions PrepareMarkdownOptions(string? sourcePath) {
+        var options = MarkdownOptions?.Clone() ?? new MarkdownPdfSaveOptions();
+        if (options.ResourcePolicy.AllowLocalFileAccess &&
+            string.IsNullOrWhiteSpace(options.BaseDirectory) &&
+            !string.IsNullOrWhiteSpace(sourcePath)) {
+            options.BaseDirectory = System.IO.Path.GetDirectoryName(sourcePath);
+        }
+
+        return options;
+    }
+
+    private static object UnwrapDocument(object document) {
+        while (document is PSObject psObject && psObject.BaseObject != document) {
+            document = psObject.BaseObject;
+        }
+
+        return document;
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfImageCommand.cs
index 28125ddc..738b02a4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfImageCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 ///   Export selected pages as PNG files.
 ///   PS> 
 ///   Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Pages -PageRange '1-3,5'
-///   Writes the selected pages and returns normalized image results with rendering diagnostics.
+///   Writes the selected pages. Add -PassThru to receive normalized image results with rendering diagnostics.
 /// 
 [Cmdlet(VerbsData.Export, "OfficePdfImage", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
@@ -50,6 +50,10 @@ public sealed class ExportOfficePdfImageCommand : PSCmdlet
     [Parameter]
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
+    /// Emit one structured image export result per saved page.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -70,7 +74,8 @@ protected override void ProcessRecord()
             var page = pages[index];
             int pageNumber = GetPageNumber(page, index + 1);
             var file = System.IO.Path.Combine(output, $"page-{pageNumber:D4}{page.FileExtension}");
-            WriteObject(page.Save(file, OfficeImageExportFileConflictPolicy.Replace));
+            OfficeImageExportResult result = page.Save(file, OfficeImageExportFileConflictPolicy.Replace);
+            if (PassThru.IsPresent) WriteObject(result);
         }
     }
 
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs
index 93b588a9..30d08a1d 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs
@@ -7,6 +7,11 @@
 namespace PSWriteOffice.Cmdlets.Pdf;
 
 /// Exports PDF word, line, region, and reading-order diagnostics as PNG or SVG.
+/// 
+///   Export an SVG layout overlay for the first page.
+///   PS> 
+///   $result = Export-OfficePdfLayoutOverlay -Path .\Report.pdf -OutputPath .\Report-layout.svg -Page 1 -Format Svg -PassThru
+/// 
 [Cmdlet(VerbsData.Export, "OfficePdfLayoutOverlay", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
 public sealed class ExportOfficePdfLayoutOverlayCommand : PSCmdlet
@@ -54,6 +59,10 @@ public sealed class ExportOfficePdfLayoutOverlayCommand : PSCmdlet
     [Parameter]
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
+    /// Emit the structured image export result.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -73,9 +82,10 @@ protected override void ProcessRecord()
         };
         Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
         File.WriteAllBytes(output, bytes);
-        WriteObject(new OfficeImageExportResult(Format,
+        var result = new OfficeImageExportResult(Format,
             checked((int)System.Math.Ceiling(drawing.Width * Scale)),
             checked((int)System.Math.Ceiling(drawing.Height * Scale)),
-            bytes, $"Page {Page} layout", $"{input}#page={Page}"));
+            bytes, $"Page {Page} layout", $"{input}#page={Page}");
+        if (PassThru.IsPresent) WriteObject(result);
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/MoveOfficePdfPageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/MoveOfficePdfPageCommand.cs
index a11e6366..c0f0fb14 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/MoveOfficePdfPageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/MoveOfficePdfPageCommand.cs
@@ -18,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Move, "OfficePdfPage", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo))]
-public sealed class MoveOfficePdfPageCommand : PSCmdlet
-{
+public sealed class MoveOfficePdfPageCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -46,11 +45,9 @@ public sealed class MoveOfficePdfPageCommand : PSCmdlet
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write reordered PDF pages"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write reordered PDF pages")) {
             return;
         }
 
@@ -59,6 +56,6 @@ protected override void ProcessRecord()
                 PdfCommandUtilities.ResolvePath(this, Path),
                 PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent))
             .Pages.Move(BeforePage, PageRange).Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfCommand.cs
index 520ad3c7..ee41beb4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfCommand.cs
@@ -16,7 +16,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 ///   Create a PDF report.
 ///   PS> 
-///   New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Show
+///   New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Open
 ///   Builds a PDF and opens it after saving.
 /// 
 /// 
@@ -44,8 +44,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 [Cmdlet(VerbsCommon.New, "OfficePdf", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("PdfNew")]
 [OutputType(typeof(PdfDocument), typeof(FileInfo))]
-public sealed class NewOfficePdfCommand : PSCmdlet
-{
+public sealed class NewOfficePdfCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetContent = "Content";
 
@@ -69,7 +68,8 @@ public sealed class NewOfficePdfCommand : PSCmdlet
 
     /// Open the PDF after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Default standard PDF font for generated text.
     [Parameter]
@@ -187,33 +187,30 @@ public sealed class NewOfficePdfCommand : PSCmdlet
     public int? Permission { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
+        if (NoSave.IsPresent && Open.IsPresent) {
+            throw new PSArgumentException("-Open cannot be used with -NoSave because no file is written. Save the returned PDF explicitly, then use -Open on Save-OfficePdf.", nameof(Open));
+        }
+
         var savePath = string.IsNullOrWhiteSpace(Path) || NoSave.IsPresent
             ? null
             : PdfCommandUtilities.ResolvePath(this, Path!);
-        if (savePath != null && !PdfCommandUtilities.ShouldWrite(this, savePath, "Write new PDF"))
-        {
+        if (savePath != null && !PdfCommandUtilities.ShouldWrite(this, savePath, "Write new PDF")) {
             return;
         }
 
         var options = CreateOptions();
         PdfDocument document;
-        if (Content != null)
-        {
-            using (var context = PdfDslContext.Enter(options))
-            {
+        if (Content != null) {
+            using (var context = PdfDslContext.Enter(options)) {
                 Content.InvokeReturnAsIs();
                 document = context.Build();
             }
-        }
-        else
-        {
+        } else {
             document = PdfDocument.Create(_ => { }, options);
         }
 
-        if (string.IsNullOrWhiteSpace(Path) || NoSave.IsPresent)
-        {
+        if (string.IsNullOrWhiteSpace(Path) || NoSave.IsPresent) {
             WriteObject(document);
             return;
         }
@@ -221,80 +218,65 @@ protected override void ProcessRecord()
         PdfCommandUtilities.EnsureDirectory(savePath!);
         document.Save(savePath!).RequireSuccess();
 
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(savePath!);
         }
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(new FileInfo(savePath!));
         }
     }
 
-    private PdfOptions CreateOptions()
-    {
+    private PdfOptions CreateOptions() {
         var options = new PdfOptions();
-        if (DefaultFont.HasValue)
-        {
+        if (DefaultFont.HasValue) {
             options.DefaultFont = DefaultFont.Value;
         }
 
-        if (DefaultFontSize.HasValue)
-        {
+        if (DefaultFontSize.HasValue) {
             options.DefaultFontSize = DefaultFontSize.Value;
         }
 
-        if (Theme.HasValue)
-        {
+        if (Theme.HasValue) {
             options.ApplyTheme(PdfThemeUtilities.ResolveTheme(Theme.Value));
         }
 
-        if (FileVersion.HasValue)
-        {
+        if (FileVersion.HasValue) {
             options.FileVersion = FileVersion.Value;
         }
 
-        if (CreateOutlineFromHeadings.IsPresent)
-        {
+        if (CreateOutlineFromHeadings.IsPresent) {
             options.CreateOutlineFromHeadings = true;
         }
 
-        if (OutlineExpansionLevel.HasValue)
-        {
+        if (OutlineExpansionLevel.HasValue) {
             options.OutlineExpansionLevel = OutlineExpansionLevel.Value;
         }
 
-        if (PageMode.HasValue || PageLayout.HasValue)
-        {
+        if (PageMode.HasValue || PageLayout.HasValue) {
             options.SetCatalogView(PageMode, PageLayout);
         }
 
-        if (IncludePageLabels.IsPresent || !string.IsNullOrWhiteSpace(PageLabelPrefix))
-        {
+        if (IncludePageLabels.IsPresent || !string.IsNullOrWhiteSpace(PageLabelPrefix)) {
             options.SetPageLabels(true, PageLabelPrefix);
         }
 
-        if (OpenActionPage.HasValue || OpenActionMode.HasValue || OpenActionTop.HasValue)
-        {
+        if (OpenActionPage.HasValue || OpenActionMode.HasValue || OpenActionTop.HasValue) {
             options.SetOpenAction(
                 OpenActionPage ?? 1,
                 OpenActionTop,
                 OpenActionMode ?? PdfOpenActionDestinationMode.Xyz);
         }
 
-        if (FlattenVisualAnnotations.IsPresent)
-        {
+        if (FlattenVisualAnnotations.IsPresent) {
             options.SetFlattenVisualAnnotations();
         }
 
         ConfigureViewerPreferences(options);
         PdfCommandUtilities.ApplyEncryption(options, Password, OwnerPassword, Permission);
 
-        if (!string.IsNullOrWhiteSpace(FontFamily))
-        {
-            if (string.IsNullOrWhiteSpace(RegularFontPath))
-            {
+        if (!string.IsNullOrWhiteSpace(FontFamily)) {
+            if (string.IsNullOrWhiteSpace(RegularFontPath)) {
                 throw new PSArgumentException("-FontFamily requires -RegularFontPath.", nameof(RegularFontPath));
             }
 
@@ -309,54 +291,44 @@ private PdfOptions CreateOptions()
         return options;
     }
 
-    private void ConfigureViewerPreferences(PdfOptions options)
-    {
+    private void ConfigureViewerPreferences(PdfOptions options) {
         if (!DisplayDocTitle.IsPresent &&
             !FitWindow.IsPresent &&
             !CenterWindow.IsPresent &&
             !HideToolbar.IsPresent &&
             !HideMenubar.IsPresent &&
-            !HideWindowUI.IsPresent)
-        {
+            !HideWindowUI.IsPresent) {
             return;
         }
 
-        options.ConfigureViewerPreferences(preferences =>
-        {
-            if (DisplayDocTitle.IsPresent)
-            {
+        options.ConfigureViewerPreferences(preferences => {
+            if (DisplayDocTitle.IsPresent) {
                 preferences.DisplayDocTitle = true;
             }
 
-            if (FitWindow.IsPresent)
-            {
+            if (FitWindow.IsPresent) {
                 preferences.FitWindow = true;
             }
 
-            if (CenterWindow.IsPresent)
-            {
+            if (CenterWindow.IsPresent) {
                 preferences.CenterWindow = true;
             }
 
-            if (HideToolbar.IsPresent)
-            {
+            if (HideToolbar.IsPresent) {
                 preferences.HideToolbar = true;
             }
 
-            if (HideMenubar.IsPresent)
-            {
+            if (HideMenubar.IsPresent) {
                 preferences.HideMenubar = true;
             }
 
-            if (HideWindowUI.IsPresent)
-            {
+            if (HideWindowUI.IsPresent) {
                 preferences.HideWindowUI = true;
             }
         });
     }
 
-    private string? ResolveOptionalFontPath(string? path)
-    {
+    private string? ResolveOptionalFontPath(string? path) {
         return string.IsNullOrWhiteSpace(path)
             ? null
             : PdfCommandUtilities.ResolvePath(this, path!);
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfImageOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfImageOptionsCommand.cs
new file mode 100644
index 00000000..325a4a98
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfImageOptionsCommand.cs
@@ -0,0 +1,27 @@
+using System.Management.Automation;
+using OfficeIMO.Pdf;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.Pdf;
+
+/// Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage.
+/// 
+///   Create compact PDF thumbnails with bounded output dimensions.
+///   PS> 
+///   $options = New-OfficePdfImageOptions -ThumbnailMaxDimension 320 -MaximumOutputWidth 640
+/// Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Thumbnails -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePdfImageOptions")]
+[OutputType(typeof(PdfImageExportOptions))]
+public sealed class NewOfficePdfImageOptionsCommand : OfficeImageOptionsCommandBase {
+    /// Maximum thumbnail width or height.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? ThumbnailMaxDimension { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PdfImageExportOptions();
+        ApplyCommon(options);
+        if (ThumbnailMaxDimension.HasValue) options.ThumbnailMaxDimension = ThumbnailMaxDimension.Value;
+        WriteObject(options);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfVisualComparisonOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfVisualComparisonOptionsCommand.cs
new file mode 100644
index 00000000..abcce01c
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfVisualComparisonOptionsCommand.cs
@@ -0,0 +1,50 @@
+using System.Management.Automation;
+using OfficeIMO.Drawing;
+using OfficeIMO.Pdf;
+
+namespace PSWriteOffice.Cmdlets.Pdf;
+
+/// Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual.
+/// 
+///   Compare PDFs with a small rendering tolerance.
+///   PS> 
+///   $options = New-OfficePdfVisualComparisonOptions -ChannelTolerance 2 -AllowedDifferenceRatio 0.001 -MaxPages 50
+/// Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePdfVisualComparisonOptions")]
+[OutputType(typeof(PdfVisualComparisonOptions))]
+public sealed class NewOfficePdfVisualComparisonOptionsCommand : PSCmdlet {
+    /// Render scale applied before comparison.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? Scale { get; set; }
+    /// Maximum per-channel byte difference treated as equal.
+    [Parameter] public byte? ChannelTolerance { get; set; }
+    /// Maximum differing-pixel ratio treated as equal.
+    [Parameter] [ValidateRange(0d, 1d)] public double? AllowedDifferenceRatio { get; set; }
+    /// Page alignment used for differently sized renders.
+    [Parameter] public PdfVisualPageAlignment? Alignment { get; set; }
+    /// Background color name or hex value.
+    [Parameter] public string? BackgroundColor { get; set; }
+    /// Maximum pages compared.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxPages { get; set; }
+    /// Maximum pixels accepted per rendered image.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxPixelsPerImage { get; set; }
+    /// Maximum pixels accepted across the comparison.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxTotalPixels { get; set; }
+    /// Maximum total bytes retained for comparison artifacts.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxTotalOutputBytes { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PdfVisualComparisonOptions();
+        if (Scale.HasValue) options.Scale = Scale.Value;
+        if (ChannelTolerance.HasValue) options.ChannelTolerance = ChannelTolerance.Value;
+        if (AllowedDifferenceRatio.HasValue) options.AllowedDifferenceRatio = AllowedDifferenceRatio.Value;
+        if (Alignment.HasValue) options.Alignment = Alignment.Value;
+        if (!string.IsNullOrWhiteSpace(BackgroundColor)) options.Background = OfficeColor.Parse(BackgroundColor!);
+        if (MaxPages.HasValue) options.MaxPages = MaxPages.Value;
+        if (MaxPixelsPerImage.HasValue) options.MaxPixelsPerImage = MaxPixelsPerImage.Value;
+        if (MaxTotalPixels.HasValue) options.MaxTotalPixels = MaxTotalPixels.Value;
+        if (MaxTotalOutputBytes.HasValue) options.MaxTotalOutputBytes = MaxTotalOutputBytes.Value;
+        WriteObject(options);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs
index 79a9d70c..b7a893b3 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs
@@ -6,11 +6,15 @@
 namespace PSWriteOffice.Cmdlets.Pdf;
 
 /// Removes PDF annotations matching friendly filters.
+/// 
+///   Remove text annotations from the first page.
+///   PS> 
+///   Remove-OfficePdfAnnotation -Path .\Reviewed.pdf -OutputPath .\Clean.pdf -PageNumber 1 -Subtype Text -Confirm:$false
+/// 
 [Cmdlet(VerbsCommon.Remove, "OfficePdfAnnotation", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo))]
 [OutputType(typeof(PdfAnnotationEditResult))]
-public sealed class RemoveOfficePdfAnnotationCommand : PSCmdlet
-{
+public sealed class RemoveOfficePdfAnnotationCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
     [Alias("FilePath")]
@@ -49,17 +53,14 @@ public sealed class RemoveOfficePdfAnnotationCommand : PSCmdlet
     public SwitchParameter PassThruReport { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         string inputPath = PdfCommandUtilities.ResolvePath(this, Path);
         string outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!ShouldProcess(outputPath, "Remove PDF annotations"))
-        {
+        if (!ShouldProcess(outputPath, "Remove PDF annotations")) {
             return;
         }
 
-        var options = new PdfAnnotationRemovalOptions
-        {
+        var options = new PdfAnnotationRemovalOptions {
             ObjectNumber = ObjectNumber,
             PageNumber = PageNumber,
             Subtype = Subtype,
@@ -71,6 +72,11 @@ protected override void ProcessRecord()
             .Open(inputPath, PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent))
             .Annotations.Remove(options);
         result.ToDocument().Save(outputPath).RequireSuccess();
-        WriteObject(PassThruReport.IsPresent ? result : new FileInfo(outputPath));
+        if (PassThruReport.IsPresent) {
+            WriteObject(result);
+            return;
+        }
+
+        WritePassThru(new FileInfo(outputPath));
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfPageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfPageCommand.cs
index a0020cc2..f0e6a253 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfPageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfPageCommand.cs
@@ -18,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Remove, "OfficePdfPage", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)]
 [OutputType(typeof(FileInfo))]
-public sealed class RemoveOfficePdfPageCommand : PSCmdlet
-{
+public sealed class RemoveOfficePdfPageCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -42,11 +41,9 @@ public sealed class RemoveOfficePdfPageCommand : PSCmdlet
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write PDF without selected pages"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write PDF without selected pages")) {
             return;
         }
 
@@ -55,6 +52,6 @@ protected override void ProcessRecord()
                 PdfCommandUtilities.ResolvePath(this, Path),
                 PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent))
             .Pages.Delete(PageRange).Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/SaveOfficePdfCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/SaveOfficePdfCommand.cs
index a7acb7d7..93316c61 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/SaveOfficePdfCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/SaveOfficePdfCommand.cs
@@ -19,9 +19,8 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 ///   Creates a PDF document object first, then saves it to disk.
 /// 
 [Cmdlet(VerbsData.Save, "OfficePdf", SupportsShouldProcess = true)]
-[OutputType(typeof(PdfDocument), typeof(FileInfo))]
-public sealed class SaveOfficePdfCommand : PSCmdlet
-{
+[OutputType(typeof(PdfDocument))]
+public sealed class SaveOfficePdfCommand : PSCmdlet {
     /// PDF document to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0)]
     public PdfDocument Document { get; set; } = null!;
@@ -33,9 +32,10 @@ public sealed class SaveOfficePdfCommand : PSCmdlet
 
     /// Open the PDF after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
-    /// Emit the document instead of the saved file.
+    /// Emit the document for further processing.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
@@ -54,11 +54,9 @@ public sealed class SaveOfficePdfCommand : PSCmdlet
     public int? Permission { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var fullPath = PdfCommandUtilities.ResolvePath(this, Path);
-        if (!PdfCommandUtilities.ShouldWrite(this, fullPath, "Save PDF"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, fullPath, "Save PDF")) {
             return;
         }
 
@@ -66,11 +64,12 @@ protected override void ProcessRecord()
         var document = PdfCommandUtilities.ApplyEncryption(Document, Password, OwnerPassword, Permission);
         document.Save(fullPath).RequireSuccess();
 
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(fullPath);
         }
 
-        WriteObject(PassThru.IsPresent ? document : new FileInfo(fullPath));
+        if (PassThru.IsPresent) {
+            WriteObject(document);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfAnnotationCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfAnnotationCommand.cs
index f2a8b32f..1a833404 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfAnnotationCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfAnnotationCommand.cs
@@ -9,8 +9,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 [Cmdlet(VerbsCommon.Set, "OfficePdfAnnotation", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo))]
 [OutputType(typeof(PdfAnnotationEditResult))]
-public sealed class SetOfficePdfAnnotationCommand : PSCmdlet
-{
+public sealed class SetOfficePdfAnnotationCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
     [Alias("FilePath")]
@@ -61,18 +60,15 @@ public sealed class SetOfficePdfAnnotationCommand : PSCmdlet
     public SwitchParameter PassThruReport { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         string inputPath = PdfCommandUtilities.ResolvePath(this, Path);
         string outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!ShouldProcess(outputPath, "Update PDF annotation"))
-        {
+        if (!ShouldProcess(outputPath, "Update PDF annotation")) {
             return;
         }
 
         PdfColor? color = PdfCommandUtilities.ParseColor(Color);
-        var options = new PdfAnnotationUpdateOptions
-        {
+        var options = new PdfAnnotationUpdateOptions {
             Contents = Contents,
             Title = Title,
             Name = Name,
@@ -86,6 +82,11 @@ protected override void ProcessRecord()
             .Open(inputPath, PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent))
             .Annotations.Update(ObjectNumber, options);
         result.ToDocument().Save(outputPath).RequireSuccess();
-        WriteObject(PassThruReport.IsPresent ? result : new FileInfo(outputPath));
+        if (PassThruReport.IsPresent) {
+            WriteObject(result);
+            return;
+        }
+
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfFormCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfFormCommand.cs
index 46e28cee..d4b743bc 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfFormCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfFormCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficePdfForm", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo))]
-public sealed class SetOfficePdfFormCommand : PSCmdlet
-{
+public sealed class SetOfficePdfFormCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -64,35 +63,28 @@ public sealed class SetOfficePdfFormCommand : PSCmdlet
     public string? AppearanceFontFamilyName { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var inputPath = PdfCommandUtilities.ResolvePath(this, Path);
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (Incremental.IsPresent)
-        {
-            if (Flatten.IsPresent)
-            {
+        if (Incremental.IsPresent) {
+            if (Flatten.IsPresent) {
                 throw new PSArgumentException("-Incremental cannot be combined with -Flatten because flattening requires a full rewrite.");
             }
 
-            if (!string.IsNullOrWhiteSpace(AppearanceFontPath))
-            {
+            if (!string.IsNullOrWhiteSpace(AppearanceFontPath)) {
                 throw new PSArgumentException("-Incremental uses built-in Helvetica appearance streams; use -KeepNeedAppearances or a full rewrite when custom appearance fonts are required.");
             }
 
-            if (Field == null || Field.Count == 0)
-            {
+            if (Field == null || Field.Count == 0) {
                 throw new PSArgumentException("Provide -Field values when using -Incremental.", nameof(Field));
             }
 
-            if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write incrementally updated PDF form"))
-            {
+            if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write incrementally updated PDF form")) {
                 return;
             }
 
             PdfCommandUtilities.EnsureDirectory(outputPath);
-            var options = new PdfIncrementalFormFieldUpdateOptions
-            {
+            var options = new PdfIncrementalFormFieldUpdateOptions {
                 KeepNeedAppearances = KeepNeedAppearances.IsPresent,
                 GenerateAppearanceStreams = !KeepNeedAppearances.IsPresent
             };
@@ -101,7 +93,7 @@ protected override void ProcessRecord()
                 .Forms.AppendRevision(PdfCommandUtilities.ConvertFieldValues(Field), options)
                 .Save(outputPath)
                 .RequireSuccess();
-            WriteObject(new FileInfo(outputPath));
+            WritePassThru(new FileInfo(outputPath));
             return;
         }
 
@@ -110,41 +102,33 @@ protected override void ProcessRecord()
             PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent));
         var formOptions = PdfCommandUtilities.CreateFormFillerOptions(this, AppearanceFontPath, AppearanceFontFamilyName, KeepNeedAppearances.IsPresent);
         PdfDocument result;
-        if (Field == null || Field.Count == 0)
-        {
-            if (!Flatten.IsPresent)
-            {
+        if (Field == null || Field.Count == 0) {
+            if (!Flatten.IsPresent) {
                 throw new PSArgumentException("Provide -Field values or use -Flatten.", nameof(Field));
             }
 
             result = formOptions == null
                 ? document.Forms.Flatten()
                 : document.Forms.Flatten(formOptions);
-        }
-        else
-        {
+        } else {
             var values = PdfCommandUtilities.ConvertFieldValues(Field);
-            if (Flatten.IsPresent)
-            {
+            if (Flatten.IsPresent) {
                 result = formOptions == null
                     ? document.Forms.FillAndFlatten(values)
                     : document.Forms.FillAndFlatten(values, formOptions);
-            }
-            else
-            {
+            } else {
                 result = formOptions == null
                     ? document.Forms.Fill(values)
                     : document.Forms.Fill(values, formOptions);
             }
         }
 
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write updated PDF form"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write updated PDF form")) {
             return;
         }
 
         PdfCommandUtilities.EnsureDirectory(outputPath);
         result.Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfPageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfPageCommand.cs
index 29706299..70ffa7f3 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfPageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfPageCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficePdfPage", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo))]
-public sealed class SetOfficePdfPageCommand : PSCmdlet
-{
+public sealed class SetOfficePdfPageCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Input PDF path.
     [Parameter(Mandatory = true)]
     [Alias("FilePath")]
@@ -94,11 +93,9 @@ public sealed class SetOfficePdfPageCommand : PSCmdlet
     public SwitchParameter IgnorePermissionRestrictions { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write updated PDF pages"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write updated PDF pages")) {
             return;
         }
 
@@ -122,29 +119,25 @@ protected override void ProcessRecord()
             MyInvocation.BoundParameters.ContainsKey(nameof(ResizeMode)) ||
             ResizeMargin.HasValue);
 
-        if (resizeOptions != null)
-        {
-            if (!string.IsNullOrWhiteSpace(BoxName) || MyInvocation.BoundParameters.ContainsKey(nameof(Rotation)))
-            {
+        if (resizeOptions != null) {
+            if (!string.IsNullOrWhiteSpace(BoxName) || MyInvocation.BoundParameters.ContainsKey(nameof(Rotation))) {
                 throw new PSArgumentException("Use page resize, rotation, or box editing as separate Set-OfficePdfPage operations.");
             }
 
             PdfDocument.Open(inputPath, readOptions).Pages.Resize(resizeOptions, pages).Save(outputPath).RequireSuccess();
-            WriteObject(new FileInfo(outputPath));
+            WritePassThru(new FileInfo(outputPath));
             return;
         }
 
-        if (!string.IsNullOrWhiteSpace(BoxName))
-        {
-            if (!Left.HasValue || !Bottom.HasValue || !Right.HasValue || !Top.HasValue)
-            {
+        if (!string.IsNullOrWhiteSpace(BoxName)) {
+            if (!Left.HasValue || !Bottom.HasValue || !Right.HasValue || !Top.HasValue) {
                 throw new PSArgumentException("-BoxName requires -Left, -Bottom, -Right, and -Top.");
             }
 
             PdfDocument
                 .Open(inputPath, readOptions)
                 .Pages.SetPageBox(
-                    (PdfPageBoundaryBox) Enum.Parse(typeof(PdfPageBoundaryBox), BoxName!, ignoreCase: true),
+                    (PdfPageBoundaryBox)Enum.Parse(typeof(PdfPageBoundaryBox), BoxName!, ignoreCase: true),
                     Left.Value,
                     Bottom.Value,
                     Right.Value,
@@ -152,12 +145,11 @@ protected override void ProcessRecord()
                     pages)
                 .Save(outputPath)
                 .RequireSuccess();
-            WriteObject(new FileInfo(outputPath));
+            WritePassThru(new FileInfo(outputPath));
             return;
         }
 
-        if (!MyInvocation.BoundParameters.ContainsKey(nameof(Rotation)))
-        {
+        if (!MyInvocation.BoundParameters.ContainsKey(nameof(Rotation))) {
             throw new PSArgumentException("Provide -Rotation, -BoxName with coordinates, or page resize options.");
         }
 
@@ -166,11 +158,10 @@ protected override void ProcessRecord()
             ? document.Pages.Rotate(Rotation)
             : document.Pages.Rotate(Rotation, PageRange!);
         result.Save(outputPath).RequireSuccess();
-        WriteObject(new FileInfo(outputPath));
+        WritePassThru(new FileInfo(outputPath));
     }
 
-    private static int[] ExpandPageRange(PdfPageRange range)
-    {
+    private static int[] ExpandPageRange(PdfPageRange range) {
         return Enumerable.Range(range.FirstPage, range.PageCount).ToArray();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfSignatureCommand.cs b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfSignatureCommand.cs
index fb48712d..a5d2f588 100644
--- a/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfSignatureCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Pdf/SetOfficePdfSignatureCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.Pdf;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficePdfSignature", SupportsShouldProcess = true)]
 [OutputType(typeof(FileInfo), typeof(PdfSignatureValidationReport))]
-public sealed class SetOfficePdfSignatureCommand : PSCmdlet
-{
+public sealed class SetOfficePdfSignatureCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Prepared PDF path.
     [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
     [Alias("FilePath")]
@@ -43,13 +42,11 @@ public sealed class SetOfficePdfSignatureCommand : PSCmdlet
     public SwitchParameter PassThruReport { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var inputPath = PdfCommandUtilities.ResolvePath(this, Path);
         var signaturePath = PdfCommandUtilities.ResolvePath(this, SignaturePath);
         var outputPath = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write signed PDF"))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, outputPath, "Write signed PDF")) {
             return;
         }
 
@@ -59,8 +56,11 @@ protected override void ProcessRecord()
             .Open(inputPath, PdfCommandUtilities.CreateReadOptions(Password, IgnorePermissionRestrictions.IsPresent))
             .Security.CompleteExternalSignature(File.ReadAllBytes(signaturePath));
         document.Save(outputPath).RequireSuccess();
-        WriteObject(PassThruReport.IsPresent
-            ? document.Security.ValidateSignatures()
-            : new FileInfo(outputPath));
+        if (PassThruReport.IsPresent) {
+            WriteObject(document.Security.ValidateSignatures());
+            return;
+        }
+
+        WritePassThru(new FileInfo(outputPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointBulletsCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointBulletsCommand.cs
index 6e8dc783..02a4b713 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointBulletsCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointBulletsCommand.cs
@@ -13,7 +13,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Add a bullet list.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointBullets.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Delivery update'
 ///     Add-OfficePowerPointBullets -Slide $slide -Bullets 'Wins','Risks','Next steps' -X 60 -Y 120 -Width 420 -Height 180
 /// }
@@ -22,8 +22,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointBullets")]
 [Alias("PptBullets")]
 [OutputType(typeof(PowerPointTextBox))]
-public sealed class AddOfficePowerPointBulletsCommand : PSCmdlet
-{
+public sealed class AddOfficePowerPointBulletsCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target slide that will receive the bullet list (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointSlide? Slide { get; set; }
@@ -57,17 +56,13 @@ public sealed class AddOfficePowerPointBulletsCommand : PSCmdlet
     public string? BulletChar { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (Width <= 0)
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (Width <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Width), "Width must be greater than 0.");
             }
 
-            if (Height <= 0)
-            {
+            if (Height <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Height), "Height must be greater than 0.");
             }
 
@@ -75,18 +70,14 @@ protected override void ProcessRecord()
             var items = NormalizeItems(Bullets);
             var textBox = slide.AddTextBoxPoints(string.Empty, X, Y, Width, Height);
             textBox.SetBullets(items, Level, ResolveBulletChar());
-            WriteObject(textBox);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(textBox);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddBulletsFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
 
-    private static List NormalizeItems(string[]? items)
-    {
-        if (items == null || items.Length == 0)
-        {
+    private static List NormalizeItems(string[]? items) {
+        if (items == null || items.Length == 0) {
             throw new PSArgumentException("Bullets cannot be empty.", nameof(Bullets));
         }
 
@@ -96,18 +87,15 @@ private static List NormalizeItems(string[]? items)
             .Cast()
             .ToList();
 
-        if (list.Count == 0)
-        {
+        if (list.Count == 0) {
             throw new PSArgumentException("Bullets cannot be empty.", nameof(Bullets));
         }
 
         return list;
     }
 
-    private char ResolveBulletChar()
-    {
-        if (string.IsNullOrWhiteSpace(BulletChar))
-        {
+    private char ResolveBulletChar() {
+        if (string.IsNullOrWhiteSpace(BulletChar)) {
             return '\u2022';
         }
 
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs
index 5edf6c0a..420aabb3 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs
@@ -11,8 +11,7 @@
 namespace PSWriteOffice.Cmdlets.PowerPoint;
 
 /// Chart types supported by Add-OfficePowerPointChart.
-public enum PowerPointChartType
-{
+public enum PowerPointChartType {
     /// Clustered column chart.
     ClusteredColumn,
     /// Line chart.
@@ -35,7 +34,7 @@ public enum PowerPointChartType
 ///     [pscustomobject]@{ Month = 'Feb'; Sales = 55; Profit = 13 }
 /// )
 /// New-OfficePowerPoint -Path .\Examples\Documents\PowerPointChart.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Add-OfficePowerPointChart -Slide $slide -InputObject $rows -CategoryProperty Month -SeriesProperty Sales,Profit -Title 'Monthly performance'
 /// }
 ///   Creates a clustered column chart using Month for categories and Sales/Profit as series.
@@ -48,7 +47,7 @@ public enum PowerPointChartType
 ///     [pscustomobject]@{ Quarter = 2; Revenue = 34 }
 /// )
 /// New-OfficePowerPoint -Path .\Examples\Documents\PowerPointScatter.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Add-OfficePowerPointChart -Slide $slide -Type Scatter -InputObject $rows -XProperty Quarter -YProperty Revenue -Title 'Revenue trend'
 /// }
 ///   Creates a scatter chart using Quarter on the X axis and Revenue on the Y axis.
@@ -56,8 +55,7 @@ public enum PowerPointChartType
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointChart", DefaultParameterSetName = ParameterSetDefault)]
 [Alias("PptChart")]
 [OutputType(typeof(PowerPointChart))]
-public sealed class AddOfficePowerPointChartCommand : PSCmdlet
-{
+public sealed class AddOfficePowerPointChartCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetDefault = "Default";
     private const string ParameterSetCategorical = "Categorical";
     private const string ParameterSetScatter = "Scatter";
@@ -113,43 +111,34 @@ public sealed class AddOfficePowerPointChartCommand : PSCmdlet
     public string? Title { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (Width <= 0)
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (Width <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Width), "Width must be greater than 0.");
             }
 
-            if (Height <= 0)
-            {
+            if (Height <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Height), "Height must be greater than 0.");
             }
 
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
-            var chart = ParameterSetName switch
-            {
+            var chart = ParameterSetName switch {
                 ParameterSetCategorical => AddCategoricalChart(slide),
                 ParameterSetScatter => AddScatterChart(slide),
                 _ => AddDefaultChart(slide)
             };
 
-            if (!string.IsNullOrWhiteSpace(Title))
-            {
+            if (!string.IsNullOrWhiteSpace(Title)) {
                 chart.SetTitle(Title!);
             }
 
-            WriteObject(chart);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(chart);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddChartFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
 
-    private PowerPointChart AddDefaultChart(PowerPointSlide slide)
-    {
+    private PowerPointChart AddDefaultChart(PowerPointSlide slide) {
         OfficeChartKind kind = GetOfficeChartKind(Type);
         OfficeChartData data = kind == OfficeChartKind.Scatter
             ? new OfficeChartData(
@@ -162,43 +151,35 @@ private PowerPointChart AddDefaultChart(PowerPointSlide slide)
         return slide.AddChartPoints(kind, data, X, Y, Width, Height);
     }
 
-    private PowerPointChart AddCategoricalChart(PowerPointSlide slide)
-    {
-        if (Type == PowerPointChartType.Scatter)
-        {
+    private PowerPointChart AddCategoricalChart(PowerPointSlide slide) {
+        if (Type == PowerPointChartType.Scatter) {
             throw new PSArgumentException("Use -XProperty and -YProperty when -Type Scatter is selected.", nameof(Type));
         }
 
-        if (SeriesProperty == null || SeriesProperty.Length == 0)
-        {
+        if (SeriesProperty == null || SeriesProperty.Length == 0) {
             throw new PSArgumentException("Provide at least one -SeriesProperty.", nameof(SeriesProperty));
         }
 
-        if ((Type == PowerPointChartType.Pie || Type == PowerPointChartType.Doughnut) && SeriesProperty.Length > 1)
-        {
+        if ((Type == PowerPointChartType.Pie || Type == PowerPointChartType.Doughnut) && SeriesProperty.Length > 1) {
             throw new PSArgumentException("Pie and Doughnut charts support only one series property.", nameof(SeriesProperty));
         }
 
         return slide.AddChartPoints(GetOfficeChartKind(Type), BuildChartData(), X, Y, Width, Height);
     }
 
-    private PowerPointChart AddScatterChart(PowerPointSlide slide)
-    {
-        if (Type != PowerPointChartType.Scatter)
-        {
+    private PowerPointChart AddScatterChart(PowerPointSlide slide) {
+        if (Type != PowerPointChartType.Scatter) {
             throw new PSArgumentException("Use -CategoryProperty/-SeriesProperty for non-scatter charts.", nameof(Type));
         }
 
-        if (YProperty == null || YProperty.Length == 0)
-        {
+        if (YProperty == null || YProperty.Length == 0) {
             throw new PSArgumentException("Provide at least one -YProperty.", nameof(YProperty));
         }
 
         return slide.AddChartPoints(OfficeChartKind.Scatter, BuildScatterChartData(), X, Y, Width, Height);
     }
 
-    private OfficeChartData BuildChartData()
-    {
+    private OfficeChartData BuildChartData() {
         var items = EnsureData();
         var categories = items.Select(item => ConvertToString(GetPropertyValue(item, CategoryProperty), CategoryProperty)).ToArray();
         var series = SeriesProperty.Select(property =>
@@ -208,8 +189,7 @@ private OfficeChartData BuildChartData()
         return new OfficeChartData(categories, series);
     }
 
-    private OfficeChartData BuildScatterChartData()
-    {
+    private OfficeChartData BuildScatterChartData() {
         var items = EnsureData();
         var xValues = items.Select(item => ConvertToDouble(GetPropertyValue(item, XProperty), XProperty)).ToArray();
         var series = YProperty.Select(property =>
@@ -224,8 +204,7 @@ private OfficeChartData BuildScatterChartData()
             series);
     }
 
-    private static OfficeChartKind GetOfficeChartKind(PowerPointChartType type) => type switch
-    {
+    private static OfficeChartKind GetOfficeChartKind(PowerPointChartType type) => type switch {
         PowerPointChartType.Line => OfficeChartKind.Line,
         PowerPointChartType.Pie => OfficeChartKind.Pie,
         PowerPointChartType.Doughnut => OfficeChartKind.Doughnut,
@@ -233,77 +212,60 @@ private OfficeChartData BuildScatterChartData()
         _ => OfficeChartKind.ColumnClustered
     };
 
-    private object[] EnsureData()
-    {
-        if (InputObject == null || InputObject.Length == 0)
-        {
+    private object[] EnsureData() {
+        if (InputObject == null || InputObject.Length == 0) {
             throw new PSArgumentException("Provide at least one data item.", nameof(InputObject));
         }
 
         return InputObject;
     }
 
-    private static object? GetPropertyValue(object item, string propertyName)
-    {
-        if (item == null)
-        {
+    private static object? GetPropertyValue(object item, string propertyName) {
+        if (item == null) {
             throw new PSArgumentException("Chart data items cannot be null.");
         }
 
-        if (string.IsNullOrWhiteSpace(propertyName))
-        {
+        if (string.IsNullOrWhiteSpace(propertyName)) {
             throw new PSArgumentException("Property name cannot be empty.", nameof(propertyName));
         }
 
-        if (item is IDictionary dictionary)
-        {
-            foreach (DictionaryEntry entry in dictionary)
-            {
-                if (entry.Key is string key && string.Equals(key, propertyName, StringComparison.OrdinalIgnoreCase))
-                {
+        if (item is IDictionary dictionary) {
+            foreach (DictionaryEntry entry in dictionary) {
+                if (entry.Key is string key && string.Equals(key, propertyName, StringComparison.OrdinalIgnoreCase)) {
                     return entry.Value;
                 }
             }
         }
 
         var property = PSObject.AsPSObject(item).Properties[propertyName];
-        if (property == null)
-        {
+        if (property == null) {
             throw new PSArgumentException($"Property '{propertyName}' was not found on chart data item.");
         }
 
         return property.Value;
     }
 
-    private static string ConvertToString(object? value, string propertyName)
-    {
-        if (value == null)
-        {
+    private static string ConvertToString(object? value, string propertyName) {
+        if (value == null) {
             throw new PSArgumentException($"Property '{propertyName}' cannot be null.");
         }
 
         var text = Convert.ToString(value, CultureInfo.InvariantCulture);
-        if (string.IsNullOrWhiteSpace(text))
-        {
+        if (string.IsNullOrWhiteSpace(text)) {
             throw new PSArgumentException($"Property '{propertyName}' cannot be empty.");
         }
 
         return text;
     }
 
-    private static double ConvertToDouble(object? value, string propertyName)
-    {
-        if (value == null)
-        {
+    private static double ConvertToDouble(object? value, string propertyName) {
+        if (value == null) {
             throw new PSArgumentException($"Property '{propertyName}' cannot be null.");
         }
 
-        try
-        {
+        try {
             return Convert.ToDouble(value, CultureInfo.InvariantCulture);
-        }
-        catch (Exception)
-        {
+        } catch (Exception) {
             throw new PSArgumentException($"Property '{propertyName}' must be numeric.", propertyName);
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointImageCommand.cs
index 90eaeba2..f164d3e3 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointImageCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   PS> 
 ///   $image = '.\Tests\Assets\CellImage.png'
 /// New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImage.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Evidence'
 ///     Add-OfficePowerPointImage -Slide $slide -Path $image -X 60 -Y 130 -Width 180 -Height 120
 /// }
@@ -21,8 +21,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointImage")]
 [Alias("PptImage")]
 [OutputType(typeof(PowerPointPicture))]
-public sealed class AddOfficePowerPointImageCommand : PSCmdlet
-{
+public sealed class AddOfficePowerPointImageCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target slide that will receive the picture (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointSlide? Slide { get; set; }
@@ -48,27 +47,21 @@ public sealed class AddOfficePowerPointImageCommand : PSCmdlet
     public double Height { get; set; } = 150;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (Width <= 0)
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (Width <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Width), "Width must be greater than 0.");
             }
 
-            if (Height <= 0)
-            {
+            if (Height <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Height), "Height must be greater than 0.");
             }
 
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
             var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
             var picture = slide.AddPicturePoints(resolvedPath, X, Y, Width, Height);
-            WriteObject(picture);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(picture);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddImageFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSectionCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSectionCommand.cs
index 267a40ee..48a4cb8b 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSectionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSectionCommand.cs
@@ -12,8 +12,8 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Create a section that starts at slide 3.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSections.pptx {
-///     Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Overview'
-///     Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Results'
+///     Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Overview'
+///     Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Results'
 ///     Add-OfficePowerPointSection -Name 'Results' -StartSlideIndex 1
 /// }
 ///   Creates a section named Results starting at the second slide.
@@ -21,8 +21,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointSection")]
 [Alias("PptSection")]
 [OutputType(typeof(PowerPointSectionInfo))]
-public sealed class AddOfficePowerPointSectionCommand : PSCmdlet
-{
+public sealed class AddOfficePowerPointSectionCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Presentation to update (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointPresentation? Presentation { get; set; }
@@ -36,36 +35,28 @@ public sealed class AddOfficePowerPointSectionCommand : PSCmdlet
     public int? StartSlideIndex { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var context = PowerPointDslContext.Current;
             var presentation = Presentation ?? context?.Presentation
                 ?? throw new InvalidOperationException("Presentation was not provided. Use -Presentation or run inside New-OfficePowerPoint.");
 
             int startIndex = ResolveStartSlideIndex(presentation, context);
-            WriteObject(presentation.AddSection(Name, startIndex));
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(presentation.AddSection(Name, startIndex));
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddSectionFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
 
-    private int ResolveStartSlideIndex(PowerPointPresentation presentation, PowerPointDslContext? context)
-    {
-        if (StartSlideIndex.HasValue)
-        {
+    private int ResolveStartSlideIndex(PowerPointPresentation presentation, PowerPointDslContext? context) {
+        if (StartSlideIndex.HasValue) {
             return StartSlideIndex.Value;
         }
 
         var currentSlide = context?.CurrentSlide;
-        if (currentSlide != null)
-        {
+        if (currentSlide != null) {
             int index = presentation.Slides.ToList().IndexOf(currentSlide);
-            if (index >= 0)
-            {
+            if (index >= 0) {
                 return index;
             }
         }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointShapeCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointShapeCommand.cs
index d09c9bfa..c1646902 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointShapeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointShapeCommand.cs
@@ -14,7 +14,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Create a rectangle highlight.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointShape.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Add-OfficePowerPointShape -Slide $slide -ShapeType Rectangle -X 60 -Y 120 -Width 220 -Height 90 -FillColor '#DDEEFF' -OutlineColor '#2563EB' -OutlineWidth 1
 ///     Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlighted status' -X 80 -Y 145 -Width 180 -Height 32
 /// }
@@ -22,8 +22,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointShape")]
 [Alias("PptShape")]
-public sealed class AddOfficePowerPointShapeCommand : PSCmdlet
-{
+public sealed class AddOfficePowerPointShapeCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target slide that will receive the shape (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointSlide? Slide { get; set; }
@@ -65,22 +64,17 @@ public sealed class AddOfficePowerPointShapeCommand : PSCmdlet
     public double? OutlineWidth { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (Width <= 0)
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (Width <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Width), "Width must be greater than 0.");
             }
 
-            if (Height <= 0)
-            {
+            if (Height <= 0) {
                 throw new ArgumentOutOfRangeException(nameof(Height), "Height must be greater than 0.");
             }
 
-            if (OutlineWidth is < 0)
-            {
+            if (OutlineWidth is < 0) {
                 throw new ArgumentOutOfRangeException(nameof(OutlineWidth), "OutlineWidth cannot be negative.");
             }
 
@@ -89,49 +83,39 @@ protected override void ProcessRecord()
             var shape = slide.AddShapePoints(shapeType, X, Y, Width, Height, Name);
 
             var fill = NormalizeColor(FillColor);
-            if (fill != null)
-            {
+            if (fill != null) {
                 shape.FillColor = fill;
             }
 
             var outline = NormalizeColor(OutlineColor);
-            if (outline != null)
-            {
+            if (outline != null) {
                 shape.OutlineColor = outline;
             }
 
-            if (OutlineWidth.HasValue)
-            {
+            if (OutlineWidth.HasValue) {
                 shape.OutlineWidthPoints = OutlineWidth.Value;
             }
 
-            WriteObject(shape);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(shape);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddShapeFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
 
-    private static string? NormalizeColor(string? color)
-    {
-        if (string.IsNullOrWhiteSpace(color))
-        {
+    private static string? NormalizeColor(string? color) {
+        if (string.IsNullOrWhiteSpace(color)) {
             return null;
         }
 
         return OfficeColor.Parse(color!).ToRgbHex().ToLowerInvariant();
     }
 
-    private static OfficePresetShapeType ResolveShapeType(string? shapeType)
-    {
-        if (string.IsNullOrWhiteSpace(shapeType))
-        {
+    private static OfficePresetShapeType ResolveShapeType(string? shapeType) {
+        if (string.IsNullOrWhiteSpace(shapeType)) {
             return OfficePresetShapeType.Rectangle;
         }
 
-        if (!OpenXmlValueParser.TryParse(shapeType, out var parsed))
-        {
+        if (!OpenXmlValueParser.TryParse(shapeType, out var parsed)) {
             throw new PSArgumentException($"Unknown shape type '{shapeType}'.", nameof(ShapeType));
         }
 
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs
index 8a7fd9a6..7d2b08dc 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs
@@ -10,7 +10,9 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Append a slide with the default layout.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\deck.pptx; Add-OfficePowerPointSlide -Presentation $ppt
+///   $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave
+/// Add-OfficePowerPointSlide -Presentation $ppt
+/// $ppt | Close-OfficePowerPoint -Save
 ///   Creates a deck and appends a new slide at the end.
 /// 
 /// 
@@ -21,8 +23,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointSlide", DefaultParameterSetName = ParameterSetIndex)]
 [Alias("PptSlide")]
-public class AddOfficePowerPointSlideCommand : PSCmdlet
-{
+public class AddOfficePowerPointSlideCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetIndex = "Index";
     private const string ParameterSetByName = "Name";
     private const string ParameterSetByType = "Type";
@@ -56,20 +57,16 @@ public class AddOfficePowerPointSlideCommand : PSCmdlet
     public ScriptBlock? Content { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         PowerPointPresentation? presentation = Presentation;
-        try
-        {
+        try {
             var context = PowerPointDslContext.Current;
-            if (presentation == null)
-            {
+            if (presentation == null) {
                 presentation = (context ?? PowerPointDslContext.Require(this)).Presentation;
             }
 
             PowerPointSlide slide;
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetByName:
                     slide = presentation.AddSlide(LayoutName, Master, ignoreCase: !CaseSensitive.IsPresent);
                     break;
@@ -81,29 +78,21 @@ protected override void ProcessRecord()
                     break;
             }
 
-            if (Content != null)
-            {
-                if (context != null)
-                {
-                    using (context.Push(slide))
-                    {
+            if (Content != null) {
+                if (context != null) {
+                    using (context.Push(slide)) {
                         Content.InvokeReturnAsIs();
                     }
-                }
-                else
-                {
+                } else {
                     using (var scoped = PowerPointDslContext.Enter(presentation))
-                    using (scoped.Push(slide))
-                    {
+                    using (scoped.Push(slide)) {
                         Content.InvokeReturnAsIs();
                     }
                 }
             }
 
-            WriteObject(slide);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slide);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddSlideFailed", ErrorCategory.InvalidOperation, presentation ?? Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTableCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTableCommand.cs
index e651612d..704c8d67 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTableCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTableCommand.cs
@@ -22,8 +22,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointTable", DefaultParameterSetName = ParameterSetInputObject)]
 [Alias("PptTable")]
-public sealed class AddOfficePowerPointTableCommand : PSCmdlet
-{
+public sealed class AddOfficePowerPointTableCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetInputObject = "InputObject";
     private const string ParameterSetSize = "Size";
 
@@ -103,11 +102,9 @@ public sealed class AddOfficePowerPointTableCommand : PSCmdlet
     public string? StyleId { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         PowerPointSlide? slide = null;
-        try
-        {
+        try {
             ValidateDimensions();
             slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
 
@@ -115,36 +112,29 @@ protected override void ProcessRecord()
                 ? CreateSizedTable(slide)
                 : CreateDataTable(slide);
 
-            if (!string.IsNullOrWhiteSpace(StyleId))
-            {
+            if (!string.IsNullOrWhiteSpace(StyleId)) {
                 table.StyleId = StyleId;
             }
 
-            WriteObject(table);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(table);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddTableFailed", ErrorCategory.InvalidOperation, slide ?? Slide));
         }
     }
 
-    private PowerPointTable CreateSizedTable(PowerPointSlide slide)
-    {
-        if (Rows <= 0)
-        {
+    private PowerPointTable CreateSizedTable(PowerPointSlide slide) {
+        if (Rows <= 0) {
             throw new ArgumentOutOfRangeException(nameof(Rows), "Rows must be greater than 0.");
         }
 
-        if (Columns <= 0)
-        {
+        if (Columns <= 0) {
             throw new ArgumentOutOfRangeException(nameof(Columns), "Columns must be greater than 0.");
         }
 
         return slide.AddTablePoints(Rows, Columns, X, Y, Width, Height);
     }
 
-    private PowerPointTable CreateDataTable(PowerPointSlide slide)
-    {
+    private PowerPointTable CreateDataTable(PowerPointSlide slide) {
         var items = new List();
         TableInputCollector.AddInput(items, InputObject);
         var inputRows = TableInputCollector.RequireRows(items, nameof(InputObject));
@@ -161,8 +151,7 @@ private PowerPointTable CreateDataTable(PowerPointSlide slide)
                 propertyNames: explicitHeaders,
                 header: NoHeader.IsPresent ? Array.Empty() : explicitHeaders,
                 out var tableSpec,
-                normalizerOptions))
-        {
+                normalizerOptions)) {
             return CreateStructuredTable(slide, tableSpec);
         }
 
@@ -170,8 +159,7 @@ private PowerPointTable CreateDataTable(PowerPointSlide slide)
         var rows = NormalizeRows(normalized);
         var headers = ResolveHeaders(rows);
 
-        if (headers.Count == 0)
-        {
+        if (headers.Count == 0) {
             throw new InvalidOperationException("Unable to infer columns from the supplied data.");
         }
 
@@ -184,20 +172,16 @@ private PowerPointTable CreateDataTable(PowerPointSlide slide)
         return slide.AddTablePoints(rows, columns, includeHeaders: !NoHeader.IsPresent, X, Y, Width, Height);
     }
 
-    private PowerPointTable CreateStructuredTable(PowerPointSlide slide, OfficeTableSpec spec)
-    {
-        foreach (var placement in spec.Placements)
-        {
+    private PowerPointTable CreateStructuredTable(PowerPointSlide slide, OfficeTableSpec spec) {
+        foreach (var placement in spec.Placements) {
             PowerPointTableCellSpecService.Validate(placement.Cell);
         }
 
         var table = slide.AddTablePoints(spec.RowCount, spec.ColumnCount, X, Y, Width, Height);
-        foreach (var placement in spec.Placements)
-        {
+        foreach (var placement in spec.Placements) {
             var cell = table.GetCell(placement.RowIndex, placement.ColumnIndex);
             PowerPointTableCellSpecService.Apply(cell, placement.Cell);
-            if (placement.Cell.HasSpan)
-            {
+            if (placement.Cell.HasSpan) {
                 cell.Merge = (placement.Cell.RowSpan, placement.Cell.ColumnSpan);
             }
         }
@@ -205,38 +189,29 @@ private PowerPointTable CreateStructuredTable(PowerPointSlide slide, OfficeTable
         return table;
     }
 
-    private void ValidateDimensions()
-    {
-        if (Width <= 0)
-        {
+    private void ValidateDimensions() {
+        if (Width <= 0) {
             throw new ArgumentOutOfRangeException(nameof(Width), "Width must be greater than 0.");
         }
 
-        if (Height <= 0)
-        {
+        if (Height <= 0) {
             throw new ArgumentOutOfRangeException(nameof(Height), "Height must be greater than 0.");
         }
     }
 
-    private List> NormalizeRows(IReadOnlyList items)
-    {
+    private List> NormalizeRows(IReadOnlyList items) {
         var rows = new List>(items.Count);
-        foreach (var item in items)
-        {
-            if (item == null)
-            {
+        foreach (var item in items) {
+            if (item == null) {
                 rows.Add(new Dictionary(StringComparer.OrdinalIgnoreCase));
                 continue;
             }
 
-            if (item is IDictionary dict)
-            {
+            if (item is IDictionary dict) {
                 var row = new Dictionary(StringComparer.OrdinalIgnoreCase);
-                foreach (DictionaryEntry entry in dict)
-                {
+                foreach (DictionaryEntry entry in dict) {
                     var key = Convert.ToString(entry.Key, CultureInfo.InvariantCulture);
-                    if (string.IsNullOrWhiteSpace(key))
-                    {
+                    if (string.IsNullOrWhiteSpace(key)) {
                         continue;
                     }
                     row[key] = entry.Value;
@@ -246,8 +221,7 @@ private void ValidateDimensions()
                 continue;
             }
 
-            rows.Add(new Dictionary(StringComparer.OrdinalIgnoreCase)
-            {
+            rows.Add(new Dictionary(StringComparer.OrdinalIgnoreCase) {
                 ["Value"] = item
             });
         }
@@ -255,22 +229,17 @@ private void ValidateDimensions()
         return rows;
     }
 
-    private List ResolveHeaders(IReadOnlyList> rows)
-    {
+    private List ResolveHeaders(IReadOnlyList> rows) {
         var explicitHeaders = ResolveExplicitHeaders();
-        if (explicitHeaders != null)
-        {
+        if (explicitHeaders != null) {
             return explicitHeaders.ToList();
         }
 
         var headers = new List();
         var seen = new HashSet(StringComparer.OrdinalIgnoreCase);
-        foreach (var row in rows)
-        {
-            foreach (var key in row.Keys)
-            {
-                if (seen.Add(key))
-                {
+        foreach (var row in rows) {
+            foreach (var key in row.Keys) {
+                if (seen.Add(key)) {
                     headers.Add(key);
                 }
             }
@@ -279,10 +248,8 @@ private List ResolveHeaders(IReadOnlyList> r
         return headers;
     }
 
-    private string[]? ResolveExplicitHeaders()
-    {
-        if (Header == null || Header.Length == 0)
-        {
+    private string[]? ResolveExplicitHeaders() {
+        if (Header == null || Header.Length == 0) {
             return null;
         }
 
@@ -291,11 +258,10 @@ private List ResolveHeaders(IReadOnlyList> r
             .Distinct(StringComparer.OrdinalIgnoreCase)
             .ToArray();
 
-        if (explicitHeaders.Length == 0)
-        {
+        if (explicitHeaders.Length == 0) {
             throw new PSArgumentException("Header cannot be empty.", nameof(Header));
         }
 
         return explicitHeaders;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTextBoxCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTextBoxCommand.cs
index 199c99ad..63bce3f0 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTextBoxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointTextBoxCommand.cs
@@ -11,7 +11,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Insert a caption.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointTextBox.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Add-OfficePowerPointTextBox -Slide $slide -Text 'Quarterly overview' -X 80 -Y 150 -Width 320 -Height 50
 ///     Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated by PSWriteOffice' -X 80 -Y 210 -Width 320 -Height 35
 /// }
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointTextBox", DefaultParameterSetName = "Text")]
 [Alias("PptTextBox")]
-public class AddOfficePowerPointTextBoxCommand : PSCmdlet
-{
+public class AddOfficePowerPointTextBoxCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetText = "Text";
     private const string ParameterSetRun = "Run";
 
@@ -54,26 +53,20 @@ public class AddOfficePowerPointTextBoxCommand : PSCmdlet
     public int Height { get; set; } = 50;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
-            if (ParameterSetName == ParameterSetRun)
-            {
+            if (ParameterSetName == ParameterSetRun) {
                 PowerPointTextRunService.ValidateRuns(Run!, allowHyperlinks: true);
             }
 
             var textBox = slide.AddTextBoxPoints(Text ?? string.Empty, X, Y, Width, Height);
-            if (ParameterSetName == ParameterSetRun)
-            {
+            if (ParameterSetName == ParameterSetRun) {
                 PowerPointTextRunService.ApplyRuns(textBox, Run!);
             }
 
-            WriteObject(textBox);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(textBox);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointAddTextBoxFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointVisualCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointVisualCommand.cs
index e0cb8a24..a49d5f29 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointVisualCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointVisualCommand.cs
@@ -10,8 +10,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Add, "OfficePowerPointVisual")]
 [Alias("PptVisual")]
 [OutputType(typeof(PowerPointPicture))]
-public sealed class AddOfficePowerPointVisualCommand : OfficeVisualCommandBase
-{
+public sealed class AddOfficePowerPointVisualCommand : OfficeVisualCommandBase {
     /// ChartForgeX VisualArtifact, OfficeVisualSource, OfficeVisualConversionResult, or SVG file path.
     [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
     public object InputObject { get; set; } = null!;
@@ -28,10 +27,16 @@ public sealed class AddOfficePowerPointVisualCommand : OfficeVisualCommandBase
     [Parameter]
     public double Y { get; set; }
 
+    /// Emit the picture added to the slide.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         PowerPointSlide slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
-        WriteObject(slide.AddVisualArtifact(ResolveVisual(InputObject), X, Y));
+        var picture = slide.AddVisualArtifact(ResolveVisual(InputObject), X, Y);
+        if (PassThru.IsPresent) {
+            WriteObject(picture);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/CloseOfficePowerPointCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/CloseOfficePowerPointCommand.cs
index e4a356f3..19878202 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/CloseOfficePowerPointCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/CloseOfficePowerPointCommand.cs
@@ -10,18 +10,17 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Close without saving.
 ///   PS> 
-///   $ppt = Get-OfficePowerPoint -FilePath .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt
+///   $ppt = Get-OfficePowerPoint -Path .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt
 ///   Releases the loaded presentation instance.
 /// 
 /// 
 ///   Save, open, and close.
 ///   PS> 
-///   Close-OfficePowerPoint -Presentation $ppt -Save -Show
+///   Close-OfficePowerPoint -Presentation $ppt -Save -Open
 ///   Saves the presentation, opens it in PowerPoint, and releases the object.
 /// 
 [Cmdlet(VerbsCommon.Close, "OfficePowerPoint", SupportsShouldProcess = true)]
-public sealed class CloseOfficePowerPointCommand : PSCmdlet
-{
+public sealed class CloseOfficePowerPointCommand : PSCmdlet {
     /// Presentation to close.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     [ValidateNotNull]
@@ -31,33 +30,41 @@ public sealed class CloseOfficePowerPointCommand : PSCmdlet
     [Parameter]
     public SwitchParameter Save { get; set; }
 
-    /// Open the presentation in PowerPoint after saving.
+    /// Optional target path when saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("FilePath")]
+    public string? Path { get; set; }
+
+    /// Open the presentation after saving. Requires -Save or -Path.
+    [Parameter]
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Password used to save the presentation as an encrypted package.
     [Parameter]
     public string? Password { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Presentation == null)
-        {
+    protected override void ProcessRecord() {
+        if (Presentation == null) {
             WriteError(new ErrorRecord(new ArgumentNullException(nameof(Presentation)), "PresentationNull", ErrorCategory.InvalidArgument, null));
             return;
         }
 
-        try
-        {
-            var action = Save.IsPresent || Show.IsPresent ? "Save and close" : "Close";
-            if (ShouldProcess("PowerPoint presentation", action))
-            {
-                PowerPointDocumentService.ClosePresentation(Presentation, Save.IsPresent, Show.IsPresent, Password);
-            }
+        if (Open.IsPresent && !Save.IsPresent && string.IsNullOrWhiteSpace(Path)) {
+            throw new PSArgumentException("Use -Save or -Path with -Open so the presentation is persisted before it is opened.", nameof(Open));
         }
-        catch (Exception ex)
-        {
+
+        try {
+            var shouldSave = Save.IsPresent || !string.IsNullOrWhiteSpace(Path);
+            var action = shouldSave ? "Save and close" : "Close";
+            if (ShouldProcess("PowerPoint presentation", action)) {
+                var resolvedPath = !string.IsNullOrWhiteSpace(Path)
+                    ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)
+                    : null;
+                PowerPointDocumentService.ClosePresentation(Presentation, shouldSave, Open.IsPresent, Password, resolvedPath);
+            }
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointCloseFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/CopyOfficePowerPointSlideCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/CopyOfficePowerPointSlideCommand.cs
index b8a5e6ca..86fc4b4e 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/CopyOfficePowerPointSlideCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/CopyOfficePowerPointSlideCommand.cs
@@ -11,17 +11,16 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Duplicate the first slide and insert the copy after it.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCopySlide.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Original'
-///     $copy = Copy-OfficePowerPointSlide -Index 0
+///     $copy = Copy-OfficePowerPointSlide -Index 0 -PassThru
 ///     Set-OfficePowerPointSlideTitle -Slide $copy -Title 'Copied appendix'
 /// }
 ///   Duplicates a slide and updates the copied slide title.
 /// 
 [Cmdlet(VerbsCommon.Copy, "OfficePowerPointSlide")]
 [OutputType(typeof(PowerPointSlide))]
-public sealed class CopyOfficePowerPointSlideCommand : PSCmdlet
-{
+public sealed class CopyOfficePowerPointSlideCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Presentation to update (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointPresentation? Presentation { get; set; }
@@ -35,17 +34,13 @@ public sealed class CopyOfficePowerPointSlideCommand : PSCmdlet
     public int? InsertAt { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var presentation = Presentation ?? PowerPointDslContext.Current?.Presentation
                 ?? throw new InvalidOperationException("Presentation was not provided. Use -Presentation or run inside New-OfficePowerPoint.");
 
-            WriteObject(presentation.DuplicateSlide(Index, InsertAt));
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(presentation.DuplicateSlide(Index, InsertAt));
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointCopySlideFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/ExportOfficePowerPointImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/ExportOfficePowerPointImageCommand.cs
index 745ef278..779a77f0 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/ExportOfficePowerPointImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/ExportOfficePowerPointImageCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Export visible slides as SVG files.
 ///   PS> 
 ///   Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Format Svg
-///   Writes one image per selected slide and returns OfficeImageExportResult objects.
+///   Writes one image per selected slide. Add -PassThru to receive the structured export results.
 /// 
 [Cmdlet(VerbsData.Export, "OfficePowerPointImage", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
@@ -38,6 +38,10 @@ public sealed class ExportOfficePowerPointImageCommand : PSCmdlet
     [Parameter]
     public PowerPointPresentationImageExportOptions? Options { get; set; }
 
+    /// Emit one structured image export result per saved slide.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -55,7 +59,7 @@ protected override void ProcessRecord()
                 presentation = owned;
             }
             IReadOnlyList results = presentation.SaveAsImages(output, Format, Options);
-            WriteObject(results, enumerateCollection: true);
+            if (PassThru.IsPresent) WriteObject(results, enumerateCollection: true);
         }
         finally
         {
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointCommand.cs
index 3c66b2c8..b4b51171 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointCommand.cs
@@ -11,37 +11,31 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Open a deck for editing.
 ///   PS> 
-///   $ppt = Get-OfficePowerPoint -FilePath .\Quarterly.pptx
+///   $ppt = Get-OfficePowerPoint -Path .\Quarterly.pptx
 ///   Reads Quarterly.pptx and exposes the presentation object.
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficePowerPoint")]
-public class GetOfficePowerPointCommand : PSCmdlet
-{
+public class GetOfficePowerPointCommand : PSCmdlet {
     /// Path to the .pptx file.
     [Parameter(Mandatory = true)]
     [ValidateNotNullOrEmpty]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Password used to open an encrypted presentation package.
     [Parameter]
     public string? Password { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
+    protected override void ProcessRecord() {
+        try {
+            var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
             var presentation = PowerPointDocumentService.LoadPresentation(resolvedPath, Password);
             WriteObject(presentation);
-        }
-        catch (FileNotFoundException ex)
-        {
-            WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, FilePath));
-        }
-        catch (Exception ex)
-        {
-            WriteError(new ErrorRecord(ex, "PowerPointLoadFailed", ErrorCategory.InvalidOperation, FilePath));
+        } catch (FileNotFoundException ex) {
+            WriteError(new ErrorRecord(ex, "FileNotFound", ErrorCategory.ObjectNotFound, Path));
+        } catch (Exception ex) {
+            WriteError(new ErrorRecord(ex, "PowerPointLoadFailed", ErrorCategory.InvalidOperation, Path));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointLayoutBoxCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointLayoutBoxCommand.cs
index 94d85443..9be41195 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointLayoutBoxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointLayoutBoxCommand.cs
@@ -11,7 +11,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Get the content area for a deck.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointLayoutBox.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     $box = Get-OfficePowerPointLayoutBox -MarginCm 1.5
 ///     Add-OfficePowerPointTextBox -Slide $slide -Text 'Inside the content box' -X ($box.LeftPoints) -Y ($box.TopPoints) -Width ($box.WidthPoints) -Height 60
 /// }
@@ -21,7 +21,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Split the slide into two columns.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointColumns.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     $columns = Get-OfficePowerPointLayoutBox -ColumnCount 2 -MarginCm 1.5 -GutterCm 1.0
 ///     Add-OfficePowerPointTextBox -Slide $slide -Text 'Left column' -X ($columns[0].LeftPoints) -Y ($columns[0].TopPoints) -Width ($columns[0].WidthPoints) -Height 80
 ///     Add-OfficePowerPointTextBox -Slide $slide -Text 'Right column' -X ($columns[1].LeftPoints) -Y ($columns[1].TopPoints) -Width ($columns[1].WidthPoints) -Height 80
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs
index fc81254c..1175e934 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs
@@ -10,16 +10,16 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   List all sections in a deck.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSectionsRead.pptx
-/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-/// Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0 | Out-Null
-/// Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSectionsRead.pptx -NoSave
+/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+/// Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0
+/// Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount
+/// $ppt | Close-OfficePowerPoint
 ///   Returns section information including section names and slide indexes.
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficePowerPointSection")]
 [OutputType(typeof(PowerPointSectionInfo))]
-public sealed class GetOfficePowerPointSectionCommand : PSCmdlet
-{
+public sealed class GetOfficePowerPointSectionCommand : PSCmdlet {
     /// Presentation to inspect (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointPresentation? Presentation { get; set; }
@@ -33,27 +33,21 @@ public sealed class GetOfficePowerPointSectionCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var presentation = Presentation ?? PowerPointDslContext.Current?.Presentation
                 ?? throw new InvalidOperationException("Presentation was not provided. Use -Presentation or run inside New-OfficePowerPoint.");
 
             var comparison = CaseSensitive.IsPresent ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
-            foreach (var section in presentation.GetSections())
-            {
+            foreach (var section in presentation.GetSections()) {
                 if (!string.IsNullOrWhiteSpace(Name) &&
-                    !string.Equals(section.Name, Name, comparison))
-                {
+                    !string.Equals(section.Name, Name, comparison)) {
                     continue;
                 }
 
                 WriteObject(section);
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointGetSectionFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs
index 547202bf..d975abc5 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs
@@ -9,17 +9,17 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Inspect the default master theme.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointThemeRead.pptx
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeRead.pptx -NoSave
 /// Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Service Brief'
 /// Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos Display' -MinorLatin 'Aptos'
-/// Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master
+/// Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master
+/// $ppt | Close-OfficePowerPoint
 ///   Returns theme information after updating the deck theme metadata.
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficePowerPointTheme")]
 [Alias("PptTheme")]
 [OutputType(typeof(PowerPointThemeInfo))]
-public sealed class GetOfficePowerPointThemeCommand : PSCmdlet
-{
+public sealed class GetOfficePowerPointThemeCommand : PSCmdlet {
     /// Presentation to inspect (optional inside New-OfficePowerPoint).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointPresentation? Presentation { get; set; }
@@ -29,10 +29,8 @@ public sealed class GetOfficePowerPointThemeCommand : PSCmdlet
     public int Master { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var presentation = Presentation ?? PowerPointDslContext.Require(this).Presentation;
             var info = new PowerPointThemeInfo(
                 Master,
@@ -41,9 +39,7 @@ protected override void ProcessRecord()
                 presentation.GetThemeFonts(Master));
 
             WriteObject(info);
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointGetThemeFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/ImportOfficePowerPointSlideCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/ImportOfficePowerPointSlideCommand.cs
index 4562a262..2c066d49 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/ImportOfficePowerPointSlideCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/ImportOfficePowerPointSlideCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Import the first slide from another deck.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImportTarget.pptx {
-///     Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Target deck'
+///     Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Target deck'
 ///     Import-OfficePowerPointSlide -SourcePath .\Examples\Documents\SourceDeck.pptx -SourceIndex 0 -InsertAt 1
 /// }
 ///   Imports the first slide from another deck into the target presentation.
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePdfPowerPointImportOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePdfPowerPointImportOptionsCommand.cs
new file mode 100644
index 00000000..fe595c0a
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePdfPowerPointImportOptionsCommand.cs
@@ -0,0 +1,89 @@
+using System.Management.Automation;
+using OfficeIMO.Pdf;
+using OfficeIMO.PowerPoint;
+using OfficeIMO.PowerPoint.Pdf;
+
+namespace PSWriteOffice.Cmdlets.PowerPoint;
+
+/// Creates discoverable PDF-to-PowerPoint reconstruction settings.
+/// 
+///   Import selected PDF pages as bounded slide content.
+///   PS> 
+///   $options = New-OfficePdfPowerPointImportOptions -PageRange '1-5' -MaxPages 5 -IncludeSourceTitles
+/// ConvertTo-OfficePdfPowerPoint -Path .\Source.pdf -OutputPath .\Slides.pptx -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePdfPowerPointImportOptions")]
+[OutputType(typeof(PdfPowerPointImportOptions))]
+public sealed class NewOfficePdfPowerPointImportOptionsCommand : PSCmdlet {
+    /// Visual, editable-table, hybrid, editable-content, or automatic import mode.
+    [Parameter] public PdfPowerPointImportMode? Mode { get; set; }
+    /// Optional one-based page ranges such as 1-3,5.
+    [Parameter] public string? PageRange { get; set; }
+    /// Raster resolution used by visual import.
+    [Parameter] [ValidateRange(double.Epsilon, double.MaxValue)] public double? Dpi { get; set; }
+    /// Maximum pages imported.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxPages { get; set; }
+    /// Maximum pixels per rendered page.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxPixelsPerPage { get; set; }
+    /// Maximum encoded bytes per rendered page.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxOutputBytesPerPage { get; set; }
+    /// Maximum aggregate encoded output bytes.
+    [Parameter] [ValidateRange(1, long.MaxValue)] public long? MaxTotalOutputBytes { get; set; }
+    /// Maximum editable objects reconstructed per page.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxEditableObjectsPerPage { get; set; }
+    /// Maximum body rows imported per table; zero means unlimited.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? MaxRows { get; set; }
+    /// Merge compatible table segments across pages.
+    [Parameter] public SwitchParameter MergePageContinuations { get; set; }
+    /// Suppress repeated body header rows.
+    [Parameter] public SwitchParameter SuppressRepeatedBodyHeaderRows { get; set; }
+    /// Maximum rows written to one slide; zero means unlimited.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? MaxRowsPerSlide { get; set; }
+    /// Maximum columns written to one slide; zero means unlimited.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? MaxColumnsPerSlide { get; set; }
+    /// PowerPoint table style.
+    [Parameter] public PowerPointTableStylePreset? TableStyle { get; set; }
+    /// Add source-page titles.
+    [Parameter] public SwitchParameter IncludeSourceTitles { get; set; }
+    /// Add inferred column headers.
+    [Parameter] public SwitchParameter IncludeColumnHeaderRows { get; set; }
+    /// Enable banded-row styling.
+    [Parameter] public SwitchParameter BandedRows { get; set; }
+    /// Right-align inferred numeric columns.
+    [Parameter] public SwitchParameter AlignNumericColumns { get; set; }
+    /// Title used when no supported content is detected.
+    [Parameter] public string? EmptyPresentationTitle { get; set; }
+    /// Message used when no supported content is detected.
+    [Parameter] public string? EmptyPresentationMessage { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PdfPowerPointImportOptions();
+        if (Mode.HasValue) options.Mode = Mode.Value;
+        if (!string.IsNullOrWhiteSpace(PageRange)) options.PageSelection = PdfPageSelection.Parse(PageRange!);
+        if (Dpi.HasValue) options.Dpi = Dpi.Value;
+        if (MaxPages.HasValue) options.MaxPages = MaxPages.Value;
+        if (MaxPixelsPerPage.HasValue) options.MaxPixelsPerPage = MaxPixelsPerPage.Value;
+        if (MaxOutputBytesPerPage.HasValue) options.MaxOutputBytesPerPage = MaxOutputBytesPerPage.Value;
+        if (MaxTotalOutputBytes.HasValue) options.MaxTotalOutputBytes = MaxTotalOutputBytes.Value;
+        if (MaxEditableObjectsPerPage.HasValue) options.MaxEditableObjectsPerPage = MaxEditableObjectsPerPage.Value;
+        if (MaxRows.HasValue) options.MaxRows = MaxRows.Value;
+        if (MaxRowsPerSlide.HasValue) options.MaxRowsPerSlide = MaxRowsPerSlide.Value;
+        if (MaxColumnsPerSlide.HasValue) options.MaxColumnsPerSlide = MaxColumnsPerSlide.Value;
+        if (TableStyle.HasValue) options.TableStyle = TableStyle.Value;
+        Apply(nameof(MergePageContinuations), value => options.MergePageContinuations = value);
+        Apply(nameof(SuppressRepeatedBodyHeaderRows), value => options.SuppressRepeatedBodyHeaderRows = value);
+        Apply(nameof(IncludeSourceTitles), value => options.IncludeSourceTitles = value);
+        Apply(nameof(IncludeColumnHeaderRows), value => options.IncludeColumnHeaderRows = value);
+        Apply(nameof(BandedRows), value => options.BandedRows = value);
+        Apply(nameof(AlignNumericColumns), value => options.AlignNumericColumns = value);
+        if (EmptyPresentationTitle != null) options.EmptyPresentationTitle = EmptyPresentationTitle;
+        if (EmptyPresentationMessage != null) options.EmptyPresentationMessage = EmptyPresentationMessage;
+        WriteObject(options);
+    }
+
+    private void Apply(string name, System.Action setter) {
+        if (!MyInvocation.BoundParameters.ContainsKey(name)) return;
+        setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs
index 1ef240e0..0abc74ad 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs
@@ -2,7 +2,6 @@
 using System.IO;
 using System.Management.Automation;
 using OfficeIMO.PowerPoint;
-using OfficeIMO.PowerPoint.Pdf;
 using PSWriteOffice.Services;
 using PSWriteOffice.Services.Pdf;
 using PSWriteOffice.Services.PowerPoint;
@@ -14,8 +13,8 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Create and capture the presentation object.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\deck.pptx
-///   Creates deck.pptx and returns the live presentation object for further editing.
+///   $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave
+///   Creates a live presentation associated with deck.pptx for incremental composition.
 /// 
 /// 
 ///   Create a deck with a title slide.
@@ -25,12 +24,11 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 [Cmdlet(VerbsCommon.New, "OfficePowerPoint", SupportsShouldProcess = true)]
 [Alias("PowerPointNew", "PptNew")]
-public class NewOfficePowerPointCommand : PSCmdlet
-{
+public class NewOfficePowerPointCommand : PSCmdlet {
     /// Destination path for the new .pptx.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("Path")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// DSL scriptblock describing presentation content.
     [Parameter(Position = 1)]
@@ -44,7 +42,7 @@ public class NewOfficePowerPointCommand : PSCmdlet
     [Parameter]
     public SwitchParameter NoSave { get; set; }
 
-    /// Emit a  for chaining.
+    /// Emit the saved  for chaining.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
@@ -52,65 +50,47 @@ public class NewOfficePowerPointCommand : PSCmdlet
     [Parameter]
     public string? Password { get; set; }
 
-    /// Optional PDF path to create from the same presentation before closing it.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
     /// 
-    protected override void ProcessRecord()
-    {
-        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
-        if (NoSave.IsPresent)
-        {
-            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Create PowerPoint presentation"))
-            {
+    protected override void ProcessRecord() {
+        if (NoSave.IsPresent && Open.IsPresent) {
+            throw new PSArgumentException("-Open cannot be used with -NoSave because no file is written. Save the returned presentation explicitly, then use -Open on Save-OfficePowerPoint.", nameof(Open));
+        }
+
+        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        if (NoSave.IsPresent) {
+            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Create PowerPoint presentation")) {
                 return;
             }
-        }
-        else
-        {
-            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Write new PowerPoint presentation"))
-            {
+        } else {
+            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Write new PowerPoint presentation")) {
                 return;
             }
         }
 
-        var directory = Path.GetDirectoryName(resolvedPath);
-        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-        {
+        var directory = System.IO.Path.GetDirectoryName(resolvedPath);
+        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
             Directory.CreateDirectory(directory);
         }
 
         PowerPointPresentation? presentation = null;
-        try
-        {
+        try {
             presentation = PowerPointDocumentService.CreatePresentation(resolvedPath);
 
-            if (Content == null)
-            {
-                WriteObject(presentation);
-                return;
-            }
-
-            using (PowerPointDslContext.Enter(presentation))
-            {
-                try
-                {
-                    Content.InvokeReturnAsIs();
-                }
-                catch (Exception ex) when (IsStopUpstream(ex))
-                {
-                    // Select-Object -First throws this to stop enumeration; ignore.
+            if (Content != null) {
+                using (PowerPointDslContext.Enter(presentation)) {
+                    try {
+                        Content.InvokeReturnAsIs();
+                    } catch (Exception ex) when (IsStopUpstream(ex)) {
+                        // Select-Object -First throws this to stop enumeration; ignore.
+                    }
                 }
             }
 
-            if (NoSave.IsPresent)
-            {
+            if (NoSave.IsPresent) {
                 WriteObject(presentation);
                 return;
             }
 
-            SavePdfIfRequested(presentation);
             var savedPath = PowerPointDocumentService.SavePresentation(
                 presentation,
                 show: false,
@@ -119,45 +99,23 @@ protected override void ProcessRecord()
             PowerPointDocumentService.ClosePresentation(presentation, save: false, show: false);
             presentation = null;
 
-            if (Open.IsPresent)
-            {
+            if (Open.IsPresent) {
                 FileOpenService.Open(savedPath);
             }
 
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 WriteObject(new FileInfo(resolvedPath));
             }
-        }
-        catch (Exception ex)
-        {
-            if (presentation != null)
-            {
+        } catch (Exception ex) {
+            if (presentation != null) {
                 PowerPointDocumentService.ClosePresentation(presentation, save: false, show: false);
             }
-            WriteError(new ErrorRecord(ex, "PowerPointCreateFailed", ErrorCategory.InvalidOperation, FilePath));
+            WriteError(new ErrorRecord(ex, "PowerPointCreateFailed", ErrorCategory.InvalidOperation, Path));
         }
     }
 
-    private static bool IsStopUpstream(Exception ex)
-    {
+    private static bool IsStopUpstream(Exception ex) {
         return ex.GetType().Name == "StopUpstreamCommandsException";
     }
 
-    private void SavePdfIfRequested(PowerPointPresentation presentation)
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write PowerPoint PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        presentation.SaveAsPdf(pdfPath).RequireSuccess();
-    }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointImageOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointImageOptionsCommand.cs
new file mode 100644
index 00000000..2b50191e
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointImageOptionsCommand.cs
@@ -0,0 +1,55 @@
+using System.Management.Automation;
+using OfficeIMO.PowerPoint;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.PowerPoint;
+
+/// Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage.
+/// 
+///   Render selected slides with their backgrounds and content.
+///   PS> 
+///   $options = New-OfficePowerPointImageOptions -SlideNumber 1,3 -IncludeSlideBackground -IncludeSlideContent
+/// Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePowerPointImageOptions")]
+[OutputType(typeof(PowerPointPresentationImageExportOptions))]
+public sealed class NewOfficePowerPointImageOptionsCommand : OfficeImageOptionsCommandBase {
+    /// One-based slide numbers to export.
+    [Parameter] public int[]? SlideNumber { get; set; }
+    /// Include hidden slides.
+    [Parameter] public SwitchParameter IncludeHiddenSlides { get; set; }
+    /// Render slide backgrounds.
+    [Parameter] public SwitchParameter IncludeSlideBackground { get; set; }
+    /// Render slide content.
+    [Parameter] public SwitchParameter IncludeSlideContent { get; set; }
+    /// Render pictures.
+    [Parameter] public SwitchParameter IncludePictures { get; set; }
+    /// Render auto shapes.
+    [Parameter] public SwitchParameter IncludeAutoShapes { get; set; }
+    /// Render text boxes.
+    [Parameter] public SwitchParameter IncludeTextBoxes { get; set; }
+    /// Render tables.
+    [Parameter] public SwitchParameter IncludeTables { get; set; }
+    /// Render charts.
+    [Parameter] public SwitchParameter IncludeCharts { get; set; }
+    /// Render hidden shapes.
+    [Parameter] public SwitchParameter IncludeHiddenShapes { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PowerPointPresentationImageExportOptions();
+        ApplyCommon(options);
+        if (SlideNumber != null) options.SlideNumbers = SlideNumber;
+        Apply(nameof(IncludeHiddenSlides), value => options.IncludeHiddenSlides = value);
+        Apply(nameof(IncludeSlideBackground), value => options.IncludeSlideBackground = value);
+        Apply(nameof(IncludeSlideContent), value => options.IncludeSlideContent = value);
+        Apply(nameof(IncludePictures), value => options.IncludePictures = value);
+        Apply(nameof(IncludeAutoShapes), value => options.IncludeAutoShapes = value);
+        Apply(nameof(IncludeTextBoxes), value => options.IncludeTextBoxes = value);
+        Apply(nameof(IncludeTables), value => options.IncludeTables = value);
+        Apply(nameof(IncludeCharts), value => options.IncludeCharts = value);
+        Apply(nameof(IncludeHiddenShapes), value => options.IncludeHiddenShapes = value);
+        WriteObject(options);
+    }
+    private void Apply(string name, System.Action setter) { if (IsBound(name)) setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent); }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointPdfOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointPdfOptionsCommand.cs
new file mode 100644
index 00000000..f6d08478
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointPdfOptionsCommand.cs
@@ -0,0 +1,128 @@
+using System.Management.Automation;
+using OfficeIMO.Drawing;
+using OfficeIMO.PowerPoint.Pdf;
+
+namespace PSWriteOffice.Cmdlets.PowerPoint;
+
+/// Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf.
+/// 
+///   Create a handout PDF with notes and hidden slides.
+///   PS> 
+///   $options = New-OfficePowerPointPdfOptions -PageLayout Handouts -HandoutSlidesPerPage 3 -IncludeSpeakerNotes -IncludeHiddenSlides
+/// Export-OfficeDocumentPdf -InputPath .\Briefing.pptx -Path .\Briefing.pdf -PowerPointOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePowerPointPdfOptions")]
+[OutputType(typeof(PowerPointPdfSaveOptions))]
+public sealed class NewOfficePowerPointPdfOptionsCommand : PSCmdlet {
+    /// Underlying low-level OfficeIMO PDF options.
+    [Parameter]
+    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
+
+    /// Default font family used when the presentation does not specify one.
+    [Parameter]
+    public string? FontFamily { get; set; }
+
+    /// Render pictures.
+    [Parameter]
+    public SwitchParameter IncludePictures { get; set; }
+
+    /// Render automatic shapes.
+    [Parameter]
+    public SwitchParameter IncludeAutoShapes { get; set; }
+
+    /// Render text boxes.
+    [Parameter]
+    public SwitchParameter IncludeTextBoxes { get; set; }
+
+    /// Render slide backgrounds.
+    [Parameter]
+    public SwitchParameter IncludeSlideBackgrounds { get; set; }
+
+    /// Render tables.
+    [Parameter]
+    public SwitchParameter IncludeTables { get; set; }
+
+    /// Render charts.
+    [Parameter]
+    public SwitchParameter IncludeCharts { get; set; }
+
+    /// Render SmartArt.
+    [Parameter]
+    public SwitchParameter IncludeSmartArt { get; set; }
+
+    /// Include slides marked hidden.
+    [Parameter]
+    public SwitchParameter IncludeHiddenSlides { get; set; }
+
+    /// PDF page layout, such as slides, notes, or handouts.
+    [Parameter]
+    public PowerPointPdfPageLayout? PageLayout { get; set; }
+
+    /// Number of slides on each handout page.
+    [Parameter]
+    [ValidateRange(1, 9)]
+    public int? HandoutSlidesPerPage { get; set; }
+
+    /// Include speaker notes.
+    [Parameter]
+    public SwitchParameter IncludeSpeakerNotes { get; set; }
+
+    /// Maximum nested group-shape depth to render.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaxGroupShapeDepth { get; set; }
+
+    /// How pictures fit their shape bounds.
+    [Parameter]
+    public OfficeImageFit? PictureFit { get; set; }
+
+    /// Report pictures whose requested fit distorts their aspect ratio.
+    [Parameter]
+    public SwitchParameter WarnOnPictureAspectRatioDistortion { get; set; }
+
+    /// Chart visual style override.
+    [Parameter]
+    public OfficeChartStyle? ChartStyle { get; set; }
+
+    /// Chart layout override.
+    [Parameter]
+    public OfficeChartLayout? ChartLayout { get; set; }
+
+    /// Allow embedding fonts discovered on the current system.
+    [Parameter]
+    public SwitchParameter AllowSystemFontEmbedding { get; set; }
+
+    /// Allow embedding fonts stored in the presentation.
+    [Parameter]
+    public SwitchParameter AllowDocumentFontEmbedding { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new PowerPointPdfSaveOptions();
+        if (PdfOptions != null) options.PdfOptions = PdfOptions;
+        if (!string.IsNullOrWhiteSpace(FontFamily)) options.FontFamily = FontFamily;
+        SetBoundSwitch(nameof(IncludePictures), IncludePictures, value => options.IncludePictures = value);
+        SetBoundSwitch(nameof(IncludeAutoShapes), IncludeAutoShapes, value => options.IncludeAutoShapes = value);
+        SetBoundSwitch(nameof(IncludeTextBoxes), IncludeTextBoxes, value => options.IncludeTextBoxes = value);
+        SetBoundSwitch(nameof(IncludeSlideBackgrounds), IncludeSlideBackgrounds, value => options.IncludeSlideBackgrounds = value);
+        SetBoundSwitch(nameof(IncludeTables), IncludeTables, value => options.IncludeTables = value);
+        SetBoundSwitch(nameof(IncludeCharts), IncludeCharts, value => options.IncludeCharts = value);
+        SetBoundSwitch(nameof(IncludeSmartArt), IncludeSmartArt, value => options.IncludeSmartArt = value);
+        SetBoundSwitch(nameof(IncludeHiddenSlides), IncludeHiddenSlides, value => options.IncludeHiddenSlides = value);
+        if (PageLayout.HasValue) options.PageLayout = PageLayout.Value;
+        if (HandoutSlidesPerPage.HasValue) options.HandoutSlidesPerPage = HandoutSlidesPerPage.Value;
+        SetBoundSwitch(nameof(IncludeSpeakerNotes), IncludeSpeakerNotes, value => options.IncludeSpeakerNotes = value);
+        if (MaxGroupShapeDepth.HasValue) options.MaxGroupShapeDepth = MaxGroupShapeDepth.Value;
+        if (PictureFit.HasValue) options.PictureFit = PictureFit.Value;
+        SetBoundSwitch(nameof(WarnOnPictureAspectRatioDistortion), WarnOnPictureAspectRatioDistortion, value => options.WarnOnPictureAspectRatioDistortion = value);
+        if (ChartStyle != null) options.ChartStyle = ChartStyle;
+        if (ChartLayout != null) options.ChartLayout = ChartLayout;
+        SetBoundSwitch(nameof(AllowSystemFontEmbedding), AllowSystemFontEmbedding, value => options.ResourcePolicy.AllowSystemFontEmbedding = value);
+        SetBoundSwitch(nameof(AllowDocumentFontEmbedding), AllowDocumentFontEmbedding, value => options.ResourcePolicy.AllowDocumentFontEmbedding = value);
+        WriteObject(options);
+    }
+
+    private void SetBoundSwitch(string name, SwitchParameter value, System.Action setter) {
+        if (MyInvocation.BoundParameters.ContainsKey(name)) setter(value.IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/RemoveOfficePowerPointSlideCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/RemoveOfficePowerPointSlideCommand.cs
index 3ba3da50..6b21255e 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/RemoveOfficePowerPointSlideCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/RemoveOfficePowerPointSlideCommand.cs
@@ -9,16 +9,15 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Delete the first slide.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRemoveSlide.pptx
-/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRemoveSlide.pptx -NoSave
+/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
 /// Remove-OfficePowerPointSlide -Presentation $ppt -Index 0 -Confirm:$false
-/// Save-OfficePowerPoint -Presentation $ppt
+/// Close-OfficePowerPoint -Presentation $ppt -Save
 ///   Removes the first slide and saves the updated deck.
 /// 
 [Cmdlet(VerbsCommon.Remove, "OfficePowerPointSlide", SupportsShouldProcess = true)]
-public class RemoveOfficePowerPointSlideCommand : PSCmdlet
-{
+public class RemoveOfficePowerPointSlideCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Presentation to modify.
     [Parameter(Mandatory = true)]
     public PowerPointPresentation Presentation { get; set; } = null!;
@@ -28,17 +27,13 @@ public class RemoveOfficePowerPointSlideCommand : PSCmdlet
     public int Index { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
-            if (ShouldProcess($"Slide {Index}", "Remove slide"))
-            {
+    protected override void ProcessRecord() {
+        try {
+            if (ShouldProcess($"Slide {Index}", "Remove slide")) {
                 Presentation.RemoveSlide(Index);
+                WritePassThru(Presentation);
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointRemoveSlideFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs
index a05b9cfe..d5d44133 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs
@@ -10,16 +10,16 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Rename a section in a presentation.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRenameSection.pptx
-/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null
-/// Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0 | Out-Null
-/// Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRenameSection.pptx -NoSave
+/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+/// Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0
+/// Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru
+/// $ppt | Close-OfficePowerPoint -Save
 ///   Renames the first matching section and returns the updated section metadata.
 /// 
 [Cmdlet(VerbsCommon.Rename, "OfficePowerPointSection")]
 [OutputType(typeof(PowerPointSectionInfo), typeof(bool))]
-public sealed class RenameOfficePowerPointSectionCommand : PSCmdlet
-{
+public sealed class RenameOfficePowerPointSectionCommand : PSCmdlet {
     /// Presentation to update (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointPresentation? Presentation { get; set; }
@@ -41,16 +41,13 @@ public sealed class RenameOfficePowerPointSectionCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var presentation = Presentation ?? PowerPointDslContext.Current?.Presentation
                 ?? throw new InvalidOperationException("Presentation was not provided. Use -Presentation or run inside New-OfficePowerPoint.");
 
             bool renamed = presentation.RenameSection(Name, NewName, ignoreCase: !CaseSensitive.IsPresent);
-            if (!renamed)
-            {
+            if (!renamed) {
                 WriteError(new ErrorRecord(
                     new InvalidOperationException($"Section '{Name}' was not found."),
                     "PowerPointSectionNotFound",
@@ -59,22 +56,16 @@ protected override void ProcessRecord()
                 return;
             }
 
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 var comparison = CaseSensitive.IsPresent ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
                 var section = presentation.GetSections().FirstOrDefault(s => string.Equals(s.Name, NewName, comparison));
-                if (!string.IsNullOrEmpty(section.Name))
-                {
+                if (!string.IsNullOrEmpty(section.Name)) {
                     WriteObject(section);
-                }
-                else
-                {
+                } else {
                     WriteObject(true);
                 }
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointRenameSectionFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs
index c41f48d6..3f25a9a2 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs
@@ -1,8 +1,6 @@
 using System;
 using System.Management.Automation;
 using OfficeIMO.PowerPoint;
-using OfficeIMO.PowerPoint.Pdf;
-using PSWriteOffice.Services.Pdf;
 using PSWriteOffice.Services.PowerPoint;
 
 namespace PSWriteOffice.Cmdlets.PowerPoint;
@@ -12,16 +10,15 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Save and open the deck.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSave.pptx
-/// $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSave.pptx -NoSave
+/// $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
 /// Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Saved later'
-/// Save-OfficePowerPoint -Presentation $ppt -PdfPath .\Examples\Documents\PowerPointSave.pdf
-///   Saves the current presentation and exports a PDF sidecar.
+/// Save-OfficePowerPoint -Presentation $ppt
+///   Saves the current presentation without closing it.
 /// 
 [Cmdlet(VerbsData.Save, "OfficePowerPoint", SupportsShouldProcess = true)]
 [OutputType(typeof(PowerPointPresentation))]
-public class SaveOfficePowerPointCommand : PSCmdlet
-{
+public class SaveOfficePowerPointCommand : PSCmdlet {
     /// Presentation instance to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true)]
     [ValidateNotNull]
@@ -34,70 +31,42 @@ public class SaveOfficePowerPointCommand : PSCmdlet
 
     /// Launch the saved file in the default viewer.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Password used to save the presentation as an encrypted package.
     [Parameter]
     public string? Password { get; set; }
 
-    /// Optional PDF path to create from the same presentation.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
     /// Emit the still-open presentation for further processing.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Presentation == null)
-        {
+    protected override void ProcessRecord() {
+        if (Presentation == null) {
             WriteError(new ErrorRecord(new ArgumentNullException(nameof(Presentation)), "PresentationNull", ErrorCategory.InvalidArgument, null));
             return;
         }
 
-        try
-        {
+        try {
             var associatedPath = PowerPointDocumentService.GetAssociatedPath(Presentation);
-            if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(associatedPath))
-            {
+            if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(associatedPath)) {
                 throw new PSInvalidOperationException("No file path provided. Use -Path or open the presentation from disk.");
             }
 
             var targetPath = string.IsNullOrWhiteSpace(Path)
                 ? associatedPath!
                 : SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
-            if (ShouldProcess(targetPath, "Save PowerPoint presentation"))
-            {
-                PowerPointDocumentService.SavePresentation(Presentation, Show.IsPresent, Password, targetPath);
-                SavePdfIfRequested();
-                if (PassThru.IsPresent)
-                {
+            if (ShouldProcess(targetPath, "Save PowerPoint presentation")) {
+                PowerPointDocumentService.SavePresentation(Presentation, Open.IsPresent, Password, targetPath);
+                if (PassThru.IsPresent) {
                     WriteObject(Presentation);
                 }
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSaveFailed", ErrorCategory.InvalidOperation, null));
         }
     }
 
-    private void SavePdfIfRequested()
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write PowerPoint PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        Presentation.SaveAsPdf(pdfPath).RequireSuccess();
-    }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointBackgroundCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointBackgroundCommand.cs
index 7f3eb738..3e10dd0e 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointBackgroundCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointBackgroundCommand.cs
@@ -21,8 +21,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Set, "OfficePowerPointBackground", DefaultParameterSetName = ParameterSetColor)]
 [Alias("PptBackground")]
 [OutputType(typeof(PowerPointSlide))]
-public sealed class SetOfficePowerPointBackgroundCommand : PSCmdlet
-{
+public sealed class SetOfficePowerPointBackgroundCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetColor = "Color";
     private const string ParameterSetImage = "Image";
     private const string ParameterSetClear = "Clear";
@@ -44,14 +43,11 @@ public sealed class SetOfficePowerPointBackgroundCommand : PSCmdlet
     public SwitchParameter Clear { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
 
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetImage:
                     slide.SetBackgroundImage(ResolvePath(ImagePath));
                     break;
@@ -64,29 +60,24 @@ protected override void ProcessRecord()
                     break;
             }
 
-            WriteObject(slide);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slide);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSetBackgroundFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
 
-    private string ResolvePath(string path)
-    {
+    private string ResolvePath(string path) {
         var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(path);
         return System.IO.Path.IsPathRooted(providerPath)
             ? providerPath
             : System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
     }
 
-    private static string NormalizeColor(string color)
-    {
-        if (string.IsNullOrWhiteSpace(color))
-        {
+    private static string NormalizeColor(string color) {
+        if (string.IsNullOrWhiteSpace(color)) {
             throw new PSArgumentException("Color cannot be empty.", nameof(Color));
         }
 
         return OfficeColor.Parse(color).ToRgbHex().ToLowerInvariant();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointNotesCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointNotesCommand.cs
index f19b37c4..2b8ea79c 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointNotesCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointNotesCommand.cs
@@ -10,7 +10,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Attach speaker notes.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointNotes.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Executive summary'
 ///     Set-OfficePowerPointNotes -Slide $slide -Text 'Keep this slide under five minutes and focus on decisions.'
 /// }
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Set, "OfficePowerPointNotes")]
 [Alias("PptNotes")]
 [OutputType(typeof(PowerPointSlide))]
-public sealed class SetOfficePowerPointNotesCommand : PSCmdlet
-{
+public sealed class SetOfficePowerPointNotesCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Slide whose notes should be updated (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointSlide? Slide { get; set; }
@@ -30,17 +29,13 @@ public sealed class SetOfficePowerPointNotesCommand : PSCmdlet
     public string Text { get; set; } = string.Empty;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
             var notes = slide.Notes;
             notes.Text = Text ?? string.Empty;
-            WriteObject(slide);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slide);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSetNotesFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointPlaceholderTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointPlaceholderTextCommand.cs
index 4c1cc5cf..af3b9561 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointPlaceholderTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointPlaceholderTextCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   Set the title placeholder text.
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointPlaceholderText.pptx {
-///     $slide = Add-OfficePowerPointSlide -Layout 1
+///     $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru
 ///     Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Agenda'
 ///     Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Body -Text 'Review signals and decisions' -IgnoreMissing
 /// }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideLayoutCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideLayoutCommand.cs
index a4850593..829de03e 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideLayoutCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideLayoutCommand.cs
@@ -15,8 +15,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Set, "OfficePowerPointSlideLayout", DefaultParameterSetName = ParameterSetIndex)]
 [Alias("PptSlideLayout")]
 [OutputType(typeof(PowerPointSlide))]
-public sealed class SetOfficePowerPointSlideLayoutCommand : PSCmdlet
-{
+public sealed class SetOfficePowerPointSlideLayoutCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetIndex = "Index";
     private const string ParameterSetByName = "Name";
     private const string ParameterSetByType = "Type";
@@ -46,13 +45,10 @@ public sealed class SetOfficePowerPointSlideLayoutCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetByName:
                     slide.SetLayout(LayoutName, Master, ignoreCase: !CaseSensitive.IsPresent);
                     break;
@@ -64,11 +60,9 @@ protected override void ProcessRecord()
                     break;
             }
 
-            WriteObject(slide);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slide);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSetSlideLayoutFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs
index d0442392..677b41f9 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs
@@ -12,23 +12,23 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointWidescreen.pptx {
 ///     Set-OfficePowerPointSlideSize -Preset Screen16x9
-///     Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck'
+///     Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck'
 /// }
 ///   Applies the 16:9 widescreen preset before adding slides.
 /// 
 /// 
 ///   Set a custom size in centimeters.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointCustomSize.pptx
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCustomSize.pptx -NoSave
 /// Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 25.4 -HeightCm 14.0
-/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Custom size'
+/// Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Custom size'
+/// $ppt | Close-OfficePowerPoint -Save
 ///   Sets the presentation slide size to a custom 25.4 x 14.0 cm layout.
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficePowerPointSlideSize", DefaultParameterSetName = ParameterSetPreset)]
 [Alias("PptSlideSize")]
 [OutputType(typeof(PowerPointSlideSize))]
-public sealed class SetOfficePowerPointSlideSizeCommand : PSCmdlet
-{
+public sealed class SetOfficePowerPointSlideSizeCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetPreset = "Preset";
     private const string ParameterSetCentimeters = "Centimeters";
     private const string ParameterSetInches = "Inches";
@@ -80,16 +80,13 @@ public sealed class SetOfficePowerPointSlideSizeCommand : PSCmdlet
     public long HeightEmus { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var presentation = Presentation ?? PowerPointDslContext.Current?.Presentation
                 ?? throw new InvalidOperationException("Presentation was not provided. Use -Presentation or run inside New-OfficePowerPoint.");
 
             var slideSize = presentation.SlideSize;
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetPreset:
                     slideSize.SetPreset(Preset, Portrait.IsPresent);
                     break;
@@ -109,10 +106,8 @@ protected override void ProcessRecord()
                     throw new InvalidOperationException($"Unsupported parameter set '{ParameterSetName}'.");
             }
 
-            WriteObject(slideSize);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slideSize);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSetSlideSizeFailed", ErrorCategory.InvalidOperation, Presentation));
         }
     }
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTitleCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTitleCommand.cs
index 04f53e1b..7c9b72c4 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTitleCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTitleCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 [Cmdlet(VerbsCommon.Set, "OfficePowerPointSlideTitle")]
 [Alias("PptTitle")]
-public class SetOfficePowerPointSlideTitleCommand : PSCmdlet
-{
+public class SetOfficePowerPointSlideTitleCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Slide whose title should change (optional inside DSL).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointSlide? Slide { get; set; }
@@ -27,28 +26,21 @@ public class SetOfficePowerPointSlideTitleCommand : PSCmdlet
     public string Title { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
             var titleBox = slide.GetPlaceholder(PowerPointPlaceholderType.Title) ??
                            slide.GetPlaceholder(PowerPointPlaceholderType.CenteredTitle);
 
-            if (titleBox != null)
-            {
+            if (titleBox != null) {
                 titleBox.Text = Title;
-            }
-            else
-            {
+            } else {
                 slide.AddTitle(Title);
             }
 
-            WriteObject(slide);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slide);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSetTitleFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTransitionCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTransitionCommand.cs
index 6fb35b85..aae9ec58 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTransitionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideTransitionCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 [Cmdlet(VerbsCommon.Set, "OfficePowerPointSlideTransition")]
 [Alias("PptTransition")]
 [OutputType(typeof(PowerPointSlide))]
-public sealed class SetOfficePowerPointSlideTransitionCommand : PSCmdlet
-{
+public sealed class SetOfficePowerPointSlideTransitionCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Slide to update (optional inside a slide DSL scope).
     [Parameter(ValueFromPipeline = true)]
     public PowerPointSlide? Slide { get; set; }
@@ -27,17 +26,13 @@ public sealed class SetOfficePowerPointSlideTransitionCommand : PSCmdlet
     public PowerPointSlideTransition Transition { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var slide = Slide ?? PowerPointDslContext.Require(this).RequireSlide();
             slide.Transition = Transition;
-            WriteObject(slide);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(slide);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointSetTransitionFailed", ErrorCategory.InvalidOperation, Slide));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeFontsCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeFontsCommand.cs
index 01ec96e8..0afbdb8d 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeFontsCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeFontsCommand.cs
@@ -11,7 +11,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeFonts.pptx {
 ///     Set-OfficePowerPointThemeFonts -MajorLatin 'Aptos Display' -MinorLatin 'Aptos' -AllMasters
-///     Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Theme fonts'
+///     Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Theme fonts'
 /// }
 ///   Updates theme fonts before creating slides.
 /// 
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeNameCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeNameCommand.cs
index 38a53991..3df8e3e0 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeNameCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointThemeNameCommand.cs
@@ -11,7 +11,7 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 ///   PS> 
 ///   New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeName.pptx {
 ///     Set-OfficePowerPointThemeName -Name 'Service Brief' -AllMasters
-///     Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Named theme'
+///     Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Named theme'
 /// }
 ///   Applies a friendly theme name across every master before saving.
 /// 
diff --git a/Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs
index fc892475..ef96fdad 100644
--- a/Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs
@@ -10,18 +10,18 @@ namespace PSWriteOffice.Cmdlets.PowerPoint;
 /// 
 ///   Replace fiscal year text across the whole deck.
 ///   PS> 
-///   $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointUpdateText.pptx
-/// $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1
-/// Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary' | Out-Null
-/// Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.' | Out-Null
-/// Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes
+///   $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointUpdateText.pptx -NoSave
+/// $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru
+/// Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary'
+/// Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.'
+/// $count = Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes -PassThru
+/// $ppt | Close-OfficePowerPoint -Save
 ///   Replaces matching text throughout the presentation and notes, returning the replacement count.
 /// 
 [Cmdlet(VerbsData.Update, "OfficePowerPointText", DefaultParameterSetName = ParameterSetAuto)]
 [Alias("Replace-OfficePowerPointText")]
 [OutputType(typeof(int))]
-public sealed class UpdateOfficePowerPointTextCommand : PSCmdlet
-{
+public sealed class UpdateOfficePowerPointTextCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetAuto = "Auto";
     private const string ParameterSetPresentation = "Presentation";
     private const string ParameterSetSlide = "Slide";
@@ -52,13 +52,10 @@ public sealed class UpdateOfficePowerPointTextCommand : PSCmdlet
     public SwitchParameter IncludeNotes { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             int replacements;
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetPresentation:
                     replacements = (Presentation ?? throw new InvalidOperationException("Presentation was not provided."))
                         .ReplaceText(OldValue, NewValue ?? string.Empty, IncludeTables, IncludeNotes.IsPresent);
@@ -72,21 +69,17 @@ protected override void ProcessRecord()
                     break;
             }
 
-            WriteObject(replacements);
-        }
-        catch (Exception ex)
-        {
+            WritePassThru(replacements);
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "PowerPointUpdateTextFailed", ErrorCategory.InvalidOperation, Presentation ?? (object?)Slide));
         }
     }
 
-    private int ReplaceUsingDslContext()
-    {
+    private int ReplaceUsingDslContext() {
         var context = PowerPointDslContext.Current
             ?? throw new InvalidOperationException("Specify -Presentation, -Slide, or run inside New-OfficePowerPoint.");
 
-        if (context.CurrentSlide != null)
-        {
+        if (context.CurrentSlide != null) {
             return context.CurrentSlide.ReplaceText(OldValue, NewValue ?? string.Empty, IncludeTables, IncludeNotes.IsPresent);
         }
 
diff --git a/Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs b/Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs
index 81974cb8..5bc0755a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs
@@ -8,7 +8,8 @@ namespace PSWriteOffice.Cmdlets.Reader;
 /// 
 ///   Create embedding-ready chunks with heading context.
 ///   PS> 
-///   $options = [OfficeIMO.Reader.ReaderHierarchicalChunkingOptions]::new(); $options.MaxTokens = 500; $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
+///   $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText
+/// $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
 ///   Returns chunks, token evidence, overlap counts, and flattened parent/child nodes.
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeDocumentHierarchy")]
diff --git a/Sources/PSWriteOffice/Cmdlets/Reader/NewOfficeReaderHierarchyOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Reader/NewOfficeReaderHierarchyOptionsCommand.cs
new file mode 100644
index 00000000..67b528d9
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Reader/NewOfficeReaderHierarchyOptionsCommand.cs
@@ -0,0 +1,48 @@
+using System.Management.Automation;
+using OfficeIMO.Reader;
+
+namespace PSWriteOffice.Cmdlets.Reader;
+
+/// Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy.
+/// 
+///   Create embedding-ready chunks.
+///   PS> 
+///   $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText
+/// Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeReaderHierarchyOptions")]
+[OutputType(typeof(ReaderHierarchicalChunkingOptions))]
+public sealed class NewOfficeReaderHierarchyOptionsCommand : PSCmdlet {
+    /// Maximum tokens per output chunk.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxTokens { get; set; }
+    /// Tokens repeated between adjacent chunks.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? OverlapTokens { get; set; }
+    /// Maximum source chunks accepted.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxInputChunks { get; set; }
+    /// Maximum chunks returned.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxOutputChunks { get; set; }
+    /// Maximum heading hierarchy depth.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? MaxHierarchyDepth { get; set; }
+    /// Maximum heading-context characters retained.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? MaxContextCharacters { get; set; }
+    /// Prefer Markdown text where the reader supports it.
+    [Parameter] public SwitchParameter PreferMarkdown { get; set; }
+    /// Include hierarchy context in chunk text.
+    [Parameter] public SwitchParameter IncludeContextInText { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new ReaderHierarchicalChunkingOptions();
+        if (MaxTokens.HasValue) options.MaxTokens = MaxTokens.Value;
+        if (OverlapTokens.HasValue) options.OverlapTokens = OverlapTokens.Value;
+        if (MaxInputChunks.HasValue) options.MaxInputChunks = MaxInputChunks.Value;
+        if (MaxOutputChunks.HasValue) options.MaxOutputChunks = MaxOutputChunks.Value;
+        if (MaxHierarchyDepth.HasValue) options.MaxHierarchyDepth = MaxHierarchyDepth.Value;
+        if (MaxContextCharacters.HasValue) options.MaxContextCharacters = MaxContextCharacters.Value;
+        if (IsBound(nameof(PreferMarkdown))) options.PreferMarkdown = PreferMarkdown.IsPresent;
+        if (IsBound(nameof(IncludeContextInText))) options.IncludeContextInText = IncludeContextInText.IsPresent;
+        WriteObject(options);
+    }
+
+    private bool IsBound(string name) => MyInvocation.BoundParameters.ContainsKey(name);
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfCommand.cs b/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfCommand.cs
index e4282df4..fd583e8b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfCommand.cs
@@ -18,12 +18,11 @@ namespace PSWriteOffice.Cmdlets.Rtf;
 [Cmdlet(VerbsCommon.New, "OfficeRtf", SupportsShouldProcess = true)]
 [Alias("RtfNew")]
 [OutputType(typeof(FileInfo), typeof(RtfDocument))]
-public sealed class NewOfficeRtfCommand : PSCmdlet
-{
+public sealed class NewOfficeRtfCommand : PSCmdlet {
     /// Destination path for the RTF file.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("FilePath", "Path")]
-    public string OutputPath { get; set; } = string.Empty;
+    [Alias("FilePath", "OutputPath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Plain paragraph text to add to the document.
     [Parameter(Position = 1, ValueFromPipeline = true)]
@@ -40,41 +39,34 @@ public sealed class NewOfficeRtfCommand : PSCmdlet
     private readonly List _paragraphs = new();
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Text != null)
-        {
+    protected override void ProcessRecord() {
+        if (Text != null) {
             _paragraphs.AddRange(Text);
         }
     }
 
     /// 
-    protected override void EndProcessing()
-    {
+    protected override void EndProcessing() {
         var document = RtfDocument.Create();
-        foreach (var paragraph in _paragraphs)
-        {
+        foreach (var paragraph in _paragraphs) {
             document.AddParagraph(paragraph);
         }
 
-        if (NoSave.IsPresent)
-        {
+        if (NoSave.IsPresent) {
             WriteObject(document);
             return;
         }
 
-        var path = PdfCommandUtilities.ResolvePath(this, OutputPath);
-        if (!PdfCommandUtilities.ShouldWrite(this, path, "Write new RTF document"))
-        {
+        var path = PdfCommandUtilities.ResolvePath(this, Path);
+        if (!PdfCommandUtilities.ShouldWrite(this, path, "Write new RTF document")) {
             return;
         }
 
         PdfCommandUtilities.EnsureDirectory(path);
         document.Save(path, encoding: new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
 
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(new FileInfo(path));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfPdfOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfPdfOptionsCommand.cs
new file mode 100644
index 00000000..e056acdd
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfPdfOptionsCommand.cs
@@ -0,0 +1,88 @@
+using System.Management.Automation;
+using OfficeIMO.Rtf.Pdf;
+
+namespace PSWriteOffice.Cmdlets.Rtf;
+
+/// Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf.
+/// 
+///   Include document structure and bound system-font discovery.
+///   PS> 
+///   $options = New-OfficeRtfPdfOptions -IncludeImages -IncludeTables -IncludeHeaderFooters -MaximumSystemFontFamilies 32
+/// Export-OfficeDocumentPdf -InputPath .\Report.rtf -Path .\Report.pdf -RtfOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeRtfPdfOptions")]
+[OutputType(typeof(RtfPdfSaveOptions))]
+public sealed class NewOfficeRtfPdfOptionsCommand : PSCmdlet {
+    /// Underlying low-level OfficeIMO PDF options.
+    [Parameter]
+    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
+
+    /// Include text marked hidden.
+    [Parameter]
+    public SwitchParameter IncludeHiddenText { get; set; }
+
+    /// Render images.
+    [Parameter]
+    public SwitchParameter IncludeImages { get; set; }
+
+    /// Fallback image width in PDF points.
+    [Parameter]
+    [ValidateRange(double.Epsilon, double.MaxValue)]
+    public double? DefaultImageWidth { get; set; }
+
+    /// Fallback image height in PDF points.
+    [Parameter]
+    [ValidateRange(double.Epsilon, double.MaxValue)]
+    public double? DefaultImageHeight { get; set; }
+
+    /// Copy document metadata into the PDF.
+    [Parameter]
+    public SwitchParameter IncludeMetadata { get; set; }
+
+    /// Render tables.
+    [Parameter]
+    public SwitchParameter IncludeTables { get; set; }
+
+    /// Render headers and footers.
+    [Parameter]
+    public SwitchParameter IncludeHeaderFooters { get; set; }
+
+    /// Render document notes.
+    [Parameter]
+    public SwitchParameter IncludeNotes { get; set; }
+
+    /// Maximum number of system font families to discover.
+    [Parameter]
+    [ValidateRange(1, int.MaxValue)]
+    public int? MaximumSystemFontFamilies { get; set; }
+
+    /// Allow embedding fonts discovered on the current system.
+    [Parameter]
+    public SwitchParameter AllowSystemFontEmbedding { get; set; }
+
+    /// Allow embedding fonts referenced by the RTF document.
+    [Parameter]
+    public SwitchParameter AllowDocumentFontEmbedding { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new RtfPdfSaveOptions();
+        if (PdfOptions != null) options.PdfOptions = PdfOptions;
+        SetBoundSwitch(nameof(IncludeHiddenText), IncludeHiddenText, value => options.IncludeHiddenText = value);
+        SetBoundSwitch(nameof(IncludeImages), IncludeImages, value => options.IncludeImages = value);
+        if (DefaultImageWidth.HasValue) options.DefaultImageWidth = DefaultImageWidth.Value;
+        if (DefaultImageHeight.HasValue) options.DefaultImageHeight = DefaultImageHeight.Value;
+        SetBoundSwitch(nameof(IncludeMetadata), IncludeMetadata, value => options.IncludeMetadata = value);
+        SetBoundSwitch(nameof(IncludeTables), IncludeTables, value => options.IncludeTables = value);
+        SetBoundSwitch(nameof(IncludeHeaderFooters), IncludeHeaderFooters, value => options.IncludeHeaderFooters = value);
+        SetBoundSwitch(nameof(IncludeNotes), IncludeNotes, value => options.IncludeNotes = value);
+        if (MaximumSystemFontFamilies.HasValue) options.MaximumSystemFontFamilies = MaximumSystemFontFamilies.Value;
+        SetBoundSwitch(nameof(AllowSystemFontEmbedding), AllowSystemFontEmbedding, value => options.ResourcePolicy.AllowSystemFontEmbedding = value);
+        SetBoundSwitch(nameof(AllowDocumentFontEmbedding), AllowDocumentFontEmbedding, value => options.ResourcePolicy.AllowDocumentFontEmbedding = value);
+        WriteObject(options);
+    }
+
+    private void SetBoundSwitch(string name, SwitchParameter value, System.Action setter) {
+        if (MyInvocation.BoundParameters.ContainsKey(name)) setter(value.IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioConnectorCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioConnectorCommand.cs
index ab0069ce..a52ea2a1 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioConnectorCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioConnectorCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioConnector", DefaultParameterSetName = ByKeyParameterSet)]
 [Alias("VisioConnector")]
 [OutputType(typeof(VisioConnector))]
-public sealed class AddOfficeVisioConnectorCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioConnectorCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ByKeyParameterSet = "ByKey";
     private const string ByShapeParameterSet = "ByShape";
 
@@ -82,8 +81,7 @@ public sealed class AddOfficeVisioConnectorCommand : PSCmdlet
     public EndArrow? EndArrow { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var page = Page ?? (context ?? VisioDslContext.Require(this)).RequirePage();
         var fromShape = ParameterSetName == ByShapeParameterSet
@@ -95,13 +93,11 @@ protected override void ProcessRecord()
 
         var connector = page.AddConnector(fromShape, toShape, Kind, FromSide, ToSide);
         VisioShapeCommandUtilities.ApplyConnectorStyle(connector, LineColor, LineWeight, LinePattern, BeginArrow, EndArrow, Label);
-        WriteObject(connector);
+        WritePassThru(connector);
     }
 
-    private VisioShape ResolveShape(VisioDslContext? context, VisioPage page, string value)
-    {
-        if (context != null)
-        {
+    private VisioShape ResolveShape(VisioDslContext? context, VisioPage page, string value) {
+        if (context != null) {
             return context.ResolveShape(page, value);
         }
 
@@ -112,4 +108,4 @@ private VisioShape ResolveShape(VisioDslContext? context, VisioPage page, string
 
         return shape ?? throw new PSInvalidOperationException($"Visio shape '{value}' was not found on the target page.");
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioContainerCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioContainerCommand.cs
index f367c110..5a505580 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioContainerCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioContainerCommand.cs
@@ -22,8 +22,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioContainer")]
 [Alias("VisioContainer")]
 [OutputType(typeof(VisioShape))]
-public sealed class AddOfficeVisioContainerCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioContainerCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private readonly List _input = new();
 
     /// Shapes, shape selections, or shape keys/ids to include in the container.
@@ -97,68 +96,56 @@ public sealed class AddOfficeVisioContainerCommand : PSCmdlet
     public SwitchParameter NoRibbon { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         AddInput(InputObject);
     }
 
     /// 
-    protected override void EndProcessing()
-    {
+    protected override void EndProcessing() {
         var page = Page ?? VisioDslContext.Current?.CurrentPage;
-        if (page == null)
-        {
+        if (page == null) {
             throw new PSArgumentException("Provide -Page or run inside a VisioPage DSL scope.", nameof(Page));
         }
 
         var shapes = ResolveShapes(page);
-        if (shapes.Count == 0)
-        {
+        if (shapes.Count == 0) {
             throw new PSArgumentException("At least one member shape is required.", nameof(InputObject));
         }
 
         var options = BuildOptions();
         var container = page.AddContainer(Id, Text, shapes, options);
         VisioDslContext.Current?.RegisterShape(page, Id, container);
-        WriteObject(container);
+        WritePassThru(container);
     }
 
-    private VisioContainerOptions BuildOptions()
-    {
+    private VisioContainerOptions BuildOptions() {
         var options = new VisioContainerOptions();
 
-        if (Margin.HasValue)
-        {
+        if (Margin.HasValue) {
             options.Margin = Margin.Value;
         }
 
-        if (HeadingHeight.HasValue)
-        {
+        if (HeadingHeight.HasValue) {
             options.HeadingHeight = HeadingHeight.Value;
         }
 
-        if (!string.IsNullOrWhiteSpace(FillColor))
-        {
+        if (!string.IsNullOrWhiteSpace(FillColor)) {
             options.FillColor = OfficeColor.Parse(FillColor!);
         }
 
-        if (!string.IsNullOrWhiteSpace(LineColor))
-        {
+        if (!string.IsNullOrWhiteSpace(LineColor)) {
             options.LineColor = OfficeColor.Parse(LineColor!);
         }
 
-        if (LineWeight.HasValue)
-        {
+        if (LineWeight.HasValue) {
             options.LineWeight = LineWeight.Value;
         }
 
-        if (ContainerStyle.HasValue)
-        {
+        if (ContainerStyle.HasValue) {
             options.ContainerStyle = ContainerStyle.Value;
         }
 
-        if (HeadingStyle.HasValue)
-        {
+        if (HeadingStyle.HasValue) {
             options.HeadingStyle = HeadingStyle.Value;
         }
 
@@ -169,23 +156,18 @@ private VisioContainerOptions BuildOptions()
         return options;
     }
 
-    private void AddInput(object? value)
-    {
-        if (value == null)
-        {
+    private void AddInput(object? value) {
+        if (value == null) {
             return;
         }
 
-        if (value is PSObject psObject)
-        {
+        if (value is PSObject psObject) {
             AddInput(psObject.BaseObject);
             return;
         }
 
-        if (value is IEnumerable enumerable && value is not string)
-        {
-            foreach (var item in enumerable)
-            {
+        if (value is IEnumerable enumerable && value is not string) {
+            foreach (var item in enumerable) {
                 AddInput(item);
             }
 
@@ -195,22 +177,17 @@ private void AddInput(object? value)
         _input.Add(value);
     }
 
-    private List ResolveShapes(VisioPage page)
-    {
+    private List ResolveShapes(VisioPage page) {
         var shapes = new List();
 
-        if (ShapeId != null)
-        {
-            foreach (var shapeId in ShapeId)
-            {
+        if (ShapeId != null) {
+            foreach (var shapeId in ShapeId) {
                 shapes.Add(ResolveShapeReference(page, shapeId));
             }
         }
 
-        foreach (var item in _input)
-        {
-            switch (item)
-            {
+        foreach (var item in _input) {
+            switch (item) {
                 case VisioShape shape:
                     shapes.Add(shape);
                     break;
@@ -225,16 +202,13 @@ private List ResolveShapes(VisioPage page)
         return shapes.Distinct().ToList();
     }
 
-    private static VisioShape ResolveShapeReference(VisioPage page, string reference)
-    {
-        if (string.IsNullOrWhiteSpace(reference))
-        {
+    private static VisioShape ResolveShapeReference(VisioPage page, string reference) {
+        if (string.IsNullOrWhiteSpace(reference)) {
             throw new PSArgumentException("Shape reference cannot be empty.", nameof(ShapeId));
         }
 
         var context = VisioDslContext.Current;
-        if (context != null)
-        {
+        if (context != null) {
             return context.ResolveShape(page, reference);
         }
 
@@ -245,4 +219,4 @@ private static VisioShape ResolveShapeReference(VisioPage page, string reference
 
         return shape ?? throw new PSInvalidOperationException($"Visio shape '{reference}' was not found on the target Visio page.");
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioDiamondCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioDiamondCommand.cs
index 3e7b228a..e6aad176 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioDiamondCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioDiamondCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioDiamond")]
 [Alias("VisioDiamond")]
 [OutputType(typeof(VisioShape))]
-public sealed class AddOfficeVisioDiamondCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioDiamondCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target page. Optional inside VisioPage or New-OfficeVisio.
     [Parameter(ValueFromPipeline = true)]
     public VisioPage? Page { get; set; }
@@ -67,13 +66,12 @@ public sealed class AddOfficeVisioDiamondCommand : PSCmdlet
     public double? LineWeight { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var page = Page ?? VisioDslContext.Require(this).RequirePage();
         var shape = page.AddDiamond(X, Y, Width, Height, Text, Unit);
         VisioShapeCommandUtilities.ApplyShapeStyle(shape, Name ?? Key, null, FillColor, LineColor, LineWeight, null, null, null);
         context?.RegisterShape(page, Key, shape);
-        WriteObject(shape);
+        WritePassThru(shape);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioEllipseCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioEllipseCommand.cs
index 6a3a5b4a..125342bb 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioEllipseCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioEllipseCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioEllipse")]
 [Alias("VisioEllipse")]
 [OutputType(typeof(VisioShape))]
-public sealed class AddOfficeVisioEllipseCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioEllipseCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target page. Optional inside VisioPage or New-OfficeVisio.
     [Parameter(ValueFromPipeline = true)]
     public VisioPage? Page { get; set; }
@@ -67,13 +66,12 @@ public sealed class AddOfficeVisioEllipseCommand : PSCmdlet
     public double? LineWeight { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var page = Page ?? VisioDslContext.Require(this).RequirePage();
         var shape = page.AddEllipse(X, Y, Width, Height, Text, Unit);
         VisioShapeCommandUtilities.ApplyShapeStyle(shape, Name ?? Key, null, FillColor, LineColor, LineWeight, null, null, null);
         context?.RegisterShape(page, Key, shape);
-        WriteObject(shape);
+        WritePassThru(shape);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioPageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioPageCommand.cs
index 0c52210e..bd259fd9 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioPageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioPageCommand.cs
@@ -18,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioPage")]
 [Alias("VisioPage")]
 [OutputType(typeof(VisioPage))]
-public sealed class AddOfficeVisioPageCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioPageCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target Visio document. Optional inside New-OfficeVisio.
     [Parameter(ValueFromPipeline = true)]
     public VisioDocument? Document { get; set; }
@@ -45,31 +44,24 @@ public sealed class AddOfficeVisioPageCommand : PSCmdlet
     public ScriptBlock? Content { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var document = Document ?? (context ?? VisioDslContext.Require(this)).Document;
         var page = document.AddPage(Name, Width, Height, Unit);
 
-        if (Content != null)
-        {
-            if (context != null)
-            {
-                using (context.Push(page))
-                {
+        if (Content != null) {
+            if (context != null) {
+                using (context.Push(page)) {
                     Content.InvokeReturnAsIs();
                 }
-            }
-            else
-            {
+            } else {
                 using (var scoped = VisioDslContext.Enter(document))
-                using (scoped.Push(page))
-                {
+                using (scoped.Push(page)) {
                     Content.InvokeReturnAsIs();
                 }
             }
         }
 
-        WriteObject(page);
+        WritePassThru(page);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioRectangleCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioRectangleCommand.cs
index 87b1281f..0207e7a0 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioRectangleCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioRectangleCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioRectangle")]
 [Alias("VisioRectangle", "VisioRect")]
 [OutputType(typeof(VisioShape))]
-public sealed class AddOfficeVisioRectangleCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioRectangleCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target page. Optional inside VisioPage or New-OfficeVisio.
     [Parameter(ValueFromPipeline = true)]
     public VisioPage? Page { get; set; }
@@ -83,13 +82,12 @@ public sealed class AddOfficeVisioRectangleCommand : PSCmdlet
     public double? Angle { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var page = Page ?? VisioDslContext.Require(this).RequirePage();
         var shape = page.AddRectangle(X, Y, Width, Height, Text, Unit);
         VisioShapeCommandUtilities.ApplyShapeStyle(shape, Name ?? Key, NameU, FillColor, LineColor, LineWeight, LinePattern, FillPattern, Angle);
         context?.RegisterShape(page, Key, shape);
-        WriteObject(shape);
+        WritePassThru(shape);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioStencilShapeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioStencilShapeCommand.cs
index 1c0ab824..47f9614a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioStencilShapeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioStencilShapeCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioStencilShape", DefaultParameterSetName = CatalogNameParameterSet)]
 [Alias("VisioStencil")]
 [OutputType(typeof(VisioShape))]
-public sealed class AddOfficeVisioStencilShapeCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioStencilShapeCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string CatalogObjectParameterSet = "CatalogObject";
     private const string CatalogNameParameterSet = "CatalogName";
     private const string BuiltInParameterSet = "BuiltIn";
@@ -105,8 +104,7 @@ public sealed class AddOfficeVisioStencilShapeCommand : PSCmdlet
     public double? Angle { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var page = Page ?? VisioDslContext.Require(this).RequirePage();
         var catalog = ResolveCatalog(context);
@@ -126,23 +124,19 @@ protected override void ProcessRecord()
 
         VisioShapeCommandUtilities.ApplyShapeStyle(shape, ShapeName ?? Key, NameU, FillColor, LineColor, LineWeight, LinePattern, FillPattern, Angle);
         context?.RegisterShape(page, Key, shape);
-        WriteObject(shape);
+        WritePassThru(shape);
     }
 
-    private VisioStencilCatalog ResolveCatalog(VisioDslContext? context)
-    {
-        if (ParameterSetName == CatalogObjectParameterSet)
-        {
+    private VisioStencilCatalog ResolveCatalog(VisioDslContext? context) {
+        if (ParameterSetName == CatalogObjectParameterSet) {
             return CatalogObject!;
         }
 
-        if (ParameterSetName == BuiltInParameterSet)
-        {
+        if (ParameterSetName == BuiltInParameterSet) {
             return VisioStencilCommandUtilities.GetBuiltInCatalog(BuiltIn);
         }
 
-        if (context != null)
-        {
+        if (context != null) {
             return context.ResolveStencilCatalog(Catalog);
         }
 
@@ -151,44 +145,37 @@ private VisioStencilCatalog ResolveCatalog(VisioDslContext? context)
             : throw new PSInvalidOperationException("A named stencil catalog can only be resolved inside New-OfficeVisio.");
     }
 
-    private static string CreateUniqueShapeId(VisioPage page, string baseId)
-    {
+    private static string CreateUniqueShapeId(VisioPage page, string baseId) {
         string stem = string.IsNullOrWhiteSpace(baseId) ? "stencil" : baseId.Trim();
         var existingIds = page.AllShapes()
             .Select(shape => shape.Id)
             .Where(id => !string.IsNullOrWhiteSpace(id))
             .ToHashSet(StringComparer.OrdinalIgnoreCase);
 
-        if (!existingIds.Contains(stem))
-        {
+        if (!existingIds.Contains(stem)) {
             return stem;
         }
 
-        for (int index = 2; ; index++)
-        {
+        for (int index = 2; ; index++) {
             string candidate = stem + "-" + index.ToString(System.Globalization.CultureInfo.InvariantCulture);
-            if (!existingIds.Contains(candidate))
-            {
+            if (!existingIds.Contains(candidate)) {
                 return candidate;
             }
         }
     }
 
-    private static double ConvertStencilDefaultToPageUnit(double value, VisioStencilShape stencil, VisioPage page)
-    {
+    private static double ConvertStencilDefaultToPageUnit(double value, VisioStencilShape stencil, VisioPage page) {
         var sourceUnit = stencil.DefaultUnit ?? page.DefaultUnit;
-        var inches = sourceUnit switch
-        {
+        var inches = sourceUnit switch {
             VisioMeasurementUnit.Centimeters => value / 2.54,
             VisioMeasurementUnit.Millimeters => value / 25.4,
             _ => value
         };
 
-        return page.DefaultUnit switch
-        {
+        return page.DefaultUnit switch {
             VisioMeasurementUnit.Centimeters => inches * 2.54,
             VisioMeasurementUnit.Millimeters => inches * 25.4,
             _ => inches
         };
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioTextBoxCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioTextBoxCommand.cs
index b865967a..9a8b13bf 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioTextBoxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/AddOfficeVisioTextBoxCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.Add, "OfficeVisioTextBox")]
 [Alias("VisioTextBox", "VisioText")]
 [OutputType(typeof(VisioShape))]
-public sealed class AddOfficeVisioTextBoxCommand : PSCmdlet
-{
+public sealed class AddOfficeVisioTextBoxCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Target page. Optional inside VisioPage or New-OfficeVisio.
     [Parameter(ValueFromPipeline = true)]
     public VisioPage? Page { get; set; }
@@ -71,13 +70,12 @@ public sealed class AddOfficeVisioTextBoxCommand : PSCmdlet
     public double? LineWeight { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = VisioDslContext.Current;
         var page = Page ?? VisioDslContext.Require(this).RequirePage();
         var shape = page.AddTextBox(X, Y, Width, Height, Text, Unit);
         VisioShapeCommandUtilities.ApplyShapeStyle(shape, Name ?? Key, NameU, FillColor, LineColor, LineWeight, null, null, null);
         context?.RegisterShape(page, Key, shape);
-        WriteObject(shape);
+        WritePassThru(shape);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioPngCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioPngCommand.cs
index 22f13410..4edb11e2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioPngCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioPngCommand.cs
@@ -18,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsData.ConvertTo, "OfficeVisioPng", DefaultParameterSetName = PathParameterSet, SupportsShouldProcess = true)]
 [Alias("ConvertTo-VisioPng")]
 [OutputType(typeof(byte[]), typeof(FileInfo))]
-public sealed class ConvertToOfficeVisioPngCommand : PSCmdlet
-{
+public sealed class ConvertToOfficeVisioPngCommand : PSCmdlet {
     private const string PathParameterSet = "Path";
     private const string DocumentParameterSet = "Document";
 
@@ -87,11 +86,11 @@ public sealed class ConvertToOfficeVisioPngCommand : PSCmdlet
 
     /// Open the PNG after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var options = VisioCommandUtilities.BuildImageOptions(
             this,
             PageIndex,
@@ -110,14 +109,12 @@ protected override void ProcessRecord()
 
         string? targetPath = null;
 
-        if (!string.IsNullOrWhiteSpace(OutputPath))
-        {
+        if (!string.IsNullOrWhiteSpace(OutputPath)) {
             targetPath = VisioCommandUtilities.ResolveImageOutputPath(
                 this,
                 OutputPath!,
                 OfficeImageExportFormat.Png);
-            if (!ShouldProcess(targetPath, "Write Visio PNG"))
-            {
+            if (!ShouldProcess(targetPath, "Write Visio PNG")) {
                 return;
             }
         }
@@ -125,13 +122,11 @@ protected override void ProcessRecord()
         var document = VisioCommandUtilities.ResolveDocument(this, Document, Path);
         OfficeImageExportResult result = document.ExportImage(OfficeImageExportFormat.Png, options);
 
-        if (targetPath != null)
-        {
+        if (targetPath != null) {
             VisioCommandUtilities.EnsureDirectory(targetPath);
             OfficeImageExportResult saved = result.Save(targetPath);
 
-            if (Show.IsPresent)
-            {
+            if (Open.IsPresent) {
                 FileOpenService.Open(saved.SavedPath!);
             }
 
@@ -141,4 +136,4 @@ protected override void ProcessRecord()
 
         WriteObject(result.Bytes, enumerateCollection: false);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioSvgCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioSvgCommand.cs
index ed2561ab..cb68ee67 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioSvgCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/ConvertToOfficeVisioSvgCommand.cs
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsData.ConvertTo, "OfficeVisioSvg", DefaultParameterSetName = PathParameterSet, SupportsShouldProcess = true)]
 [Alias("ConvertTo-VisioSvg")]
 [OutputType(typeof(string), typeof(FileInfo))]
-public sealed class ConvertToOfficeVisioSvgCommand : PSCmdlet
-{
+public sealed class ConvertToOfficeVisioSvgCommand : PSCmdlet {
     private const string PathParameterSet = "Path";
     private const string DocumentParameterSet = "Document";
 
@@ -76,11 +75,11 @@ public sealed class ConvertToOfficeVisioSvgCommand : PSCmdlet
 
     /// Open the SVG after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var options = VisioCommandUtilities.BuildImageOptions(
             this,
             PageIndex,
@@ -99,14 +98,12 @@ protected override void ProcessRecord()
 
         string? targetPath = null;
 
-        if (!string.IsNullOrWhiteSpace(OutputPath))
-        {
+        if (!string.IsNullOrWhiteSpace(OutputPath)) {
             targetPath = VisioCommandUtilities.ResolveImageOutputPath(
                 this,
                 OutputPath!,
                 OfficeImageExportFormat.Svg);
-            if (!ShouldProcess(targetPath, "Write Visio SVG"))
-            {
+            if (!ShouldProcess(targetPath, "Write Visio SVG")) {
                 return;
             }
         }
@@ -114,13 +111,11 @@ protected override void ProcessRecord()
         var document = VisioCommandUtilities.ResolveDocument(this, Document, Path);
         OfficeImageExportResult result = document.ExportImage(OfficeImageExportFormat.Svg, options);
 
-        if (targetPath != null)
-        {
+        if (targetPath != null) {
             VisioCommandUtilities.EnsureDirectory(targetPath);
             OfficeImageExportResult saved = result.Save(targetPath);
 
-            if (Show.IsPresent)
-            {
+            if (Open.IsPresent) {
                 FileOpenService.Open(saved.SavedPath!);
             }
 
@@ -130,4 +125,4 @@ protected override void ProcessRecord()
 
         WriteObject(Encoding.UTF8.GetString(result.Bytes));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioImageCommand.cs
index 3e032db3..b89f25fd 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioImageCommand.cs
@@ -12,7 +12,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 ///   Export every page as PNG.
 ///   PS> 
 ///   Export-OfficeVisioImage -Path .\diagram.vsdx -OutputPath .\Images -Format Png
-///   Writes one PNG per selected page and returns one result object per file.
+///   Writes one PNG per selected page. Add -PassThru to receive one result object per file.
 /// 
 [Cmdlet(VerbsData.Export, "OfficeVisioImage", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
@@ -39,6 +39,10 @@ public sealed class ExportOfficeVisioImageCommand : PSCmdlet
     [Parameter]
     public VisioImageExportOptions? Options { get; set; }
 
+    /// Emit one structured image export result per saved page.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
@@ -51,6 +55,6 @@ protected override void ProcessRecord()
         Directory.CreateDirectory(output);
         var document = VisioCommandUtilities.ResolveDocument(this, Document, ParameterSetName == "Path" ? Path : null);
         IReadOnlyList results = document.SaveAsImages(output, Format, Options);
-        WriteObject(results, enumerateCollection: true);
+        if (PassThru.IsPresent) WriteObject(results, enumerateCollection: true);
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioVisualCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioVisualCommand.cs
index b8e90b4f..c1b3bb93 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioVisualCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/ExportOfficeVisioVisualCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 /// 
 [Cmdlet(VerbsData.Export, "OfficeVisioVisual", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeVisioVisualConversionResult), typeof(FileInfo))]
-public sealed class ExportOfficeVisioVisualCommand : OfficeVisioVisualCommandBase
-{
+public sealed class ExportOfficeVisioVisualCommand : OfficeVisioVisualCommandBase {
     private object? _bufferedInput;
     private bool _inputSeen;
 
@@ -32,22 +31,20 @@ public sealed class ExportOfficeVisioVisualCommand : OfficeVisioVisualCommandBas
 
     /// Open the generated VSDX after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Emit the conversion result instead of the saved file.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (BufferPipelineByte(InputObject))
-        {
+    protected override void ProcessRecord() {
+        if (BufferPipelineByte(InputObject)) {
             return;
         }
 
-        if (_inputSeen)
-        {
+        if (_inputSeen) {
             throw new PSInvalidOperationException(
                 "Export-OfficeVisioVisual accepts one input artifact for one output path. Invoke the cmdlet separately for each destination.");
         }
@@ -56,37 +53,31 @@ protected override void ProcessRecord()
     }
 
     /// 
-    protected override void EndProcessing()
-    {
+    protected override void EndProcessing() {
         byte[]? jsonBytes = CompletePipelineBytes();
-        if (jsonBytes != null)
-        {
+        if (jsonBytes != null) {
             _bufferedInput = jsonBytes;
             _inputSeen = true;
         }
 
-        if (!_inputSeen)
-        {
+        if (!_inputSeen) {
             return;
         }
 
         string fullPath = VisioCommandUtilities.ResolvePath(this, Path);
-        if (!string.Equals(System.IO.Path.GetExtension(fullPath), ".vsdx", System.StringComparison.OrdinalIgnoreCase))
-        {
+        if (!string.Equals(System.IO.Path.GetExtension(fullPath), ".vsdx", System.StringComparison.OrdinalIgnoreCase)) {
             throw new PSArgumentException("Native editable Visio output must use the .vsdx extension.", nameof(Path));
         }
-        if (!ShouldProcess(fullPath, "Export CFX visual artifact as native editable Visio"))
-        {
+        if (!ShouldProcess(fullPath, "Export CFX visual artifact as native editable Visio")) {
             return;
         }
 
         OfficeVisioVisualConversionResult result = ResolveVisioVisual(_bufferedInput!);
         VisioCommandUtilities.EnsureDirectory(fullPath);
         result.Document.Save(fullPath);
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(fullPath);
         }
         WriteObject(PassThru.IsPresent ? result : new FileInfo(fullPath));
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioCommand.cs
index c21df6ca..cf524462 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioCommand.cs
@@ -20,8 +20,7 @@ namespace PSWriteOffice.Cmdlets.Visio;
 [Cmdlet(VerbsCommon.New, "OfficeVisio", SupportsShouldProcess = true)]
 [Alias("VisioNew")]
 [OutputType(typeof(VisioDocument), typeof(FileInfo))]
-public sealed class NewOfficeVisioCommand : PSCmdlet
-{
+public sealed class NewOfficeVisioCommand : PSCmdlet {
     /// Destination .vsdx path.
     [Parameter(Mandatory = true, Position = 0)]
     [Alias("FilePath")]
@@ -69,20 +68,22 @@ public sealed class NewOfficeVisioCommand : PSCmdlet
 
     /// Open the document after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Emit the document object instead of the saved file.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
+        if (NoSave.IsPresent && Open.IsPresent) {
+            throw new PSArgumentException("-Open cannot be used with -NoSave because no file is written. Save the returned document explicitly, then use -Open on Save-OfficeVisio.", nameof(Open));
+        }
+
         var fullPath = VisioCommandUtilities.ResolvePath(this, Path);
-        if (!NoSave.IsPresent)
-        {
-            if (!ShouldProcess(fullPath, "Write new Visio document"))
-            {
+        if (!NoSave.IsPresent) {
+            if (!ShouldProcess(fullPath, "Write new Visio document")) {
                 return;
             }
 
@@ -94,34 +95,31 @@ protected override void ProcessRecord()
         document.Author = Author;
         document.UseMastersByDefault = UseMastersByDefault.IsPresent;
 
-        if (RequestRecalcOnOpen.IsPresent)
-        {
+        if (RequestRecalcOnOpen.IsPresent) {
             document.RequestRecalcOnOpen();
         }
 
         var page = document.AddPage(PageName, Width, Height, Unit);
-        if (Content != null)
-        {
+        if (Content != null) {
             using (var context = VisioDslContext.Enter(document))
-            using (context.Push(page))
-            {
+            using (context.Push(page)) {
                 Content.InvokeReturnAsIs();
             }
         }
 
-        if (NoSave.IsPresent)
-        {
+        if (NoSave.IsPresent) {
             WriteObject(document);
             return;
         }
 
         document.Save();
 
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(fullPath);
         }
 
-        WriteObject(PassThru.IsPresent ? document : new FileInfo(fullPath));
+        if (PassThru.IsPresent) {
+            WriteObject(new FileInfo(fullPath));
+        }
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioImageOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioImageOptionsCommand.cs
new file mode 100644
index 00000000..223e4f71
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioImageOptionsCommand.cs
@@ -0,0 +1,49 @@
+using System.Management.Automation;
+using OfficeIMO.Visio;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.Visio;
+
+/// Creates discoverable page and rendering settings for Export-OfficeVisioImage.
+/// 
+///   Render the first Visio page with text and connector labels.
+///   PS> 
+///   $options = New-OfficeVisioImageOptions -PageIndex 0 -PageCount 1 -RenderText -RenderConnectorLabels
+/// Export-OfficeVisioImage -Path .\Diagram.vsdx -OutputPath .\Preview -Format Svg -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeVisioImageOptions")]
+[OutputType(typeof(VisioImageExportOptions))]
+public sealed class NewOfficeVisioImageOptionsCommand : OfficeImageOptionsCommandBase {
+    /// Zero-based first page index.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? PageIndex { get; set; }
+    /// Maximum pages exported.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? PageCount { get; set; }
+    /// Render page text.
+    [Parameter] public SwitchParameter RenderText { get; set; }
+    /// Render supported stencil artwork.
+    [Parameter] public SwitchParameter RenderStencilArtwork { get; set; }
+    /// Render connector labels.
+    [Parameter] public SwitchParameter RenderConnectorLabels { get; set; }
+    /// Resolve connector-label overlaps.
+    [Parameter] public SwitchParameter ResolveConnectorLabelOverlaps { get; set; }
+    /// Raster supersampling factor.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? Supersampling { get; set; }
+    /// Include an XML declaration in SVG output.
+    [Parameter] public SwitchParameter IncludeSvgXmlDeclaration { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new VisioImageExportOptions();
+        ApplyCommon(options);
+        if (PageIndex.HasValue) options.PageIndex = PageIndex.Value;
+        if (PageCount.HasValue) options.PageCount = PageCount.Value;
+        Apply(nameof(RenderText), value => options.RenderText = value);
+        Apply(nameof(RenderStencilArtwork), value => options.RenderStencilArtwork = value);
+        Apply(nameof(RenderConnectorLabels), value => options.RenderConnectorLabels = value);
+        Apply(nameof(ResolveConnectorLabelOverlaps), value => options.ResolveConnectorLabelOverlaps = value);
+        if (Supersampling.HasValue) options.Supersampling = Supersampling.Value;
+        Apply(nameof(IncludeSvgXmlDeclaration), value => options.IncludeSvgXmlDeclaration = value);
+        WriteObject(options);
+    }
+    private void Apply(string name, System.Action setter) { if (IsBound(name)) setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent); }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Visio/SaveOfficeVisioCommand.cs b/Sources/PSWriteOffice/Cmdlets/Visio/SaveOfficeVisioCommand.cs
index 40b691e5..708bc08a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Visio/SaveOfficeVisioCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Visio/SaveOfficeVisioCommand.cs
@@ -16,9 +16,8 @@ namespace PSWriteOffice.Cmdlets.Visio;
 /// 
 [Cmdlet(VerbsData.Save, "OfficeVisio", SupportsShouldProcess = true)]
 [Alias("VisioSave")]
-[OutputType(typeof(VisioDocument), typeof(FileInfo))]
-public sealed class SaveOfficeVisioCommand : PSCmdlet
-{
+[OutputType(typeof(VisioDocument))]
+public sealed class SaveOfficeVisioCommand : PSCmdlet {
     /// Visio document to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0)]
     public VisioDocument Document { get; set; } = null!;
@@ -30,54 +29,52 @@ public sealed class SaveOfficeVisioCommand : PSCmdlet
 
     /// Open the document after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
-    /// Emit the document object instead of the saved file.
+    /// Emit the document object for further processing.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (string.IsNullOrWhiteSpace(Path))
-        {
+    protected override void ProcessRecord() {
+        if (string.IsNullOrWhiteSpace(Path)) {
             var associatedPath = Document.FilePath;
-            if (string.IsNullOrWhiteSpace(associatedPath))
-            {
+            if (string.IsNullOrWhiteSpace(associatedPath)) {
                 throw new PSInvalidOperationException("No file path provided. Use -Path or load the document from disk.");
             }
 
             var targetPath = associatedPath!;
 
-            if (!ShouldProcess(targetPath, "Save Visio document"))
-            {
+            if (!ShouldProcess(targetPath, "Save Visio document")) {
                 return;
             }
 
             Document.Save();
-            if (Show.IsPresent)
-            {
+            if (Open.IsPresent) {
                 FileOpenService.Open(targetPath);
             }
 
-            WriteObject(PassThru.IsPresent ? Document : new FileInfo(targetPath));
+            if (PassThru.IsPresent) {
+                WriteObject(Document);
+            }
             return;
         }
 
         var fullPath = VisioCommandUtilities.ResolvePath(this, Path!);
-        if (!ShouldProcess(fullPath, "Save Visio document"))
-        {
+        if (!ShouldProcess(fullPath, "Save Visio document")) {
             return;
         }
 
         VisioCommandUtilities.EnsureDirectory(fullPath);
         Document.Save(fullPath);
 
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(fullPath);
         }
 
-        WriteObject(PassThru.IsPresent ? Document : new FileInfo(fullPath));
+        if (PassThru.IsPresent) {
+            WriteObject(Document);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordChartCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordChartCommand.cs
index 06ab63d1..98dc30bb 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordChartCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordChartCommand.cs
@@ -50,7 +50,7 @@ public enum WordChartType
 ///     [pscustomobject]@{ Month = 'Feb'; Sales = 12; Profit = 5 }
 ///     [pscustomobject]@{ Month = 'Mar'; Sales = 15; Profit = 7 }
 /// )
-/// $doc = New-OfficeWord -Path .\Trend.docx -PassThru
+/// $doc = New-OfficeWord -Path .\Trend.docx -NoSave
 /// Add-OfficeWordChart -Document $doc -Type Line -InputObject $trend -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -Title 'Quarter trend'
 /// Save-OfficeWord -Document $doc
 ///   Creates a multi-series line chart on the document and shows a legend.
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordFooterCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordFooterCommand.cs
index c696016b..46b56174 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordFooterCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordFooterCommand.cs
@@ -14,8 +14,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeWordFooter")]
 [Alias("WordFooter")]
-public sealed class AddOfficeWordFooterCommand : PSCmdlet
-{
+public sealed class AddOfficeWordFooterCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// The footer kind (Default/First/Even).
     [Parameter]
     public WordHeaderFooterType Type { get; set; } = WordHeaderFooterType.Default;
@@ -25,15 +24,14 @@ public sealed class AddOfficeWordFooterCommand : PSCmdlet
     public ScriptBlock? Content { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = WordDslContext.Require(this);
         var section = context.RequireSection();
         var footer = section.GetOrCreateFooter(Type);
 
-        using (context.Push(footer))
-        {
+        using (context.Push(footer)) {
             Content?.InvokeReturnAsIs();
         }
+        WritePassThru(footer);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordHeaderCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordHeaderCommand.cs
index dfce54dd..06cb7cf8 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordHeaderCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordHeaderCommand.cs
@@ -14,8 +14,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeWordHeader")]
 [Alias("WordHeader")]
-public sealed class AddOfficeWordHeaderCommand : PSCmdlet
-{
+public sealed class AddOfficeWordHeaderCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// The header type to modify.
     [Parameter]
     public WordHeaderFooterType Type { get; set; } = WordHeaderFooterType.Default;
@@ -25,15 +24,14 @@ public sealed class AddOfficeWordHeaderCommand : PSCmdlet
     public ScriptBlock? Content { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = WordDslContext.Require(this);
         var section = context.RequireSection();
         var header = section.GetOrCreateHeader(Type);
 
-        using (context.Push(header))
-        {
+        using (context.Push(header)) {
             Content?.InvokeReturnAsIs();
         }
+        WritePassThru(header);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordListCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordListCommand.cs
index 172a40cf..80fed50f 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordListCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordListCommand.cs
@@ -14,8 +14,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeWordList")]
 [Alias("WordList")]
-public sealed class AddOfficeWordListCommand : PSCmdlet
-{
+public sealed class AddOfficeWordListCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Built-in list style or custom numbering scheme.
     [Parameter(Position = 1)]
     [Alias("Type")]
@@ -26,8 +25,7 @@ public sealed class AddOfficeWordListCommand : PSCmdlet
     public ScriptBlock? Content { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = WordDslContext.Require(this);
         var host = context.RequireParagraphHost();
         var anchor = host.AddParagraph();
@@ -35,15 +33,14 @@ protected override void ProcessRecord()
         var list = anchor.AddList(Style);
         context.RegisterListAnchor(list, anchor);
 
-        using (context.Push(list))
-        {
+        using (context.Push(list)) {
             Content?.InvokeReturnAsIs();
         }
 
         var leftoverAnchor = context.ConsumeListAnchor(list);
-        if (leftoverAnchor != null && string.IsNullOrWhiteSpace(leftoverAnchor.Text))
-        {
+        if (leftoverAnchor != null && string.IsNullOrWhiteSpace(leftoverAnchor.Text)) {
             leftoverAnchor.Remove();
         }
+        WritePassThru(list);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordPageNumberCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordPageNumberCommand.cs
index d52fcae5..962a20d6 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordPageNumberCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordPageNumberCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeWordPageNumber")]
 [Alias("WordPageNumber")]
-public sealed class AddOfficeWordPageNumberCommand : PSCmdlet
-{
+public sealed class AddOfficeWordPageNumberCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Include “of N” when true.
     [Parameter]
     public SwitchParameter IncludeTotalPages { get; set; }
@@ -29,15 +28,14 @@ public sealed class AddOfficeWordPageNumberCommand : PSCmdlet
     public string Separator { get; set; } = " of ";
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var context = WordDslContext.Require(this);
         WordHeaderFooter? target = context.CurrentFooter ?? context.CurrentHeader as WordHeaderFooter;
-        if (target == null)
-        {
+        if (target == null) {
             throw new InvalidOperationException("WordPageNumber must be called within WordHeader or WordFooter.");
         }
 
         target.AddPageNumber(IncludeTotalPages.IsPresent, Format, Separator);
+        WritePassThru(target);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordTableConditionCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordTableConditionCommand.cs
index 3fbf55ce..0ef4d148 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordTableConditionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordTableConditionCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Add, "OfficeWordTableCondition")]
 [Alias("WordTableCondition")]
-public sealed class AddOfficeWordTableConditionCommand : PSCmdlet
-{
+public sealed class AddOfficeWordTableConditionCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     /// Predicate executed per data row (uses $_).
     [Parameter(Mandatory = true)]
     public ScriptBlock FilterScript { get; set; } = null!;
@@ -31,10 +30,8 @@ public sealed class AddOfficeWordTableConditionCommand : PSCmdlet
     public string? BackgroundColor { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!TableStyle.HasValue && string.IsNullOrWhiteSpace(BackgroundColor))
-        {
+    protected override void ProcessRecord() {
+        if (!TableStyle.HasValue && string.IsNullOrWhiteSpace(BackgroundColor)) {
             ThrowTerminatingError(new ErrorRecord(
                 new ArgumentException("Specify TableStyle or BackgroundColor."),
                 "WordTableConditionNoAction",
@@ -48,15 +45,14 @@ protected override void ProcessRecord()
         var normalizedColor = NormalizeColor(BackgroundColor);
 
         context.AddTableCondition(table, new WordTableConditionModel(FilterScript, TableStyle, normalizedColor));
+        WritePassThru(table);
     }
 
-    private static string? NormalizeColor(string? color)
-    {
-        if (string.IsNullOrWhiteSpace(color))
-        {
+    private static string? NormalizeColor(string? color) {
+        if (string.IsNullOrWhiteSpace(color)) {
             return null;
         }
 
         return OfficeColor.Parse(color!).ToRgbHex().ToLowerInvariant();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordVisualCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordVisualCommand.cs
index 18878bab..6df4af6e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordVisualCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/AddOfficeWordVisualCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Add, "OfficeWordVisual")]
 [Alias("WordVisual")]
 [OutputType(typeof(WordImage))]
-public sealed class AddOfficeWordVisualCommand : OfficeVisualCommandBase
-{
+public sealed class AddOfficeWordVisualCommand : OfficeVisualCommandBase {
     /// ChartForgeX VisualArtifact, OfficeVisualSource, OfficeVisualConversionResult, or SVG file path.
     [Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true)]
     public object InputObject { get; set; } = null!;
@@ -30,16 +29,21 @@ public sealed class AddOfficeWordVisualCommand : OfficeVisualCommandBase
     [Parameter]
     public WordImageTextWrapping Wrap { get; set; } = WordImageTextWrapping.InLineWithText;
 
+    /// Emit the image added to the paragraph.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordParagraph paragraph = Paragraph ?? ResolveParagraph();
-        WriteObject(paragraph.AddVisualArtifact(ResolveVisual(InputObject), Wrap));
+        var image = paragraph.AddVisualArtifact(ResolveVisual(InputObject), Wrap);
+        if (PassThru.IsPresent) {
+            WriteObject(image);
+        }
     }
 
-    private WordParagraph ResolveParagraph()
-    {
+    private WordParagraph ResolveParagraph() {
         WordDslContext context = WordDslContext.Require(this);
         return context.CurrentParagraph ?? context.RequireParagraphHost().AddParagraph();
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/CloseOfficeWordCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/CloseOfficeWordCommand.cs
index 22e1ca1a..eef66ac8 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/CloseOfficeWordCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/CloseOfficeWordCommand.cs
@@ -21,12 +21,11 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 ///   Save to a new path and open the file.
 ///   PS> 
-///   Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Show
+///   Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Open
 ///   Saves updates to Report-final.docx, opens it, and disposes the document.
 /// 
-[Cmdlet(VerbsCommon.Close, "OfficeWord", DefaultParameterSetName = ParameterSetCurrent)]
-public sealed class CloseOfficeWordCommand : PSCmdlet
-{
+[Cmdlet(VerbsCommon.Close, "OfficeWord", DefaultParameterSetName = ParameterSetCurrent, SupportsShouldProcess = true)]
+public sealed class CloseOfficeWordCommand : PSCmdlet {
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetCurrent = "Current";
     private const string ParameterSetAll = "All";
@@ -52,57 +51,58 @@ public sealed class CloseOfficeWordCommand : PSCmdlet
     [Parameter(ParameterSetName = ParameterSetCurrent)]
     public string? Path { get; set; }
 
-    /// Open the file after saving.
+    /// Open the file after saving. Requires -Save or -Path.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Password used to save the document as an encrypted package.
     [Parameter]
     public string? Password { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (All.IsPresent)
-        {
+    protected override void ProcessRecord() {
+        if (Open.IsPresent && !Save.IsPresent && string.IsNullOrWhiteSpace(Path)) {
+            throw new PSArgumentException("Use -Save or -Path with -Open so the document is persisted before it is opened.", nameof(Open));
+        }
+
+        if (All.IsPresent) {
             var documents = WordDocumentService.GetTrackedDocuments();
-            for (var index = documents.Count - 1; index >= 0; index--)
-            {
+            for (var index = documents.Count - 1; index >= 0; index--) {
                 CloseSingleDocument(documents[index]);
             }
             return;
         }
 
         WordDocument? document;
-        if (ParameterSetName == ParameterSetDocument)
-        {
+        if (ParameterSetName == ParameterSetDocument) {
             document = Document;
-            if (document == null)
-            {
+            if (document == null) {
                 throw new PSArgumentNullException(nameof(Document), "Provide a WordDocument instance when using -Document.");
             }
-        }
-        else
-        {
+        } else {
             document = WordDocumentService.GetCurrentTrackedDocument();
         }
 
-        if (document == null)
-        {
+        if (document == null) {
             throw new PSInvalidOperationException("No tracked Word document was found. Pass -Document or open a document with Get-OfficeWord/New-OfficeWord first.");
         }
 
         CloseSingleDocument(document);
     }
 
-    private void CloseSingleDocument(WordDocument document)
-    {
-        if (Save.IsPresent || !string.IsNullOrEmpty(Path))
-        {
+    private void CloseSingleDocument(WordDocument document) {
+        var shouldSave = Save.IsPresent || !string.IsNullOrWhiteSpace(Path);
+        var action = shouldSave ? "Save and close" : "Close";
+        if (!ShouldProcess("Word document", action)) {
+            return;
+        }
+
+        if (shouldSave) {
             var resolvedPath = !string.IsNullOrWhiteSpace(Path)
                 ? SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path)
                 : null;
-            WordDocumentService.SaveDocument(document, Show.IsPresent, resolvedPath, Password);
+            WordDocumentService.SaveDocument(document, Open.IsPresent, resolvedPath, Password);
             return;
         }
 
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs
index 5709b727..da7259d7 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs
@@ -11,6 +11,12 @@ namespace PSWriteOffice.Cmdlets.Word;
 ///   $result = Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -RedlinePath .\Redline.docx
 ///   Returns deterministic findings and saves a Word document containing revision marks.
 /// 
+/// 
+///   Ignore whitespace and volatile metadata.
+///   PS> 
+///   $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -CompareVolatileMetadata:$false
+/// Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options
+/// 
 [Cmdlet(VerbsData.Compare, "OfficeWordDocument", SupportsShouldProcess = true)]
 [OutputType(typeof(WordComparisonResult))]
 public sealed class CompareOfficeWordDocumentCommand : PSCmdlet
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordHtmlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordHtmlCommand.cs
index f4718fc3..be13410b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordHtmlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordHtmlCommand.cs
@@ -25,8 +25,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsData.ConvertFrom, "OfficeWordHtml", DefaultParameterSetName = ParameterSetHtml, SupportsShouldProcess = true)]
 [Alias("ConvertFrom-WordHtml")]
 [OutputType(typeof(WordDocument), typeof(FileInfo))]
-public sealed class ConvertFromOfficeWordHtmlCommand : PSCmdlet
-{
+public sealed class ConvertFromOfficeWordHtmlCommand : PSCmdlet {
     private const string ParameterSetHtml = "Html";
     private const string ParameterSetPath = "Path";
 
@@ -36,8 +35,8 @@ public sealed class ConvertFromOfficeWordHtmlCommand : PSCmdlet
 
     /// Path to an HTML file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Optional output path for the .docx file.
     [Parameter]
@@ -93,21 +92,17 @@ public sealed class ConvertFromOfficeWordHtmlCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        try
-        {
+    protected override void ProcessRecord() {
+        try {
             var html = Html;
             string? htmlFileDirectory = null;
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 html = File.ReadAllText(resolvedPath);
-                htmlFileDirectory = Path.GetDirectoryName(resolvedPath);
+                htmlFileDirectory = System.IO.Path.GetDirectoryName(resolvedPath);
             }
 
-            if (string.IsNullOrWhiteSpace(html))
-            {
+            if (string.IsNullOrWhiteSpace(html)) {
                 ThrowTerminatingError(new ErrorRecord(
                     new ArgumentException("HTML content cannot be empty."),
                     "HtmlEmpty",
@@ -116,34 +111,26 @@ protected override void ProcessRecord()
                 return;
             }
 
-            var options = new HtmlToWordOptions
-            {
+            var options = new HtmlToWordOptions {
                 IncludeListStyles = IncludeListStyles.IsPresent,
                 ContinueNumbering = ContinueNumbering.IsPresent,
                 SupportsHeadingNumbering = SupportsHeadingNumbering.IsPresent,
                 RenderPreAsTable = RenderPreAsTable.IsPresent
             };
 
-            if (!string.IsNullOrWhiteSpace(FontFamily))
-            {
+            if (!string.IsNullOrWhiteSpace(FontFamily)) {
                 options.FontFamily = FontFamily;
             }
 
-            if (!string.IsNullOrWhiteSpace(BasePath))
-            {
+            if (!string.IsNullOrWhiteSpace(BasePath)) {
                 options.BasePath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(BasePath);
-            }
-            else if (!string.IsNullOrWhiteSpace(htmlFileDirectory))
-            {
+            } else if (!string.IsNullOrWhiteSpace(htmlFileDirectory)) {
                 options.BasePath = htmlFileDirectory;
             }
 
-            if (StylesheetPath != null)
-            {
-                foreach (var entry in StylesheetPath)
-                {
-                    if (string.IsNullOrWhiteSpace(entry))
-                    {
+            if (StylesheetPath != null) {
+                foreach (var entry in StylesheetPath) {
+                    if (string.IsNullOrWhiteSpace(entry)) {
                         continue;
                     }
 
@@ -151,72 +138,55 @@ protected override void ProcessRecord()
                 }
             }
 
-            if (StylesheetContent != null)
-            {
-                foreach (var entry in StylesheetContent)
-                {
-                    if (!string.IsNullOrWhiteSpace(entry))
-                    {
+            if (StylesheetContent != null) {
+                foreach (var entry in StylesheetContent) {
+                    if (!string.IsNullOrWhiteSpace(entry)) {
                         options.StylesheetContents.Add(entry);
                     }
                 }
             }
 
-            if (TableCaptionPosition.HasValue)
-            {
+            if (TableCaptionPosition.HasValue) {
                 options.TableCaptionPosition = TableCaptionPosition.Value;
             }
 
-            if (SectionTagHandling.HasValue)
-            {
+            if (SectionTagHandling.HasValue) {
                 options.SectionTagHandling = SectionTagHandling.Value;
             }
 
             var document = HtmlConversionDocument.Parse(html).ToWordDocument(options);
 
-            if (!string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (!string.IsNullOrWhiteSpace(OutputPath)) {
                 var resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-                if (!ShouldProcess(resolvedOutput, "Write Word document converted from HTML"))
-                {
+                if (!ShouldProcess(resolvedOutput, "Write Word document converted from HTML")) {
                     document.Dispose();
                     return;
                 }
 
-                var directory = Path.GetDirectoryName(resolvedOutput);
-                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-                {
+                var directory = System.IO.Path.GetDirectoryName(resolvedOutput);
+                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                     Directory.CreateDirectory(directory);
                 }
 
-                try
-                {
+                try {
                     document.Save(resolvedOutput);
-                }
-                finally
-                {
+                } finally {
                     document.Dispose();
                 }
 
-                if (Open.IsPresent)
-                {
+                if (Open.IsPresent) {
                     FileOpenService.Open(resolvedOutput);
                 }
 
-                if (PassThru.IsPresent)
-                {
+                if (PassThru.IsPresent) {
                     WriteObject(new FileInfo(resolvedOutput));
                 }
-            }
-            else
-            {
+            } else {
                 WriteObject(document);
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "HtmlToWordFailed", ErrorCategory.InvalidOperation,
-                ParameterSetName == ParameterSetPath ? FilePath : Html));
+                ParameterSetName == ParameterSetPath ? Path : Html));
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordMarkdownCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordMarkdownCommand.cs
index 26db926e..dc4bb985 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordMarkdownCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/ConvertFromOfficeWordMarkdownCommand.cs
@@ -36,8 +36,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsData.ConvertFrom, "OfficeWordMarkdown", DefaultParameterSetName = ParameterSetMarkdown, SupportsShouldProcess = true)]
 [Alias("ConvertFrom-WordMarkdown")]
 [OutputType(typeof(WordDocument), typeof(FileInfo))]
-public sealed class ConvertFromOfficeWordMarkdownCommand : AsyncPSCmdlet
-{
+public sealed class ConvertFromOfficeWordMarkdownCommand : AsyncPSCmdlet {
     private const string ParameterSetMarkdown = "Markdown";
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
@@ -48,8 +47,8 @@ public sealed class ConvertFromOfficeWordMarkdownCommand : AsyncPSCmdlet
 
     /// Path to a Markdown file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Markdown document instance to convert.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -163,44 +162,36 @@ public sealed class ConvertFromOfficeWordMarkdownCommand : AsyncPSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override async Task ProcessRecordAsync()
-    {
+    protected override async Task ProcessRecordAsync() {
         WordDocument? document = null;
 
-        try
-        {
-            if (FitImagesToPageContentWidth.IsPresent && FitImagesToContextWidth.IsPresent)
-            {
+        try {
+            if (FitImagesToPageContentWidth.IsPresent && FitImagesToContextWidth.IsPresent) {
                 throw new ArgumentException("Use either -FitImagesToPageContentWidth or -FitImagesToContextWidth, not both.");
             }
 
             ValidateTemplateParameters();
             var options = BuildOptions();
 
-            switch (ParameterSetName)
-            {
-                case ParameterSetPath:
-                {
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
-                    if (!File.Exists(resolvedPath))
-                    {
-                        throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
-                    }
+            switch (ParameterSetName) {
+                case ParameterSetPath: {
+                        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                        if (!File.Exists(resolvedPath)) {
+                            throw new FileNotFoundException($"File '{resolvedPath}' was not found.", resolvedPath);
+                        }
 
-                    if (string.IsNullOrWhiteSpace(options.BaseUri))
-                    {
-                        options.BaseUri = BuildDirectoryUri(Path.GetDirectoryName(resolvedPath) ?? Directory.GetCurrentDirectory());
-                    }
+                        if (string.IsNullOrWhiteSpace(options.BaseUri)) {
+                            options.BaseUri = BuildDirectoryUri(System.IO.Path.GetDirectoryName(resolvedPath) ?? Directory.GetCurrentDirectory());
+                        }
 
-                    document = await ConvertMarkdownTextAsync(File.ReadAllText(resolvedPath), options).ConfigureAwait(false);
-                    break;
-                }
+                        document = await ConvertMarkdownTextAsync(File.ReadAllText(resolvedPath), options).ConfigureAwait(false);
+                        break;
+                    }
                 case ParameterSetDocument:
                     document = await ConvertMarkdownDocumentAsync(Document, options).ConfigureAwait(false);
                     break;
                 default:
-                    if (string.IsNullOrWhiteSpace(Markdown))
-                    {
+                    if (string.IsNullOrWhiteSpace(Markdown)) {
                         throw new ArgumentException("Markdown content cannot be empty.", nameof(Markdown));
                     }
 
@@ -208,55 +199,41 @@ protected override async Task ProcessRecordAsync()
                     break;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document could not be created from Markdown.");
             }
 
-            if (!string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (!string.IsNullOrWhiteSpace(OutputPath)) {
                 var resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-                if (!ShouldProcess(resolvedOutput, "Write Word document converted from Markdown"))
-                {
+                if (!ShouldProcess(resolvedOutput, "Write Word document converted from Markdown")) {
                     document.Dispose();
                     return;
                 }
 
-                var directory = Path.GetDirectoryName(resolvedOutput);
-                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-                {
+                var directory = System.IO.Path.GetDirectoryName(resolvedOutput);
+                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                     Directory.CreateDirectory(directory);
                 }
 
-                try
-                {
+                try {
                     document.Save(resolvedOutput);
-                }
-                finally
-                {
+                } finally {
                     document.Dispose();
                 }
 
-                if (Open.IsPresent)
-                {
+                if (Open.IsPresent) {
                     FileOpenService.Open(resolvedOutput);
                 }
 
-                if (PassThru.IsPresent)
-                {
+                if (PassThru.IsPresent) {
                     WriteObject(new FileInfo(resolvedOutput));
                 }
-            }
-            else
-            {
+            } else {
                 WriteObject(document);
             }
-        }
-        catch (Exception ex)
-        {
-            object? target = ParameterSetName switch
-            {
-                ParameterSetPath => FilePath,
+        } catch (Exception ex) {
+            object? target = ParameterSetName switch {
+                ParameterSetPath => Path,
                 ParameterSetDocument => Document,
                 _ => Markdown
             };
@@ -264,10 +241,8 @@ protected override async Task ProcessRecordAsync()
         }
     }
 
-    private MarkdownToWordOptions BuildOptions()
-    {
-        if (ReaderOptions != null && Profile.HasValue)
-        {
+    private MarkdownToWordOptions BuildOptions() {
+        if (ReaderOptions != null && Profile.HasValue) {
             throw new PSArgumentException("Specify either -ReaderOptions or -Profile, not both.");
         }
 
@@ -275,58 +250,47 @@ private MarkdownToWordOptions BuildOptions()
         options.AllowLocalImages = AllowLocalImages.IsPresent;
         options.OnWarning = WriteWarning;
 
-        if (RenderFrontMatter.IsPresent)
-        {
+        if (RenderFrontMatter.IsPresent) {
             options.RenderFrontMatter = true;
         }
 
-        if (options is MarkdownToWordTemplateOptions templateOptions)
-        {
+        if (options is MarkdownToWordTemplateOptions templateOptions) {
             templateOptions.BookmarkName = NormalizeOptionalText(BookmarkName);
             templateOptions.ContentControlTag = NormalizeOptionalText(ContentControlTag);
             templateOptions.ContentControlAlias = NormalizeOptionalText(ContentControlAlias);
             templateOptions.ReplacePlaceholder = !KeepPlaceholder.IsPresent;
         }
 
-        if (!string.IsNullOrWhiteSpace(FontFamily))
-        {
+        if (!string.IsNullOrWhiteSpace(FontFamily)) {
             options.FontFamily = FontFamily;
         }
 
-        if (!string.IsNullOrWhiteSpace(BaseUri))
-        {
+        if (!string.IsNullOrWhiteSpace(BaseUri)) {
             options.BaseUri = ResolveBaseUri(BaseUri!);
         }
 
-        if (Theme.HasValue)
-        {
+        if (Theme.HasValue) {
             options.Theme = MarkdownVisualTheme.Create(Theme.Value);
         }
 
-        if (AllowDataUriImages.HasValue)
-        {
+        if (AllowDataUriImages.HasValue) {
             options.AllowDataUriImages = AllowDataUriImages.Value;
         }
 
-        if (MaxDataUriImageBytes.HasValue)
-        {
+        if (MaxDataUriImageBytes.HasValue) {
             options.MaxDataUriImageBytes = MaxDataUriImageBytes.Value;
         }
 
-        if (PreferNarrativeSingleLineDefinitions.IsPresent)
-        {
+        if (PreferNarrativeSingleLineDefinitions.IsPresent) {
             options.PreferNarrativeSingleLineDefinitions = true;
         }
 
         var readerOptions = ReaderOptions ?? (Profile.HasValue
             ? MarkdownReaderOptions.CreateProfile(Profile.Value)
             : null);
-        if (readerOptions != null && NormalizeInput.HasValue)
-        {
+        if (readerOptions != null && NormalizeInput.HasValue) {
             readerOptions.InputNormalization.ApplyPreset(NormalizeInput.Value);
-        }
-        else if (readerOptions == null && NormalizeInput.HasValue)
-        {
+        } else if (readerOptions == null && NormalizeInput.HasValue) {
             readerOptions = MarkdownReaderOptions.CreateOfficeIMOProfile();
             readerOptions.InputNormalization.ApplyPreset(NormalizeInput.Value);
         }
@@ -338,12 +302,9 @@ private MarkdownToWordOptions BuildOptions()
         TrySetOptionProperty(options, "MaxImageHeightPixels", MaxImageHeightPixels);
         TrySetOptionProperty(options, "MaxImageWidthPercentOfContent", MaxImageWidthPercentOfContent);
 
-        if (AllowedImageDirectory != null)
-        {
-            foreach (var entry in AllowedImageDirectory)
-            {
-                if (string.IsNullOrWhiteSpace(entry))
-                {
+        if (AllowedImageDirectory != null) {
+            foreach (var entry in AllowedImageDirectory) {
+                if (string.IsNullOrWhiteSpace(entry)) {
                     continue;
                 }
 
@@ -354,83 +315,68 @@ private MarkdownToWordOptions BuildOptions()
         return options;
     }
 
-    private MarkdownToWordOptions CreateOptions()
-    {
+    private MarkdownToWordOptions CreateOptions() {
         return string.IsNullOrWhiteSpace(TemplatePath)
             ? new MarkdownToWordOptions()
             : new MarkdownToWordTemplateOptions();
     }
 
-    private Task ConvertMarkdownTextAsync(string markdown, MarkdownToWordOptions options)
-    {
+    private Task ConvertMarkdownTextAsync(string markdown, MarkdownToWordOptions options) {
         var markdownDocument = MarkdownReader.Parse(markdown, options.CreateReaderOptions());
         return ConvertMarkdownDocumentAsync(markdownDocument, options);
     }
 
-    private async Task ConvertMarkdownDocumentAsync(MarkdownDoc markdownDocument, MarkdownToWordOptions options)
-    {
-        if (AllowRemoteImages.IsPresent)
-        {
+    private async Task ConvertMarkdownDocumentAsync(MarkdownDoc markdownDocument, MarkdownToWordOptions options) {
+        if (AllowRemoteImages.IsPresent) {
             await MarkdownRemoteImageService.ConfigureResolverAsync(markdownDocument, options, CancelToken).ConfigureAwait(false);
         }
 
-        if (options is not MarkdownToWordTemplateOptions templateOptions)
-        {
+        if (options is not MarkdownToWordTemplateOptions templateOptions) {
             return markdownDocument.ToWordDocument(options);
         }
 
-        var templateDocument = WordDocument.Load(ResolveTemplatePath(), new WordLoadOptions
-        {
+        var templateDocument = WordDocument.Load(ResolveTemplatePath(), new WordLoadOptions {
             AccessMode = DocumentAccessMode.ReadWrite,
             PersistenceMode = DocumentPersistenceMode.Explicit
         });
         return markdownDocument.ToWordDocument(templateDocument, templateOptions);
     }
 
-    private void ValidateTemplateParameters()
-    {
+    private void ValidateTemplateParameters() {
         var hasTemplateTarget = !string.IsNullOrWhiteSpace(BookmarkName)
             || !string.IsNullOrWhiteSpace(ContentControlTag)
             || !string.IsNullOrWhiteSpace(ContentControlAlias)
             || KeepPlaceholder.IsPresent;
 
-        if (hasTemplateTarget && string.IsNullOrWhiteSpace(TemplatePath))
-        {
+        if (hasTemplateTarget && string.IsNullOrWhiteSpace(TemplatePath)) {
             throw new ArgumentException("Template insertion parameters require -TemplatePath.", nameof(TemplatePath));
         }
     }
 
-    private string ResolveTemplatePath()
-    {
-        if (string.IsNullOrWhiteSpace(TemplatePath))
-        {
+    private string ResolveTemplatePath() {
+        if (string.IsNullOrWhiteSpace(TemplatePath)) {
             throw new ArgumentException("Template path cannot be empty.", nameof(TemplatePath));
         }
 
         var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(TemplatePath);
-        if (!File.Exists(resolvedPath))
-        {
+        if (!File.Exists(resolvedPath)) {
             throw new FileNotFoundException($"Template file '{resolvedPath}' was not found.", resolvedPath);
         }
 
         return resolvedPath;
     }
 
-    private static string? NormalizeOptionalText(string? value)
-    {
+    private static string? NormalizeOptionalText(string? value) {
         return string.IsNullOrWhiteSpace(value) ? null : value;
     }
 
-    private static void TrySetOptionProperty(object target, string propertyName, object? value)
-    {
-        if (value == null)
-        {
+    private static void TrySetOptionProperty(object target, string propertyName, object? value) {
+        if (value == null) {
             return;
         }
 
         var property = target.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public);
-        if (property == null || !property.CanWrite)
-        {
+        if (property == null || !property.CanWrite) {
             return;
         }
 
@@ -438,57 +384,47 @@ private static void TrySetOptionProperty(object target, string propertyName, obj
         property.SetValue(target, convertedValue);
     }
 
-    private static object? ConvertOptionValue(object value, Type propertyType)
-    {
+    private static object? ConvertOptionValue(object value, Type propertyType) {
         var targetType = Nullable.GetUnderlyingType(propertyType) ?? propertyType;
-        if (targetType.IsInstanceOfType(value))
-        {
+        if (targetType.IsInstanceOfType(value)) {
             return value;
         }
 
-        if (targetType.IsEnum && value is string text)
-        {
+        if (targetType.IsEnum && value is string text) {
             return Enum.Parse(targetType, text, ignoreCase: true);
         }
 
         return Convert.ChangeType(value, targetType, CultureInfo.InvariantCulture);
     }
 
-    private string ResolveBaseUri(string value)
-    {
-        if (Uri.TryCreate(value, UriKind.Absolute, out var uri))
-        {
+    private string ResolveBaseUri(string value) {
+        if (Uri.TryCreate(value, UriKind.Absolute, out var uri)) {
             return uri.ToString();
         }
 
         var resolved = SessionState.Path.GetUnresolvedProviderPathFromPSPath(value);
-        if (Directory.Exists(resolved))
-        {
+        if (Directory.Exists(resolved)) {
             return BuildDirectoryUri(resolved);
         }
 
-        if (File.Exists(resolved))
-        {
+        if (File.Exists(resolved)) {
             return new Uri(resolved).AbsoluteUri;
         }
 
-        if (Path.HasExtension(resolved))
-        {
-            return new Uri(Path.GetFullPath(resolved)).AbsoluteUri;
+        if (System.IO.Path.HasExtension(resolved)) {
+            return new Uri(System.IO.Path.GetFullPath(resolved)).AbsoluteUri;
         }
 
         return BuildDirectoryUri(resolved);
     }
 
-    private static string BuildDirectoryUri(string path)
-    {
-        var fullPath = Path.GetFullPath(path);
-        if (!fullPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)
-            && !fullPath.EndsWith(Path.AltDirectorySeparatorChar.ToString(), StringComparison.Ordinal))
-        {
-            fullPath += Path.DirectorySeparatorChar;
+    private static string BuildDirectoryUri(string path) {
+        var fullPath = System.IO.Path.GetFullPath(path);
+        if (!fullPath.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)
+            && !fullPath.EndsWith(System.IO.Path.AltDirectorySeparatorChar.ToString(), StringComparison.Ordinal)) {
+            fullPath += System.IO.Path.DirectorySeparatorChar;
         }
 
         return new Uri(fullPath).AbsoluteUri;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordHtmlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordHtmlCommand.cs
index 3090cc41..437eff77 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordHtmlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordHtmlCommand.cs
@@ -24,15 +24,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsData.ConvertTo, "OfficeWordHtml", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("ConvertTo-WordHtml")]
 [OutputType(typeof(string), typeof(FileInfo))]
-public sealed class ConvertToOfficeWordHtmlCommand : PSCmdlet
-{
+public sealed class ConvertToOfficeWordHtmlCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to a .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document instance to convert.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -80,31 +79,24 @@ public sealed class ConvertToOfficeWordHtmlCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
-            var options = new WordToHtmlOptions
-            {
+            var options = new WordToHtmlOptions {
                 IncludeFontStyles = IncludeFontStyles.IsPresent,
                 IncludeListStyles = IncludeListStyles.IsPresent,
                 IncludeParagraphClasses = IncludeParagraphClasses.IsPresent,
@@ -112,57 +104,43 @@ protected override void ProcessRecord()
                 IncludeDefaultCss = IncludeDefaultCss.IsPresent
             };
 
-            if (!string.IsNullOrWhiteSpace(FontFamily))
-            {
+            if (!string.IsNullOrWhiteSpace(FontFamily)) {
                 options.FontFamily = FontFamily;
             }
 
-            if (UseImagePaths.IsPresent)
-            {
+            if (UseImagePaths.IsPresent) {
                 options.EmbedImagesAsBase64 = false;
             }
 
-            if (ExcludeFootnotes.IsPresent)
-            {
+            if (ExcludeFootnotes.IsPresent) {
                 options.ExportFootnotes = false;
             }
 
-            if (!string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (!string.IsNullOrWhiteSpace(OutputPath)) {
                 var resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-                if (!ShouldProcess(resolvedOutput, "Write HTML converted from Word document"))
-                {
+                if (!ShouldProcess(resolvedOutput, "Write HTML converted from Word document")) {
                     return;
                 }
 
-                var directory = Path.GetDirectoryName(resolvedOutput);
-                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-                {
+                var directory = System.IO.Path.GetDirectoryName(resolvedOutput);
+                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                     Directory.CreateDirectory(directory);
                 }
 
                 document.SaveAsHtml(resolvedOutput, options);
-                if (PassThru.IsPresent)
-                {
+                if (PassThru.IsPresent) {
                     WriteObject(new FileInfo(resolvedOutput));
                 }
-            }
-            else
-            {
+            } else {
                 WriteObject(document.ToHtml(options));
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "WordToHtmlFailed", ErrorCategory.InvalidOperation,
-                ParameterSetName == ParameterSetPath ? FilePath : Document));
-        }
-        finally
-        {
-            if (dispose)
-            {
+                ParameterSetName == ParameterSetPath ? Path : Document));
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordMarkdownCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordMarkdownCommand.cs
index c8289099..f9dd15ed 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordMarkdownCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/ConvertToOfficeWordMarkdownCommand.cs
@@ -24,15 +24,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsData.ConvertTo, "OfficeWordMarkdown", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("ConvertTo-WordMarkdown")]
 [OutputType(typeof(string), typeof(FileInfo))]
-public sealed class ConvertToOfficeWordMarkdownCommand : PSCmdlet
-{
+public sealed class ConvertToOfficeWordMarkdownCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to a .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path")]
-    public string FilePath { get; set; } = string.Empty;
+    [Alias("FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document instance to convert.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -68,89 +67,68 @@ public sealed class ConvertToOfficeWordMarkdownCommand : PSCmdlet
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(FilePath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
-            var options = new WordToMarkdownOptions
-            {
+            var options = new WordToMarkdownOptions {
                 EnableUnderline = EnableUnderline.IsPresent,
                 EnableHighlight = EnableHighlight.IsPresent,
                 ImageExportMode = ImageExportMode
             };
 
-            if (!string.IsNullOrWhiteSpace(FontFamily))
-            {
+            if (!string.IsNullOrWhiteSpace(FontFamily)) {
                 options.FontFamily = FontFamily;
             }
 
-            if (!string.IsNullOrWhiteSpace(ImageDirectory))
-            {
+            if (!string.IsNullOrWhiteSpace(ImageDirectory)) {
                 options.ImageDirectory = SessionState.Path.GetUnresolvedProviderPathFromPSPath(ImageDirectory);
             }
 
-            if (!string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (!string.IsNullOrWhiteSpace(OutputPath)) {
                 var resolvedOutput = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-                if (!ShouldProcess(resolvedOutput, "Write Markdown converted from Word document"))
-                {
+                if (!ShouldProcess(resolvedOutput, "Write Markdown converted from Word document")) {
                     return;
                 }
 
-                var directory = Path.GetDirectoryName(resolvedOutput);
-                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-                {
+                var directory = System.IO.Path.GetDirectoryName(resolvedOutput);
+                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                     Directory.CreateDirectory(directory);
                 }
 
                 document.SaveAsMarkdown(resolvedOutput, options);
-                if (PassThru.IsPresent)
-                {
+                if (PassThru.IsPresent) {
                     WriteObject(new FileInfo(resolvedOutput));
                 }
-            }
-            else
-            {
+            } else {
                 if (options.ImageExportMode == ImageExportMode.File && !string.IsNullOrWhiteSpace(options.ImageDirectory) &&
-                    !ShouldProcess(options.ImageDirectory, "Export Word images while converting to Markdown"))
-                {
+                    !ShouldProcess(options.ImageDirectory, "Export Word images while converting to Markdown")) {
                     options.ImageExportMode = ImageExportMode.Base64;
                     options.ImageDirectory = null;
                 }
 
                 WriteObject(document.ToMarkdown(options));
             }
-        }
-        catch (Exception ex)
-        {
+        } catch (Exception ex) {
             WriteError(new ErrorRecord(ex, "WordToMarkdownFailed", ErrorCategory.InvalidOperation,
-                ParameterSetName == ParameterSetPath ? FilePath : Document));
-        }
-        finally
-        {
-            if (dispose)
-            {
+                ParameterSetName == ParameterSetPath ? Path : Document));
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs
index b0d1eb40..9b6d3645 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
 using System.IO;
 using System.Management.Automation;
 using OfficeIMO.Drawing;
@@ -6,12 +7,18 @@
 
 namespace PSWriteOffice.Cmdlets.Word;
 
-/// Exports a Word page as PNG or SVG with structured image diagnostics.
+/// Exports one or more Word pages through the format-neutral OfficeIMO image pipeline.
 /// 
 ///   Export the first page as SVG.
 ///   PS> 
 ///   Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Report.svg -Format Svg
-///   Returns the OfficeIMO image export result after writing the image.
+///   Writes the image quietly. Add -PassThru to receive the structured export result.
+/// 
+/// 
+///   Export every page as JPEG files.
+///   PS> 
+///   Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Format Jpeg -AllPages
+///   For a bounded batch, create options with New-OfficeWordImageOptions -PageIndex 0 -PageCount 2.
 /// 
 [Cmdlet(VerbsData.Export, "OfficeWordImage", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
 [OutputType(typeof(OfficeImageExportResult))]
@@ -25,7 +32,7 @@ public sealed class ExportOfficeWordImageCommand : PSCmdlet
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = "Document")]
     public WordDocument Document { get; set; } = null!;
 
-    /// Destination PNG or SVG path.
+    /// Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch.
     [Parameter(Mandatory = true, Position = 1)]
     public string OutputPath { get; set; } = string.Empty;
 
@@ -37,12 +44,28 @@ public sealed class ExportOfficeWordImageCommand : PSCmdlet
     [Parameter]
     public WordImageExportOptions? Options { get; set; }
 
+    /// Export every estimated page to the destination folder.
+    [Parameter]
+    public SwitchParameter AllPages { get; set; }
+
+    /// Emit the structured image export result.
+    [Parameter]
+    public SwitchParameter PassThru { get; set; }
+
     /// 
     protected override void ProcessRecord()
     {
         var output = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-        if (!ShouldProcess(output, $"Export Word page as {Format}")) return;
-        Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
+        bool batch = AllPages.IsPresent || Options?.PageCount.HasValue == true;
+        if (!ShouldProcess(output, batch ? $"Export Word pages as {Format}" : $"Export Word page as {Format}")) return;
+        if (batch)
+        {
+            Directory.CreateDirectory(output);
+        }
+        else
+        {
+            Directory.CreateDirectory(System.IO.Path.GetDirectoryName(output) ?? SessionState.Path.CurrentFileSystemLocation.Path);
+        }
         WordDocument? owned = null;
         try
         {
@@ -53,9 +76,24 @@ protected override void ProcessRecord()
                 owned = WordDocumentService.LoadDocument(input, readOnly: true, autoSave: false);
                 document = owned;
             }
-            WriteObject(Format == OfficeImageExportFormat.Svg
-                ? document.SaveAsSvg(output, Options)
-                : document.SaveAsPng(output, Options));
+
+            WordImageExportOptions effectiveOptions = Options?.Clone() ?? new WordImageExportOptions();
+            if (AllPages.IsPresent)
+            {
+                effectiveOptions.PageIndex = 0;
+                effectiveOptions.PageCount = null;
+            }
+
+            if (batch)
+            {
+                IReadOnlyList results = document.SaveAsImages(output, Format, effectiveOptions);
+                if (PassThru.IsPresent) WriteObject(results, enumerateCollection: true);
+            }
+            else
+            {
+                OfficeImageExportResult result = document.ExportImage(Format, effectiveOptions).Save(output);
+                if (PassThru.IsPresent) WriteObject(result);
+            }
         }
         finally
         {
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordCommand.cs
index 9d02f5e2..7fa7092a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordCommand.cs
@@ -29,8 +29,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Find, "OfficeWord", DefaultParameterSetName = ParameterSetPathText)]
 [OutputType(typeof(WordParagraph), typeof(WordSearchResult))]
-public sealed class FindOfficeWordCommand : PSCmdlet
-{
+public sealed class FindOfficeWordCommand : PSCmdlet {
     private const string ParameterSetPathText = "PathText";
     private const string ParameterSetPathRegex = "PathRegex";
     private const string ParameterSetDocumentText = "DocumentText";
@@ -39,8 +38,8 @@ public sealed class FindOfficeWordCommand : PSCmdlet
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPathText)]
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPathRegex)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to search.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocumentText)]
@@ -67,31 +66,24 @@ public sealed class FindOfficeWordCommand : PSCmdlet
     public SwitchParameter AsResult { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetPathRegex)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetPathRegex) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
-            if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetDocumentText)
-            {
+            if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetDocumentText) {
                 var comparison = CaseSensitive.IsPresent ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
                 var results = document.Find(Text, comparison);
                 WriteObject(results, enumerateCollection: true);
@@ -101,26 +93,19 @@ protected override void ProcessRecord()
             var regexOptions = CaseSensitive.IsPresent ? RegexOptions.None : RegexOptions.IgnoreCase;
             var regex = new Regex(Pattern, regexOptions);
             var result = document.Find(regex);
-            if (AsResult.IsPresent)
-            {
+            if (AsResult.IsPresent) {
                 WriteObject(result);
-            }
-            else
-            {
+            } else {
                 WriteObject(Flatten(result), enumerateCollection: true);
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private static IEnumerable Flatten(WordSearchResult result)
-    {
+    private static IEnumerable Flatten(WordSearchResult result) {
         foreach (var paragraph in result.BodyParagraphs) yield return paragraph;
         foreach (var paragraph in result.TableParagraphs) yield return paragraph;
         foreach (var paragraph in result.DefaultHeaderParagraphs) yield return paragraph;
@@ -130,4 +115,4 @@ private static IEnumerable Flatten(WordSearchResult result)
         foreach (var paragraph in result.EvenPageFooterParagraphs) yield return paragraph;
         foreach (var paragraph in result.FirstPageFooterParagraphs) yield return paragraph;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordListCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordListCommand.cs
index e017ac31..0d59c208 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordListCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordListCommand.cs
@@ -38,8 +38,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Find, "OfficeWordList", DefaultParameterSetName = ParameterSetPathText)]
 [OutputType(typeof(WordList))]
-public sealed class FindOfficeWordListCommand : PSCmdlet
-{
+public sealed class FindOfficeWordListCommand : PSCmdlet {
     private const string ParameterSetPathText = "PathText";
     private const string ParameterSetPathRegex = "PathRegex";
     private const string ParameterSetDocumentText = "DocumentText";
@@ -50,8 +49,8 @@ public sealed class FindOfficeWordListCommand : PSCmdlet
     /// Path to the document to open read-only for searching.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPathText)]
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPathRegex)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Open document to inspect. The caller controls the document lifetime.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocumentText)]
@@ -80,35 +79,26 @@ public sealed class FindOfficeWordListCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable lists;
-            if (ParameterSetName == ParameterSetSectionText || ParameterSetName == ParameterSetSectionRegex)
-            {
+            if (ParameterSetName == ParameterSetSectionText || ParameterSetName == ParameterSetSectionRegex) {
                 lists = Section != null
                     ? Section.Lists
                     : Array.Empty();
-            }
-            else
-            {
-                if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetPathRegex)
-                {
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+            } else {
+                if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetPathRegex) {
+                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                     document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                     dispose = true;
-                }
-                else
-                {
+                } else {
                     document = Document;
                 }
 
-                if (document == null)
-                {
+                if (document == null) {
                     throw new InvalidOperationException("Word document was not provided.");
                 }
 
@@ -119,20 +109,15 @@ protected override void ProcessRecord()
                 ? WordObjectSearch.CreateRegexMatcher(Pattern, CaseSensitive.IsPresent)
                 : WordObjectSearch.CreateTextMatcher(Text, CaseSensitive.IsPresent);
 
-            foreach (var list in lists.Where(list => list.ListItems.Count > 0))
-            {
-                if (WordObjectSearch.MatchesList(list, matcher))
-                {
+            foreach (var list in lists.Where(list => list.ListItems.Count > 0)) {
+                if (WordObjectSearch.MatchesList(list, matcher)) {
                     WriteObject(list);
                 }
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordTableCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordTableCommand.cs
index ff0dcf03..028de47b 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordTableCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/FindOfficeWordTableCommand.cs
@@ -40,8 +40,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Find, "OfficeWordTable", DefaultParameterSetName = ParameterSetPathText)]
 [OutputType(typeof(WordTable))]
-public sealed class FindOfficeWordTableCommand : PSCmdlet
-{
+public sealed class FindOfficeWordTableCommand : PSCmdlet {
     private const string ParameterSetPathText = "PathText";
     private const string ParameterSetPathRegex = "PathRegex";
     private const string ParameterSetDocumentText = "DocumentText";
@@ -50,8 +49,8 @@ public sealed class FindOfficeWordTableCommand : PSCmdlet
     /// Path to the document to open read-only for searching.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPathText)]
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPathRegex)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Open document to inspect. The caller controls the document lifetime.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocumentText)]
@@ -77,26 +76,20 @@ public sealed class FindOfficeWordTableCommand : PSCmdlet
     public SwitchParameter IncludeNested { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetPathRegex)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPathText || ParameterSetName == ParameterSetPathRegex) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -108,20 +101,15 @@ protected override void ProcessRecord()
                 ? document.TablesIncludingNestedTables
                 : document.Tables;
 
-            foreach (var table in tables)
-            {
-                if (WordObjectSearch.MatchesTable(table, matcher))
-                {
+            foreach (var table in tables) {
+                if (WordObjectSearch.MatchesTable(table, matcher)) {
                     WriteObject(table);
                 }
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordBookmarkCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordBookmarkCommand.cs
index 706ea4a9..1b8922ad 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordBookmarkCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordBookmarkCommand.cs
@@ -20,15 +20,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordBookmark", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordBookmark))]
-public sealed class GetOfficeWordBookmarkCommand : PSCmdlet
-{
+public sealed class GetOfficeWordBookmarkCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -40,57 +39,44 @@ public sealed class GetOfficeWordBookmarkCommand : PSCmdlet
     public string[]? Name { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
             var bookmarks = document.Bookmarks;
             IEnumerable results = bookmarks;
-            if (Name != null && Name.Length > 0)
-            {
+            if (Name != null && Name.Length > 0) {
                 var patterns = new List();
-                foreach (var pattern in Name)
-                {
-                    if (!string.IsNullOrWhiteSpace(pattern))
-                    {
+                foreach (var pattern in Name) {
+                    if (!string.IsNullOrWhiteSpace(pattern)) {
                         patterns.Add(new WildcardPattern(pattern, WildcardOptions.IgnoreCase));
                     }
                 }
 
-                if (patterns.Count > 0)
-                {
+                if (patterns.Count > 0) {
                     results = bookmarks.FindAll(b =>
                         b.Name != null && patterns.Exists(p => p.IsMatch(b.Name)));
                 }
             }
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCheckBoxCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCheckBoxCommand.cs
index 5031cedd..0cb12dc3 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCheckBoxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCheckBoxCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordCheckBox", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordCheckBoxes")]
 [OutputType(typeof(WordCheckBox))]
-public sealed class GetOfficeWordCheckBoxCommand : PSCmdlet
-{
+public sealed class GetOfficeWordCheckBoxCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -54,38 +53,29 @@ public sealed class GetOfficeWordCheckBoxCommand : PSCmdlet
     public SwitchParameter Unchecked { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
             var aliasPatterns = WordFilterHelpers.BuildPatterns(Alias);
             var tagPatterns = WordFilterHelpers.BuildPatterns(Tag);
             bool? filterChecked = null;
-            if (Checked.IsPresent && !Unchecked.IsPresent)
-            {
+            if (Checked.IsPresent && !Unchecked.IsPresent) {
                 filterChecked = true;
-            }
-            else if (Unchecked.IsPresent && !Checked.IsPresent)
-            {
+            } else if (Unchecked.IsPresent && !Checked.IsPresent) {
                 filterChecked = false;
             }
 
@@ -94,19 +84,15 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Alias, aliasPatterns) &&
                 WordFilterHelpers.Matches(control.Tag, tagPatterns));
 
-            if (filterChecked.HasValue)
-            {
+            if (filterChecked.HasValue) {
                 results = results.Where(control => control.IsChecked == filterChecked.Value);
             }
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordComboBoxCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordComboBoxCommand.cs
index 47c6d522..9c10c1bc 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordComboBoxCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordComboBoxCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordComboBox", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordComboBoxes")]
 [OutputType(typeof(WordComboBox))]
-public sealed class GetOfficeWordComboBoxCommand : PSCmdlet
-{
+public sealed class GetOfficeWordComboBoxCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -46,26 +45,20 @@ public sealed class GetOfficeWordComboBoxCommand : PSCmdlet
     public string[]? Tag { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -78,13 +71,10 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Tag, tagPatterns));
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCommand.cs
index 050d420f..762f34db 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordCommand.cs
@@ -20,21 +20,16 @@ namespace PSWriteOffice.Cmdlets.Word;
 ///   Loads the document, appends content through the DSL, and returns the open document for saving or further edits.
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWord")]
-public sealed class GetOfficeWordCommand : PSCmdlet
-{
+public sealed class GetOfficeWordCommand : PSCmdlet {
     /// Path to the .docx. Accepts PS paths.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Open in read-only mode.
     [Parameter]
     public SwitchParameter ReadOnly { get; set; }
 
-    /// Enable AutoSave when editing.
-    [Parameter]
-    public SwitchParameter AutoSave { get; set; }
-
     /// Password used to open an encrypted document package.
     [Parameter]
     public string? Password { get; set; }
@@ -44,23 +39,25 @@ public sealed class GetOfficeWordCommand : PSCmdlet
     public ScriptBlock? Content { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         var fullPath = ResolvePath();
-        var document = WordDocumentService.LoadDocument(fullPath, ReadOnly.IsPresent, AutoSave.IsPresent, Password);
-        if (Content != null)
-        {
-            WordDocumentService.InvokeDsl(document, Content);
+        var document = WordDocumentService.LoadDocument(fullPath, ReadOnly.IsPresent, autoSave: false, Password);
+        try {
+            if (Content != null) {
+                WordDocumentService.InvokeDsl(document, Content);
+            }
+
+            WriteObject(document);
+        } catch {
+            WordDocumentService.CloseDocument(document);
+            throw;
         }
-
-        WriteObject(document);
     }
 
-    private string ResolvePath()
-    {
-        var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-        return Path.IsPathRooted(providerPath)
+    private string ResolvePath() {
+        var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        return System.IO.Path.IsPathRooted(providerPath)
             ? providerPath
-            : Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
+            : System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
     }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordContentControlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordContentControlCommand.cs
index 21e818d7..41009763 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordContentControlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordContentControlCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordContentControl", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordContentControls")]
 [OutputType(typeof(WordStructuredDocumentTag))]
-public sealed class GetOfficeWordContentControlCommand : PSCmdlet
-{
+public sealed class GetOfficeWordContentControlCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -51,26 +50,20 @@ public sealed class GetOfficeWordContentControlCommand : PSCmdlet
     public string[]? Text { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -85,13 +78,10 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Text, textPatterns));
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDatePickerCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDatePickerCommand.cs
index 4e65cc71..6b1989b7 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDatePickerCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDatePickerCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordDatePicker", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordDatePickers")]
 [OutputType(typeof(WordDatePicker))]
-public sealed class GetOfficeWordDatePickerCommand : PSCmdlet
-{
+public sealed class GetOfficeWordDatePickerCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -46,26 +45,20 @@ public sealed class GetOfficeWordDatePickerCommand : PSCmdlet
     public string[]? Tag { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -78,13 +71,10 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Tag, tagPatterns));
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDocumentPropertyCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDocumentPropertyCommand.cs
index a60d41b3..46f9701c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDocumentPropertyCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDocumentPropertyCommand.cs
@@ -20,15 +20,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordDocumentProperty", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordDocumentPropertyInfo))]
-public sealed class GetOfficeWordDocumentPropertyCommand : PSCmdlet
-{
+public sealed class GetOfficeWordDocumentPropertyCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -48,26 +47,20 @@ public sealed class GetOfficeWordDocumentPropertyCommand : PSCmdlet
     public SwitchParameter Custom { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -76,33 +69,26 @@ protected override void ProcessRecord()
 
             IEnumerable properties = WordDocumentPropertyService.GetProperties(document, includeBuiltIn, includeCustom);
             var patterns = BuildPatterns(Name);
-            if (patterns.Count > 0)
-            {
+            if (patterns.Count > 0) {
                 properties = properties.Where(property => patterns.Any(pattern => pattern.IsMatch(property.Name)));
             }
 
             WriteObject(properties, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private static List BuildPatterns(string[]? patterns)
-    {
+    private static List BuildPatterns(string[]? patterns) {
         var compiled = new List();
-        foreach (var pattern in patterns ?? Array.Empty())
-        {
-            if (!string.IsNullOrWhiteSpace(pattern))
-            {
+        foreach (var pattern in patterns ?? Array.Empty()) {
+            if (!string.IsNullOrWhiteSpace(pattern)) {
                 compiled.Add(new WildcardPattern(pattern, WildcardOptions.IgnoreCase));
             }
         }
 
         return compiled;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDropDownListCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDropDownListCommand.cs
index e91b646d..07b17dda 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDropDownListCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordDropDownListCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordDropDownList", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordDropDownLists")]
 [OutputType(typeof(WordDropDownList))]
-public sealed class GetOfficeWordDropDownListCommand : PSCmdlet
-{
+public sealed class GetOfficeWordDropDownListCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -46,26 +45,20 @@ public sealed class GetOfficeWordDropDownListCommand : PSCmdlet
     public string[]? Tag { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -78,13 +71,10 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Tag, tagPatterns));
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordEndnoteCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordEndnoteCommand.cs
index 4045b0f3..2161186e 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordEndnoteCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordEndnoteCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordEndnote", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordEndnotes")]
 [OutputType(typeof(WordNoteInfo))]
-public sealed class GetOfficeWordEndnoteCommand : PSCmdlet
-{
+public sealed class GetOfficeWordEndnoteCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -41,27 +40,21 @@ public sealed class GetOfficeWordEndnoteCommand : PSCmdlet
     public WordSection Section { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable notes;
-            if (ParameterSetName == ParameterSetSection)
-            {
+            if (ParameterSetName == ParameterSetSection) {
                 notes = Section?.EndNotes ?? Enumerable.Empty();
-            }
-            else
-            {
+            } else {
                 document = ParameterSetName == ParameterSetPath
-                    ? WordDocumentService.LoadDocument(SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath), readOnly: true, autoSave: false)
+                    ? WordDocumentService.LoadDocument(SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path), readOnly: true, autoSave: false)
                     : Document;
                 dispose = ParameterSetName == ParameterSetPath;
 
-                if (document == null)
-                {
+                if (document == null) {
                     throw new InvalidOperationException("Word document was not provided.");
                 }
 
@@ -69,18 +62,14 @@ protected override void ProcessRecord()
             }
 
             WriteObject(notes.Select(ToInfo), enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private static WordNoteInfo ToInfo(WordEndNote note)
-    {
+    private static WordNoteInfo ToInfo(WordEndNote note) {
         var paragraphs = note.Paragraphs?
             .Select(paragraph => paragraph.Text)
             .Where(text => !string.IsNullOrWhiteSpace(text))
@@ -88,4 +77,4 @@ private static WordNoteInfo ToInfo(WordEndNote note)
 
         return new WordNoteInfo("Endnote", note.ReferenceId, note.ParentParagraph?.Text, paragraphs);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFieldCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFieldCommand.cs
index ee640712..6034b143 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFieldCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFieldCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordField", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordField))]
-public sealed class GetOfficeWordFieldCommand : PSCmdlet
-{
+public sealed class GetOfficeWordFieldCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -48,52 +47,41 @@ public sealed class GetOfficeWordFieldCommand : PSCmdlet
     public SwitchParameter CaseSensitive { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
             var fields = document.Fields;
             IEnumerable results = fields;
 
-            if (FieldType != null && FieldType.Length > 0)
-            {
+            if (FieldType != null && FieldType.Length > 0) {
                 var allowed = new HashSet(FieldType);
                 results = fields.FindAll(f => f.FieldType.HasValue && allowed.Contains(f.FieldType.Value));
             }
 
-            if (!string.IsNullOrWhiteSpace(Contains))
-            {
+            if (!string.IsNullOrWhiteSpace(Contains)) {
                 var comparison = CaseSensitive.IsPresent ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
                 results = results.Where(f => f.Field.IndexOf(Contains!, comparison) >= 0);
             }
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFootnoteCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFootnoteCommand.cs
index 08966485..5a3952ac 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFootnoteCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordFootnoteCommand.cs
@@ -21,16 +21,15 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordFootnote", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordFootnotes")]
 [OutputType(typeof(WordNoteInfo))]
-public sealed class GetOfficeWordFootnoteCommand : PSCmdlet
-{
+public sealed class GetOfficeWordFootnoteCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -41,27 +40,21 @@ public sealed class GetOfficeWordFootnoteCommand : PSCmdlet
     public WordSection Section { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable notes;
-            if (ParameterSetName == ParameterSetSection)
-            {
+            if (ParameterSetName == ParameterSetSection) {
                 notes = Section?.FootNotes ?? Enumerable.Empty();
-            }
-            else
-            {
+            } else {
                 document = ParameterSetName == ParameterSetPath
-                    ? WordDocumentService.LoadDocument(SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath), readOnly: true, autoSave: false)
+                    ? WordDocumentService.LoadDocument(SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path), readOnly: true, autoSave: false)
                     : Document;
                 dispose = ParameterSetName == ParameterSetPath;
 
-                if (document == null)
-                {
+                if (document == null) {
                     throw new InvalidOperationException("Word document was not provided.");
                 }
 
@@ -69,18 +62,14 @@ protected override void ProcessRecord()
             }
 
             WriteObject(notes.Select(ToInfo), enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private static WordNoteInfo ToInfo(WordFootNote note)
-    {
+    private static WordNoteInfo ToInfo(WordFootNote note) {
         var paragraphs = note.Paragraphs?
             .Select(paragraph => paragraph.Text)
             .Where(text => !string.IsNullOrWhiteSpace(text))
@@ -88,4 +77,4 @@ private static WordNoteInfo ToInfo(WordFootNote note)
 
         return new WordNoteInfo("Footnote", note.ReferenceId, note.ParentParagraph?.Text, paragraphs);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordHyperlinkCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordHyperlinkCommand.cs
index efad7378..5f893df9 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordHyperlinkCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordHyperlinkCommand.cs
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordHyperlink", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordHyperLink))]
-public sealed class GetOfficeWordHyperlinkCommand : PSCmdlet
-{
+public sealed class GetOfficeWordHyperlinkCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
@@ -28,8 +27,8 @@ public sealed class GetOfficeWordHyperlinkCommand : PSCmdlet
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -61,13 +60,11 @@ public sealed class GetOfficeWordHyperlinkCommand : PSCmdlet
     public string[]? Anchor { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable hyperlinks = ResolveHyperlinks(ref document, ref dispose);
 
             hyperlinks = FilterByPatterns(hyperlinks, Text, hyperlink => hyperlink.Text);
@@ -75,20 +72,15 @@ protected override void ProcessRecord()
             hyperlinks = FilterByPatterns(hyperlinks, Anchor, hyperlink => hyperlink.Anchor);
 
             WriteObject(hyperlinks, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private IEnumerable ResolveHyperlinks(ref WordDocument? document, ref bool dispose)
-    {
-        switch (ParameterSetName)
-        {
+    private IEnumerable ResolveHyperlinks(ref WordDocument? document, ref bool dispose) {
+        switch (ParameterSetName) {
             case ParameterSetParagraph:
                 return Paragraph.IsHyperLink && Paragraph.Hyperlink != null
                     ? new[] { Paragraph.Hyperlink }
@@ -98,7 +90,7 @@ private IEnumerable ResolveHyperlinks(ref WordDocument? document,
             case ParameterSetDocument:
                 return Document != null ? Document.HyperLinks : Array.Empty();
             default:
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
                 return document.HyperLinks;
@@ -108,32 +100,26 @@ private IEnumerable ResolveHyperlinks(ref WordDocument? document,
     private static IEnumerable FilterByPatterns(
         IEnumerable hyperlinks,
         string[]? patterns,
-        Func valueSelector)
-    {
+        Func valueSelector) {
         var compiledPatterns = BuildPatterns(patterns);
-        if (compiledPatterns.Count == 0)
-        {
+        if (compiledPatterns.Count == 0) {
             return hyperlinks;
         }
 
-        return hyperlinks.Where(hyperlink =>
-        {
+        return hyperlinks.Where(hyperlink => {
             var value = valueSelector(hyperlink);
             return value != null && compiledPatterns.Any(pattern => pattern.IsMatch(value));
         });
     }
 
-    private static List BuildPatterns(string[]? patterns)
-    {
+    private static List BuildPatterns(string[]? patterns) {
         var compiled = new List();
-        foreach (var pattern in patterns ?? Array.Empty())
-        {
-            if (!string.IsNullOrWhiteSpace(pattern))
-            {
+        foreach (var pattern in patterns ?? Array.Empty()) {
+            if (!string.IsNullOrWhiteSpace(pattern)) {
                 compiled.Add(new WildcardPattern(pattern, WildcardOptions.IgnoreCase));
             }
         }
 
         return compiled;
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordImageCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordImageCommand.cs
index 795b6c20..502049e3 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordImageCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordImageCommand.cs
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordImage", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordImages")]
 [OutputType(typeof(WordImage))]
-public sealed class GetOfficeWordImageCommand : PSCmdlet
-{
+public sealed class GetOfficeWordImageCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
@@ -28,8 +27,8 @@ public sealed class GetOfficeWordImageCommand : PSCmdlet
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -44,16 +43,13 @@ public sealed class GetOfficeWordImageCommand : PSCmdlet
     public WordParagraph Paragraph { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable images;
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetSection:
                     images = Section != null
                         ? Section.Images
@@ -65,14 +61,11 @@ protected override void ProcessRecord()
                         : Array.Empty();
                     break;
                 default:
-                    if (ParameterSetName == ParameterSetPath)
-                    {
-                        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+                    if (ParameterSetName == ParameterSetPath) {
+                        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                         document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                         dispose = true;
-                    }
-                    else
-                    {
+                    } else {
                         document = Document;
                     }
 
@@ -83,13 +76,10 @@ protected override void ProcessRecord()
             }
 
             WriteObject(images, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordListCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordListCommand.cs
index 4db9af6b..7ba7716c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordListCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordListCommand.cs
@@ -34,16 +34,15 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordList", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordList))]
-public sealed class GetOfficeWordListCommand : PSCmdlet
-{
+public sealed class GetOfficeWordListCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
 
     /// Path to the document to open read-only for list inspection.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Open document to inspect. The caller controls the document lifetime.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -58,55 +57,42 @@ public sealed class GetOfficeWordListCommand : PSCmdlet
     public SwitchParameter IncludeEmpty { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable lists;
 
-            if (ParameterSetName == ParameterSetSection)
-            {
+            if (ParameterSetName == ParameterSetSection) {
                 lists = Section != null
                     ? Section.Lists
                     : Array.Empty();
-            }
-            else
-            {
-                if (ParameterSetName == ParameterSetPath)
-                {
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+            } else {
+                if (ParameterSetName == ParameterSetPath) {
+                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                     document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                     dispose = true;
-                }
-                else
-                {
+                } else {
                     document = Document;
                 }
 
-                if (document == null)
-                {
+                if (document == null) {
                     throw new InvalidOperationException("Word document was not provided.");
                 }
 
                 lists = document.Lists;
             }
 
-            if (!IncludeEmpty.IsPresent)
-            {
+            if (!IncludeEmpty.IsPresent) {
                 lists = lists.Where(list => list.ListItems.Count > 0);
             }
 
             WriteObject(lists, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordParagraphCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordParagraphCommand.cs
index 7b4a3fef..9b0f82cf 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordParagraphCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordParagraphCommand.cs
@@ -20,16 +20,15 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordParagraph", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordParagraph))]
-public sealed class GetOfficeWordParagraphCommand : PSCmdlet
-{
+public sealed class GetOfficeWordParagraphCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -40,36 +39,27 @@ public sealed class GetOfficeWordParagraphCommand : PSCmdlet
     public WordSection Section { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable paragraphs;
 
-            if (ParameterSetName == ParameterSetSection)
-            {
+            if (ParameterSetName == ParameterSetSection) {
                 paragraphs = Section != null
                     ? Section.Paragraphs
                     : Array.Empty();
-            }
-            else
-            {
-                if (ParameterSetName == ParameterSetPath)
-                {
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+            } else {
+                if (ParameterSetName == ParameterSetPath) {
+                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                     document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                     dispose = true;
-                }
-                else
-                {
+                } else {
                     document = Document;
                 }
 
-                if (document == null)
-                {
+                if (document == null) {
                     throw new InvalidOperationException("Word document was not provided.");
                 }
 
@@ -77,13 +67,10 @@ protected override void ProcessRecord()
             }
 
             WriteObject(paragraphs, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordPictureControlCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordPictureControlCommand.cs
index d710880b..5df8352c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordPictureControlCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordPictureControlCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordPictureControl", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordPictureControls")]
 [OutputType(typeof(WordPictureControl))]
-public sealed class GetOfficeWordPictureControlCommand : PSCmdlet
-{
+public sealed class GetOfficeWordPictureControlCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -46,26 +45,20 @@ public sealed class GetOfficeWordPictureControlCommand : PSCmdlet
     public string[]? Tag { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -78,13 +71,10 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Tag, tagPatterns));
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordRepeatingSectionCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordRepeatingSectionCommand.cs
index cba83f1a..e060e3f5 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordRepeatingSectionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordRepeatingSectionCommand.cs
@@ -21,15 +21,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordRepeatingSection", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordRepeatingSections")]
 [OutputType(typeof(WordRepeatingSection))]
-public sealed class GetOfficeWordRepeatingSectionCommand : PSCmdlet
-{
+public sealed class GetOfficeWordRepeatingSectionCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -46,26 +45,20 @@ public sealed class GetOfficeWordRepeatingSectionCommand : PSCmdlet
     public string[]? Tag { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
@@ -78,13 +71,10 @@ protected override void ProcessRecord()
                 WordFilterHelpers.Matches(control.Tag, tagPatterns));
 
             WriteObject(results, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordSectionCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordSectionCommand.cs
index 8c88eebf..4e688b7f 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordSectionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordSectionCommand.cs
@@ -20,15 +20,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordSection", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordSection))]
-public sealed class GetOfficeWordSectionCommand : PSCmdlet
-{
+public sealed class GetOfficeWordSectionCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -39,39 +38,30 @@ public sealed class GetOfficeWordSectionCommand : PSCmdlet
     public int[]? Index { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
             IEnumerable sections = document.Sections;
 
-            if (Index != null && Index.Length > 0)
-            {
+            if (Index != null && Index.Length > 0) {
                 var list = document.Sections;
                 var results = new List(Index.Length);
-                foreach (var idx in Index)
-                {
-                    if (idx < 0 || idx >= list.Count)
-                    {
+                foreach (var idx in Index) {
+                    if (idx < 0 || idx >= list.Count) {
                         throw new ArgumentOutOfRangeException(nameof(Index), $"Section index {idx} is out of range.");
                     }
                     results.Add(list[idx]);
@@ -80,13 +70,10 @@ protected override void ProcessRecord()
             }
 
             WriteObject(sections, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordShapeCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordShapeCommand.cs
index 4bf138af..66b2f22a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordShapeCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordShapeCommand.cs
@@ -19,8 +19,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordShape", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordShapes")]
 [OutputType(typeof(WordShape))]
-public sealed class GetOfficeWordShapeCommand : PSCmdlet
-{
+public sealed class GetOfficeWordShapeCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
@@ -28,8 +27,8 @@ public sealed class GetOfficeWordShapeCommand : PSCmdlet
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -44,16 +43,13 @@ public sealed class GetOfficeWordShapeCommand : PSCmdlet
     public WordParagraph Paragraph { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable shapes;
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetSection:
                     shapes = Section != null
                         ? Section.Shapes
@@ -65,14 +61,11 @@ protected override void ProcessRecord()
                         : Array.Empty();
                     break;
                 default:
-                    if (ParameterSetName == ParameterSetPath)
-                    {
-                        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+                    if (ParameterSetName == ParameterSetPath) {
+                        var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                         document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                         dispose = true;
-                    }
-                    else
-                    {
+                    } else {
                         document = Document;
                     }
 
@@ -83,13 +76,10 @@ protected override void ProcessRecord()
             }
 
             WriteObject(shapes, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordStatisticsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordStatisticsCommand.cs
index 98f5efc8..b3783835 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordStatisticsCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordStatisticsCommand.cs
@@ -21,53 +21,43 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Get, "OfficeWordStatistics", DefaultParameterSetName = ParameterSetPath)]
 [Alias("WordStatistics")]
 [OutputType(typeof(WordDocumentStatisticsInfo))]
-public sealed class GetOfficeWordStatisticsCommand : PSCmdlet
-{
+public sealed class GetOfficeWordStatisticsCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the Word document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
     public WordDocument Document { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                if (!File.Exists(resolvedPath))
-                {
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                if (!File.Exists(resolvedPath)) {
                     throw new FileNotFoundException($"File {resolvedPath} doesn't exist.", resolvedPath);
                 }
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
             var statistics = document.Statistics ?? new WordDocumentStatistics(document);
 
             WriteObject(new WordDocumentStatisticsInfo(statistics));
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableCommand.cs
index 50941851..335b4b89 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableCommand.cs
@@ -20,16 +20,15 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordTable", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordTable))]
-public sealed class GetOfficeWordTableCommand : PSCmdlet
-{
+public sealed class GetOfficeWordTableCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetSection = "Section";
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Document to inspect.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -44,43 +43,31 @@ public sealed class GetOfficeWordTableCommand : PSCmdlet
     public SwitchParameter IncludeNested { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable tables;
 
-            if (ParameterSetName == ParameterSetSection)
-            {
-                if (Section == null)
-                {
+            if (ParameterSetName == ParameterSetSection) {
+                if (Section == null) {
                     tables = Array.Empty();
-                }
-                else
-                {
+                } else {
                     tables = IncludeNested.IsPresent
                         ? Section.TablesIncludingNestedTables
                         : Section.Tables;
                 }
-            }
-            else
-            {
-                if (ParameterSetName == ParameterSetPath)
-                {
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+            } else {
+                if (ParameterSetName == ParameterSetPath) {
+                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                     document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                     dispose = true;
-                }
-                else
-                {
+                } else {
                     document = Document;
                 }
 
-                if (document == null)
-                {
+                if (document == null) {
                     throw new InvalidOperationException("Word document was not provided.");
                 }
 
@@ -90,13 +77,10 @@ protected override void ProcessRecord()
             }
 
             WriteObject(tables, enumerateCollection: true);
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableOfContentsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableOfContentsCommand.cs
index f2b0e29e..b4397c7c 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableOfContentsCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTableOfContentsCommand.cs
@@ -20,56 +20,45 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordTableOfContents", DefaultParameterSetName = ParameterSetPath)]
 [OutputType(typeof(WordTableOfContent))]
-public sealed class GetOfficeWordTableOfContentsCommand : PSCmdlet
-{
+public sealed class GetOfficeWordTableOfContentsCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Path to the .docx file.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Word document to read.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
     public WordDocument Document { get; set; } = null!;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+        try {
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                 dispose = true;
-            }
-            else
-            {
+            } else {
                 document = Document;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Word document was not provided.");
             }
 
             var toc = document.TableOfContent;
-            if (toc != null)
-            {
+            if (toc != null) {
                 WriteObject(toc);
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTextCommand.cs
index 09893b37..a1b27fd2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/GetOfficeWordTextCommand.cs
@@ -16,8 +16,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.Get, "OfficeWordText", DefaultParameterSetName = ParameterSetParagraph)]
 [OutputType(typeof(WordParagraph))]
-public sealed class GetOfficeWordTextCommand : PSCmdlet
-{
+public sealed class GetOfficeWordTextCommand : PSCmdlet {
     private const string ParameterSetParagraph = "Paragraph";
     private const string ParameterSetSection = "Section";
     private const string ParameterSetDocument = "Document";
@@ -37,21 +36,18 @@ public sealed class GetOfficeWordTextCommand : PSCmdlet
 
     /// Path to the document.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             IEnumerable paragraphs;
 
-            switch (ParameterSetName)
-            {
+            switch (ParameterSetName) {
                 case ParameterSetParagraph:
                     paragraphs = Paragraph != null ? new[] { Paragraph } : Array.Empty();
                     break;
@@ -61,35 +57,29 @@ protected override void ProcessRecord()
                         : Array.Empty();
                     break;
                 case ParameterSetPath:
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
+                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
                     document = WordDocumentService.LoadDocument(resolvedPath, readOnly: true, autoSave: false);
                     dispose = true;
                     paragraphs = document.Paragraphs;
                     break;
                 default:
                     document = Document;
-                    if (document == null)
-                    {
+                    if (document == null) {
                         throw new InvalidOperationException("Word document was not provided.");
                     }
                     paragraphs = document.Paragraphs;
                     break;
             }
 
-            foreach (var paragraph in paragraphs)
-            {
-                foreach (var text in paragraph.GetRuns())
-                {
+            foreach (var paragraph in paragraphs) {
+                foreach (var text in paragraph.GetRuns()) {
                     WriteObject(text);
                 }
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/JoinOfficeWordDocumentCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/JoinOfficeWordDocumentCommand.cs
index 6d2811d5..ed0368a4 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/JoinOfficeWordDocumentCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/JoinOfficeWordDocumentCommand.cs
@@ -31,15 +31,14 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsCommon.Join, "OfficeWordDocument", DefaultParameterSetName = ParameterSetPath, SupportsShouldProcess = true)]
 [Alias("Merge-OfficeWordDocument", "WordDocumentJoin")]
 [OutputType(typeof(WordDocument))]
-public sealed class JoinOfficeWordDocumentCommand : PSCmdlet
-{
+public sealed class JoinOfficeWordDocumentCommand : PSCmdlet {
     private const string ParameterSetPath = "Path";
     private const string ParameterSetDocument = "Document";
 
     /// Base document path.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("Path", "BasePath")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "BasePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Base document object.
     [Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSetDocument)]
@@ -56,37 +55,30 @@ public sealed class JoinOfficeWordDocumentCommand : PSCmdlet
 
     /// Open the saved output with the shell.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Emit the merged Word document instead of disposing it.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
+    protected override void ProcessRecord() {
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
+        try {
             string? saveTarget = null;
-            if (ParameterSetName == ParameterSetPath)
-            {
-                var resolvedPath = ResolveExistingPath(InputPath);
+            if (ParameterSetName == ParameterSetPath) {
+                var resolvedPath = ResolveExistingPath(Path);
                 document = WordDocumentService.LoadDocument(resolvedPath, readOnly: false, autoSave: false);
                 dispose = true;
                 saveTarget = string.IsNullOrWhiteSpace(OutputPath) ? resolvedPath : ResolveOutputPath(OutputPath!);
-            }
-            else
-            {
+            } else {
                 document = Document;
-                if (!string.IsNullOrWhiteSpace(OutputPath))
-                {
+                if (!string.IsNullOrWhiteSpace(OutputPath)) {
                     saveTarget = ResolveOutputPath(OutputPath!);
-                }
-                else if (Show.IsPresent)
-                {
+                } else if (Open.IsPresent) {
                     saveTarget = document.FilePath ?? throw new InvalidOperationException("No saved file path was available.");
                 }
             }
@@ -97,70 +89,55 @@ protected override void ProcessRecord()
             var processAction = !string.IsNullOrWhiteSpace(saveTarget)
                 ? "Write joined Word document"
                 : "Join Word documents";
-            if (!ShouldProcess(processTarget, processAction))
-            {
+            if (!ShouldProcess(processTarget, processAction)) {
                 return;
             }
 
-            foreach (var sourcePath in AppendPath)
-            {
+            foreach (var sourcePath in AppendPath) {
                 using var source = WordDocumentService.LoadDocument(ResolveExistingPath(sourcePath), readOnly: true, autoSave: false);
                 document.AppendDocument(source);
             }
 
             string? savedPath = null;
 
-            if (!string.IsNullOrWhiteSpace(OutputPath))
-            {
+            if (!string.IsNullOrWhiteSpace(OutputPath)) {
                 savedPath = saveTarget;
                 document.Save(savedPath!);
-            }
-            else if (ParameterSetName == ParameterSetPath)
-            {
+            } else if (ParameterSetName == ParameterSetPath) {
                 document.Save();
                 savedPath = saveTarget;
-            }
-            else if (Show.IsPresent)
-            {
+            } else if (Open.IsPresent) {
                 savedPath = saveTarget;
                 document.Save();
             }
 
-            if (Show.IsPresent)
-            {
+            if (Open.IsPresent) {
                 FileOpenService.Open(savedPath ?? throw new InvalidOperationException("No saved file path was available."));
             }
 
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 dispose = false;
                 WriteObject(document);
             }
-        }
-        finally
-        {
-            if (dispose)
-            {
+        } finally {
+            if (dispose) {
                 document?.Dispose();
             }
         }
     }
 
-    private string ResolveExistingPath(string path)
-    {
+    private string ResolveExistingPath(string path) {
         var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(path);
-        if (!File.Exists(resolvedPath))
-        {
+        if (!File.Exists(resolvedPath)) {
             throw new FileNotFoundException($"File {resolvedPath} doesn't exist.", resolvedPath);
         }
         return resolvedPath;
     }
 
-    private string ResolveOutputPath(string path)
-    {
+    private string ResolveOutputPath(string path) {
         var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(path);
         return System.IO.Path.IsPathRooted(providerPath)
             ? providerPath
             : System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
     }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficePdfWordImportOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficePdfWordImportOptionsCommand.cs
new file mode 100644
index 00000000..0c348c2f
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficePdfWordImportOptionsCommand.cs
@@ -0,0 +1,100 @@
+using System.Collections.Generic;
+using System.Management.Automation;
+using OfficeIMO.Word;
+using OfficeIMO.Word.Pdf;
+
+namespace PSWriteOffice.Cmdlets.Word;
+
+/// Creates discoverable PDF-to-Word reconstruction settings.
+/// 
+///   Reconstruct headings, paragraphs, lists, and tables.
+///   PS> 
+///   $options = New-OfficePdfWordImportOptions -ImportHeadings -ImportParagraphs -ImportLists -ImportTables
+/// ConvertTo-OfficePdfWord -Path .\Source.pdf -OutputPath .\Rebuilt.docx -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficePdfWordImportOptions")]
+[OutputType(typeof(PdfWordImportOptions))]
+public sealed class NewOfficePdfWordImportOptionsCommand : PSCmdlet {
+    /// Use the built-in tables-only import profile.
+    [Parameter] public SwitchParameter TablesOnly { get; set; }
+    /// Copy PDF metadata into Word properties.
+    [Parameter] public SwitchParameter IncludeMetadata { get; set; }
+    /// Represent source pages with Word page breaks.
+    [Parameter] public SwitchParameter PreservePageBreaks { get; set; }
+    /// Represent empty PDF pages.
+    [Parameter] public SwitchParameter IncludeEmptyPages { get; set; }
+    /// Import detected headings.
+    [Parameter] public SwitchParameter ImportHeadings { get; set; }
+    /// Import detected paragraphs.
+    [Parameter] public SwitchParameter ImportParagraphs { get; set; }
+    /// Use the crop-, rotation-, and column-aware reading order.
+    [Parameter] public SwitchParameter UseSharedPageReadingOrder { get; set; }
+    /// Import detected lists.
+    [Parameter] public SwitchParameter ImportLists { get; set; }
+    /// Import detected tables.
+    [Parameter] public SwitchParameter ImportTables { get; set; }
+    /// Import safe URI links.
+    [Parameter] public SwitchParameter ImportUriLinks { get; set; }
+    /// Import supported internal links.
+    [Parameter] public SwitchParameter ImportInternalLinks { get; set; }
+    /// Prefix for generated Word bookmarks.
+    [Parameter] public string? BookmarkPrefix { get; set; }
+    /// Allowed absolute hyperlink URI schemes.
+    [Parameter] public string[]? AllowedHyperlinkUriScheme { get; set; }
+    /// Import supported embedded images.
+    [Parameter] public SwitchParameter ImportImages { get; set; }
+    /// Preserve detected image placement size.
+    [Parameter] public SwitchParameter PreserveImagePlacementSize { get; set; }
+    /// Use paragraphs when an image cannot be embedded.
+    [Parameter] public SwitchParameter IncludeImagePlaceholders { get; set; }
+    /// Represent AcroForm widgets with editable placeholders.
+    [Parameter] public SwitchParameter IncludeFormFieldPlaceholders { get; set; }
+    /// Maximum body rows imported per table; zero means unlimited.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? MaxTableRows { get; set; }
+    /// Word table style for imported tables.
+    [Parameter] public WordTableStyle? TableStyle { get; set; }
+    /// Repeat inferred table header rows.
+    [Parameter] public SwitchParameter RepeatHeaderRows { get; set; }
+    /// Fit imported tables to page width.
+    [Parameter] public SwitchParameter FitTablesToPageWidth { get; set; }
+    /// Right-align inferred numeric columns.
+    [Parameter] public SwitchParameter AlignNumericColumns { get; set; }
+    /// Text used when no supported content is detected.
+    [Parameter] public string? EmptyDocumentMessage { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        PdfWordImportOptions options = TablesOnly.IsPresent ? PdfWordImportOptions.CreateTablesOnly() : new PdfWordImportOptions();
+        Apply(nameof(IncludeMetadata), value => options.IncludeMetadata = value);
+        Apply(nameof(PreservePageBreaks), value => options.PreservePageBreaks = value);
+        Apply(nameof(IncludeEmptyPages), value => options.IncludeEmptyPages = value);
+        Apply(nameof(ImportHeadings), value => options.ImportHeadings = value);
+        Apply(nameof(ImportParagraphs), value => options.ImportParagraphs = value);
+        Apply(nameof(UseSharedPageReadingOrder), value => options.UseSharedPageReadingOrder = value);
+        Apply(nameof(ImportLists), value => options.ImportLists = value);
+        Apply(nameof(ImportTables), value => options.ImportTables = value);
+        Apply(nameof(ImportUriLinks), value => options.ImportUriLinks = value);
+        Apply(nameof(ImportInternalLinks), value => options.ImportInternalLinks = value);
+        Apply(nameof(ImportImages), value => options.ImportImages = value);
+        Apply(nameof(PreserveImagePlacementSize), value => options.PreserveImagePlacementSize = value);
+        Apply(nameof(IncludeImagePlaceholders), value => options.IncludeImagePlaceholders = value);
+        Apply(nameof(IncludeFormFieldPlaceholders), value => options.IncludeFormFieldPlaceholders = value);
+        Apply(nameof(RepeatHeaderRows), value => options.RepeatHeaderRows = value);
+        Apply(nameof(FitTablesToPageWidth), value => options.FitTablesToPageWidth = value);
+        Apply(nameof(AlignNumericColumns), value => options.AlignNumericColumns = value);
+        if (!string.IsNullOrWhiteSpace(BookmarkPrefix)) options.BookmarkPrefix = BookmarkPrefix!;
+        if (AllowedHyperlinkUriScheme != null) {
+            options.AllowedHyperlinkUriSchemes.Clear();
+            foreach (string scheme in AllowedHyperlinkUriScheme) if (!string.IsNullOrWhiteSpace(scheme)) options.AllowedHyperlinkUriSchemes.Add(scheme);
+        }
+        if (MaxTableRows.HasValue) options.MaxTableRows = MaxTableRows.Value;
+        if (TableStyle.HasValue) options.TableStyle = TableStyle.Value;
+        if (EmptyDocumentMessage != null) options.EmptyDocumentMessage = EmptyDocumentMessage;
+        WriteObject(options);
+    }
+
+    private void Apply(string name, System.Action setter) {
+        if (!MyInvocation.BoundParameters.ContainsKey(name)) return;
+        setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs
index 9d5c4beb..9cb6a1d0 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs
@@ -1,14 +1,13 @@
 using System;
 using System.IO;
 using System.Management.Automation;
-using OfficeIMO.Word.Pdf;
 using PSWriteOffice.Services.Pdf;
 using PSWriteOffice.Services.Word;
 
 namespace PSWriteOffice.Cmdlets.Word;
 
 /// Creates a Word document using the DSL.
-/// Handles file creation or template cloning, scriptblock execution, optional autosave, and emits the document path when -PassThru is used.
+/// Handles file creation or template cloning, scriptblock execution, explicit save or live-document composition, and emits the document path when -PassThru is used.
 /// 
 ///   Create a document inline.
 ///   PS> 
@@ -32,12 +31,11 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsCommon.New, "OfficeWord", SupportsShouldProcess = true)]
 [Alias("WordNew")]
-public sealed class NewOfficeWordCommand : PSCmdlet
-{
+public sealed class NewOfficeWordCommand : PSCmdlet {
     /// Destination path for the document.
     [Parameter(Mandatory = true, Position = 0)]
-    [Alias("FilePath", "Path")]
-    public string OutputPath { get; set; } = string.Empty;
+    [Alias("FilePath", "OutputPath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Existing .docx file to clone before running the DSL.
     [Parameter]
@@ -59,33 +57,14 @@ public sealed class NewOfficeWordCommand : PSCmdlet
     [Parameter]
     public SwitchParameter NoSave { get; set; }
 
-    /// Enable OfficeIMO AutoSave mode.
-    [Parameter]
-    public SwitchParameter AutoSave { get; set; }
-
     /// Password used to save the document as an encrypted package.
     [Parameter]
     public string? Password { get; set; }
 
-    /// Optional PDF path to create from the same Word document before closing it.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
-    /// Optional default font family used by the native Word PDF converter.
-    [Parameter]
-    public string? PdfFontFamily { get; set; }
-
-    /// Allow the native Word PDF converter to embed installed system fonts used by the document.
-    [Parameter]
-    [Alias("AllowSystemFontEmbedding")]
-    public SwitchParameter PdfAllowSystemFontEmbedding { get; set; }
-
     /// 
-    protected override void ProcessRecord()
-    {
-        if (!NoSave.IsPresent && AutoSave.IsPresent && !string.IsNullOrEmpty(Password))
-        {
-            throw new PSArgumentException("Encrypted Word documents require explicit Save-OfficeWord -Password or Close-OfficeWord -Save -Password. -AutoSave cannot be used with -Password.");
+    protected override void ProcessRecord() {
+        if (NoSave.IsPresent && Open.IsPresent) {
+            throw new PSArgumentException("-Open cannot be used with -NoSave because no file is written. Save the returned document explicitly, then use -Open on Save-OfficeWord.", nameof(Open));
         }
 
         var fullPath = GetResolvedPath();
@@ -94,124 +73,80 @@ protected override void ProcessRecord()
                 ? "Create in-memory Word document"
                 : "Create Word document from template"
             : "Write new Word document";
-        if (!PdfCommandUtilities.ShouldWrite(this, fullPath, action))
-        {
+        if (!PdfCommandUtilities.ShouldWrite(this, fullPath, action)) {
             return;
         }
 
-        if (!NoSave.IsPresent || !string.IsNullOrWhiteSpace(TemplatePath))
-        {
-            var directory = Path.GetDirectoryName(fullPath);
-            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
-            {
+        if (!NoSave.IsPresent || !string.IsNullOrWhiteSpace(TemplatePath)) {
+            var directory = System.IO.Path.GetDirectoryName(fullPath);
+            if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) {
                 Directory.CreateDirectory(directory);
             }
         }
 
         var document = CreateOrLoadDocument(fullPath);
-        try
-        {
-            if (NoSave.IsPresent)
-            {
+        var closed = false;
+        try {
+            if (NoSave.IsPresent) {
                 WordDocumentService.UpdateSaveAssociation(document, fullPath, encrypted: false);
             }
 
-            if (Content == null)
-            {
-                WriteObject(document);
-                return;
+            if (Content != null) {
+                WordDocumentService.InvokeDsl(document, Content);
             }
 
-            WordDocumentService.InvokeDsl(document, Content);
-
-            if (NoSave.IsPresent)
-            {
+            if (NoSave.IsPresent) {
                 WriteObject(document);
                 return;
             }
 
-            SavePdfIfRequested(document);
             WordDocumentService.SaveDocument(document, Open.IsPresent, fullPath, Password);
+            closed = true;
 
-            if (PassThru.IsPresent)
-            {
+            if (PassThru.IsPresent) {
                 WriteObject(new FileInfo(fullPath));
             }
-        }
-        catch
-        {
-            WordDocumentService.CloseDocument(document);
+        } catch {
+            if (!closed) {
+                WordDocumentService.CloseDocument(document);
+            }
             throw;
         }
     }
 
-    private string GetResolvedPath()
-    {
-        var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(OutputPath);
-        return Path.IsPathRooted(providerPath)
+    private string GetResolvedPath() {
+        var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+        return System.IO.Path.IsPathRooted(providerPath)
             ? providerPath
-            : Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
+            : System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
     }
 
-    private OfficeIMO.Word.WordDocument CreateOrLoadDocument(string fullPath)
-    {
-        if (string.IsNullOrWhiteSpace(TemplatePath))
-        {
-            if (NoSave.IsPresent)
-            {
+    private OfficeIMO.Word.WordDocument CreateOrLoadDocument(string fullPath) {
+        if (string.IsNullOrWhiteSpace(TemplatePath)) {
+            if (NoSave.IsPresent) {
                 return WordDocumentService.CreateInMemoryDocument();
             }
 
-            return WordDocumentService.CreateDocument(fullPath, AutoSave.IsPresent);
+            return WordDocumentService.CreateDocument(fullPath, autoSave: false);
         }
 
         var templatePath = ResolveFileSystemPath(TemplatePath!);
-        if (!File.Exists(templatePath))
-        {
+        if (!File.Exists(templatePath)) {
             throw new FileNotFoundException($"Template file {templatePath} doesn't exist.", templatePath);
         }
 
-        if (!string.Equals(templatePath, fullPath, StringComparison.OrdinalIgnoreCase))
-        {
+        if (!string.Equals(templatePath, fullPath, StringComparison.OrdinalIgnoreCase)) {
             File.Copy(templatePath, fullPath, overwrite: true);
         }
 
-        return WordDocumentService.LoadDocument(fullPath, readOnly: false, autoSave: AutoSave.IsPresent);
+        return WordDocumentService.LoadDocument(fullPath, readOnly: false, autoSave: false);
     }
 
-    private string ResolveFileSystemPath(string path)
-    {
+    private string ResolveFileSystemPath(string path) {
         var providerPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(path);
-        return Path.IsPathRooted(providerPath)
+        return System.IO.Path.IsPathRooted(providerPath)
             ? providerPath
-            : Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
+            : System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, providerPath);
     }
 
-    private void SavePdfIfRequested(OfficeIMO.Word.WordDocument document)
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write Word PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        if (PdfAllowSystemFontEmbedding.IsPresent || !string.IsNullOrWhiteSpace(PdfFontFamily))
-        {
-            var pdfOptions = new WordPdfSaveOptions
-            {
-                FontFamily = PdfFontFamily
-            };
-            pdfOptions.ResourcePolicy.AllowSystemFontEmbedding = PdfAllowSystemFontEmbedding.IsPresent;
-            document.SaveAsPdf(pdfPath, pdfOptions).RequireSuccess();
-            return;
-        }
-
-        document.SaveAsPdf(pdfPath).RequireSuccess();
-    }
 }
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordComparisonOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordComparisonOptionsCommand.cs
new file mode 100644
index 00000000..8ac95827
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordComparisonOptionsCommand.cs
@@ -0,0 +1,112 @@
+using System.Collections.Generic;
+using System.Management.Automation;
+using OfficeIMO.Word;
+
+namespace PSWriteOffice.Cmdlets.Word;
+
+/// Creates discoverable structural comparison settings for Compare-OfficeWordDocument.
+/// 
+///   Ignore text normalization differences and exclude volatile metadata.
+///   PS> 
+///   $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -IgnoreCase -CompareVolatileMetadata:$false
+/// Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeWordComparisonOptions")]
+[OutputType(typeof(WordComparisonOptions))]
+public sealed class NewOfficeWordComparisonOptionsCommand : PSCmdlet {
+    /// Ignore differences caused only by whitespace runs.
+    [Parameter] public SwitchParameter IgnoreWhitespace { get; set; }
+    /// Ignore character casing.
+    [Parameter] public SwitchParameter IgnoreCase { get; set; }
+    /// Compare direct run formatting.
+    [Parameter] public SwitchParameter CompareRunFormatting { get; set; }
+    /// Compare resolved effective formatting.
+    [Parameter] public SwitchParameter CompareEffectiveFormatting { get; set; }
+    /// Compare paragraph style identifiers.
+    [Parameter] public SwitchParameter CompareParagraphStyleIds { get; set; }
+    /// Compare run style identifiers.
+    [Parameter] public SwitchParameter CompareRunStyleIds { get; set; }
+    /// Limit results to these comparison scopes.
+    [Parameter] public WordComparisonScope[]? IncludeScope { get; set; }
+    /// Remove these comparison scopes from results.
+    [Parameter] public WordComparisonScope[]? ExcludeScope { get; set; }
+    /// Compare fields.
+    [Parameter] public SwitchParameter CompareFields { get; set; }
+    /// Compare content controls.
+    [Parameter] public SwitchParameter CompareContentControls { get; set; }
+    /// Compare bookmarks.
+    [Parameter] public SwitchParameter CompareBookmarks { get; set; }
+    /// Compare hyperlinks.
+    [Parameter] public SwitchParameter CompareHyperlinks { get; set; }
+    /// Compare lists.
+    [Parameter] public SwitchParameter CompareLists { get; set; }
+    /// Compare comments.
+    [Parameter] public SwitchParameter CompareComments { get; set; }
+    /// Compare comment authors.
+    [Parameter] public SwitchParameter CompareCommentAuthors { get; set; }
+    /// Compare comment text.
+    [Parameter] public SwitchParameter CompareCommentText { get; set; }
+    /// Compare comment resolved state.
+    [Parameter] public SwitchParameter CompareCommentResolvedState { get; set; }
+    /// Compare comment targets.
+    [Parameter] public SwitchParameter CompareCommentTargets { get; set; }
+    /// Compare comment replies.
+    [Parameter] public SwitchParameter CompareCommentReplies { get; set; }
+    /// Compare tracked revisions.
+    [Parameter] public SwitchParameter CompareRevisions { get; set; }
+    /// Compare revision authors.
+    [Parameter] public SwitchParameter CompareRevisionAuthors { get; set; }
+    /// Compare revision text.
+    [Parameter] public SwitchParameter CompareRevisionText { get; set; }
+    /// Compare revision locations.
+    [Parameter] public SwitchParameter CompareRevisionLocations { get; set; }
+    /// Compare images.
+    [Parameter] public SwitchParameter CompareImages { get; set; }
+    /// Compare supported shapes.
+    [Parameter] public SwitchParameter CompareShapes { get; set; }
+    /// Compare document block order.
+    [Parameter] public SwitchParameter CompareBlockOrder { get; set; }
+    /// Compare generated identifiers.
+    [Parameter] public SwitchParameter CompareGeneratedIds { get; set; }
+    /// Compare volatile timestamps and metadata.
+    [Parameter] public SwitchParameter CompareVolatileMetadata { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new WordComparisonOptions();
+        Apply(nameof(IgnoreWhitespace), value => options.IgnoreWhitespace = value);
+        Apply(nameof(IgnoreCase), value => options.IgnoreCase = value);
+        Apply(nameof(CompareRunFormatting), value => options.CompareRunFormatting = value);
+        Apply(nameof(CompareEffectiveFormatting), value => options.CompareEffectiveFormatting = value);
+        Apply(nameof(CompareParagraphStyleIds), value => options.CompareParagraphStyleIds = value);
+        Apply(nameof(CompareRunStyleIds), value => options.CompareRunStyleIds = value);
+        Apply(nameof(CompareFields), value => options.CompareFields = value);
+        Apply(nameof(CompareContentControls), value => options.CompareContentControls = value);
+        Apply(nameof(CompareBookmarks), value => options.CompareBookmarks = value);
+        Apply(nameof(CompareHyperlinks), value => options.CompareHyperlinks = value);
+        Apply(nameof(CompareLists), value => options.CompareLists = value);
+        Apply(nameof(CompareComments), value => options.CompareComments = value);
+        Apply(nameof(CompareCommentAuthors), value => options.CompareCommentAuthors = value);
+        Apply(nameof(CompareCommentText), value => options.CompareCommentText = value);
+        Apply(nameof(CompareCommentResolvedState), value => options.CompareCommentResolvedState = value);
+        Apply(nameof(CompareCommentTargets), value => options.CompareCommentTargets = value);
+        Apply(nameof(CompareCommentReplies), value => options.CompareCommentReplies = value);
+        Apply(nameof(CompareRevisions), value => options.CompareRevisions = value);
+        Apply(nameof(CompareRevisionAuthors), value => options.CompareRevisionAuthors = value);
+        Apply(nameof(CompareRevisionText), value => options.CompareRevisionText = value);
+        Apply(nameof(CompareRevisionLocations), value => options.CompareRevisionLocations = value);
+        Apply(nameof(CompareImages), value => options.CompareImages = value);
+        Apply(nameof(CompareShapes), value => options.CompareShapes = value);
+        Apply(nameof(CompareBlockOrder), value => options.CompareBlockOrder = value);
+        Apply(nameof(CompareGeneratedIds), value => options.CompareGeneratedIds = value);
+        Apply(nameof(CompareVolatileMetadata), value => options.CompareVolatileMetadata = value);
+        if (IncludeScope != null) options.IncludedScopes = new HashSet(IncludeScope);
+        if (ExcludeScope != null) options.ExcludedScopes = new HashSet(ExcludeScope);
+        WriteObject(options);
+    }
+
+    private void Apply(string name, System.Action setter) {
+        if (!MyInvocation.BoundParameters.ContainsKey(name)) return;
+        setter(((SwitchParameter)MyInvocation.BoundParameters[name]).IsPresent);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordImageOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordImageOptionsCommand.cs
new file mode 100644
index 00000000..daf01636
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordImageOptionsCommand.cs
@@ -0,0 +1,34 @@
+using System.Management.Automation;
+using OfficeIMO.Word;
+using PSWriteOffice.Cmdlets.Imaging;
+
+namespace PSWriteOffice.Cmdlets.Word;
+
+/// Creates discoverable page and rendering settings for Export-OfficeWordImage.
+/// 
+///   Render the first two pages at higher density.
+///   PS> 
+///   $options = New-OfficeWordImageOptions -PageIndex 0 -PageCount 2 -TargetDpi 144 -IncludeDocumentContent
+/// Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Options $options
+///   Supplying PageCount selects batch export, so OutputPath is a folder. Use -AllPages on the export command for the complete document.
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeWordImageOptions")]
+[OutputType(typeof(WordImageExportOptions))]
+public sealed class NewOfficeWordImageOptionsCommand : OfficeImageOptionsCommandBase {
+    /// Render document content.
+    [Parameter] public SwitchParameter IncludeDocumentContent { get; set; }
+    /// Zero-based first page index.
+    [Parameter] [ValidateRange(0, int.MaxValue)] public int? PageIndex { get; set; }
+    /// Maximum pages exported. Supplying this value selects batch export.
+    [Parameter] [ValidateRange(1, int.MaxValue)] public int? PageCount { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new WordImageExportOptions();
+        ApplyCommon(options);
+        if (IsBound(nameof(IncludeDocumentContent))) options.IncludeDocumentContent = IncludeDocumentContent.IsPresent;
+        if (PageIndex.HasValue) options.PageIndex = PageIndex.Value;
+        if (PageCount.HasValue) options.PageCount = PageCount.Value;
+        WriteObject(options);
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordPdfOptionsCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordPdfOptionsCommand.cs
new file mode 100644
index 00000000..74106924
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordPdfOptionsCommand.cs
@@ -0,0 +1,130 @@
+using System.Management.Automation;
+using OfficeIMO;
+using OfficeIMO.Pdf;
+using OfficeIMO.Word;
+using OfficeIMO.Word.Pdf;
+
+namespace PSWriteOffice.Cmdlets.Word;
+
+/// Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf.
+/// 
+///   Configure metadata, page numbers, and font embedding.
+///   PS> 
+///   $options = New-OfficeWordPdfOptions -Title 'Service report' -Author 'Evotec' -IncludePageNumbers -AllowSystemFontEmbedding
+/// Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -WordOptions $options
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeWordPdfOptions")]
+[OutputType(typeof(WordPdfSaveOptions))]
+public sealed class NewOfficeWordPdfOptionsCommand : PSCmdlet {
+    /// Underlying low-level OfficeIMO PDF options.
+    [Parameter]
+    public OfficeIMO.Pdf.PdfOptions? PdfOptions { get; set; }
+
+    /// Default font family used when the document does not specify one.
+    [Parameter]
+    public string? FontFamily { get; set; }
+
+    /// PDF page size.
+    [Parameter]
+    public PageSize? PageSize { get; set; }
+
+    /// PDF page orientation.
+    [Parameter]
+    public OfficePageOrientation? Orientation { get; set; }
+
+    /// Fallback Word page size for sections without page settings.
+    [Parameter]
+    public WordPageSize? DefaultPageSize { get; set; }
+
+    /// Fallback page orientation for sections without page settings.
+    [Parameter]
+    public OfficePageOrientation? DefaultOrientation { get; set; }
+
+    /// Left page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginLeft { get; set; }
+
+    /// Top page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginTop { get; set; }
+
+    /// Right page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginRight { get; set; }
+
+    /// Bottom page margin in PDF points.
+    [Parameter]
+    [ValidateRange(0d, double.MaxValue)]
+    public double? MarginBottom { get; set; }
+
+    /// PDF title metadata.
+    [Parameter]
+    public string? Title { get; set; }
+
+    /// PDF author metadata.
+    [Parameter]
+    public string? Author { get; set; }
+
+    /// PDF subject metadata.
+    [Parameter]
+    public string? Subject { get; set; }
+
+    /// PDF keywords metadata.
+    [Parameter]
+    public string? Keywords { get; set; }
+
+    /// Include page numbers in the generated PDF.
+    [Parameter]
+    public SwitchParameter IncludePageNumbers { get; set; }
+
+    /// Page number text format.
+    [Parameter]
+    public string? PageNumberFormat { get; set; }
+
+    /// Draw default borders for tables that do not specify borders.
+    [Parameter]
+    public SwitchParameter DefaultTableBorders { get; set; }
+
+    /// Allow embedding fonts discovered on the current system.
+    [Parameter]
+    public SwitchParameter AllowSystemFontEmbedding { get; set; }
+
+    /// Allow embedding fonts stored in the Word document.
+    [Parameter]
+    public SwitchParameter AllowDocumentFontEmbedding { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        var options = new WordPdfSaveOptions();
+        if (PdfOptions != null) options.PdfOptions = PdfOptions;
+        if (!string.IsNullOrWhiteSpace(FontFamily)) options.FontFamily = FontFamily;
+        if (PageSize.HasValue) options.PageSize = PageSize.Value;
+        if (Orientation.HasValue) options.Orientation = Orientation.Value;
+        if (DefaultPageSize.HasValue) options.DefaultPageSize = DefaultPageSize.Value;
+        if (DefaultOrientation.HasValue) options.DefaultOrientation = DefaultOrientation.Value;
+        if (HasMargins()) {
+            PageMargins defaults = PageMargins.Normal;
+            options.Margins = new PageMargins(
+                MarginLeft ?? defaults.Left,
+                MarginTop ?? defaults.Top,
+                MarginRight ?? defaults.Right,
+                MarginBottom ?? defaults.Bottom);
+        }
+        if (!string.IsNullOrWhiteSpace(Title)) options.Title = Title;
+        if (!string.IsNullOrWhiteSpace(Author)) options.Author = Author;
+        if (!string.IsNullOrWhiteSpace(Subject)) options.Subject = Subject;
+        if (!string.IsNullOrWhiteSpace(Keywords)) options.Keywords = Keywords;
+        if (IsBound(nameof(IncludePageNumbers))) options.IncludePageNumbers = IncludePageNumbers.IsPresent;
+        if (!string.IsNullOrWhiteSpace(PageNumberFormat)) options.PageNumberFormat = PageNumberFormat;
+        if (IsBound(nameof(DefaultTableBorders))) options.DefaultTableBorders = DefaultTableBorders.IsPresent;
+        if (IsBound(nameof(AllowSystemFontEmbedding))) options.ResourcePolicy.AllowSystemFontEmbedding = AllowSystemFontEmbedding.IsPresent;
+        if (IsBound(nameof(AllowDocumentFontEmbedding))) options.ResourcePolicy.AllowDocumentFontEmbedding = AllowDocumentFontEmbedding.IsPresent;
+        WriteObject(options);
+    }
+
+    private bool HasMargins() => MarginLeft.HasValue || MarginTop.HasValue || MarginRight.HasValue || MarginBottom.HasValue;
+    private bool IsBound(string name) => MyInvocation.BoundParameters.ContainsKey(name);
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordRevisionFilterCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordRevisionFilterCommand.cs
new file mode 100644
index 00000000..a45805f6
--- /dev/null
+++ b/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordRevisionFilterCommand.cs
@@ -0,0 +1,66 @@
+using System.Management.Automation;
+using OfficeIMO.Word;
+
+namespace PSWriteOffice.Cmdlets.Word;
+
+/// Creates a discoverable Word revision filter for Resolve-OfficeWordRevision.
+/// 
+///   Accept only table revisions from one author.
+///   PS> 
+///   $filter = New-OfficeWordRevisionFilter -Author 'Alex' -InTable
+/// Resolve-OfficeWordRevision -Path .\Review.docx -Action Accept -Filter $filter
+/// 
+[Cmdlet(VerbsCommon.New, "OfficeWordRevisionFilter")]
+[OutputType(typeof(WordRevisionFilter))]
+public sealed class NewOfficeWordRevisionFilterCommand : PSCmdlet {
+    /// Revision author.
+    [Parameter] public string? Author { get; set; }
+    /// Revision identifier.
+    [Parameter] public string? RevisionId { get; set; }
+    /// Revision operation type.
+    [Parameter] public WordReviewRevisionType? RevisionType { get; set; }
+    /// Earliest revision date.
+    [Parameter] public System.DateTime? DateFrom { get; set; }
+    /// Latest revision date.
+    [Parameter] public System.DateTime? DateTo { get; set; }
+    /// Word part or container location kind.
+    [Parameter] public WordReviewLocationKind? LocationKind { get; set; }
+    /// Package part URI.
+    [Parameter] public string? PartUri { get; set; }
+    /// Limit results to revisions inside tables.
+    [Parameter] public SwitchParameter InTable { get; set; }
+    /// Limit results to revisions outside tables.
+    [Parameter] public SwitchParameter NotInTable { get; set; }
+    /// Limit results to revisions inside content controls.
+    [Parameter] public SwitchParameter InContentControl { get; set; }
+    /// Limit results to revisions outside content controls.
+    [Parameter] public SwitchParameter NotInContentControl { get; set; }
+    /// Limit results to revisions inside text boxes.
+    [Parameter] public SwitchParameter InTextBox { get; set; }
+    /// Limit results to revisions outside text boxes.
+    [Parameter] public SwitchParameter NotInTextBox { get; set; }
+
+    /// 
+    protected override void ProcessRecord() {
+        ValidatePair(nameof(InTable), InTable, nameof(NotInTable), NotInTable);
+        ValidatePair(nameof(InContentControl), InContentControl, nameof(NotInContentControl), NotInContentControl);
+        ValidatePair(nameof(InTextBox), InTextBox, nameof(NotInTextBox), NotInTextBox);
+        var filter = new WordRevisionFilter {
+            Author = Author,
+            RevisionId = RevisionId,
+            RevisionType = RevisionType,
+            DateFrom = DateFrom,
+            DateTo = DateTo,
+            LocationKind = LocationKind,
+            PartUri = PartUri
+        };
+        if (InTable.IsPresent || NotInTable.IsPresent) filter.IsInTable = InTable.IsPresent;
+        if (InContentControl.IsPresent || NotInContentControl.IsPresent) filter.IsInContentControl = InContentControl.IsPresent;
+        if (InTextBox.IsPresent || NotInTextBox.IsPresent) filter.IsInTextBox = InTextBox.IsPresent;
+        WriteObject(filter);
+    }
+
+    private static void ValidatePair(string includeName, SwitchParameter include, string excludeName, SwitchParameter exclude) {
+        if (include.IsPresent && exclude.IsPresent) throw new PSArgumentException($"-{includeName} and -{excludeName} cannot be used together.");
+    }
+}
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs
index 5978343e..8f055a2a 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs
@@ -9,7 +9,8 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 ///   Accept revisions by one author into a new document.
 ///   PS> 
-///   $filter = [OfficeIMO.Word.WordRevisionFilter]::new(); $filter.Author = 'Reviewer'; Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter
+///   $filter = New-OfficeWordRevisionFilter -Author 'Reviewer' -InContentControl
+/// Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter
 ///   Applies only matching revisions, saves the result, and returns the matched revision report.
 /// 
 [Cmdlet(VerbsDiagnostic.Resolve, "OfficeWordRevision", DefaultParameterSetName = "Path", SupportsShouldProcess = true)]
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs
index 59c6dc12..fb77c3cc 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs
@@ -2,7 +2,6 @@
 using System.IO;
 using System.Management.Automation;
 using OfficeIMO.Word;
-using OfficeIMO.Word.Pdf;
 using PSWriteOffice.Services;
 using PSWriteOffice.Services.Pdf;
 using PSWriteOffice.Services.Word;
@@ -19,8 +18,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 [Cmdlet(VerbsData.Save, "OfficeWord", SupportsShouldProcess = true)]
 [OutputType(typeof(WordDocument))]
-public sealed class SaveOfficeWordCommand : PSCmdlet
-{
+public sealed class SaveOfficeWordCommand : PSCmdlet {
     /// Document to save.
     [Parameter(Mandatory = true, ValueFromPipeline = true, Position = 0)]
     public WordDocument Document { get; set; } = null!;
@@ -32,84 +30,56 @@ public sealed class SaveOfficeWordCommand : PSCmdlet
 
     /// Open the document after saving.
     [Parameter]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// Password used to save the document as an encrypted package.
     [Parameter]
     public string? Password { get; set; }
 
-    /// Optional PDF path to create from the same Word document.
-    [Parameter]
-    public string? PdfPath { get; set; }
-
-    /// Optional default font family used by the native Word PDF converter.
-    [Parameter]
-    public string? PdfFontFamily { get; set; }
-
-    /// Allow the native Word PDF converter to embed installed system fonts used by the document.
-    [Parameter]
-    [Alias("AllowSystemFontEmbedding")]
-    public SwitchParameter PdfAllowSystemFontEmbedding { get; set; }
-
     /// Emit the document object for further processing.
     [Parameter]
     public SwitchParameter PassThru { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (Document == null)
-        {
+    protected override void ProcessRecord() {
+        if (Document == null) {
             return;
         }
 
         var associatedPath = WordDocumentService.GetAssociatedPath(Document);
-        if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(associatedPath))
-        {
+        if (string.IsNullOrWhiteSpace(Path) && string.IsNullOrWhiteSpace(associatedPath)) {
             throw new PSInvalidOperationException("No file path provided. Use -Path or open the document from disk.");
         }
 
         string savedPath;
-        if (!string.IsNullOrWhiteSpace(Path))
-        {
+        if (!string.IsNullOrWhiteSpace(Path)) {
             var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
-            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Save Word document"))
-            {
+            if (!PdfCommandUtilities.ShouldWrite(this, resolvedPath, "Save Word document")) {
                 return;
             }
 
             if (string.IsNullOrEmpty(Password) &&
                 WordDocumentService.IsEncryptedSource(Document) &&
-                string.Equals(System.IO.Path.GetFullPath(resolvedPath), System.IO.Path.GetFullPath(associatedPath!), StringComparison.OrdinalIgnoreCase))
-            {
+                string.Equals(System.IO.Path.GetFullPath(resolvedPath), System.IO.Path.GetFullPath(associatedPath!), StringComparison.OrdinalIgnoreCase)) {
                 throw new PSInvalidOperationException("Provide -Password when saving a document loaded from an encrypted package.");
             }
 
-            if (!string.IsNullOrEmpty(Password))
-            {
+            if (!string.IsNullOrEmpty(Password)) {
                 OfficeEncryptedPackageService.SaveWord(Document, resolvedPath, Password!, false);
-            }
-            else
-            {
+            } else {
                 Document.Save(resolvedPath);
             }
             savedPath = resolvedPath;
-        }
-        else
-        {
-            if (!PdfCommandUtilities.ShouldWrite(this, associatedPath!, "Save Word document"))
-            {
+        } else {
+            if (!PdfCommandUtilities.ShouldWrite(this, associatedPath!, "Save Word document")) {
                 return;
             }
 
-            if (!string.IsNullOrEmpty(Password))
-            {
+            if (!string.IsNullOrEmpty(Password)) {
                 OfficeEncryptedPackageService.SaveWord(Document, associatedPath!, Password!, false);
-            }
-            else
-            {
-                if (WordDocumentService.IsEncryptedSource(Document))
-                {
+            } else {
+                if (WordDocumentService.IsEncryptedSource(Document)) {
                     throw new PSInvalidOperationException("Provide -Password when saving a document loaded from an encrypted package.");
                 }
 
@@ -119,44 +89,13 @@ protected override void ProcessRecord()
         }
 
         WordDocumentService.UpdateSaveAssociation(Document, savedPath, !string.IsNullOrEmpty(Password));
-        if (Show.IsPresent)
-        {
+        if (Open.IsPresent) {
             FileOpenService.Open(savedPath);
         }
 
-        SavePdfIfRequested();
-
-        if (PassThru.IsPresent)
-        {
+        if (PassThru.IsPresent) {
             WriteObject(Document);
         }
     }
 
-    private void SavePdfIfRequested()
-    {
-        if (string.IsNullOrWhiteSpace(PdfPath))
-        {
-            return;
-        }
-
-        var pdfPath = PdfCommandUtilities.ResolvePath(this, PdfPath!);
-        if (!PdfCommandUtilities.ShouldWrite(this, pdfPath, "Write Word PDF"))
-        {
-            return;
-        }
-
-        PdfCommandUtilities.EnsureDirectory(pdfPath);
-        if (PdfAllowSystemFontEmbedding.IsPresent || !string.IsNullOrWhiteSpace(PdfFontFamily))
-        {
-            var pdfOptions = new WordPdfSaveOptions
-            {
-                FontFamily = PdfFontFamily
-            };
-            pdfOptions.ResourcePolicy.AllowSystemFontEmbedding = PdfAllowSystemFontEmbedding.IsPresent;
-            Document.SaveAsPdf(pdfPath, pdfOptions).RequireSuccess();
-            return;
-        }
-
-        Document.SaveAsPdf(pdfPath).RequireSuccess();
-    }
-}
+}
\ No newline at end of file
diff --git a/Sources/PSWriteOffice/Cmdlets/Word/UpdateOfficeWordTextCommand.cs b/Sources/PSWriteOffice/Cmdlets/Word/UpdateOfficeWordTextCommand.cs
index 705c105d..657980d2 100644
--- a/Sources/PSWriteOffice/Cmdlets/Word/UpdateOfficeWordTextCommand.cs
+++ b/Sources/PSWriteOffice/Cmdlets/Word/UpdateOfficeWordTextCommand.cs
@@ -10,7 +10,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 /// 
 ///   Replace text in an open document.
 ///   PS> 
-///   $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25'
+///   $count = $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -PassThru
 ///   Updates matching text in the loaded document and returns the number of replacements.
 /// 
 /// 
@@ -22,8 +22,7 @@ namespace PSWriteOffice.Cmdlets.Word;
 [Cmdlet(VerbsData.Update, "OfficeWordText", DefaultParameterSetName = ParameterSetAuto, SupportsShouldProcess = true)]
 [Alias("Replace-OfficeWordText")]
 [OutputType(typeof(int))]
-public sealed class UpdateOfficeWordTextCommand : PSCmdlet
-{
+public sealed class UpdateOfficeWordTextCommand : PSWriteOffice.Cmdlets.OfficeMutationCmdlet {
     private const string ParameterSetAuto = "Auto";
     private const string ParameterSetDocument = "Document";
     private const string ParameterSetPath = "Path";
@@ -34,8 +33,8 @@ public sealed class UpdateOfficeWordTextCommand : PSCmdlet
 
     /// Path to the .docx file to update in place.
     [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSetPath)]
-    [Alias("FilePath", "Path")]
-    public string InputPath { get; set; } = string.Empty;
+    [Alias("InputPath", "FilePath")]
+    public string Path { get; set; } = string.Empty;
 
     /// Text to find.
     [Parameter(Mandatory = true)]
@@ -68,30 +67,26 @@ public sealed class UpdateOfficeWordTextCommand : PSCmdlet
 
     /// Open the file after saving when using -Path.
     [Parameter(ParameterSetName = ParameterSetPath)]
-    public SwitchParameter Show { get; set; }
+    [Alias("Show")]
+    public SwitchParameter Open { get; set; }
 
     /// 
-    protected override void ProcessRecord()
-    {
-        if (string.IsNullOrEmpty(OldValue))
-        {
+    protected override void ProcessRecord() {
+        if (string.IsNullOrEmpty(OldValue)) {
             throw new PSArgumentException("Provide text to replace.", nameof(OldValue));
         }
 
         WordDocument? document = null;
         var dispose = false;
 
-        try
-        {
-            switch (ParameterSetName)
-            {
+        try {
+            switch (ParameterSetName) {
                 case ParameterSetDocument:
                     document = Document;
                     break;
                 case ParameterSetPath:
-                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(InputPath);
-                    if (!ShouldProcess(resolvedPath, "Update Word document text"))
-                    {
+                    var resolvedPath = SessionState.Path.GetUnresolvedProviderPathFromPSPath(Path);
+                    if (!ShouldProcess(resolvedPath, "Update Word document text")) {
                         return;
                     }
 
@@ -103,13 +98,11 @@ protected override void ProcessRecord()
                     break;
             }
 
-            if (document == null)
-            {
+            if (document == null) {
                 throw new InvalidOperationException("Specify -Document, -Path, or run inside New-OfficeWord.");
             }
 
-            if (ParameterSetName != ParameterSetPath && !ShouldProcess(GetDocumentTarget(document), "Update Word document text"))
-            {
+            if (ParameterSetName != ParameterSetPath && !ShouldProcess(GetDocumentTarget(document), "Update Word document text")) {
                 return;
             }
 
@@ -117,43 +110,34 @@ protected override void ProcessRecord()
             var replacement = NewValue ?? string.Empty;
             var replacements = document.FindAndReplace(OldValue, replacement, comparison);
 
-            if (IncludeHyperlinkText.IsPresent || IncludeHyperlinkUri.IsPresent || IncludeHyperlinkAnchor.IsPresent || IncludeHyperlinkTooltip.IsPresent)
-            {
+            if (IncludeHyperlinkText.IsPresent || IncludeHyperlinkUri.IsPresent || IncludeHyperlinkAnchor.IsPresent || IncludeHyperlinkTooltip.IsPresent) {
                 replacements += ReplaceHyperlinks(document, OldValue, replacement, comparison);
             }
 
-            if (ParameterSetName == ParameterSetPath)
-            {
-                WordDocumentService.SaveDocument(document, Show.IsPresent, null);
+            if (ParameterSetName == ParameterSetPath) {
+                WordDocumentService.SaveDocument(document, Open.IsPresent, null);
                 dispose = false;
             }
 
-            WriteObject(replacements);
-        }
-        finally
-        {
-            if (dispose && document != null)
-            {
+            WritePassThru(replacements);
+        } finally {
+            if (dispose && document != null) {
                 WordDocumentService.CloseDocument(document);
             }
         }
     }
 
-    private static string GetDocumentTarget(WordDocument document)
-    {
+    private static string GetDocumentTarget(WordDocument document) {
         return !string.IsNullOrWhiteSpace(document.FilePath)
             ? document.FilePath!
             : "Word document";
     }
 
-    private int ReplaceHyperlinks(WordDocument document, string oldValue, string newValue, StringComparison comparison)
-    {
+    private int ReplaceHyperlinks(WordDocument document, string oldValue, string newValue, StringComparison comparison) {
         var replacements = 0;
 
-        foreach (var hyperlink in document.HyperLinks)
-        {
-            if (IncludeHyperlinkText.IsPresent)
-            {
+        foreach (var hyperlink in document.HyperLinks) {
+            if (IncludeHyperlinkText.IsPresent) {
                 replacements += ReplaceTextValue(
                     hyperlink.Text,
                     updatedValue => hyperlink.Text = updatedValue,
@@ -162,8 +146,7 @@ private int ReplaceHyperlinks(WordDocument document, string oldValue, string new
                     comparison);
             }
 
-            if (IncludeHyperlinkAnchor.IsPresent)
-            {
+            if (IncludeHyperlinkAnchor.IsPresent) {
                 replacements += ReplaceNullableValue(
                     hyperlink.Anchor,
                     updatedValue => hyperlink.Anchor = updatedValue,
@@ -172,8 +155,7 @@ private int ReplaceHyperlinks(WordDocument document, string oldValue, string new
                     comparison);
             }
 
-            if (IncludeHyperlinkTooltip.IsPresent)
-            {
+            if (IncludeHyperlinkTooltip.IsPresent) {
                 replacements += ReplaceNullableValue(
                     hyperlink.Tooltip,
                     updatedValue => hyperlink.Tooltip = updatedValue,
@@ -182,18 +164,13 @@ private int ReplaceHyperlinks(WordDocument document, string oldValue, string new
                     comparison);
             }
 
-            if (IncludeHyperlinkUri.IsPresent && hyperlink.Uri != null)
-            {
+            if (IncludeHyperlinkUri.IsPresent && hyperlink.Uri != null) {
                 var originalUri = hyperlink.Uri.OriginalString;
                 var updatedUri = ReplaceString(originalUri, oldValue, newValue, comparison, out var uriReplacements);
-                if (uriReplacements > 0)
-                {
-                    if (!Uri.TryCreate(updatedUri, UriKind.RelativeOrAbsolute, out var uri))
-                    {
+                if (uriReplacements > 0) {
+                    if (!Uri.TryCreate(updatedUri, UriKind.RelativeOrAbsolute, out var uri)) {
                         WriteWarning($"Skipping hyperlink URI '{originalUri}' because replacement produced invalid URI '{updatedUri}'.");
-                    }
-                    else
-                    {
+                    } else {
                         hyperlink.Uri = uri;
                         replacements += uriReplacements;
                     }
@@ -201,10 +178,8 @@ private int ReplaceHyperlinks(WordDocument document, string oldValue, string new
             }
         }
 
-        if (IncludeHyperlinkAnchor.IsPresent)
-        {
-            foreach (var bookmark in document.Bookmarks)
-            {
+        if (IncludeHyperlinkAnchor.IsPresent) {
+            foreach (var bookmark in document.Bookmarks) {
                 replacements += ReplaceNullableValue(
                     bookmark.Name,
                     updatedValue => bookmark.Name = updatedValue,
@@ -217,45 +192,37 @@ private int ReplaceHyperlinks(WordDocument document, string oldValue, string new
         return replacements;
     }
 
-    private static int ReplaceTextValue(string currentValue, Action assign, string oldValue, string newValue, StringComparison comparison)
-    {
+    private static int ReplaceTextValue(string currentValue, Action assign, string oldValue, string newValue, StringComparison comparison) {
         var updatedValue = ReplaceString(currentValue ?? string.Empty, oldValue, newValue, comparison, out var replacements);
-        if (replacements > 0)
-        {
+        if (replacements > 0) {
             assign(updatedValue);
         }
 
         return replacements;
     }
 
-    private static int ReplaceNullableValue(string? currentValue, Action assign, string oldValue, string newValue, StringComparison comparison)
-    {
-        if (currentValue == null)
-        {
+    private static int ReplaceNullableValue(string? currentValue, Action assign, string oldValue, string newValue, StringComparison comparison) {
+        if (currentValue == null) {
             return 0;
         }
 
         var updatedValue = ReplaceString(currentValue, oldValue, newValue, comparison, out var replacements);
-        if (replacements > 0)
-        {
+        if (replacements > 0) {
             assign(updatedValue);
         }
 
         return replacements;
     }
 
-    private static string ReplaceString(string source, string oldValue, string newValue, StringComparison comparison, out int replacements)
-    {
+    private static string ReplaceString(string source, string oldValue, string newValue, StringComparison comparison, out int replacements) {
         replacements = 0;
-        if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(oldValue))
-        {
+        if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(oldValue)) {
             return source;
         }
 
         var startIndex = 0;
         var result = source;
-        while ((startIndex = result.IndexOf(oldValue, startIndex, comparison)) >= 0)
-        {
+        while ((startIndex = result.IndexOf(oldValue, startIndex, comparison)) >= 0) {
             result = result.Remove(startIndex, oldValue.Length).Insert(startIndex, newValue);
             startIndex += newValue.Length;
             replacements++;
diff --git a/Sources/PSWriteOffice/Services/Markdown/MarkdownOptionUtilities.cs b/Sources/PSWriteOffice/Services/Markdown/MarkdownOptionUtilities.cs
index 71b07825..f2a15b8a 100644
--- a/Sources/PSWriteOffice/Services/Markdown/MarkdownOptionUtilities.cs
+++ b/Sources/PSWriteOffice/Services/Markdown/MarkdownOptionUtilities.cs
@@ -163,7 +163,7 @@ internal static class MarkdownOptionUtilities
 
     internal static MarkdownPdfSaveOptions BuildPdfOptions(IMarkdownPdfOptionSource source, PSCmdlet command, string? fallbackBaseDirectory)
     {
-        var options = source.MarkdownPdfOptions ?? new MarkdownPdfSaveOptions();
+        var options = source.MarkdownPdfOptions?.Clone() ?? new MarkdownPdfSaveOptions();
 
         if (source.PdfOptions != null) options.PdfOptions = source.PdfOptions;
         if (source.PdfTheme.HasValue) options.Theme = MarkdownVisualTheme.Create(source.PdfTheme.Value);
@@ -200,8 +200,8 @@ internal static MarkdownPdfSaveOptions BuildPdfOptions(IMarkdownPdfOptionSource
 
     internal static void SetPdfResultVariables(IMarkdownPdfOptionSource source, PSCmdlet command, OfficeIMO.Pdf.PdfSaveResult result)
     {
-        SetVariable(command, source.PdfWarningVariable, result.Warnings);
-        SetVariable(command, source.PdfConversionReportVariable, result.Report);
+        PdfCommandUtilities.SetVariable(command, source.PdfWarningVariable, result.Warnings);
+        PdfCommandUtilities.SetVariable(command, source.PdfConversionReportVariable, result.Report);
     }
 
     internal static MarkdownVisualTheme CreateTheme(OfficeVisualThemeKind kind) => MarkdownVisualTheme.Create(kind);
@@ -241,13 +241,4 @@ private static string ResolveLineEnding(string value)
         };
     }
 
-    private static void SetVariable(PSCmdlet command, string? name, object? value)
-    {
-        if (string.IsNullOrWhiteSpace(name))
-        {
-            return;
-        }
-
-        command.SessionState.PSVariable.Set(name!, value);
-    }
 }
diff --git a/Sources/PSWriteOffice/Services/OpenDocument/OpenDocumentDslContext.cs b/Sources/PSWriteOffice/Services/OpenDocument/OpenDocumentDslContext.cs
new file mode 100644
index 00000000..a49de7af
--- /dev/null
+++ b/Sources/PSWriteOffice/Services/OpenDocument/OpenDocumentDslContext.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Management.Automation;
+using System.Threading;
+using OfficeIMO.OpenDocument;
+
+namespace PSWriteOffice.Services.OpenDocument;
+
+internal sealed class OpenDocumentDslContext : IDisposable {
+    private static readonly AsyncLocal CurrentScope = new();
+    private readonly Stack _scopes = new();
+
+    private OpenDocumentDslContext(OdfDocument document) {
+        Document = document ?? throw new ArgumentNullException(nameof(document));
+    }
+
+    internal OdfDocument Document { get; }
+    internal static OpenDocumentDslContext? Current => CurrentScope.Value;
+
+    internal static OpenDocumentDslContext Enter(OdfDocument document) {
+        if (CurrentScope.Value != null) {
+            throw new InvalidOperationException("An OpenDocument DSL scope is already active on this runspace.");
+        }
+
+        var context = new OpenDocumentDslContext(document);
+        CurrentScope.Value = context;
+        return context;
+    }
+
+    internal static OpenDocumentDslContext Require(PSCmdlet caller) => CurrentScope.Value
+        ?? throw new PSInvalidOperationException(
+            $"'{caller.MyInvocation.InvocationName}' requires -Document or an active New-OfficeOpenDocument -Content scope.");
+
+    internal T RequireDocument(PSCmdlet caller, string kindName) where T : OdfDocument => Document as T
+        ?? throw new PSInvalidOperationException(
+            $"'{caller.MyInvocation.InvocationName}' requires an OpenDocument {kindName} document.");
+
+    internal OdsSheet RequireSheet() => _scopes.OfType().FirstOrDefault()
+        ?? throw new PSInvalidOperationException("No OpenDocument worksheet context is active. Use Add-OfficeOpenDocumentSheet -Content first or pass -Sheet.");
+
+    internal OdpSlide RequireSlide() => _scopes.OfType().FirstOrDefault()
+        ?? throw new PSInvalidOperationException("No OpenDocument slide context is active. Use Add-OfficeOpenDocumentSlide -Content first or pass -Slide.");
+
+    internal IDisposable Push(object scope) {
+        _scopes.Push(scope ?? throw new ArgumentNullException(nameof(scope)));
+        return new PopToken(this, scope);
+    }
+
+    public void Dispose() {
+        if (CurrentScope.Value == this) CurrentScope.Value = null;
+        _scopes.Clear();
+    }
+
+    private void Pop(object scope) {
+        if (_scopes.Count > 0 && ReferenceEquals(_scopes.Peek(), scope)) _scopes.Pop();
+    }
+
+    private sealed class PopToken : IDisposable {
+        private OpenDocumentDslContext? _context;
+        private readonly object _scope;
+
+        internal PopToken(OpenDocumentDslContext context, object scope) {
+            _context = context;
+            _scope = scope;
+        }
+
+        public void Dispose() {
+            _context?.Pop(_scope);
+            _context = null;
+        }
+    }
+}
diff --git a/Sources/PSWriteOffice/Services/Pdf/PdfCommandUtilities.cs b/Sources/PSWriteOffice/Services/Pdf/PdfCommandUtilities.cs
index dd16c553..b2266ca9 100644
--- a/Sources/PSWriteOffice/Services/Pdf/PdfCommandUtilities.cs
+++ b/Sources/PSWriteOffice/Services/Pdf/PdfCommandUtilities.cs
@@ -79,6 +79,14 @@ internal static bool ShouldWrite(PSCmdlet cmdlet, string path, string action)
         return cmdlet.ShouldProcess(path, action);
     }
 
+    internal static void SetVariable(PSCmdlet cmdlet, string? name, object? value)
+    {
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            cmdlet.SessionState.PSVariable.Set(name!, value);
+        }
+    }
+
     internal static string GetSafeFileName(string fileName)
     {
         var invalid = Path.GetInvalidFileNameChars();
diff --git a/Sources/PSWriteOffice/Services/PowerPoint/PowerPointDocumentService.cs b/Sources/PSWriteOffice/Services/PowerPoint/PowerPointDocumentService.cs
index 25b47b72..0328c7fc 100644
--- a/Sources/PSWriteOffice/Services/PowerPoint/PowerPointDocumentService.cs
+++ b/Sources/PSWriteOffice/Services/PowerPoint/PowerPointDocumentService.cs
@@ -129,14 +129,18 @@ public static string SavePresentation(PowerPointPresentation presentation, bool
     }
 
     /// Closes a presentation, optionally saving and opening it first.
-    public static void ClosePresentation(PowerPointPresentation presentation, bool save, bool show, string? password = null)
+    public static void ClosePresentation(PowerPointPresentation presentation, bool save, bool show, string? password = null) =>
+        ClosePresentation(presentation, save, show, password, filePath: null);
+
+    /// Closes a presentation, optionally saving to a new path and opening it first.
+    public static void ClosePresentation(PowerPointPresentation presentation, bool save, bool show, string? password, string? filePath)
     {
         if (presentation == null) throw new ArgumentNullException(nameof(presentation));
         EnsureExternalPresentationUsesExplicitPersistence(presentation);
         string? savedPath = null;
         if (save || show)
         {
-            savedPath = SavePresentation(presentation, show: false, password, filePath: null);
+            savedPath = SavePresentation(presentation, show: false, password, filePath);
         }
 
         try
diff --git a/Tests/Csv.Tests.ps1 b/Tests/Csv.Tests.ps1
index 56236232..75f32470 100644
--- a/Tests/Csv.Tests.ps1
+++ b/Tests/Csv.Tests.ps1
@@ -1431,7 +1431,7 @@ Describe 'CSV cmdlets' {
         $path = Join-Path $TestDrive 'input-path-alias.csv'
         Set-Content -LiteralPath $path -Value "Name,Value`nAlpha,1" -Encoding UTF8
 
-        $document = Get-OfficeCsv -InputPath $path
+        $document = Get-OfficeCsv -Path $path
 
         $document.Header | Should -Be @('Name', 'Value')
         $document.AsEnumerable().Count | Should -Be 1
diff --git a/Tests/ExampleScripts.Tests.ps1 b/Tests/ExampleScripts.Tests.ps1
index 7a7f8d6f..e4ed20e7 100644
--- a/Tests/ExampleScripts.Tests.ps1
+++ b/Tests/ExampleScripts.Tests.ps1
@@ -35,8 +35,12 @@ Describe 'Repository example scripts' {
     It 'keeps recipe  focused on the document workflow' -ForEach $recipeCases {
         $content = Get-Content -LiteralPath $Path -Raw
 
-        $content | Should -Not -Match '\A\s*param\s*\('
-        $content | Should -Not -Match '(?m)^\s*(\$ErrorActionPreference\s*=|Import-Module\b|New-Item\b)'
+        $isIntegrationRecipe = $RelativePath -match '^Examples[\\/]Integrations[\\/]'
+        if (-not $isIntegrationRecipe) {
+            $content | Should -Not -Match '\A\s*param\s*\('
+            $content | Should -Not -Match '(?m)^\s*(Import-Module\b)'
+        }
+        $content | Should -Not -Match '(?m)^\s*(\$ErrorActionPreference\s*=|New-Item\b)'
         $content | Should -Not -Match '\b(Out-Null|Write-Host|Format-List)\b'
         $content | Should -Not -Match '\[Array\]::CreateInstance|\.Dispose\(\)'
     }
diff --git a/Tests/ExcelDsl.Tests.ps1 b/Tests/ExcelDsl.Tests.ps1
index 3e412a3f..751ec274 100644
--- a/Tests/ExcelDsl.Tests.ps1
+++ b/Tests/ExcelDsl.Tests.ps1
@@ -841,10 +841,6 @@ Describe 'Excel DSL surface' {
         }
 
         { Get-ZipEntriesLocal -Path $path } | Should -Throw
-        $autoSavePath = Join-Path $TestDrive 'EncryptedExcelAutoSave.xlsx'
-        { New-OfficeExcel -Path $autoSavePath -Password 'secret' -AutoSave -ErrorAction Stop } |
-            Should -Throw '*require explicit Save-OfficeExcel*'
-
         $doc = Get-OfficeExcel -Path $path -Password 'secret' -ReadOnly
         try {
             $doc.Sheets[0].Name | Should -Be 'Secure'
@@ -927,8 +923,7 @@ Describe 'Excel DSL surface' {
             Close-OfficeExcel -Document $doc
         }
 
-        { Get-OfficeExcel -Path $path -Password 'secret' -AutoSave -ErrorAction Stop } |
-            Should -Throw '*require explicit Save-OfficeExcel*'
+        (Get-Command Get-OfficeExcel).Parameters.Keys | Should -Not -Contain 'AutoSave'
     }
 
     It 'clears encrypted workbook associations after HTML conversion' {
@@ -3119,7 +3114,7 @@ Describe 'Excel DSL surface' {
         $script:PowerQueryContextMetadata.AddedWorksheetQueryTable | Should -BeTrue
         $script:PowerQueryContextMetadata.QueryTableName | Should -Be 'ContextQueryTable'
 
-        $dataModel = Get-OfficeExcelDataModel -InputPath $path
+        $dataModel = Get-OfficeExcelDataModel -Path $path
         $dataModel.HasDataModelOrQueries | Should -BeTrue
     }
 
@@ -3769,9 +3764,9 @@ Describe 'Excel DSL surface' {
             }
         }
 
-        Copy-OfficeExcelSheet -Path $path -SourceSheet 'Data' -NewName 'DataCopy' | Should -Not -BeNullOrEmpty
+        Copy-OfficeExcelSheet -Path $path -SourceSheet 'Data' -NewName 'DataCopy' -PassThru | Should -Not -BeNullOrEmpty
         Move-OfficeExcelSheet -Path $path -Sheet 'DataCopy' -Index 0
-        Copy-OfficeExcelSheet -Path $path -SourcePath $sourcePath -SourceSheet 'External' -NewName 'ExternalCopy' -CopyMode Package | Should -Not -BeNullOrEmpty
+        Copy-OfficeExcelSheet -Path $path -SourcePath $sourcePath -SourceSheet 'External' -NewName 'ExternalCopy' -CopyMode Package -PassThru | Should -Not -BeNullOrEmpty
         $join = Join-OfficeExcelSheet -Path $path -TargetSheet 'Data' -SourceSheet 'More' -MatchColumnsByHeader
         Set-OfficeExcelPrintArea -Path $path -Sheet 'Data' -Range 'A1:B4'
         Set-OfficeExcelPrintTitles -Path $path -Sheet 'Data' -FirstRow 1 -LastRow 1
@@ -3852,8 +3847,8 @@ Describe 'Excel DSL surface' {
         $numericMatch.Count | Should -Be 1
         $numericMatch[0].Value | Should -BeOfType ([double])
         $numericMatch[0].Value | Should -Be 12
-        Update-OfficeExcelText -Path $path -Sheet 'Data' -OldValue 'Draft' -NewValue 'Ready' | Should -Be 2
-        Update-OfficeExcelText -Path $path -Sheet 'Data' -OldValue '12' -NewValue 'Twelve' | Should -Be 0
+        Update-OfficeExcelText -Path $path -Sheet 'Data' -OldValue 'Draft' -NewValue 'Ready' -PassThru | Should -Be 2
+        Update-OfficeExcelText -Path $path -Sheet 'Data' -OldValue '12' -NewValue 'Twelve' -PassThru | Should -Be 0
         Edit-OfficeExcelRow -Path $path -Sheet 'Data' -ScriptBlock {
             param($row)
             if ($row.CellByHeader('Name').Value -eq 'Ada') {
@@ -3882,7 +3877,7 @@ Describe 'Excel DSL surface' {
         $matches.Count | Should -Be 2
         @($matches | ForEach-Object { $_.Address }) | Should -Contain 'A1'
         @($matches | ForEach-Object { $_.Address }) | Should -Contain 'XFD1048576'
-        Update-OfficeExcelText -Path $path -Sheet 'Data' -OldValue 'Draft' -NewValue 'Ready' | Should -Be 2
+        Update-OfficeExcelText -Path $path -Sheet 'Data' -OldValue 'Draft' -NewValue 'Ready' -PassThru | Should -Be 2
     }
 
     It 'counts threaded comments in workbook summaries' {
@@ -4129,9 +4124,9 @@ Describe 'Excel DSL surface' {
                 Add-OfficeExcelTable -InputObject $rows -TableName 'Sales' -AutoFit
                 $chart = Add-OfficeExcelChart -TableName 'Sales' -Row 6 -Column 1 -Type Pie -Title 'Revenue Mix' -PassThru
                 $formattedChart = $chart |
-                    Set-OfficeExcelChartLegend -Position Right |
-                    Set-OfficeExcelChartDataLabels -ShowValue $true -ShowPercent $true -Position OutsideEnd -NumberFormat '0.0%' -SourceLinked:$false |
-                    Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10
+                    Set-OfficeExcelChartLegend -Position Right -PassThru |
+                    Set-OfficeExcelChartDataLabels -ShowValue $true -ShowPercent $true -Position OutsideEnd -NumberFormat '0.0%' -SourceLinked:$false -PassThru |
+                    Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 -PassThru
 
                 $formattedChart | Should -Not -BeNullOrEmpty
             }
@@ -4174,10 +4169,10 @@ Describe 'Excel DSL surface' {
                 { $chart | Set-OfficeExcelChartPoint -SeriesIndex 0 -PointIndex 1 -LineWidthPoints 1.5 -ErrorAction Stop } |
                     Should -Throw '*LineColor is required*'
                 $formattedChart = $chart |
-                    Set-OfficeExcelChartAxis -CategoryTitle 'Month' -ValueTitle 'Revenue' -ValueNumberFormat '$#,##0' -SourceLinked:$false -ValueMinimum 0 -ValueMajorUnit 100 -ShowValueMinorGridlines -ValueGridlineColor '#D9EAD3' -GridlineWidthPoints 0.75 |
-                    Set-OfficeExcelChartSeries -SeriesIndex 0 -LineColor '#1F4E79' -LineWidthPoints 1.5 -MarkerStyle Circle -MarkerSize 6 -MarkerFillColor '#4472C4' |
-                    Set-OfficeExcelChartPoint -SeriesName 'Revenue' -PointIndex 1 -FillColor '#70AD47' -LineColor '#7030A0' -LineWidthPoints 1.25 |
-                    Set-OfficeExcelChartTrendline -SeriesIndex 0 -Type Linear -DisplayEquation -DisplayRSquared -LineColor '#C00000' -LineWidthPoints 1.25
+                    Set-OfficeExcelChartAxis -CategoryTitle 'Month' -ValueTitle 'Revenue' -ValueNumberFormat '$#,##0' -SourceLinked:$false -ValueMinimum 0 -ValueMajorUnit 100 -ShowValueMinorGridlines -ValueGridlineColor '#D9EAD3' -GridlineWidthPoints 0.75 -PassThru |
+                    Set-OfficeExcelChartSeries -SeriesIndex 0 -LineColor '#1F4E79' -LineWidthPoints 1.5 -MarkerStyle Circle -MarkerSize 6 -MarkerFillColor '#4472C4' -PassThru |
+                    Set-OfficeExcelChartPoint -SeriesName 'Revenue' -PointIndex 1 -FillColor '#70AD47' -LineColor '#7030A0' -LineWidthPoints 1.25 -PassThru |
+                    Set-OfficeExcelChartTrendline -SeriesIndex 0 -Type Linear -DisplayEquation -DisplayRSquared -LineColor '#C00000' -LineWidthPoints 1.25 -PassThru
 
                 $formattedChart | Should -Not -BeNullOrEmpty
             }
diff --git a/Tests/ExcelImageExport.Tests.ps1 b/Tests/ExcelImageExport.Tests.ps1
index 9fdb9647..123984c2 100644
--- a/Tests/ExcelImageExport.Tests.ps1
+++ b/Tests/ExcelImageExport.Tests.ps1
@@ -29,7 +29,7 @@ Describe 'Excel image export cmdlets' {
             }
         } | Out-Null
 
-        $result = Export-OfficeExcelRangeImage -Path $workbookPath -WorksheetName Data -Range A1:B2 -OutputPath $outputPath
+        $result = Export-OfficeExcelRangeImage -Path $workbookPath -WorksheetName Data -Range A1:B2 -OutputPath $outputPath -PassThru
 
         Test-Path -LiteralPath $outputPath | Should -BeTrue
         $result.SavedPath | Should -Be ([System.IO.Path]::GetFullPath($outputPath))
@@ -50,7 +50,7 @@ Describe 'Excel image export cmdlets' {
             }
         } | Out-Null
 
-        $result = Export-OfficeExcelChartImage -Path $workbookPath -WorksheetName Data -ChartName $script:exportChartName -OutputPath $outputPath
+        $result = Export-OfficeExcelChartImage -Path $workbookPath -WorksheetName Data -ChartName $script:exportChartName -OutputPath $outputPath -PassThru
 
         Test-Path -LiteralPath $outputPath | Should -BeTrue
         $result.SavedPath | Should -Be ([System.IO.Path]::GetFullPath($outputPath))
diff --git a/Tests/Markdown.Tests.ps1 b/Tests/Markdown.Tests.ps1
index ca32deb7..d04251ff 100644
--- a/Tests/Markdown.Tests.ps1
+++ b/Tests/Markdown.Tests.ps1
@@ -250,18 +250,16 @@ Describe 'Markdown cmdlets' {
         ($doc2.ToMarkdown() | Select-String -Pattern 'Alpha' -AllMatches).Matches.Count | Should -Be 1
     }
 
-    It 'does not save Markdown or PDF sidecars when NoSave is used' {
+    It 'returns an in-memory Markdown document when NoSave is used' {
         $path = Join-Path $TestDrive 'NoSave.md'
-        $pdfPath = Join-Path $TestDrive 'NoSave.pdf'
 
-        $document = New-OfficeMarkdown -Path $path -PdfPath $pdfPath -NoSave {
+        $document = New-OfficeMarkdown -Path $path -NoSave {
             MarkdownHeading -Level 1 -Text 'Draft'
         }
 
         $document.GetType().FullName | Should -Be 'OfficeIMO.Markdown.MarkdownDoc'
         $document.ToMarkdown() | Should -Match '# Draft'
         Test-Path $path | Should -BeFalse
-        Test-Path $pdfPath | Should -BeFalse
     }
 
     It 'builds advanced Markdown blocks via DSL helpers' {
diff --git a/Tests/OfficeIMONextSupport.Tests.ps1 b/Tests/OfficeIMONextSupport.Tests.ps1
index 779f9bb9..e9f1ef73 100644
--- a/Tests/OfficeIMONextSupport.Tests.ps1
+++ b/Tests/OfficeIMONextSupport.Tests.ps1
@@ -106,6 +106,24 @@ Describe 'Expanded OfficeIMO support' {
         Test-Path -LiteralPath $brokenLatexOutput | Should -BeFalse
     }
 
+    It 'exposes writer modes and line endings as ordinary PowerShell parameters' {
+        $asciiSource = Join-Path $TestDrive 'writer-source.adoc'
+        $asciiOutput = Join-Path $TestDrive 'writer-output.adoc'
+        [System.IO.File]::WriteAllText($asciiSource, "= Title`n`nBody")
+        Get-OfficeAsciiDoc -Path $asciiSource |
+            Save-OfficeAsciiDoc -Path $asciiOutput -Mode Canonical -LineEnding CRLF
+        [System.IO.File]::ReadAllText($asciiOutput) | Should -Match "`r`n"
+
+        $latexSource = Join-Path $TestDrive 'writer-source.tex'
+        $latexOutput = Join-Path $TestDrive 'writer-output.tex'
+        [System.IO.File]::WriteAllText($latexSource, "\\documentclass{article}`n\\begin{document}`nBody`n\\end{document}")
+        Get-OfficeLatex -Path $latexSource |
+            Save-OfficeLatex -Path $latexOutput -Mode Canonical -LineEnding LF
+        $latexText = [System.IO.File]::ReadAllText($latexOutput)
+        $latexText | Should -Match "`n"
+        $latexText | Should -Not -Match "`r`n"
+    }
+
     It 'creates and reloads native ODT, ODS, and ODP packages' {
         $cases = @(
             @{ Kind = 'Text'; Extension = 'odt'; Type = 'OfficeIMO.OpenDocument.OdtDocument' },
@@ -116,17 +134,75 @@ Describe 'Expanded OfficeIMO support' {
         foreach ($case in $cases) {
             $path = Join-Path $TestDrive "native.$($case.Extension)"
             $document = New-OfficeOpenDocument -Kind $case.Kind
-            $save = $document | Save-OfficeOpenDocument -Path $path -FailOnLoss
+            $save = $document | Save-OfficeOpenDocument -Path $path -FailOnLoss -PassThru
             $save.HasLoss | Should -BeFalse
             Test-Path -LiteralPath $path | Should -BeTrue
             (Get-OfficeOpenDocument -Path $path).GetType().FullName | Should -Be $case.Type
         }
+
+        { Get-OfficeOpenDocument -Path $path -MaxPackageBytes 1 -ErrorAction Stop } |
+            Should -Throw '*package*'
+    }
+
+    It 'authors ODT, ODS, and ODP content through PowerShell-native DSL and object surfaces' {
+        $textPath = Join-Path $TestDrive 'authored.odt'
+        New-OfficeOpenDocument -Kind Text -Path $textPath -Content {
+            Add-OfficeOpenDocumentHeading -Text 'Service report' -Level 1
+            Add-OfficeOpenDocumentParagraph -Text 'PowerShell-native OpenDocument text.'
+        }
+        $text = Get-OfficeOpenDocument -Path $textPath
+        $text.Paragraphs.Text | Should -Contain 'Service report'
+        $text.Paragraphs.Text | Should -Contain 'PowerShell-native OpenDocument text.'
+
+        $spreadsheetPath = Join-Path $TestDrive 'authored.ods'
+        New-OfficeOpenDocument -Kind Spreadsheet -Path $spreadsheetPath -Content {
+            Add-OfficeOpenDocumentSheet -Name 'Services' -Content {
+                Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Service'
+                Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value 'Healthy'
+                Set-OfficeOpenDocumentCell -Row 1 -Column 0 -Value 'Directory'
+                Set-OfficeOpenDocumentCell -Row 1 -Column 1 -Value $true
+            }
+        }
+        $spreadsheet = Get-OfficeOpenDocument -Path $spreadsheetPath
+        $spreadsheet.GetSheet('Services').Cell(1, 1).Value.AsBoolean() | Should -BeTrue
+
+        $presentationPath = Join-Path $TestDrive 'authored.odp'
+        New-OfficeOpenDocument -Kind Presentation -Path $presentationPath -Content {
+            Add-OfficeOpenDocumentSlide -Name 'Overview' -Content {
+                Add-OfficeOpenDocumentTextBox -Text 'Quarterly review' -X 1 -Y 1 -Width 20 -Height 3
+            }
+        }
+        $presentation = Get-OfficeOpenDocument -Path $presentationPath
+        $presentation.Slides | Should -HaveCount 1
+        $presentation.Slides[0].Shapes | Should -HaveCount 1
+
+        $objectSpreadsheet = New-OfficeOpenDocument -Kind Spreadsheet
+        $sheet = $objectSpreadsheet | Add-OfficeOpenDocumentSheet -Name 'Object' -PassThru
+        $cell = $sheet | Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 42 -PassThru
+        $cell.Value.AsDouble() | Should -Be 42
+
+        $numericValues = @([sbyte]-7, [uint16]8, [uint32]9, [uint64]10)
+        for ($column = 0; $column -lt $numericValues.Count; $column++) {
+            $numericCell = $sheet | Set-OfficeOpenDocumentCell -Row 1 -Column $column -Value $numericValues[$column] -PassThru
+            $numericCell.Value.AsDouble() | Should -Be ([double]$numericValues[$column])
+        }
     }
 
     It 'protects OpenDocument destinations and validates conversion extensions' {
         $whatIfPath = Join-Path $TestDrive 'what-if.odt'
-        New-OfficeOpenDocument -Kind Text -Path $whatIfPath -WhatIf | Out-Null
+        $script:OpenDocumentWhatIfDslRan = $false
+        New-OfficeOpenDocument -Kind Text -Path $whatIfPath -WhatIf -Content {
+            $script:OpenDocumentWhatIfDslRan = $true
+        } | Out-Null
         Test-Path -LiteralPath $whatIfPath | Should -BeFalse
+        $script:OpenDocumentWhatIfDslRan | Should -BeFalse
+
+        $script:OpenDocumentInvalidExtensionDslRan = $false
+        $invalidDslPath = Join-Path $TestDrive 'invalid-content.ods'
+        { New-OfficeOpenDocument -Kind Text -Path $invalidDslPath -Content {
+                $script:OpenDocumentInvalidExtensionDslRan = $true
+            } -ErrorAction Stop } | Should -Throw '*must use the .odt extension*'
+        $script:OpenDocumentInvalidExtensionDslRan | Should -BeFalse
 
         $signedPath = Join-Path $TestDrive 'signed.odt'
         New-OfficeOpenDocument -Kind Text -Path $signedPath | Out-Null
@@ -181,6 +257,22 @@ Describe 'Expanded OfficeIMO support' {
     }
 
     It 'round-trips EML, EMLX, MSG, TNEF, and mbox artifacts' {
+        $readerOptions = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -PreserveRawSource -MaxAttachmentBytes 25MB
+        $readerOptions.IncludeAttachmentContent | Should -BeFalse
+        $readerOptions.PreserveRawSource | Should -BeTrue
+        $readerOptions.MaxAttachmentBytes | Should -Be 25MB
+        $writerOptions = New-OfficeEmailWriterOptions -IncludeBccHeader -Base64LineLength 80
+        $writerOptions.IncludeBccHeader | Should -BeTrue
+        $mailboxReaderOptions = $readerOptions | New-OfficeEmailMailboxReaderOptions -MaxMessageCount 250
+        [object]::ReferenceEquals($mailboxReaderOptions.MessageOptions, $readerOptions) | Should -BeTrue
+        $mailboxReaderOptions.MaxMessageCount | Should -Be 250
+        $mailboxWriterOptions = $writerOptions | New-OfficeEmailMailboxWriterOptions
+        [object]::ReferenceEquals($mailboxWriterOptions.MessageOptions, $writerOptions) | Should -BeTrue
+        $storeOptions = New-OfficeEmailStoreReaderOptions -ExcludeAttachmentContent -MaxItemCount 250
+        $storeOptions.RetainAttachmentContent | Should -BeFalse
+        $storeOptions.MaxItemCount | Should -Be 250
+        { New-OfficeEmailWriterOptions -Base64LineLength 78 -ErrorAction Stop } | Should -Throw '*multiple of four*'
+
         $emailDocumentType = Get-TestPSWriteOfficeType -AssemblyName 'OfficeIMO.Email' -TypeName 'OfficeIMO.Email.EmailDocument' -CommandName 'Save-OfficeEmail'
         $emailAddressType = Get-TestPSWriteOfficeType -AssemblyName 'OfficeIMO.Email' -TypeName 'OfficeIMO.Email.EmailAddress' -CommandName 'Save-OfficeEmail'
         $emailMailboxType = Get-TestPSWriteOfficeType -AssemblyName 'OfficeIMO.Email' -TypeName 'OfficeIMO.Email.EmailMailbox' -CommandName 'Save-OfficeEmailMailbox'
@@ -191,13 +283,17 @@ Describe 'Expanded OfficeIMO support' {
         $message.Body.Text = 'OfficeIMO email body'
         $message.Properties['Emlx:Flag:Flagged'] = $true
 
+        $quietEmailPath = Join-Path $TestDrive 'quiet-message.eml'
+        @($message | Save-OfficeEmail -Path $quietEmailPath) | Should -HaveCount 0
+        Test-Path -LiteralPath $quietEmailPath | Should -BeTrue
+
         foreach ($extension in 'eml', 'emlx', 'msg', 'dat') {
             $path = Join-Path $TestDrive "message.$extension"
             $format = if ($extension -eq 'dat') { 'Tnef' } else { $null }
             $result = if ($format) {
-                $message | Save-OfficeEmail -Path $path -Format $format
+                $message | Save-OfficeEmail -Path $path -Format $format -PassThru
             } else {
-                $message | Save-OfficeEmail -Path $path
+                $message | Save-OfficeEmail -Path $path -PassThru
             }
             $result.GetType().FullName | Should -Be 'OfficeIMO.Email.EmailWriteResult'
             Test-Path -LiteralPath $path | Should -BeTrue
@@ -223,7 +319,8 @@ Describe 'Expanded OfficeIMO support' {
         $mailbox = [Activator]::CreateInstance($emailMailboxType)
         $mailbox.Messages.Add([Activator]::CreateInstance($emailMailboxEntryType, @($message)))
         $mailboxPath = Join-Path $TestDrive 'mailbox.mbox'
-        $mailboxResult = $mailbox | Save-OfficeEmailMailbox -Path $mailboxPath
+        @($mailbox | Save-OfficeEmailMailbox -Path $mailboxPath) | Should -HaveCount 0
+        $mailboxResult = $mailbox | Save-OfficeEmailMailbox -Path $mailboxPath -PassThru
         $mailboxResult.GetType().FullName | Should -Be 'OfficeIMO.Email.EmailWriteResult'
         (Get-OfficeEmailMailbox -Path $mailboxPath).Messages.Count | Should -Be 1
     }
@@ -238,13 +335,17 @@ Describe 'Expanded OfficeIMO support' {
         New-OfficePowerPoint -Path $powerPointPath { PptSlide { PptTitle -Title 'PowerPoint image' } } | Out-Null
         New-OfficePdf -Path $pdfPath { PdfParagraph 'PDF image' } | Out-Null
 
+        $quietImagePath = Join-Path $TestDrive 'word-quiet.svg'
+        @(Export-OfficeWordImage -Path $wordPath -OutputPath $quietImagePath -Format Svg) | Should -HaveCount 0
+        Test-Path -LiteralPath $quietImagePath | Should -BeTrue
+
         $results = @(
-            Export-OfficeWordImage -Path $wordPath -OutputPath (Join-Path $TestDrive 'word.svg') -Format Svg
-            Export-OfficeExcelImage -Path $excelPath -OutputPath (Join-Path $TestDrive 'excel-images') -Format Svg
-            Export-OfficePowerPointImage -Path $powerPointPath -OutputPath (Join-Path $TestDrive 'ppt-images') -Format Svg
-            Export-OfficeHtmlImage -Html '

HTML image

' -OutputPath (Join-Path $TestDrive 'html.svg') -Format Svg - Export-OfficePdfImage -Path $pdfPath -OutputPath (Join-Path $TestDrive 'pdf-images') -Format Svg - Export-OfficePdfImage -Path $pdfPath -OutputPath (Join-Path $TestDrive 'pdf-webp-images') -Format Webp + Export-OfficeWordImage -Path $wordPath -OutputPath (Join-Path $TestDrive 'word.svg') -Format Svg -PassThru + Export-OfficeExcelImage -Path $excelPath -OutputPath (Join-Path $TestDrive 'excel-images') -Format Svg -PassThru + Export-OfficePowerPointImage -Path $powerPointPath -OutputPath (Join-Path $TestDrive 'ppt-images') -Format Svg -PassThru + Export-OfficeHtmlImage -Html '

HTML image

' -OutputPath (Join-Path $TestDrive 'html.svg') -Format Svg -PassThru + Export-OfficePdfImage -Path $pdfPath -OutputPath (Join-Path $TestDrive 'pdf-images') -Format Svg -PassThru + Export-OfficePdfImage -Path $pdfPath -OutputPath (Join-Path $TestDrive 'pdf-webp-images') -Format Webp -PassThru ) $results.Count | Should -BeGreaterOrEqual 5 @@ -258,12 +359,58 @@ Describe 'Expanded OfficeIMO support' { $htmlLines = @('', '

Pipeline heading

Pipeline body

', '') $pipelineHtmlPath = Join-Path $TestDrive 'pipeline-html.svg' - $pipelineHtml = @($htmlLines | Export-OfficeHtmlImage -OutputPath $pipelineHtmlPath -Format Svg) + $pipelineHtml = @($htmlLines | Export-OfficeHtmlImage -OutputPath $pipelineHtmlPath -Format Svg -PassThru) $pipelineHtml | Should -HaveCount 1 $pipelineHtml[0].GetType().FullName | Should -Be 'OfficeIMO.Drawing.OfficeImageExportResult' Test-Path -LiteralPath $pipelineHtmlPath | Should -BeTrue } + It 'writes the requested Word and HTML raster formats and exports Word page batches' { + $wordPath = Join-Path $TestDrive 'format-images.docx' + New-OfficeWord -Path $wordPath { + WordParagraph { + WordText 'First page' + WordBreak -BreakType Page + WordText 'Second page' + } + } | Out-Null + + foreach ($format in 'Jpeg', 'Tiff', 'Webp') { + $extension = if ($format -eq 'Jpeg') { 'jpg' } else { $format.ToLowerInvariant() } + $wordResult = Export-OfficeWordImage -Path $wordPath -OutputPath (Join-Path $TestDrive "word.$extension") -Format $format -PassThru + $htmlResult = Export-OfficeHtmlImage -Html '

Format contract

' -OutputPath (Join-Path $TestDrive "html.$extension") -Format $format -PassThru + + foreach ($result in $wordResult, $htmlResult) { + $result.Format.ToString() | Should -Be $format + Test-Path -LiteralPath $result.SavedPath | Should -BeTrue + $bytes = [System.IO.File]::ReadAllBytes($result.SavedPath) + switch ($format) { + Jpeg { + ($bytes[0..2] -join ',') | Should -Be '255,216,255' + } + Tiff { + $littleEndian = @($bytes[0], $bytes[1], $bytes[2], $bytes[3]) -join ',' + $littleEndian -in '73,73,42,0', '77,77,0,42' | Should -BeTrue + } + Webp { + [System.Text.Encoding]::ASCII.GetString($bytes, 0, 4) | Should -Be 'RIFF' + [System.Text.Encoding]::ASCII.GetString($bytes, 8, 4) | Should -Be 'WEBP' + } + } + } + } + + $batchOptions = New-OfficeWordImageOptions -PageIndex 0 -PageCount 2 + $batchFolder = Join-Path $TestDrive 'word-pages' + $batch = @(Export-OfficeWordImage -Path $wordPath -OutputPath $batchFolder -Format Svg -Options $batchOptions -PassThru) + $batch | Should -HaveCount 2 + $batch[0].SequenceIndex | Should -Be 0 + $batch[1].SequenceIndex | Should -Be 1 + $batch[0].SequenceCount | Should -Be 2 + $batch[1].SequenceCount | Should -Be 2 + $batch | ForEach-Object { Test-Path -LiteralPath $_.SavedPath | Should -BeTrue } + } + It 'releases path-loaded PowerPoint presentations after image export' { $powerPointPath = Join-Path $TestDrive 'transient.pptx' New-OfficePowerPoint -Path $powerPointPath { PptSlide { PptTitle -Title 'Transient' } } | Out-Null @@ -330,7 +477,7 @@ Describe 'Expanded OfficeIMO support' { Test-Path -LiteralPath $safePath | Should -BeTrue (Export-OfficePdfXfdf -Path $pdfPath) | Should -Match 'Ada<', '>Imported<' Import-OfficePdfXfdf -Path $source -Xfdf $xfdf -OutputPath $imported ` @@ -186,7 +186,7 @@ Describe 'Authenticated PDF automation' { } | Out-Null Set-OfficePdfMetadata -Path $source -OutputPath $metadata -Title 'Authenticated metadata' ` - -Password 'open' -IgnorePermissionRestrictions | Should -BeOfType System.IO.FileInfo + -Password 'open' -IgnorePermissionRestrictions -PassThru | Should -BeOfType System.IO.FileInfo $sanitization = ConvertTo-OfficePdfSanitized -Path $source -OutputPath $sanitized ` -Password 'open' -IgnorePermissionRestrictions @@ -245,7 +245,7 @@ Describe 'General existing-page visual stamping' { } -Content { param($canvas, $page) $null = $canvas.Text("Canvas overlay $($page.PageNumber)/$($page.PageCount)", 36, 36, $page.Width - 72, 24, 11) - } | Should -BeOfType System.IO.FileInfo + } -PassThru | Should -BeOfType System.IO.FileInfo $configured | Should -HaveCount 1 $pages = @(Get-OfficePdfText -Path $output -ByPage) @@ -267,7 +267,7 @@ Describe 'General existing-page visual stamping' { ) -X 36 -Y 24 -FontSize 10 PdfCanvasText 'Review copy' -X 36 -Y 60 -Italic - } | Should -BeOfType System.IO.FileInfo + } -PassThru | Should -BeOfType System.IO.FileInfo $text = Get-OfficePdfText -Path $output $text | Should -Match 'Owner: Platform' @@ -308,9 +308,9 @@ Describe 'General existing-page visual stamping' { } | Out-Null Add-OfficePdfPageOverlay -Path $target -SourcePath $source -SourcePageNumber 2 ` - -PageRange 2 -OutputPath $overlay | Should -BeOfType System.IO.FileInfo + -PageRange 2 -OutputPath $overlay -PassThru | Should -BeOfType System.IO.FileInfo Add-OfficePdfPageOverlay -Path $target -SourcePath $source -SourcePageNumber 1 ` - -PageRange 1 -Underlay -OutputPath $underlay | Should -BeOfType System.IO.FileInfo + -PageRange 1 -Underlay -OutputPath $underlay -PassThru | Should -BeOfType System.IO.FileInfo $overlayPages = @(Get-OfficePdfText -Path $overlay -ByPage) $overlayPages[0].Text | Should -Not -Match 'Source page two' diff --git a/Tests/PdfFormsAndStamps.Tests.ps1 b/Tests/PdfFormsAndStamps.Tests.ps1 index 48dcd11b..cfe96573 100644 --- a/Tests/PdfFormsAndStamps.Tests.ps1 +++ b/Tests/PdfFormsAndStamps.Tests.ps1 @@ -29,7 +29,7 @@ Describe 'PDF forms and stamps' { CustomerName = 'Alice Example' Plan = 'Premium' Regions = 'EU' - } -Flatten | Should -BeOfType System.IO.FileInfo + } -Flatten -PassThru | Should -BeOfType System.IO.FileInfo $preflight = Get-OfficePdfPreflight -Path $filledPath $preflight.CanRead | Should -BeTrue @@ -46,7 +46,7 @@ Describe 'PDF forms and stamps' { $filledPath = Join-Path $TestDrive 'nested\filled.pdf' Set-OfficePdfForm -Path $formPath -OutputPath $filledPath -Field @{ CustomerName = 'Alice Example' - } | Should -BeOfType System.IO.FileInfo + } -PassThru | Should -BeOfType System.IO.FileInfo Test-Path $filledPath | Should -BeTrue (Get-OfficePdfPreflight -Path $filledPath).CanRead | Should -BeTrue @@ -62,7 +62,7 @@ Describe 'PDF forms and stamps' { $filledPath = Join-Path $TestDrive 'appearance-filled.pdf' Set-OfficePdfForm -Path $formPath -OutputPath $filledPath -Field @{ CustomerName = 'Alice Example' - } | Should -BeOfType System.IO.FileInfo + } -PassThru | Should -BeOfType System.IO.FileInfo $info = Get-OfficePdfInfo -Path $filledPath $raw = [System.Text.Encoding]::ASCII.GetString([System.IO.File]::ReadAllBytes($filledPath)) @@ -81,7 +81,7 @@ Describe 'PDF forms and stamps' { $filledPath = Join-Path $TestDrive 'legacy-appearance-filled.pdf' Set-OfficePdfForm -Path $formPath -OutputPath $filledPath -Field @{ CustomerName = 'Alice Example' - } -KeepNeedAppearances | Should -BeOfType System.IO.FileInfo + } -KeepNeedAppearances -PassThru | Should -BeOfType System.IO.FileInfo (Get-OfficePdfInfo -Path $filledPath).AcroFormNeedAppearances | Should -BeTrue } @@ -94,7 +94,7 @@ Describe 'PDF forms and stamps' { } | Out-Null $metadataPath = Join-Path $TestDrive 'metadata.pdf' - Set-OfficePdfMetadata -Path $sourcePath -OutputPath $metadataPath -Title 'Stamped Invoice' -Author 'PSWriteOffice' | + Set-OfficePdfMetadata -Path $sourcePath -OutputPath $metadataPath -Title 'Stamped Invoice' -Author 'PSWriteOffice' -PassThru | Should -BeOfType System.IO.FileInfo $metadata = (Get-OfficePdfInfo -Path $metadataPath).Metadata @@ -102,7 +102,7 @@ Describe 'PDF forms and stamps' { $metadata.Author | Should -Be 'PSWriteOffice' $stampedPath = Join-Path $TestDrive 'stamped.pdf' - Add-OfficePdfStamp -Path $metadataPath -OutputPath $stampedPath -Text 'APPROVED' -X 72 -Y 72 -FontSize 18 -Color '#008000' | + Add-OfficePdfStamp -Path $metadataPath -OutputPath $stampedPath -Text 'APPROVED' -X 72 -Y 72 -FontSize 18 -Color '#008000' -PassThru | Should -BeOfType System.IO.FileInfo $text = Get-OfficePdfText -Path $stampedPath @@ -118,11 +118,11 @@ Describe 'PDF forms and stamps' { } | Out-Null $metadataPath = Join-Path $TestDrive 'metadata\out.pdf' - Set-OfficePdfMetadata -Path $sourcePath -OutputPath $metadataPath -Title 'Nested Metadata' | + Set-OfficePdfMetadata -Path $sourcePath -OutputPath $metadataPath -Title 'Nested Metadata' -PassThru | Should -BeOfType System.IO.FileInfo $stampedPath = Join-Path $TestDrive 'stamps\approved.pdf' - Add-OfficePdfStamp -Path $metadataPath -OutputPath $stampedPath -Text 'APPROVED' -X 72 -Y 72 | + Add-OfficePdfStamp -Path $metadataPath -OutputPath $stampedPath -Text 'APPROVED' -X 72 -Y 72 -PassThru | Should -BeOfType System.IO.FileInfo Test-Path $metadataPath | Should -BeTrue diff --git a/Tests/PdfHtml.Tests.ps1 b/Tests/PdfHtml.Tests.ps1 index c9b2f554..c2e388dc 100644 --- a/Tests/PdfHtml.Tests.ps1 +++ b/Tests/PdfHtml.Tests.ps1 @@ -39,7 +39,7 @@ Describe 'PDF HTML cmdlets' { $path = Join-Path $TestDrive 'html-file-report.pdf' Set-Content -Path $htmlPath -Value '

File HTML

Loaded from disk.

' -Encoding UTF8 - ConvertFrom-OfficePdfHtml -InputPath $htmlPath -OutputPath $path -PassThru | + ConvertFrom-OfficePdfHtml -Path $htmlPath -OutputPath $path -PassThru | Should -BeOfType System.IO.FileInfo Test-Path $path | Should -BeTrue diff --git a/Tests/PdfReadbackCompliance.Tests.ps1 b/Tests/PdfReadbackCompliance.Tests.ps1 index b5f74ae6..13bdd096 100644 --- a/Tests/PdfReadbackCompliance.Tests.ps1 +++ b/Tests/PdfReadbackCompliance.Tests.ps1 @@ -89,7 +89,7 @@ Describe 'PDF readback and compliance cmdlets' { PdfParagraph 'Explicit attachment document' } - $updated = $document | PdfAttachment -Path $attachmentPath -Name 'explicit-payload.txt' + $updated = $document | PdfAttachment -Path $attachmentPath -Name 'explicit-payload.txt' -PassThru $updated | Save-OfficePdf -Path $pdfPath | Out-Null $updated | Should -BeOfType OfficeIMO.Pdf.PdfDocument @@ -232,7 +232,7 @@ startxref %%EOF '@ | Set-Content -Path $pdfPath -NoNewline -Encoding Ascii - $updateReport = Set-OfficePdfAnnotation -Path $pdfPath -OutputPath $updatedPath -ObjectNumber 4 -Contents 'Updated note' -Title 'Reviewer' -Name 'Note-2' -Color '#0080FF' -RemoveAction -PassThruReport + $updateReport = Set-OfficePdfAnnotation -Path $pdfPath -OutputPath $updatedPath -ObjectNumber 4 -Contents 'Updated note' -Title 'Reviewer' -Name 'Note-2' -Color '#0080FF' -RemoveAction -PassThruReport -PassThru $updateReport.Applied | Should -BeTrue $updated = @(Get-OfficePdfAnnotation -Path $updatedPath -Subtype Text) $updated.Count | Should -Be 1 @@ -241,7 +241,7 @@ startxref $updated[0].Name | Should -Be 'Note-2' $updated[0].HasAdditionalActions | Should -BeFalse - $removeReport = Remove-OfficePdfAnnotation -Path $updatedPath -OutputPath $removedPath -Subtype Text -PassThruReport + $removeReport = Remove-OfficePdfAnnotation -Path $updatedPath -OutputPath $removedPath -Subtype Text -PassThruReport -PassThru $removeReport.Applied | Should -BeTrue @(Get-OfficePdfAnnotation -Path $removedPath -Subtype Text).Count | Should -Be 0 } diff --git a/Tests/PdfReverseConversion.Tests.ps1 b/Tests/PdfReverseConversion.Tests.ps1 index adbb7083..9c4d3457 100644 --- a/Tests/PdfReverseConversion.Tests.ps1 +++ b/Tests/PdfReverseConversion.Tests.ps1 @@ -43,18 +43,18 @@ Describe 'PDF reverse conversion workflows' { Test-Path -LiteralPath $excelPath | Should -BeTrue Test-Path -LiteralPath $powerPointPath | Should -BeTrue - $wordText = (Get-OfficeWordText -InputPath $wordPath | ForEach-Object Text) -join ' ' + $wordText = (Get-OfficeWordText -Path $wordPath | ForEach-Object Text) -join ' ' $wordText | Should -Match 'Quarterly results' $wordText | Should -Match 'Revenue improved' $excelReport.Entries.Count | Should -BeGreaterThan 0 - $excelSummary = Get-OfficeExcelSummary -InputPath $excelPath -IncludeSheets + $excelSummary = Get-OfficeExcelSummary -Path $excelPath -IncludeSheets $rows = @(Import-OfficeExcel -Path $excelPath -WorksheetName $excelSummary.Sheets[0].Name) $rows | Should -HaveCount 3 $rows[0].Region | Should -Be 'North' $rows[0].Revenue | Should -Be 1250 - $presentation = Get-OfficePowerPoint -FilePath $powerPointPath + $presentation = Get-OfficePowerPoint -Path $powerPointPath try { $slides = @($presentation | Get-OfficePowerPointSlideSummary) $slides | Should -HaveCount 1 diff --git a/Tests/PowerPoint.Tests.ps1 b/Tests/PowerPoint.Tests.ps1 index 1ea52568..5d0475e7 100644 --- a/Tests/PowerPoint.Tests.ps1 +++ b/Tests/PowerPoint.Tests.ps1 @@ -33,7 +33,7 @@ Describe 'PowerPoint cmdlets' { It 'does not create a NoSave presentation when WhatIf skips creation' { $path = Join-Path $TestDrive 'PowerPointNoSaveWhatIf.pptx' - New-OfficePowerPoint -FilePath $path -NoSave -WhatIf | Out-Null + New-OfficePowerPoint -Path $path -NoSave -WhatIf | Out-Null Test-Path -LiteralPath $path | Should -BeFalse } @@ -42,7 +42,7 @@ Describe 'PowerPoint cmdlets' { $folder = Join-Path $TestDrive 'missing' $path = Join-Path $folder 'PowerPointNoSave.pptx' - $presentation = New-OfficePowerPoint -FilePath $path -NoSave + $presentation = New-OfficePowerPoint -Path $path -NoSave try { $presentation | Should -Not -BeNullOrEmpty Test-Path -LiteralPath $folder | Should -BeTrue @@ -55,12 +55,29 @@ Describe 'PowerPoint cmdlets' { It 'closes a presentation through a PowerShell cmdlet' { $path = Join-Path $TestDrive 'PowerPointClose.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave Add-OfficePowerPointSlide -Presentation $presentation | Out-Null Close-OfficePowerPoint -Presentation $presentation -Save - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path + try { + $reloaded.Slides.Count | Should -Be 1 + } finally { + Close-OfficePowerPoint -Presentation $reloaded + } + } + + It 'saves to a new path while closing a presentation' { + $sourcePath = Join-Path $TestDrive 'PowerPointCloseSource.pptx' + $savedAsPath = Join-Path (Join-Path $TestDrive 'close-save-as') 'PowerPointClose.Copy.pptx' + $presentation = New-OfficePowerPoint -Path $sourcePath -NoSave + Add-OfficePowerPointSlide -Presentation $presentation + + Close-OfficePowerPoint -Presentation $presentation -Path $savedAsPath + + Test-Path -LiteralPath $savedAsPath | Should -BeTrue + $reloaded = Get-OfficePowerPoint -Path $savedAsPath try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -71,7 +88,7 @@ Describe 'PowerPoint cmdlets' { It 'saves an external OfficeIMO presentation without closing it and supports save as' { $savedAsPath = Join-Path (Join-Path $TestDrive 'save-as-output') 'PowerPointExternal.Copy.pptx' $seedPath = Join-Path $TestDrive 'PowerPointTypeSeed.pptx' - $seed = New-OfficePowerPoint -FilePath $seedPath -NoSave + $seed = New-OfficePowerPoint -Path $seedPath -NoSave $presentationType = $seed.GetType() Close-OfficePowerPoint -Presentation $seed $create = $presentationType.GetMethods() | @@ -94,7 +111,7 @@ Describe 'PowerPoint cmdlets' { } } - $reloaded = Get-OfficePowerPoint -FilePath $savedAsPath + $reloaded = Get-OfficePowerPoint -Path $savedAsPath try { $reloaded.Slides.Count | Should -Be 2 } finally { @@ -104,13 +121,13 @@ Describe 'PowerPoint cmdlets' { It 'does not persist edits made after save when closed without save' { $path = Join-Path $TestDrive 'PowerPointExplicitClose.pptx' - $presentation = New-OfficePowerPoint -FilePath $path -NoSave + $presentation = New-OfficePowerPoint -Path $path -NoSave Add-OfficePowerPointSlide -Presentation $presentation | Out-Null Save-OfficePowerPoint -Presentation $presentation Add-OfficePowerPointSlide -Presentation $presentation | Out-Null Close-OfficePowerPoint -Presentation $presentation - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -169,7 +186,7 @@ Describe 'PowerPoint cmdlets' { PptSlide { PptTitle -Title 'Encrypted source' } } - $presentation = Get-OfficePowerPoint -FilePath $sourcePath -Password 'secret' + $presentation = Get-OfficePowerPoint -Path $sourcePath -Password 'secret' try { Save-OfficePowerPoint -Presentation $presentation -Path $savedAsPath } finally { @@ -178,13 +195,13 @@ Describe 'PowerPoint cmdlets' { Test-Path -LiteralPath $sourcePath | Should -BeTrue Test-Path -LiteralPath $savedAsPath | Should -BeTrue - $encryptedReload = Get-OfficePowerPoint -FilePath $sourcePath -Password 'secret' + $encryptedReload = Get-OfficePowerPoint -Path $sourcePath -Password 'secret' try { $encryptedReload.Slides.Count | Should -Be 1 } finally { Close-OfficePowerPoint -Presentation $encryptedReload } - $reloaded = Get-OfficePowerPoint -FilePath $savedAsPath + $reloaded = Get-OfficePowerPoint -Path $savedAsPath try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -208,7 +225,7 @@ Describe 'PowerPoint cmdlets' { Close-OfficePowerPoint -Presentation $presentation } - $reloaded = Get-OfficePowerPoint -FilePath $savedAsPath -Password 'secret' + $reloaded = Get-OfficePowerPoint -Path $savedAsPath -Password 'secret' try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -247,7 +264,7 @@ Describe 'PowerPoint cmdlets' { Close-OfficePowerPoint -Presentation $presentation -ErrorAction SilentlyContinue } - $reloaded = Get-OfficePowerPoint -FilePath $sourcePath -Password 'secret' + $reloaded = Get-OfficePowerPoint -Path $sourcePath -Password 'secret' try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -275,7 +292,7 @@ Describe 'PowerPoint cmdlets' { Close-OfficePowerPoint -Presentation $presentation -ErrorAction SilentlyContinue } - $reloaded = Get-OfficePowerPoint -FilePath $encryptedTarget -Password 'secret' + $reloaded = Get-OfficePowerPoint -Path $encryptedTarget -Password 'secret' try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -310,10 +327,20 @@ Describe 'PowerPoint cmdlets' { $_.GetParameters()[1].ParameterType -eq [bool] -and $_.GetParameters()[2].ParameterType -eq [string] } + $close = $serviceType.GetMethods() | Where-Object { + $_.Name -eq 'ClosePresentation' -and + $_.GetParameters().Count -eq 4 + } + $closeWithPath = $serviceType.GetMethods() | Where-Object { + $_.Name -eq 'ClosePresentation' -and + $_.GetParameters().Count -eq 5 + } $load | Should -HaveCount 1 $save | Should -HaveCount 1 $save.ReturnType | Should -Be ([void]) + $close | Should -HaveCount 1 + $closeWithPath | Should -HaveCount 1 } It 'round-trips encrypted presentations through lifecycle cmdlets' { @@ -334,7 +361,7 @@ Describe 'PowerPoint cmdlets' { { Get-ZipEntriesLocal -Path $path } | Should -Throw - $reloaded = Get-OfficePowerPoint -FilePath $path -Password 'secret' + $reloaded = Get-OfficePowerPoint -Path $path -Password 'secret' try { $reloaded.Slides.Count | Should -Be 1 } finally { @@ -344,7 +371,7 @@ Describe 'PowerPoint cmdlets' { It 'creates a presentation with shapes, tables, media, and notes' { $path = Join-Path $TestDrive 'PowerPointContent.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave $imagePath = New-TestOfficeImageFile -Directory $TestDrive $layouts = Get-OfficePowerPointLayout -Presentation $presentation @@ -353,28 +380,28 @@ Describe 'PowerPoint cmdlets' { if ($layoutType) { $layoutMaster = $layoutType.MasterIndex $layoutIndex = $layoutType.LayoutIndex - $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layoutType.LayoutType -Master $layoutType.MasterIndex + $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layoutType.LayoutType -Master $layoutType.MasterIndex -PassThru } elseif ($layouts[0].Name) { $layoutMaster = $layouts[0].MasterIndex $layoutIndex = $layouts[0].LayoutIndex - $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layouts[0].Name -Master $layouts[0].MasterIndex + $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layouts[0].Name -Master $layouts[0].MasterIndex -PassThru } else { $layoutMaster = $layouts[0].MasterIndex $layoutIndex = $layouts[0].LayoutIndex - $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout $layouts[0].LayoutIndex -Master $layouts[0].MasterIndex + $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout $layouts[0].LayoutIndex -Master $layouts[0].MasterIndex -PassThru } - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Status Update' - $shape = Add-OfficePowerPointShape -Slide $slide -ShapeType Rectangle -X 40 -Y 40 -Width 200 -Height 80 -FillColor '#DDEEFF' -OutlineColor '#1F4E79' -OutlineWidth 1 + $shape = Add-OfficePowerPointShape -Slide $slide -ShapeType Rectangle -X 40 -Y 40 -Width 200 -Height 80 -FillColor '#DDEEFF' -OutlineColor '#1F4E79' -OutlineWidth 1 -PassThru $rows = @( [PSCustomObject]@{ Item = 'Alpha'; Qty = 10 } [PSCustomObject]@{ Item = 'Beta'; Qty = 20 } ) - $table = Add-OfficePowerPointTable -Slide $slide -InputObject $rows -X 40 -Y 140 -Width 360 -Height 200 - $image = Add-OfficePowerPointImage -Slide $slide -Path $imagePath -X 420 -Y 40 -Width 120 -Height 90 - $bullets = Add-OfficePowerPointBullets -Slide $slide -Bullets 'Wins','Risks','Next Steps' -X 420 -Y 150 -Width 250 -Height 200 + $table = Add-OfficePowerPointTable -Slide $slide -InputObject $rows -X 40 -Y 140 -Width 360 -Height 200 -PassThru + $image = Add-OfficePowerPointImage -Slide $slide -Path $imagePath -X 420 -Y 40 -Width 120 -Height 90 -PassThru + $bullets = Add-OfficePowerPointBullets -Slide $slide -Bullets 'Wins','Risks','Next Steps' -X 420 -Y 150 -Width 250 -Height 200 -PassThru Set-OfficePowerPointNotes -Slide $slide -Text 'Keep this under five minutes.' $slide.Shapes.Count | Should -BeGreaterThan 0 @@ -420,7 +447,7 @@ Describe 'PowerPoint cmdlets' { $presentation.Dispose() $presentation = $null - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloaded.Slides.Count | Should -Be 2 @@ -454,9 +481,9 @@ Describe 'PowerPoint cmdlets' { It 'supports transposed PowerPoint tables' { $path = Join-Path $TestDrive 'PowerPointTransposedTable.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru $rows = @( [PSCustomObject]@{ Region = 'Europe'; Revenue = 21704714 } [PSCustomObject]@{ Region = 'Asia'; Revenue = 8774099 } @@ -474,9 +501,9 @@ Describe 'PowerPoint cmdlets' { It 'preserves the legacy PowerPoint table headers alias' { $path = Join-Path $TestDrive 'PowerPointHeadersAlias.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru $rows = @( [PSCustomObject]@{ Item = 'Alpha'; Qty = 10 } [PSCustomObject]@{ Item = 'Beta'; Qty = 20 } @@ -494,9 +521,9 @@ Describe 'PowerPoint cmdlets' { It 'finds and modifies existing PowerPoint text boxes and tables' { $path = Join-Path $TestDrive 'PowerPointExistingShapeModify.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Add-OfficePowerPointTextBox -Slide $slide -Text 'Draft status' -X 80 -Y 80 -Width 300 -Height 50 | Out-Null $rows = @( [PSCustomObject]@{ Metric = 'Risk'; State = 'Open' } @@ -526,7 +553,7 @@ Describe 'PowerPoint cmdlets' { } } - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $readyShape = Find-OfficePowerPointShape -Presentation $reloaded -Text 'Ready status' -Kind TextBox | Select-Object -First 1 $readyShape | Should -Not -BeNullOrEmpty @@ -547,13 +574,13 @@ Describe 'PowerPoint cmdlets' { } $path = Join-Path $TestDrive 'PowerPointRichTextRuns.pptx' - $presentation = PptNew -FilePath $path + $presentation = PptNew -Path $path -NoSave try { - $slide = PptSlide -Presentation $presentation -Layout 1 + $slide = PptSlide -Presentation $presentation -Layout 1 -PassThru $textBox = PptTextBox -Slide $slide -Run @( PptTextRun 'Status: ' PptTextRun 'Ready' -Color SeaGreen -Bold - ) -X 80 -Y 80 -Width 300 -Height 50 + ) -X 80 -Y 80 -Width 300 -Height 50 -PassThru $textBox.Text | Should -Be 'Status: Ready' $textBox = $textBox | Set-OfficePowerPointShapeText -Run @( PptTextRun 'Linked' -Color Crimson -BackgroundColor Yellow -FontName 'Arial' -FontSize 18 -LinkUri 'https://example.org/ppt' @@ -588,7 +615,7 @@ Describe 'PowerPoint cmdlets' { , @('Owner', 'Platform') , @(@{ Text = 'Filled'; FillColor = 'Yellow'; Bold = $true }, 'Styled') , @(@{ Run = 'Queued' }, 'String run') - ) -X 80 -Y 150 -Width 420 -Height 140 + ) -X 80 -Y 150 -Width 420 -Height 140 -PassThru $table.GetCell(0, 0).Text | Should -Be 'Build Ready' $table.GetCell(0, 0).Runs[0].Bold | Should -BeTrue $table.GetCell(0, 0).Runs[0].Color | Should -Be 'FF0000' @@ -617,7 +644,7 @@ Describe 'PowerPoint cmdlets' { $threeColumnTable = PptTable -Slide $slide -InputObject @( , @('Metric', 'Scope', 'Value') - ) -X 80 -Y 320 -Width 420 -Height 120 + ) -X 80 -Y 320 -Width 420 -Height 120 -PassThru $valueAfterSpan = $threeColumnTable | Add-OfficePowerPointTableRow -Values @( @{ Text = 'Total'; ColumnSpan = 2; FillColor = 'AliceBlue' }, '42' @@ -665,7 +692,7 @@ Describe 'PowerPoint cmdlets' { $baselineTextBox = PptTextBox -Slide $slide -Run @( PptTextRun 'x' PptTextRun '2' -Kind Superscript - ) -X 360 -Y 80 -Width 120 -Height 50 + ) -X 360 -Y 80 -Width 120 -Height 50 -PassThru $baselineTextBox.Text | Should -Be 'x2' $baselineTable = PptTable -Slide $slide -InputObject @( @@ -678,7 +705,7 @@ Describe 'PowerPoint cmdlets' { ) } ) - ) -X 80 -Y 450 -Width 240 -Height 80 + ) -X 80 -Y 450 -Width 240 -Height 80 -PassThru $baselineTable.GetCell(0, 0).Text | Should -Be 'H2O' Save-OfficePowerPoint -Presentation $presentation @@ -697,16 +724,16 @@ Describe 'PowerPoint cmdlets' { It 'keeps ordinary style-named columns in PowerPoint object tables' { $path = Join-Path $TestDrive 'PowerPointOrdinaryStyleColumns.pptx' - $presentation = PptNew -FilePath $path + $presentation = PptNew -Path $path -NoSave try { - $slide = PptSlide -Presentation $presentation -Layout 1 + $slide = PptSlide -Presentation $presentation -Layout 1 -PassThru $table = PptTable -Slide $slide -InputObject @( [pscustomobject]@{ Text = 'Apple' Color = 'Red' FontSize = 'Large' } - ) -X 80 -Y 150 -Width 300 -Height 100 + ) -X 80 -Y 150 -Width 300 -Height 100 -PassThru $table.GetCell(0, 0).Text | Should -Be 'Text' $table.GetCell(0, 1).Text | Should -Be 'Color' @@ -723,9 +750,9 @@ Describe 'PowerPoint cmdlets' { It 'validates structured PowerPoint table runs before creating the table' { $path = Join-Path $TestDrive 'PowerPointStructuredTableRunValidation.pptx' - $presentation = PptNew -FilePath $path + $presentation = PptNew -Path $path -NoSave try { - $slide = PptSlide -Presentation $presentation -Layout 1 + $slide = PptSlide -Presentation $presentation -Layout 1 -PassThru @($slide.Tables).Count | Should -Be 0 { @@ -746,9 +773,9 @@ Describe 'PowerPoint cmdlets' { It 'validates PowerPoint text box runs before creating the shape' { $path = Join-Path $TestDrive 'PowerPointTextBoxRunValidation.pptx' - $presentation = PptNew -FilePath $path + $presentation = PptNew -Path $path -NoSave try { - $slide = PptSlide -Presentation $presentation -Layout 1 + $slide = PptSlide -Presentation $presentation -Layout 1 -PassThru @($slide.TextBoxes).Count | Should -Be 0 { @@ -767,9 +794,9 @@ Describe 'PowerPoint cmdlets' { It 'preserves explicit headers on structured PowerPoint tables' { $path = Join-Path $TestDrive 'PowerPointStructuredHeaders.pptx' - $presentation = PptNew -FilePath $path + $presentation = PptNew -Path $path -NoSave try { - $slide = PptSlide -Presentation $presentation -Layout 1 + $slide = PptSlide -Presentation $presentation -Layout 1 -PassThru $table = PptTable -Slide $slide -Headers Qty, Item -InputObject @( [pscustomobject]@{ Item = 'Alpha' @@ -779,7 +806,7 @@ Describe 'PowerPoint cmdlets' { @{ Run = @(PptTextRun 'Total' -Bold) }, 'Two' ) - ) -X 80 -Y 150 -Width 420 -Height 140 + ) -X 80 -Y 150 -Width 420 -Height 140 -PassThru $table.GetCell(0, 0).Text | Should -Be 'Qty' $table.GetCell(0, 1).Text | Should -Be 'Item' @@ -796,14 +823,14 @@ Describe 'PowerPoint cmdlets' { It 'keeps ordinary Run columns in PowerPoint object tables' { $path = Join-Path $TestDrive 'PowerPointOrdinaryRunColumn.pptx' - $presentation = PptNew -FilePath $path + $presentation = PptNew -Path $path -NoSave try { - $slide = PptSlide -Presentation $presentation -Layout 1 + $slide = PptSlide -Presentation $presentation -Layout 1 -PassThru $table = PptTable -Slide $slide -InputObject @( [pscustomobject]@{ Run = @('Nightly', 'Daily') } - ) -X 80 -Y 150 -Width 300 -Height 100 + ) -X 80 -Y 150 -Width 300 -Height 100 -PassThru $table.GetCell(0, 0).Text | Should -Be 'Run' $table.GetCell(1, 0).Text | Should -Match 'Nightly' @@ -817,15 +844,15 @@ Describe 'PowerPoint cmdlets' { It 'finds existing PowerPoint shapes by metadata without a text term' { $path = Join-Path $TestDrive 'PowerPointMetadataShapeFind.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 - $textBox = Add-OfficePowerPointTextBox -Slide $slide -Text 'Metadata status' -X 80 -Y 80 -Width 300 -Height 50 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru + $textBox = Add-OfficePowerPointTextBox -Slide $slide -Text 'Metadata status' -X 80 -Y 80 -Width 300 -Height 50 -PassThru $textBox.Name = 'Status.Primary' $rows = @( [PSCustomObject]@{ Metric = 'Risk'; State = 'Open' } ) - $table = Add-OfficePowerPointTable -Slide $slide -InputObject $rows -X 80 -Y 160 -Width 420 -Height 120 + $table = Add-OfficePowerPointTable -Slide $slide -InputObject $rows -X 80 -Y 160 -Width 420 -Height 120 -PassThru $table.Name = 'Status.Table' $byName = Find-OfficePowerPointShape -Presentation $presentation -Name 'Status.*' -Kind TextBox @@ -844,12 +871,12 @@ Describe 'PowerPoint cmdlets' { It 'arranges PowerPoint shapes through OfficeIMO layout helpers' { $path = Join-Path $TestDrive 'PowerPointShapeLayout.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 - $shape1 = Add-OfficePowerPointShape -Slide $slide -Name 'Kpi.One' -ShapeType Rectangle -X 40 -Y 80 -Width 80 -Height 40 - $shape2 = Add-OfficePowerPointShape -Slide $slide -Name 'Kpi.Two' -ShapeType Rectangle -X 180 -Y 140 -Width 80 -Height 40 - $shape3 = Add-OfficePowerPointShape -Slide $slide -Name 'Kpi.Three' -ShapeType Rectangle -X 320 -Y 200 -Width 80 -Height 40 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru + $shape1 = Add-OfficePowerPointShape -Slide $slide -Name 'Kpi.One' -ShapeType Rectangle -X 40 -Y 80 -Width 80 -Height 40 -PassThru + $shape2 = Add-OfficePowerPointShape -Slide $slide -Name 'Kpi.Two' -ShapeType Rectangle -X 180 -Y 140 -Width 80 -Height 40 -PassThru + $shape3 = Add-OfficePowerPointShape -Slide $slide -Name 'Kpi.Three' -ShapeType Rectangle -X 320 -Y 200 -Width 80 -Height 40 -PassThru @($shape1, $shape2, $shape3) | Set-OfficePowerPointShapeLayout -Slide $slide -Align Top $shape1.TopPoints | Should -Be $shape2.TopPoints @@ -869,9 +896,9 @@ Describe 'PowerPoint cmdlets' { It 'reads notes without creating empty notes parts' { $path = Join-Path $TestDrive 'PowerPointNotesRead.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'No notes yet' $notes = Get-OfficePowerPointNotes -Slide $slide -IncludeEmpty @@ -902,7 +929,7 @@ Describe 'PowerPoint cmdlets' { It 'persists layout placeholder edits across save and reopen' { $path = Join-Path $TestDrive 'PowerPointLayoutEdits.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave $layoutPlaceholder = $null $layouts = Get-OfficePowerPointLayout -Presentation $presentation @@ -912,15 +939,15 @@ Describe 'PowerPoint cmdlets' { if ($layoutType) { $layoutMaster = $layoutType.MasterIndex $layoutIndex = $layoutType.LayoutIndex - $slide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layoutType.LayoutType -Master $layoutType.MasterIndex + $slide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layoutType.LayoutType -Master $layoutType.MasterIndex -PassThru } elseif ($layouts[0].Name) { $layoutMaster = $layouts[0].MasterIndex $layoutIndex = $layouts[0].LayoutIndex - $slide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layouts[0].Name -Master $layouts[0].MasterIndex + $slide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layouts[0].Name -Master $layouts[0].MasterIndex -PassThru } else { $layoutMaster = $layouts[0].MasterIndex $layoutIndex = $layouts[0].LayoutIndex - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout $layouts[0].LayoutIndex -Master $layouts[0].MasterIndex + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout $layouts[0].LayoutIndex -Master $layouts[0].MasterIndex -PassThru } $layoutPlaceholders = Get-OfficePowerPointLayoutPlaceholder -Slide $slide @@ -949,7 +976,7 @@ Describe 'PowerPoint cmdlets' { Save-OfficePowerPoint -Presentation $presentation $presentation.Dispose() - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloadedSlide = Get-OfficePowerPointSlide -Presentation $reloaded -Index 0 $reloadedLayoutPlaceholders = Get-OfficePowerPointLayoutPlaceholder -Slide $reloadedSlide @@ -972,19 +999,19 @@ Describe 'PowerPoint cmdlets' { It 'removes slides and preserves the remaining title' { $path = Join-Path $TestDrive 'PowerPointRemoval.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave - $firstSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $firstSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $firstSlide -Title 'Remove me' - $secondSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $secondSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $secondSlide -Title 'Keep me' Set-OfficePowerPointPlaceholderText -Slide $secondSlide -PlaceholderType Title -Text 'Keep me v2' Save-OfficePowerPoint -Presentation $presentation $presentation.Dispose() - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { Remove-OfficePowerPointSlide -Presentation $reloaded -Index 0 -Confirm:$false Save-OfficePowerPoint -Presentation $reloaded @@ -994,7 +1021,7 @@ Describe 'PowerPoint cmdlets' { } } - $afterRemoval = Get-OfficePowerPoint -FilePath $path + $afterRemoval = Get-OfficePowerPoint -Path $path try { $afterRemoval.Slides.Count | Should -Be 1 $remainingSlide = Get-OfficePowerPointSlide -Presentation $afterRemoval -Index 0 @@ -1012,23 +1039,23 @@ Describe 'PowerPoint cmdlets' { It 'copies a slide and preserves its content' { $path = Join-Path $TestDrive 'PowerPointCopy.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave - $slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Quarterly Overview' Add-OfficePowerPointTextBox -Slide $slide1 -Text 'Revenue and margin summary' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null Set-OfficePowerPointNotes -Slide $slide1 -Text 'Reuse this for the board deck.' - $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Closing Slide' - $copiedSlide = Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1 + $copiedSlide = Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1 -PassThru $copiedSlide | Should -Not -BeNullOrEmpty Save-OfficePowerPoint -Presentation $presentation $presentation.Dispose() - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloaded.Slides.Count | Should -Be 3 @@ -1058,16 +1085,16 @@ Describe 'PowerPoint cmdlets' { It 'sets slide transitions and custom slide sizes' { $path = Join-Path $TestDrive 'PowerPointTransitionsAndSize.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Transition Demo' | Out-Null - $updatedSlide = $slide | Set-OfficePowerPointSlideTransition -Transition Fade + $updatedSlide = $slide | Set-OfficePowerPointSlideTransition -Transition Fade -PassThru $fadeTransition = Get-TestPSWriteOfficeEnumValue -AssemblyName 'OfficeIMO.PowerPoint' -TypeName 'OfficeIMO.PowerPoint.PowerPointSlideTransition' -Name 'Fade' -CommandName 'New-OfficePowerPoint' $updatedSlide.Transition | Should -Be $fadeTransition - $slideSize = Set-OfficePowerPointSlideSize -Presentation $presentation -WidthCm 25.4 -HeightCm 14.0 + $slideSize = Set-OfficePowerPointSlideSize -Presentation $presentation -WidthCm 25.4 -HeightCm 14.0 -PassThru [math]::Round($slideSize.WidthCm, 1) | Should -Be 25.4 [math]::Round($slideSize.HeightCm, 1) | Should -Be 14.0 @@ -1079,7 +1106,7 @@ Describe 'PowerPoint cmdlets' { $transitionNode | Should -Not -BeNullOrEmpty $transitionNode.SelectSingleNode("*[local-name()='fade']") | Should -Not -BeNullOrEmpty - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloadedSlide = Get-OfficePowerPointSlide -Presentation $reloaded -Index 0 $reloadedSlide.Transition | Should -Be $fadeTransition @@ -1095,10 +1122,10 @@ Describe 'PowerPoint cmdlets' { It 'applies preset slide sizes including portrait orientation' { $path = Join-Path $TestDrive 'PowerPointPresetSize.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null - $presetSize = Set-OfficePowerPointSlideSize -Presentation $presentation -Preset Screen4x3 -Portrait + $presetSize = Set-OfficePowerPointSlideSize -Presentation $presentation -Preset Screen4x3 -Portrait -PassThru $presetSize.IsPortrait | Should -BeTrue [math]::Round($presetSize.WidthInches, 1) | Should -Be 7.5 [math]::Round($presetSize.HeightInches, 1) | Should -Be 10.0 @@ -1106,7 +1133,7 @@ Describe 'PowerPoint cmdlets' { Save-OfficePowerPoint -Presentation $presentation $presentation.Dispose() - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloaded.SlideSize.IsPortrait | Should -BeTrue [math]::Round($reloaded.SlideSize.WidthInches, 1) | Should -Be 7.5 @@ -1155,7 +1182,7 @@ Describe 'PowerPoint cmdlets' { Test-Path $path | Should -BeTrue - $presentation = Get-OfficePowerPoint -FilePath $path + $presentation = Get-OfficePowerPoint -Path $path $slide = Get-OfficePowerPointSlide -Presentation $presentation -Index 0 $summary = Get-OfficePowerPointSlideSummary -Slide $slide $summary.LayoutPlaceholderCount | Should -BeGreaterThan 0 @@ -1177,26 +1204,26 @@ Describe 'PowerPoint cmdlets' { $sourcePath = Join-Path $TestDrive 'PowerPointSourceDeck.pptx' $targetPath = Join-Path $TestDrive 'PowerPointTargetDeck.pptx' - $source = New-OfficePowerPoint -FilePath $sourcePath - $sourceSlide = Add-OfficePowerPointSlide -Presentation $source -Layout 1 + $source = New-OfficePowerPoint -Path $sourcePath -NoSave + $sourceSlide = Add-OfficePowerPointSlide -Presentation $source -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $sourceSlide -Title 'FY24 Imported' Add-OfficePowerPointTextBox -Slide $sourceSlide -Text 'FY24 details from source' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null Set-OfficePowerPointNotes -Slide $sourceSlide -Text 'FY24 source notes' Save-OfficePowerPoint -Presentation $source - $target = New-OfficePowerPoint -FilePath $targetPath - $introSlide = Add-OfficePowerPointSlide -Presentation $target -Layout 1 + $target = New-OfficePowerPoint -Path $targetPath -NoSave + $introSlide = Add-OfficePowerPointSlide -Presentation $target -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $introSlide -Title 'FY24 Overview' Add-OfficePowerPointTextBox -Slide $introSlide -Text 'FY24 summary for leadership' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null Set-OfficePowerPointNotes -Slide $introSlide -Text 'FY24 note for intro' - $resultsSlide = Add-OfficePowerPointSlide -Presentation $target -Layout 1 + $resultsSlide = Add-OfficePowerPointSlide -Presentation $target -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $resultsSlide -Title 'FY24 Results' Add-OfficePowerPointTextBox -Slide $resultsSlide -Text 'FY24 results body' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null - $introSection = Add-OfficePowerPointSection -Presentation $target -Name 'Intro' -StartSlideIndex 0 + $introSection = Add-OfficePowerPointSection -Presentation $target -Name 'Intro' -StartSlideIndex 0 -PassThru $introSection.Name | Should -Be 'Intro' - $resultsSection = Add-OfficePowerPointSection -Presentation $target -Name 'Results' -StartSlideIndex 1 + $resultsSection = Add-OfficePowerPointSection -Presentation $target -Name 'Results' -StartSlideIndex 1 -PassThru $resultsSection.Name | Should -Be 'Results' $renamedSection = Rename-OfficePowerPointSection -Presentation $target -Name 'Results' -NewName 'Deep Dive' -PassThru @@ -1207,7 +1234,7 @@ Describe 'PowerPoint cmdlets' { ($sections | Where-Object Name -eq 'Intro').SlideIndices | Should -Contain 0 ($sections | Where-Object Name -eq 'Deep Dive').SlideIndices | Should -Contain 1 - $replacements = Update-OfficePowerPointText -Presentation $target -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes + $replacements = Update-OfficePowerPointText -Presentation $target -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes -PassThru $replacements | Should -BeGreaterThan 0 $importedSlide = Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1 @@ -1215,7 +1242,7 @@ Describe 'PowerPoint cmdlets' { Save-OfficePowerPoint -Presentation $target - $reloaded = Get-OfficePowerPoint -FilePath $targetPath + $reloaded = Get-OfficePowerPoint -Path $targetPath try { $reloaded.Slides.Count | Should -Be 3 @@ -1241,7 +1268,7 @@ Describe 'PowerPoint cmdlets' { ($sectionInfo | Where-Object Name -eq 'Intro').SlideIndices | Should -Contain 1 ($sectionInfo | Where-Object Name -eq 'Deep Dive').SlideIndices | Should -Contain 2 - $aliasReplacements = Replace-OfficePowerPointText -Presentation $reloaded -OldValue 'FY24' -NewValue 'FY26' + $aliasReplacements = Replace-OfficePowerPointText -Presentation $reloaded -OldValue 'FY24' -NewValue 'FY26' -PassThru $aliasReplacements | Should -BeGreaterThan 0 } finally { if ($reloaded) { @@ -1252,9 +1279,9 @@ Describe 'PowerPoint cmdlets' { It 'supports theme inspection, theme updates, and slide layout switching' { $path = Join-Path $TestDrive 'PowerPointThemeAndLayout.pptx' - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Theme Demo' | Out-Null $layouts = Get-OfficePowerPointLayout -Presentation $presentation @@ -1295,7 +1322,7 @@ Describe 'PowerPoint cmdlets' { Save-OfficePowerPoint -Presentation $presentation $presentation.Dispose() - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloadedTheme = Get-OfficePowerPointTheme -Presentation $reloaded $reloadedTheme.ThemeName | Should -Be 'Contoso Theme' @@ -1319,13 +1346,13 @@ Describe 'PowerPoint cmdlets' { $presentation = $null try { - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave Set-OfficePowerPointSlideSize -Presentation $presentation -WidthCm 30 -HeightCm 20 | Out-Null - $colorSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $colorSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $colorSlide -Title 'Layout Demo' | Out-Null - $updatedSlide = Set-OfficePowerPointBackground -Slide $colorSlide -Color '#F4F7FB' + $updatedSlide = Set-OfficePowerPointBackground -Slide $colorSlide -Color '#F4F7FB' -PassThru $updatedSlide | Should -Be $colorSlide $colorSlide.BackgroundColor | Should -Be 'f4f7fb' @@ -1348,7 +1375,7 @@ Describe 'PowerPoint cmdlets' { Add-OfficePowerPointTextBox -Slide $colorSlide -Text 'Left column' -X $columns[0].LeftPoints -Y $columns[0].TopPoints -Width $columns[0].WidthPoints -Height 40 | Out-Null Add-OfficePowerPointTextBox -Slide $colorSlide -Text 'Right column' -X $columns[1].LeftPoints -Y $columns[1].TopPoints -Width $columns[1].WidthPoints -Height 40 | Out-Null - $imageSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $imageSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $imageSlide -Title 'Image Background' | Out-Null Set-OfficePowerPointBackground -Slide $imageSlide -ImagePath $imagePath | Out-Null $imageSlide.BackgroundColor | Should -BeNullOrEmpty @@ -1370,7 +1397,7 @@ Describe 'PowerPoint cmdlets' { $entries = @(Get-ZipEntriesLocal -Path $path) ($entries | Where-Object { $_ -like 'ppt/media/*' }).Count | Should -BeGreaterThan 0 - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloadedColorSlide = Get-OfficePowerPointSlide -Presentation $reloaded -Index 0 $reloadedColorSlide.BackgroundColor | Should -Be 'f4f7fb' @@ -1399,7 +1426,7 @@ Describe 'PowerPoint cmdlets' { ) } - $preview = @(PptDesignerDeck -Plan $plan -AccentColor '#008C95' -Seed 'designer-test' -Purpose 'technical service brief' -Preview) + $preview = @(PptDesignerDeck -Plan $plan -AccentColor '#008C95' -Seed 'designer-test' -Purpose 'technical service brief' -Preview -PassThru) $preview.Count | Should -BeGreaterThan 0 New-OfficePowerPoint -Path $path { @@ -1409,7 +1436,7 @@ Describe 'PowerPoint cmdlets' { $entries = @(Get-ZipEntriesLocal -Path $path) ($entries | Where-Object { $_ -match '^ppt/slides/slide\d+\.xml$' }).Count | Should -BeGreaterThan 2 - $reloaded = Get-OfficePowerPoint -FilePath $path + $reloaded = Get-OfficePowerPoint -Path $path try { $reloaded.Slides.Count | Should -BeGreaterThan 2 $summary = @(Get-OfficePowerPointSlideSummary -Presentation $reloaded) @@ -1452,23 +1479,23 @@ Describe 'PowerPoint cmdlets' { ) try { - $presentation = New-OfficePowerPoint -FilePath $path + $presentation = New-OfficePowerPoint -Path $path -NoSave - $slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Column Chart' | Out-Null - $columnChart = Add-OfficePowerPointChart -Slide $slide1 -Data $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Title 'Sales vs Profit' -X 40 -Y 120 -Width 360 -Height 220 + $columnChart = Add-OfficePowerPointChart -Slide $slide1 -Data $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Title 'Sales vs Profit' -X 40 -Y 120 -Width 360 -Height 220 -PassThru $columnChart | Should -Not -BeNullOrEmpty @($slide1.Charts).Count | Should -Be 1 - $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Pie Chart' | Out-Null - $pieChart = Add-OfficePowerPointChart -Slide $slide2 -Type Pie -InputObject $rows -CategoryProperty Month -SeriesProperty Sales -Title 'Sales Mix' -X 40 -Y 120 -Width 320 -Height 220 + $pieChart = Add-OfficePowerPointChart -Slide $slide2 -Type Pie -InputObject $rows -CategoryProperty Month -SeriesProperty Sales -Title 'Sales Mix' -X 40 -Y 120 -Width 320 -Height 220 -PassThru $pieChart | Should -Not -BeNullOrEmpty @($slide2.Charts).Count | Should -Be 1 - $slide3 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 + $slide3 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide3 -Title 'Scatter Chart' | Out-Null - $scatterChart = Add-OfficePowerPointChart -Slide $slide3 -Type Scatter -Data $rows -XProperty MonthNumber -YProperty Sales, Profit -Title 'Trend Scatter' -X 40 -Y 120 -Width 360 -Height 220 + $scatterChart = Add-OfficePowerPointChart -Slide $slide3 -Type Scatter -Data $rows -XProperty MonthNumber -YProperty Sales, Profit -Title 'Trend Scatter' -X 40 -Y 120 -Width 360 -Height 220 -PassThru $scatterChart | Should -Not -BeNullOrEmpty @($slide3.Charts).Count | Should -Be 1 @@ -1498,7 +1525,7 @@ Describe 'PowerPoint cmdlets' { $chart3Xml.OuterXml | Should -Match '.*?)^```\s*$') | ForEach-Object { + $prefix = $markdown.Substring(0, $_.Groups['code'].Index) + [pscustomobject]@{ + Text = $_.Groups['code'].Value + LineOffset = @($prefix -split '\r?\n').Count - 1 + } + } + ) + } + + foreach ($snippet in $snippets) { + $tokens = $null + $errors = $null + $ast = [System.Management.Automation.Language.Parser]::ParseInput($snippet.Text, [ref] $tokens, [ref] $errors) + if ($file.Extension -eq '.ps1') { + $errors | Should -BeNullOrEmpty + } + + foreach ($pipeline in $ast.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.PipelineAst] + }, $true)) { + if ($pipeline.PipelineElements.Count -lt 2) { + continue + } + + $last = $pipeline.PipelineElements[-1] + if ($last -isnot [System.Management.Automation.Language.CommandAst] -or $last.GetCommandName() -ne 'Out-Null') { + continue + } + + $commandNames = @( + $pipeline.PipelineElements | + Where-Object { $_ -is [System.Management.Automation.Language.CommandAst] } | + ForEach-Object { $_.GetCommandName() } + ) + if ($commandNames | Where-Object { $_ -match 'Office' }) { + $line = $snippet.LineOffset + $pipeline.Extent.StartLineNumber + $offenders.Add(('{0}:{1}' -f $file.FullName, $line)) + } + } + } + } + + $offenders | Should -BeNullOrEmpty + } + + It 'does not teach users to construct advanced OfficeIMO options with C# syntax' { + $roots = @( + Join-Path $PSScriptRoot '..\README.MD' + Join-Path $PSScriptRoot '..\Examples' + Join-Path $PSScriptRoot '..\Website\content' + Join-Path $PSScriptRoot '..\Docs' + Join-Path $PSScriptRoot '..\WebsiteArtifacts\apidocs\powershell\examples' + ) + $offenders = foreach ($root in $roots) { + $files = if (Test-Path -LiteralPath $root -PathType Leaf) { + Get-Item -LiteralPath $root + } else { + Get-ChildItem -LiteralPath $root -Recurse -File -Include *.md,*.ps1 + } + foreach ($file in $files) { + $text = Get-Content -LiteralPath $file.FullName -Raw + if ($text -match '(?i)\[[A-Za-z0-9_.]+(?:Options|Filter)\]::new\s*\(' -or + $text -match '(?i)New-Object\s+(?:-TypeName\s+)?[A-Za-z0-9_.]+(?:Options|Filter)\b') { + $file.FullName + } + } + } + + $offenders | Should -BeNullOrEmpty + } + + It 'teaches PassThru whenever a quiet command feeds another expression' { + $roots = @( + Join-Path $PSScriptRoot '..\Examples' + Join-Path $PSScriptRoot '..\Website\content' + Join-Path $PSScriptRoot '..\WebsiteArtifacts\apidocs\powershell\examples' + Join-Path $PSScriptRoot '..\Sources\PSWriteOffice\Cmdlets' + ) + $mutationVerbs = @('Add', 'Clear', 'Copy', 'Edit', 'Move', 'Protect', 'Remove', 'Rename', 'Save', 'Set', 'Unprotect', 'Update') + $savedNewCommands = @( + 'New-OfficeExcel' + 'New-OfficeMarkdown' + 'New-OfficeOpenDocument' + 'New-OfficePdf' + 'New-OfficePowerPoint' + 'New-OfficeRtf' + 'New-OfficeVisio' + 'New-OfficeWord' + ) + $offenders = [System.Collections.Generic.List[string]]::new() + + $files = @( + foreach ($root in $roots) { + Get-ChildItem -LiteralPath $root -Recurse -File | Where-Object { $_.Extension -in '.ps1', '.md', '.cs' } + } + ) + foreach ($file in $files) { + $content = [System.IO.File]::ReadAllText($file.FullName) + $snippets = switch ($file.Extension) { + '.ps1' { @([pscustomobject]@{ Text = $content; LineOffset = 0 }) } + '.md' { + @( + [regex]::Matches($content, '(?ms)^```powershell\s*\r?\n(?.*?)^```\s*$') | ForEach-Object { + [pscustomobject]@{ + Text = $_.Groups['code'].Value + LineOffset = @($content.Substring(0, $_.Groups['code'].Index) -split '\r?\n').Count - 1 + } + } + ) + } + '.cs' { + @( + [regex]::Matches($content, '(?ms)///\s*(?.*?)') | ForEach-Object { + $code = [Net.WebUtility]::HtmlDecode(($_.Groups['code'].Value -replace '(?m)^\s*///\s?', '')) + [pscustomobject]@{ + Text = $code + LineOffset = @($content.Substring(0, $_.Groups['code'].Index) -split '\r?\n').Count - 1 + } + } + ) + } + } + + foreach ($snippet in $snippets) { + $tokens = $null + $errors = $null + $ast = [System.Management.Automation.Language.Parser]::ParseInput($snippet.Text, [ref] $tokens, [ref] $errors) + + foreach ($assignment in $ast.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] + }, $true)) { + if ($assignment.Right -isnot [System.Management.Automation.Language.PipelineAst]) { continue } + $command = $assignment.Right.PipelineElements[0] + if ($command -isnot [System.Management.Automation.Language.CommandAst]) { continue } + + $commandName = $command.GetCommandName() + if ([string]::IsNullOrWhiteSpace($commandName)) { continue } + $commandInfo = Get-Command $commandName -ErrorAction SilentlyContinue + if ($commandInfo -is [System.Management.Automation.AliasInfo]) { + $commandInfo = $commandInfo.ResolvedCommand + } + if ($commandInfo.ModuleName -ne 'PSWriteOffice') { continue } + + $text = $command.Extent.Text + $isSavedNew = $commandInfo.Name -in $savedNewCommands -and $text -match '(?i)(?:^|\s)-Path(?:\s|$)' + $isQuietValue = ($commandInfo.Verb -in $mutationVerbs -and $commandInfo.Name -ne 'Set-OfficeConfluenceManagedSection') -or $isSavedNew + $hasExplicitOutput = $text -match '(?i)(?:^|\s)-PassThru(?:\s|$)' -or + ($commandInfo.Verb -eq 'New' -and $text -match '(?i)(?:^|\s)-NoSave(?:\s|$)') + if ($isQuietValue -and -not $hasExplicitOutput) { + $line = $snippet.LineOffset + $command.Extent.StartLineNumber + $offenders.Add(('{0}:{1} assignment from {2}' -f $file.FullName, $line, $commandInfo.Name)) + } + } + + foreach ($pipeline in $ast.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.PipelineAst] + }, $true)) { + if ($pipeline.PipelineElements.Count -lt 2) { continue } + foreach ($element in $pipeline.PipelineElements[0..($pipeline.PipelineElements.Count - 2)]) { + if ($element -isnot [System.Management.Automation.Language.CommandAst]) { continue } + $commandName = $element.GetCommandName() + if ([string]::IsNullOrWhiteSpace($commandName)) { continue } + $commandInfo = Get-Command $commandName -ErrorAction SilentlyContinue + if ($commandInfo -is [System.Management.Automation.AliasInfo]) { + $commandInfo = $commandInfo.ResolvedCommand + } + if ($commandInfo.ModuleName -ne 'PSWriteOffice' -or + -not $commandInfo.Parameters.ContainsKey('PassThru') -or + $commandInfo.Verb -notin $mutationVerbs) { + continue + } + if ($element.Extent.Text -notmatch '(?i)(?:^|\s)-PassThru(?:\s|$)') { + $line = $snippet.LineOffset + $element.Extent.StartLineNumber + $offenders.Add(('{0}:{1} pipeline from {2}' -f $file.FullName, $line, $commandInfo.Name)) + } + } + } + } + } + + $offenders | Should -BeNullOrEmpty + } +} diff --git a/Tests/TabularInputContracts.Tests.ps1 b/Tests/TabularInputContracts.Tests.ps1 index b5e9760d..59854616 100644 --- a/Tests/TabularInputContracts.Tests.ps1 +++ b/Tests/TabularInputContracts.Tests.ps1 @@ -536,15 +536,15 @@ Describe 'Shared tabular input contracts' { } $powerPointPath = Join-Path $TestDrive 'Reader.pptx' - $presentation = New-OfficePowerPoint -FilePath $powerPointPath -NoSave + $presentation = New-OfficePowerPoint -Path $powerPointPath -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation + $slide = Add-OfficePowerPointSlide -Presentation $presentation -PassThru $reader = New-TestTabularContractReader try { $table = Add-OfficePowerPointTable -Slide $slide -InputObject $reader ` -CollectionSeparator ' | ' ` -DictionaryEntrySeparator '; ' ` - -DictionaryKeyValueSeparator ': ' + -DictionaryKeyValueSeparator ': ' -PassThru } finally { $reader.Dispose() } @@ -664,10 +664,10 @@ Describe 'Shared tabular input contracts' { } $powerPointPath = Join-Path $TestDrive 'ReadOnlyDictionary.pptx' - $presentation = New-OfficePowerPoint -FilePath $powerPointPath -NoSave + $presentation = New-OfficePowerPoint -Path $powerPointPath -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation - $table = Add-OfficePowerPointTable -Slide $slide -InputObject $row -CollectionSeparator ' | ' + $slide = Add-OfficePowerPointSlide -Presentation $presentation -PassThru + $table = Add-OfficePowerPointTable -Slide $slide -InputObject $row -CollectionSeparator ' | ' -PassThru $table.GetCell(0, 0).Text | Should -Be 'Name' $table.GetCell(1, 0).Text | Should -Be 'Alpha' $table.GetCell(1, 1).Text | Should -Be 'One | Two' diff --git a/Tests/Visio.Tests.ps1 b/Tests/Visio.Tests.ps1 index de99294a..ced15bec 100644 --- a/Tests/Visio.Tests.ps1 +++ b/Tests/Visio.Tests.ps1 @@ -13,7 +13,7 @@ Describe 'Visio cmdlets' { It 'creates, loads, and inspects a Visio document' { $path = Join-Path $TestDrive 'diagram.vsdx' - $document = New-OfficeVisio -Path $path -Title 'Visio smoke' -Author 'PSWriteOffice' -PassThru + $document = New-OfficeVisio -Path $path -Title 'Visio smoke' -Author 'PSWriteOffice' -NoSave $document.Pages[0].AddRectangle(2, 2, 2, 1, 'Visio smoke') | Out-Null $document | Save-OfficeVisio -Path $path | Out-Null @@ -36,7 +36,7 @@ Describe 'Visio cmdlets' { $svgPath = Join-Path $TestDrive 'export.svg' $pngPath = Join-Path $TestDrive 'export.png' - $document = New-OfficeVisio -Path $path -PassThru + $document = New-OfficeVisio -Path $path -NoSave $document.Pages[0].AddRectangle(2, 2, 2, 1, 'SVG smoke') | Out-Null $document | Save-OfficeVisio -Path $path | Out-Null @@ -81,12 +81,12 @@ Describe 'Visio cmdlets' { It 'saves to the associated path without closing the Visio document' { $path = Join-Path $TestDrive 'associated-save.vsdx' - $document = New-OfficeVisio -Path $path -PassThru + $document = New-OfficeVisio -Path $path -NoSave $document.Pages[0].AddRectangle(2, 2, 2, 1, 'First save') | Out-Null - $savedFile = $document | Save-OfficeVisio - $savedFile | Should -BeOfType System.IO.FileInfo - $savedFile.FullName | Should -Be $path + $savedOutput = @($document | Save-OfficeVisio) + $savedOutput | Should -HaveCount 0 + Test-Path -LiteralPath $path | Should -BeTrue $document.Pages[0].AddRectangle(5, 2, 2, 1, 'Second save') | Out-Null $returned = $document | Save-OfficeVisio -PassThru @@ -104,7 +104,7 @@ Describe 'Visio cmdlets' { } } | Out-Null - $results = @(Export-OfficeVisioImage -Path $path -OutputPath $output -Format Svg) + $results = @(Export-OfficeVisioImage -Path $path -OutputPath $output -Format Svg -PassThru) $results | Should -HaveCount 2 $results | ForEach-Object { $_.GetType().FullName | Should -Be 'OfficeIMO.Drawing.OfficeImageExportResult' @@ -346,7 +346,7 @@ Describe 'Visio cmdlets' { It 'arranges Visio shapes with OfficeIMO selection layout and layers' { $path = Join-Path $TestDrive 'visio-layout.vsdx' - $document = New-OfficeVisio -Path $path -PassThru + $document = New-OfficeVisio -Path $path -NoSave $page = $document.Pages[0] $shape1 = $page.AddRectangle(1, 4, 1, 0.5, 'One') $shape2 = $page.AddRectangle(3, 3, 1, 0.5, 'Two') @@ -367,7 +367,7 @@ Describe 'Visio cmdlets' { $ordered[1].PinX | Should -BeGreaterThan $ordered[0].PinX $ordered[2].PinX | Should -BeGreaterThan $ordered[1].PinX - $container = Add-OfficeVisioContainer -Page $page -ShapeId $shape1.Id, $shape2.Id, $shape3.Id -Id 'milestone-container' -Text 'Milestones' -Margin 0.2 -HeadingHeight 0.3 -FillColor '#E0F2FE' -LineColor '#0369A1' + $container = Add-OfficeVisioContainer -Page $page -ShapeId $shape1.Id, $shape2.Id, $shape3.Id -Id 'milestone-container' -Text 'Milestones' -Margin 0.2 -HeadingHeight 0.3 -FillColor '#E0F2FE' -LineColor '#0369A1' -PassThru $container.IsContainer | Should -BeTrue $container.ContainerMemberIds | Should -Contain $shape1.Id $shape1.ContainerOwnerIds | Should -Contain 'milestone-container' diff --git a/Tests/WebsiteDocumentation.Tests.ps1 b/Tests/WebsiteDocumentation.Tests.ps1 index 2c4af289..09531395 100644 --- a/Tests/WebsiteDocumentation.Tests.ps1 +++ b/Tests/WebsiteDocumentation.Tests.ps1 @@ -7,6 +7,8 @@ BeforeAll { $script:apiRoot = Join-Path $script:repoRoot 'WebsiteArtifacts\apidocs\powershell' $script:generatedHelpPath = Join-Path $script:repoRoot 'Docs\Generated\PSWriteOffice-help.xml' $script:sourceSnapshotManifestPath = Join-Path $script:apiRoot 'PSWriteOffice.psd1' + $script:sourceExamplesRoot = Join-Path $script:repoRoot 'Examples' + $script:snapshotExamplesRoot = Join-Path $script:apiRoot 'examples' $script:commandFamiliesGuidePath = Join-Path $script:repoRoot 'Website\content\project-docs\docs\command-families.md' $script:overviewGuidePath = Join-Path $script:repoRoot 'Website\content\project-docs\docs\overview.md' $script:projectDocsRoot = Join-Path $script:repoRoot 'Website\content\project-docs\docs' @@ -14,6 +16,28 @@ BeforeAll { } Describe 'PSWriteOffice website documentation catalog' { + It 'keeps the website example snapshot identical to the repository examples' { + $sourceFiles = @(Get-ChildItem -LiteralPath $script:sourceExamplesRoot -Recurse -File) + $snapshotFiles = @(Get-ChildItem -LiteralPath $script:snapshotExamplesRoot -Recurse -File) + + $sourceByPath = @{} + foreach ($file in $sourceFiles) { + $relative = $file.FullName.Substring($script:sourceExamplesRoot.Length).TrimStart('\', '/') + $sourceByPath[$relative] = $file.FullName + } + $snapshotByPath = @{} + foreach ($file in $snapshotFiles) { + $relative = $file.FullName.Substring($script:snapshotExamplesRoot.Length).TrimStart('\', '/') + $snapshotByPath[$relative] = $file.FullName + } + + @($sourceByPath.Keys | Sort-Object) | Should -Be @($snapshotByPath.Keys | Sort-Object) + foreach ($relative in $sourceByPath.Keys) { + (Get-FileHash -LiteralPath $sourceByPath[$relative] -Algorithm SHA256).Hash | + Should -Be (Get-FileHash -LiteralPath $snapshotByPath[$relative] -Algorithm SHA256).Hash -Because $relative + } + } + It 'covers every exported cmdlet exactly once' { $outputPath = Join-Path $TestDrive 'command-catalog.json' & $script:catalogScript -RepositoryRoot $script:repoRoot -OutputPath $outputPath | Out-Null diff --git a/Tests/WordDsl.Tests.ps1 b/Tests/WordDsl.Tests.ps1 index 8ce3e5f0..83c74de2 100644 --- a/Tests/WordDsl.Tests.ps1 +++ b/Tests/WordDsl.Tests.ps1 @@ -256,10 +256,6 @@ Describe 'Word DSL surface' { } { Get-ZipEntriesLocal -Path $path } | Should -Throw - $autoSavePath = Join-Path $TestDrive 'EncryptedWordAutoSave.docx' - { New-OfficeWord -Path $autoSavePath -Password 'secret' -AutoSave -ErrorAction Stop } | - Should -Throw '*require explicit Save-OfficeWord*' - $document = Get-OfficeWord -Path $path -Password 'secret' -ReadOnly try { $document.Paragraphs.Text | Should -Contain 'Encrypted Word value' @@ -320,8 +316,7 @@ Describe 'Word DSL surface' { $document | Close-OfficeWord } - { Get-OfficeWord -Path $path -Password 'secret' -AutoSave -ErrorAction Stop } | - Should -Throw '*require explicit Save-OfficeWord*' + (Get-Command Get-OfficeWord).Parameters.Keys | Should -Not -Contain 'AutoSave' } It 'runs the Word DSL against a cloned template document' { @@ -1129,7 +1124,7 @@ Describe 'Word DSL surface' { [PSCustomObject]@{ Month = 'Mar'; Sales = 15; Profit = 7 } ) - $document = New-OfficeWord -Path $path + $document = New-OfficeWord -Path $path -NoSave try { $chart = Add-OfficeWordChart -Document $document -Type Line -InputObject $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -XAxisTitle 'Month' -YAxisTitle 'Value' -Title 'Monthly Trend' -PassThru $chart.Title | Should -Be 'Monthly Trend' @@ -1473,7 +1468,7 @@ Describe 'Word DSL surface' { } } | Out-Null - $replacements = Update-OfficeWordText -Path $path -OldValue 'FY24' -NewValue 'FY25' -IncludeHyperlinkText -IncludeHyperlinkUri -IncludeHyperlinkAnchor -IncludeHyperlinkTooltip + $replacements = Update-OfficeWordText -Path $path -OldValue 'FY24' -NewValue 'FY25' -IncludeHyperlinkText -IncludeHyperlinkUri -IncludeHyperlinkAnchor -IncludeHyperlinkTooltip -PassThru $replacements | Should -BeGreaterThan 0 $document = Get-OfficeWord -Path $path -ReadOnly @@ -1509,7 +1504,7 @@ Describe 'Word DSL surface' { $editable.Dispose() } - $replacements = Update-OfficeWordText -Path $path -OldValue 'FY24' -NewValue 'FY25' -IncludeHyperlinkUri + $replacements = Update-OfficeWordText -Path $path -OldValue 'FY24' -NewValue 'FY25' -IncludeHyperlinkUri -PassThru $replacements | Should -Be 2 $document = Get-OfficeWord -Path $path -ReadOnly @@ -1523,12 +1518,12 @@ Describe 'Word DSL surface' { It 'does not mutate live Word documents when text update uses WhatIf' { $path = Join-Path $TestDrive 'DslReplaceLiveWhatIf.docx' - $document = New-OfficeWord -Path $path + $document = New-OfficeWord -Path $path -NoSave try { $document.AddParagraph('FY24 live document') | Out-Null - Update-OfficeWordText -Document $document -OldValue 'FY24' -NewValue 'FY25' -WhatIf | Should -BeNullOrEmpty + Update-OfficeWordText -Document $document -OldValue 'FY24' -NewValue 'FY25' -WhatIf -PassThru | Should -BeNullOrEmpty (Find-OfficeWord -Document $document -Text 'FY24').Count | Should -Be 1 (Find-OfficeWord -Document $document -Text 'FY25').Count | Should -Be 0 @@ -1539,12 +1534,12 @@ Describe 'Word DSL surface' { It 'does not mutate the tracked Word document when text update uses WhatIf' { $path = Join-Path $TestDrive 'DslReplaceTrackedWhatIf.docx' - $document = New-OfficeWord -Path $path + $document = New-OfficeWord -Path $path -NoSave try { $document.AddParagraph('FY24 tracked document') | Out-Null - Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -WhatIf | Should -BeNullOrEmpty + Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -WhatIf -PassThru | Should -BeNullOrEmpty (Find-OfficeWord -Document $document -Text 'FY24').Count | Should -Be 1 (Find-OfficeWord -Document $document -Text 'FY25').Count | Should -Be 0 @@ -1557,14 +1552,14 @@ Describe 'Word DSL surface' { $pathOne = Join-Path $TestDrive 'TrackedOne.docx' $pathTwo = Join-Path $TestDrive 'TrackedTwo.docx' - $docOne = New-OfficeWord -Path $pathOne - $docTwo = New-OfficeWord -Path $pathTwo + $docOne = New-OfficeWord -Path $pathOne -NoSave + $docTwo = New-OfficeWord -Path $pathTwo -NoSave try { $docOne.AddParagraph('First tracked document') | Out-Null $docTwo.AddParagraph('Second tracked FY24 document') | Out-Null - Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' | Should -Be 1 + Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -PassThru | Should -Be 1 Close-OfficeWord -Save Close-OfficeWord -All -Save @@ -1595,7 +1590,7 @@ Describe 'Word DSL surface' { It 'does not fall back to the tracked document when -Document is null' { $path = Join-Path $TestDrive 'NullDocumentGuard.docx' - $doc = New-OfficeWord -Path $path + $doc = New-OfficeWord -Path $path -NoSave try { $nullDocument = $null diff --git a/Website/content/examples/compose-pdf-report.md b/Website/content/examples/compose-pdf-report.md index cb6a604c..5fd0cef4 100644 --- a/Website/content/examples/compose-pdf-report.md +++ b/Website/content/examples/compose-pdf-report.md @@ -14,8 +14,7 @@ It is adapted from `Examples/Pdf/Example-PdfReportDsl.ps1` and `Examples/Pdf/Exa Import-Module PSWriteOffice $outputDirectory = Join-Path $PSScriptRoot 'Output' -New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null - +$null = New-Item -ItemType Directory -Path $outputDirectory -Force $coverPath = Join-Path $outputDirectory 'Cover.pdf' $statusPath = Join-Path $outputDirectory 'Status.pdf' $finalPath = Join-Path $outputDirectory 'Combined.pdf' diff --git a/Website/content/examples/create-excel-workbook.md b/Website/content/examples/create-excel-workbook.md index 4e8b822f..bd7cc151 100644 --- a/Website/content/examples/create-excel-workbook.md +++ b/Website/content/examples/create-excel-workbook.md @@ -14,8 +14,7 @@ It is adapted from `Examples/Excel/Example-ExcelBasic.ps1`. Import-Module PSWriteOffice $outputPath = Join-Path $PSScriptRoot 'Output\RevenueSnapshot.xlsx' -New-Item -ItemType Directory -Path (Split-Path $outputPath) -Force | Out-Null - +$null = New-Item -ItemType Directory -Path (Split-Path $outputPath) -Force $data = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; YoY = 0.12 } [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; YoY = 0.22 } diff --git a/Website/content/examples/create-powerpoint-deck.md b/Website/content/examples/create-powerpoint-deck.md index f5b3c4d0..9a654501 100644 --- a/Website/content/examples/create-powerpoint-deck.md +++ b/Website/content/examples/create-powerpoint-deck.md @@ -13,10 +13,9 @@ It is adapted from `Examples/PowerPoint/Example-PowerPointTransitionsAndSizing.p ```powershell Import-Module PSWriteOffice -$outputPath = Join-Path $PSScriptRoot 'Output\ServiceBrief.pptx' -New-Item -ItemType Directory -Path (Split-Path $outputPath) -Force | Out-Null - -$deck = New-OfficePowerPoint -Path $outputPath { +$outputDirectory = (New-Item -ItemType Directory -Path (Join-Path $PSScriptRoot 'Output') -Force).FullName +$outputPath = Join-Path $outputDirectory 'ServiceBrief.pptx' +$deck = New-OfficePowerPoint -Path $outputPath -NoSave { PptSlide { PptTitle -Title 'Service Brief' PptTextBox -Text 'Generated with PSWriteOffice' -X 80 -Y 145 -Width 360 -Height 50 @@ -30,7 +29,7 @@ Get-OfficePowerPointSlide -Presentation $deck -Index 0 | Set-OfficePowerPointSlideTransition -Transition Fade Set-OfficePowerPointSlideSize -Presentation $deck -Preset Screen16x9 -Save-OfficePowerPoint -Presentation $deck +Close-OfficePowerPoint -Presentation $deck -Save ``` ## What this demonstrates diff --git a/Website/content/examples/create-visio-diagram.md b/Website/content/examples/create-visio-diagram.md index ff764f46..5e1c1934 100644 --- a/Website/content/examples/create-visio-diagram.md +++ b/Website/content/examples/create-visio-diagram.md @@ -14,14 +14,13 @@ It is adapted from `Examples/Visio/Example-Visio-StencilFlow.ps1`. Import-Module PSWriteOffice $outputDirectory = Join-Path $PSScriptRoot 'Output' -New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null - +$null = New-Item -ItemType Directory -Path $outputDirectory -Force $visioPath = Join-Path $outputDirectory 'OnboardingFlow.vsdx' $svgPath = Join-Path $outputDirectory 'OnboardingFlow.svg' $pngPath = Join-Path $outputDirectory 'OnboardingFlow.png' New-OfficeVisio -Path $visioPath -Title 'Customer onboarding flow' -UseMastersByDefault -RequestRecalcOnOpen { - Import-OfficeVisioStencil -BuiltIn Flowchart -Name Flow -Default | Out-Null + Import-OfficeVisioStencil -BuiltIn Flowchart -Name Flow -Default VisioStencil -Catalog Flow -Stencil process -Key intake -Text 'Intake' -X 1.5 -Y 4 VisioStencil -Catalog Flow -Stencil decision -Key review -Text 'Review?' -X 4 -Y 4 diff --git a/Website/content/examples/create-word-report.md b/Website/content/examples/create-word-report.md index 0d279105..c2eb3625 100644 --- a/Website/content/examples/create-word-report.md +++ b/Website/content/examples/create-word-report.md @@ -14,8 +14,7 @@ It is adapted from `Examples/Word/Example-WordBasic.ps1`. Import-Module PSWriteOffice $outputPath = Join-Path $PSScriptRoot 'Output\RevenueSnapshot.docx' -New-Item -ItemType Directory -Path (Split-Path $outputPath) -Force | Out-Null - +$null = New-Item -ItemType Directory -Path (Split-Path $outputPath) -Force $data = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; YoY = '12%' } [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; YoY = '22%' } diff --git a/Website/content/examples/read-and-convert-documents.md b/Website/content/examples/read-and-convert-documents.md index 082f10de..1f140449 100644 --- a/Website/content/examples/read-and-convert-documents.md +++ b/Website/content/examples/read-and-convert-documents.md @@ -14,8 +14,7 @@ This page collects small patterns from the Reader, Markdown, CSV, Word conversio Import-Module PSWriteOffice $outputDirectory = Join-Path $PSScriptRoot 'Output' -New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null - +$null = New-Item -ItemType Directory -Path $outputDirectory -Force $markdownPath = Join-Path $outputDirectory 'Summary.md' $csvPath = Join-Path $outputDirectory 'Status.csv' $wordPath = Join-Path $outputDirectory 'Summary.docx' diff --git a/Website/content/examples/review-office-documents-as-html.md b/Website/content/examples/review-office-documents-as-html.md index 6097119f..dff3221b 100644 --- a/Website/content/examples/review-office-documents-as-html.md +++ b/Website/content/examples/review-office-documents-as-html.md @@ -12,8 +12,7 @@ Use HTML review output when a workbook or deck needs lightweight inspection with Import-Module PSWriteOffice $outputDirectory = Join-Path $PSScriptRoot 'Output' -New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null - +$null = New-Item -ItemType Directory -Path $outputDirectory -Force $workbookPath = Join-Path $outputDirectory 'ServiceReview.xlsx' $deckPath = Join-Path $outputDirectory 'ServiceReview.pptx' @@ -28,14 +27,14 @@ New-OfficeExcel -Path $workbookPath { Add-OfficeExcelTable -Data $rows -TableName 'Services' -TableStyle 'TableStyleMedium4' Set-OfficeExcelColumn -Column 1, 2, 3 -AutoFit } -} -PassThru | Out-Null - -$deck = New-OfficePowerPoint -FilePath $deckPath -$slide = Add-OfficePowerPointSlide -Presentation $deck -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Service Review' | Out-Null -Add-OfficePowerPointTextBox -Slide $slide -Text 'Review the service status before the weekly meeting.' -X 80 -Y 140 -Width 560 -Height 80 | Out-Null -Save-OfficePowerPoint -Presentation $deck -$deck.Dispose() +} + +$deck = New-OfficePowerPoint -Path $deckPath -NoSave +$slide = Add-OfficePowerPointSlide -Presentation $deck -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Service Review' +Add-OfficePowerPointTextBox -Slide $slide -Text 'Review the service status before the weekly meeting.' -X 80 -Y 140 -Width 560 -Height 80 +$deck | Save-OfficePowerPoint +$deck | Close-OfficePowerPoint ConvertTo-OfficeExcelHtml -Path $workbookPath -OutputPath (Join-Path $outputDirectory 'ServiceReview.workbook.html') -Title 'Workbook Review' ConvertTo-OfficePowerPointHtml -Path $deckPath -Profile VisualReview -OutputPath (Join-Path $outputDirectory 'ServiceReview.deck.visual.html') -Title 'Deck Review' diff --git a/Website/content/project-docs/docs/command-families.md b/Website/content/project-docs/docs/command-families.md index 8cb2b827..5965bba5 100644 --- a/Website/content/project-docs/docs/command-families.md +++ b/Website/content/project-docs/docs/command-families.md @@ -10,21 +10,21 @@ The PSWriteOffice website catalog groups every exported cmdlet into exactly one | Family | Exported commands | Guide | | --- | ---: | --- | -| Excel | 158 | [Excel automation](/docs/pswriteoffice/excel/) | -| Word | 92 | [Word automation](/docs/pswriteoffice/word/) | -| PDF | 85 | [PDF automation](/docs/pswriteoffice/pdf/) | -| PowerPoint | 58 | [PowerPoint automation](/docs/pswriteoffice/powerpoint/) | -| Markdown | 25 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | -| Visio | 23 | [Visio diagrams](/docs/pswriteoffice/visio/) | -| Reader and extraction | 13 | [Reader and extraction](/docs/pswriteoffice/reader/) | +| Excel | 162 | [Excel automation](/docs/pswriteoffice/excel/) | +| Word | 97 | [Word automation](/docs/pswriteoffice/word/) | +| PDF | 91 | [PDF automation](/docs/pswriteoffice/pdf/) | +| PowerPoint | 61 | [PowerPoint automation](/docs/pswriteoffice/powerpoint/) | +| Markdown | 26 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | +| Visio | 24 | [Visio diagrams](/docs/pswriteoffice/visio/) | +| Reader and extraction | 14 | [Reader and extraction](/docs/pswriteoffice/reader/) | | Confluence Cloud | 7 | [Confluence Cloud publishing](/docs/pswriteoffice/confluence/) | -| RTF | 5 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | +| RTF | 6 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | | CSV | 5 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | -| OpenDocument | 5 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | -| Email | 4 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | +| OpenDocument | 11 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | +| Email | 9 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | | AsciiDoc | 4 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | | LaTeX | 4 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | -| HTML assets | 1 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | +| HTML assets | 3 | [Open and text formats](/docs/pswriteoffice/open-text-formats/) | | Cross-format visuals | 1 | [Automation patterns](/docs/pswriteoffice/automation-patterns/) | | Protection capabilities | 1 | [Automation patterns](/docs/pswriteoffice/automation-patterns/) | | Shared authoring primitives | 1 | [Automation patterns](/docs/pswriteoffice/automation-patterns/) | diff --git a/Website/content/project-docs/docs/excel-export-publish.md b/Website/content/project-docs/docs/excel-export-publish.md index 26438874..0af4addc 100644 --- a/Website/content/project-docs/docs/excel-export-publish.md +++ b/Website/content/project-docs/docs/excel-export-publish.md @@ -11,7 +11,7 @@ Excel often sits in the middle of a pipeline: CSV or application data arrives, a `Import-OfficeExcelDelimitedText` adds normalized CSV or other delimited data to an existing workbook. Specify the delimiter and culture rather than relying on machine defaults. ```powershell -Import-OfficeExcelDelimitedText -InputPath '.\Report.xlsx' ` +Import-OfficeExcelDelimitedText -Path '.\Report.xlsx' ` -SourcePath '.\Sales.csv' -Delimiter ';' ` -CultureName 'en-US' -SheetName Sales ``` diff --git a/Website/content/project-docs/docs/excel-merge-compare.md b/Website/content/project-docs/docs/excel-merge-compare.md index 98604e5d..c02929bf 100644 --- a/Website/content/project-docs/docs/excel-merge-compare.md +++ b/Website/content/project-docs/docs/excel-merge-compare.md @@ -9,7 +9,7 @@ Workbook consolidation and workbook comparison solve different problems. Joining ## Consolidate selected sheets ```powershell -Join-OfficeExcelWorkbook -InputPath '.\Consolidated.xlsx' ` +Join-OfficeExcelWorkbook -Path '.\Consolidated.xlsx' ` -SourcePath '.\Regions.xlsx' ` -SourceSheet North,South ` -SheetNamePrefix 'Region ' diff --git a/Website/content/project-docs/docs/excel.md b/Website/content/project-docs/docs/excel.md index f306b777..ea2d48bd 100644 --- a/Website/content/project-docs/docs/excel.md +++ b/Website/content/project-docs/docs/excel.md @@ -4,7 +4,7 @@ description: "Build, inspect, validate, compare, repair, and publish workbook wo layout: docs --- -Excel is the largest PSWriteOffice family with 158 exported commands. It covers workbook creation and reading, sheet and range operations, formulas, styling, tables, charts, pivots, validation, comments, images, links, templates, dashboards, protection, accessibility, comparison, repair, streaming contracts, and direct range or chart image export. +Excel is the largest PSWriteOffice family with 159 exported commands. It covers workbook creation and reading, sheet and range operations, formulas, styling, tables, charts, pivots, validation, comments, images, links, templates, dashboards, protection, accessibility, comparison, repair, streaming contracts, and direct range or chart image export. ## Export rows in one line diff --git a/Website/content/project-docs/docs/install.md b/Website/content/project-docs/docs/install.md index 84e75b0f..62267dbe 100644 --- a/Website/content/project-docs/docs/install.md +++ b/Website/content/project-docs/docs/install.md @@ -31,8 +31,7 @@ Examples should write to a script-local or explicitly configured artifact direct ```powershell $outputRoot = Join-Path $PSScriptRoot 'Output' -New-Item -ItemType Directory -Path $outputRoot -Force | Out-Null - +$null = New-Item -ItemType Directory -Path $outputRoot -Force $wordPath = Join-Path $outputRoot 'Report.docx' $pdfPath = Join-Path $outputRoot 'Report.pdf' ``` diff --git a/Website/content/project-docs/docs/markdown-convert-publish.md b/Website/content/project-docs/docs/markdown-convert-publish.md index 23531fac..1f503cbf 100644 --- a/Website/content/project-docs/docs/markdown-convert-publish.md +++ b/Website/content/project-docs/docs/markdown-convert-publish.md @@ -11,7 +11,7 @@ Markdown is often the editable source while HTML is the delivery artifact. Keep `ConvertTo-OfficeMarkdownHtml` supports fragment or document output, visual themes, CSS delivery modes, anchor links, task lists, footnotes, external-link attributes, and explicit URL or image restrictions. ```powershell -ConvertTo-OfficeMarkdownHtml -InputPath '.\Runbook.md' ` +ConvertTo-OfficeMarkdownHtml -Path '.\Runbook.md' ` -OutputPath '.\Runbook.html' -DocumentMode ` -Title 'Operations runbook' -IncludeAnchorLinks ``` diff --git a/Website/content/project-docs/docs/markdown-read-parse.md b/Website/content/project-docs/docs/markdown-read-parse.md index ab985844..7ac8e9dc 100644 --- a/Website/content/project-docs/docs/markdown-read-parse.md +++ b/Website/content/project-docs/docs/markdown-read-parse.md @@ -9,10 +9,10 @@ Markdown is simple text, but structure-aware parsing is safer than ad hoc regula ## Inspect semantic structures ```powershell -$headings = Get-OfficeMarkdownHeading -InputPath '.\Article.md' -$frontMatter = Get-OfficeMarkdownFrontMatter -InputPath '.\Article.md' -$tables = Get-OfficeMarkdownTable -InputPath '.\Article.md' -AsObject -$nodes = Get-OfficeMarkdownNode -InputPath '.\Article.md' -MaxDepth 3 +$headings = Get-OfficeMarkdownHeading -Path '.\Article.md' +$frontMatter = Get-OfficeMarkdownFrontMatter -Path '.\Article.md' +$tables = Get-OfficeMarkdownTable -Path '.\Article.md' -AsObject +$nodes = Get-OfficeMarkdownNode -Path '.\Article.md' -MaxDepth 3 ``` Reader profiles and URL restrictions make parsing behavior explicit. Use heading level, text, anchor, node type, and depth filters to return only the structures the workflow needs. diff --git a/Website/content/project-docs/docs/object-workflows.md b/Website/content/project-docs/docs/object-workflows.md index 273214da..ca22810d 100644 --- a/Website/content/project-docs/docs/object-workflows.md +++ b/Website/content/project-docs/docs/object-workflows.md @@ -16,6 +16,8 @@ $services | Export-OfficeExcel -Path '.\Services.xlsx' -WorksheetName 'Services' This is the closest fit for inventory exports, query results, and data passed from modules such as DbaClientX. Start here unless the workbook needs several sheets, formulas, charts, or carefully placed content. +The same object boundary works for operational modules. The [PSEventViewer report recipe](https://github.com/EvotecIT/PSWriteOffice/blob/main/Examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1) queries typed events once, projects stable report columns, and creates both Excel and Word deliverables without requiring either module to know about the other's internals. + ## Incremental jobs: keep the document object Use an object when normal PowerShell control flow decides what to add. Create the document with `-NoSave`, pass it through composition commands, then save and close it once. diff --git a/Website/content/project-docs/docs/open-text-formats.md b/Website/content/project-docs/docs/open-text-formats.md index fb49bcd5..52b45311 100644 --- a/Website/content/project-docs/docs/open-text-formats.md +++ b/Website/content/project-docs/docs/open-text-formats.md @@ -10,7 +10,7 @@ PSWriteOffice is not limited to the three desktop Office formats. Smaller comman ## Markdown -Twenty-five commands build and inspect typed Markdown. Add headings, paragraphs, lists, task lists, tables, code, callouts, details, front matter, images, quotes, definition lists, and tables of contents. Reader commands expose headings, nodes, tables, and front matter; converters bridge HTML and Word workflows. +Twenty-six commands build and inspect typed Markdown. Add headings, paragraphs, lists, task lists, tables, code, callouts, details, front matter, images, quotes, definition lists, and tables of contents. Reader commands expose headings, nodes, tables, and front matter; converters bridge HTML and Word workflows. Start with the [operations runbook](https://github.com/EvotecIT/PSWriteOffice/blob/main/Examples/Markdown/Recipe-Markdown-OperationsRunbook.ps1) for operational content or the [release notes recipe](https://github.com/EvotecIT/PSWriteOffice/blob/main/Examples/Markdown/Recipe-Markdown-ReleaseNotes.ps1) for publishable change documentation. The [DSL cookbook](/docs/pswriteoffice/dsl-cookbook/) includes both and shows how the same data can also produce Word, Excel, PowerPoint, and PDF output. @@ -24,7 +24,7 @@ Use the focused Markdown guides for complete workflows: ## RTF -Five canonical commands create, load, update, convert, and inspect Rich Text Format documents. Use RTF when a lightweight rich-text interchange file is the required source or destination, and keep loss-aware conversion diagnostics for complex content. +Six canonical commands create, load, update, convert, inspect, and configure PDF export for Rich Text Format documents. Use RTF when a lightweight rich-text interchange file is the required source or destination, and keep loss-aware conversion diagnostics for complex content. See [update and convert RTF](https://github.com/EvotecIT/PSWriteOffice/blob/main/Examples/Rtf/Recipe-Rtf-UpdateAndConvert.ps1) for an end-to-end example. @@ -36,11 +36,33 @@ See [safe CSV export](https://github.com/EvotecIT/PSWriteOffice/blob/main/Exampl ## OpenDocument -Five commands create, read, convert, and save ODT, ODS, and ODP artifacts through OfficeIMO.OpenDocument. These are native managed workflows rather than LibreOffice automation. +OpenDocument commands create, read, convert, and save ODT, ODS, and ODP artifacts through OfficeIMO.OpenDocument. These are native managed workflows rather than LibreOffice automation. Creation is composable from PowerShell: ODT supports headings and paragraphs, ODS supports sheets and typed cells, and ODP supports slides and positioned text boxes. + +```powershell +New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content { + Add-OfficeOpenDocumentHeading -Text 'Service report' -Level 1 + Add-OfficeOpenDocumentParagraph -Text 'Generated without desktop Office or LibreOffice.' +} + +New-OfficeOpenDocument -Kind Spreadsheet -Path .\Status.ods -Content { + Add-OfficeOpenDocumentSheet -Name Services -Content { + Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Service' + Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value 'Healthy' + Set-OfficeOpenDocumentCell -Row 1 -Column 0 -Value 'Directory' + Set-OfficeOpenDocumentCell -Row 1 -Column 1 -Value $true + } +} +``` + +Use `New-OfficeWordOpenDocumentOptions`, `New-OfficeExcelOpenDocumentOptions`, or `New-OfficePowerPointOpenDocumentOptions` when conversion needs explicit fidelity or resource controls. The raw OfficeIMO option parameters remain available as an advanced escape hatch. ## Email -Four commands load and save messages and mailbox artifacts through OfficeIMO.Email. The underlying engine covers multiple message, personal-information, store, and address-book families; exact support and diagnostics belong to the generated command/API reference. +Four artifact commands load and save messages and mailbox files through OfficeIMO.Email, and five option builders expose their safety and fidelity policies. The underlying engine covers multiple message, personal-information, store, and address-book families; exact support and diagnostics belong to the generated command/API reference. + +The module boundary is deliberate. PSWriteOffice treats email as document content: it reads or writes supported artifacts and lets OfficeIMO.Reader normalize mail sources for mixed-format search and reporting. [Mailozaurr](https://github.com/EvotecIT/Mailozaurr) owns transport, authentication, mailbox/store lifecycle, PST/OST import and conversion, querying, export, and delivery. Workflows can use Mailozaurr to acquire or deliver content and pass ordinary paths or attachments to PSWriteOffice without either module duplicating the other's operational responsibilities. The [PDF delivery recipe](https://github.com/EvotecIT/PSWriteOffice/blob/main/Examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1) is a runnable handoff: PSWriteOffice creates the attachment and Mailozaurr sends it. It uses `-WhatIf` unless `-Send` is explicitly supplied. + +Advanced safety and fidelity controls are also PowerShell-native. Use `New-OfficeEmailReaderOptions`, `New-OfficeEmailWriterOptions`, `New-OfficeEmailStoreReaderOptions`, `New-OfficeEmailMailboxReaderOptions`, and `New-OfficeEmailMailboxWriterOptions`; their output binds directly to the matching `-Options` or `-StoreOptions` parameter. You do not need a hashtable, `New-Object`, or an OfficeIMO constructor. ## AsciiDoc and LaTeX diff --git a/Website/content/project-docs/docs/overview.md b/Website/content/project-docs/docs/overview.md index df666a38..dd03b972 100644 --- a/Website/content/project-docs/docs/overview.md +++ b/Website/content/project-docs/docs/overview.md @@ -21,10 +21,10 @@ The module manifest is the source of truth for exported cmdlets and aliases. The ## Major families -- **Excel — 158 commands:** authoring, reading, charts, pivots, validation, comments, templates, comparison, repair, accessibility, streaming, visual placement, and image export. -- **Word — 92 commands:** sections, paragraphs, lists, tables, fields, content controls, review, mail merge, protection, merging, visual placement, and conversion. -- **PDF — 85 commands:** composition, editable Word/Excel/PowerPoint reconstruction, text and image extraction, merge/split, pages, forms, annotations, attachments, signatures, compliance, redaction, optimization, visual placement, and diagnostics. -- **PowerPoint — 58 commands:** slides, sections, shapes, charts, tables, notes, themes, layouts, transitions, visual placement, import, inspection, and HTML review. +- **Excel — 162 commands:** authoring, reading, charts, pivots, validation, comments, templates, comparison, repair, accessibility, streaming, visual placement, and image export. +- **Word — 97 commands:** sections, paragraphs, lists, tables, fields, content controls, review, mail merge, protection, merging, visual placement, and conversion. +- **PDF — 91 commands:** composition, explicit Word/Excel/PowerPoint/Markdown/RTF export, editable Office reconstruction, text and image extraction, merge/split, pages, forms, annotations, attachments, signatures, compliance, redaction, optimization, visual placement, and diagnostics. +- **PowerPoint — 61 commands:** slides, sections, shapes, charts, tables, notes, themes, layouts, transitions, visual placement, import, inspection, and HTML review. - **Confluence Cloud — 7 commands:** plan, create, update, and remove pages; preserve managed sections; and list, upload, or download attachments. - **Protection capabilities — 1 commands:** inspect OfficeIMO's shared protected-content support contract as typed rows, JSON, or Markdown. - **Markdown, Visio, Reader, visuals, and open formats:** typed Markdown, VSDX diagrams and stencils, cross-format visual placement, normalized extraction, RTF, CSV, ODT/ODS/ODP, email, AsciiDoc, and LaTeX workflows. diff --git a/Website/content/project-docs/docs/powerpoint-read-inspect.md b/Website/content/project-docs/docs/powerpoint-read-inspect.md index 39a35bec..ddf2b568 100644 --- a/Website/content/project-docs/docs/powerpoint-read-inspect.md +++ b/Website/content/project-docs/docs/powerpoint-read-inspect.md @@ -9,7 +9,7 @@ Use the PowerPoint read surface to inventory a deck before modification, build a ## Inspect slide by slide ```powershell -$presentation = Get-OfficePowerPoint -FilePath '.\Briefing.pptx' +$presentation = Get-OfficePowerPoint -Path '.\Briefing.pptx' for ($index = 0; $index -lt $presentation.Slides.Count; $index++) { $slide = Get-OfficePowerPointSlide -Presentation $presentation -Index $index Get-OfficePowerPointSlideSummary -Slide $slide diff --git a/Website/content/project-docs/docs/powerpoint-reuse-slides.md b/Website/content/project-docs/docs/powerpoint-reuse-slides.md index 627f0d71..ddb5009f 100644 --- a/Website/content/project-docs/docs/powerpoint-reuse-slides.md +++ b/Website/content/project-docs/docs/powerpoint-reuse-slides.md @@ -32,7 +32,7 @@ PptNew -Path $targetPath { } } -$presentation = Get-OfficePowerPoint -FilePath $targetPath +$presentation = Get-OfficePowerPoint -Path $targetPath Import-OfficePowerPointSlide -Presentation $presentation ` -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1 diff --git a/Website/content/project-docs/docs/powerpoint-update-existing.md b/Website/content/project-docs/docs/powerpoint-update-existing.md index 7cf2a4cd..fc6a6d02 100644 --- a/Website/content/project-docs/docs/powerpoint-update-existing.md +++ b/Website/content/project-docs/docs/powerpoint-update-existing.md @@ -11,7 +11,7 @@ Targeted updates are useful for recurring decks where the design should remain s Open the presentation, run `Update-OfficePowerPointText`, and close it with `-Save`. Use `-IncludeNotes` when the same term must change in speaker notes; table text is included by default and can be controlled explicitly. ```powershell -$deck = Get-OfficePowerPoint -FilePath '.\FY24-Review.pptx' +$deck = Get-OfficePowerPoint -Path '.\FY24-Review.pptx' Update-OfficePowerPointText -Presentation $deck ` -OldValue FY24 -NewValue FY25 -IncludeNotes Close-OfficePowerPoint -Presentation $deck -Save diff --git a/Website/content/project-docs/docs/powerpoint.md b/Website/content/project-docs/docs/powerpoint.md index a3e399e1..f2e1cd47 100644 --- a/Website/content/project-docs/docs/powerpoint.md +++ b/Website/content/project-docs/docs/powerpoint.md @@ -4,7 +4,7 @@ description: "Compose, inspect, update, theme, import, and render repeatable pre layout: docs --- -The PowerPoint family exports 58 commands for slide creation and editing, sections, shapes, images, text, charts, tables, notes, themes, layouts, transitions, import, inspection, designer decks, and semantic deck plans. +The PowerPoint family exports 59 commands for slide creation and editing, sections, shapes, images, text, charts, tables, notes, themes, layouts, transitions, import, inspection, designer decks, and semantic deck plans. ## Use a presentation object in normal scripts @@ -12,11 +12,10 @@ Create with `-NoSave`, add slides through an explicit presentation target, then ```powershell $presentation = New-OfficePowerPoint -Path '.\Briefing.pptx' -NoSave -$slide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Text +$slide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Text -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Actions' Add-OfficePowerPointTextBox -Slide $slide -Text 'Confirm the production date.' -X 90 -Y 170 -Width 700 -Height 60 -$presentation | Save-OfficePowerPoint -$presentation | Close-OfficePowerPoint +$presentation | Close-OfficePowerPoint -Save ``` ## Choose direct authoring or a deck plan diff --git a/Website/content/project-docs/docs/word-merge-mailmerge.md b/Website/content/project-docs/docs/word-merge-mailmerge.md index 724753c1..4f1cae4b 100644 --- a/Website/content/project-docs/docs/word-merge-mailmerge.md +++ b/Website/content/project-docs/docs/word-merge-mailmerge.md @@ -10,7 +10,7 @@ Word has two distinct merge workflows. Document merge appends complete files int ```powershell Join-OfficeWordDocument ` - -InputPath '.\Cover.docx' ` + -Path '.\Cover.docx' ` -AppendPath '.\Report.docx','.\Appendix.docx' ` -OutputPath '.\Delivery-Pack.docx' ``` diff --git a/Website/content/project-docs/docs/word.md b/Website/content/project-docs/docs/word.md index b39361cb..8115a766 100644 --- a/Website/content/project-docs/docs/word.md +++ b/Website/content/project-docs/docs/word.md @@ -4,7 +4,7 @@ description: "Create, inspect, update, review, merge, protect, and convert DOCX layout: docs --- -The Word family covers complete report creation and targeted updates to existing DOCX files. Its 92 exported commands include sections, paragraphs, text runs, lists, tables, images, charts, fields, links, headers and footers, notes, content controls, review, protection, merging, mail merge, and conversion. +The Word family covers complete report creation and targeted updates to existing DOCX files. Its 93 exported commands include sections, paragraphs, text runs, lists, tables, images, charts, fields, links, headers and footers, notes, content controls, review, protection, merging, mail merge, and conversion. ## Build a report diff --git a/WebsiteArtifacts/apidocs/powershell/PSWriteOffice-help.xml b/WebsiteArtifacts/apidocs/powershell/PSWriteOffice-help.xml index d4b2e488..1d195143 100644 --- a/WebsiteArtifacts/apidocs/powershell/PSWriteOffice-help.xml +++ b/WebsiteArtifacts/apidocs/powershell/PSWriteOffice-help.xml @@ -27,6 +27,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -66,6 +78,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -129,6 +153,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -7786,18 +7822,6 @@ Add-OfficeExcelPackageMetadata - - InputPath - - Workbook path to update. - - String - - String - - - None - Kind @@ -7826,6 +7850,18 @@ None + + Path + + Workbook path to update. + + String + + String + + + None + WorksheetName @@ -7932,18 +7968,6 @@ None - - InputPath - - Workbook path to update. - - String - - String - - - None - Kind @@ -7972,6 +7996,18 @@ None + + Path + + Workbook path to update. + + String + + String + + + None + WorksheetName @@ -8121,26 +8157,26 @@ None - - InputPath + + PassThru - Workbook path to update. + Emit page-break records after adding them. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit page-break records after adding them. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -8283,26 +8319,26 @@ None - - InputPath + + PassThru - Workbook path to update. + Emit page-break records after adding them. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit page-break records after adding them. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -10824,18 +10860,6 @@ None - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -10860,6 +10884,18 @@ None + + Path + + Workbook path to update. + + String + + String + + + None + QueryTableName @@ -11034,18 +11070,6 @@ None - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -11070,6 +11094,18 @@ None + + Path + + Workbook path to update. + + String + + String + + + None + QueryTableName @@ -11192,6 +11228,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Title @@ -11250,6 +11298,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Title @@ -11345,6 +11405,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PerRow @@ -11384,6 +11456,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PerRow @@ -11503,6 +11587,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Title @@ -11578,6 +11674,18 @@ None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Title @@ -11641,6 +11749,18 @@ Add-OfficeExcelReportParagraph + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -11656,6 +11776,18 @@ + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -11716,6 +11848,18 @@ Add-OfficeExcelReportSection + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -11731,6 +11875,18 @@ + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -12010,6 +12166,18 @@ Add-OfficeExcelReportSpacer + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Rows @@ -12025,6 +12193,18 @@ + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Rows @@ -12572,6 +12752,18 @@ Add-OfficeExcelReportTitle + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Subtitle @@ -12599,6 +12791,18 @@ + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Subtitle @@ -12983,18 +13187,6 @@ Add-OfficeExcelSlicer - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -13019,6 +13211,18 @@ None + + Path + + Workbook path to update. + + String + + String + + + None + PivotTableName @@ -13145,18 +13349,6 @@ None - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -13181,6 +13373,18 @@ None + + Path + + Workbook path to update. + + String + + String + + + None + PivotTableName @@ -15420,7 +15624,7 @@ Open - Open the workbook after saving when InputPath is used. + Open the workbook after saving when Path is used. SwitchParameter @@ -15540,18 +15744,6 @@ None - - InputPath - - Path to the workbook to update in place. - - String - - String - - - None - NoHyperlinks @@ -15579,7 +15771,7 @@ Open - Open the workbook after saving when InputPath is used. + Open the workbook after saving when Path is used. SwitchParameter @@ -15600,6 +15792,18 @@ None + + Path + + Path to the workbook to update in place. + + String + + String + + + None + SheetName @@ -15738,7 +15942,7 @@ Open - Open the workbook after saving when InputPath is used. + Open the workbook after saving when Path is used. SwitchParameter @@ -15870,18 +16074,6 @@ None - - InputPath - - Path to the workbook to update in place. - - String - - String - - - None - NoHyperlinks @@ -15909,7 +16101,7 @@ Open - Open the workbook after saving when InputPath is used. + Open the workbook after saving when Path is used. SwitchParameter @@ -15930,6 +16122,18 @@ None + + Path + + Path to the workbook to update in place. + + String + + String + + + None + SheetName @@ -16020,27 +16224,27 @@ and should close or save the workbook after all edits are complete. None - - InputPath + + PassThru - Workbook path to open, update, save, and close. + Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command, +so they do not emit a live table wrapper. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command, -so they do not emit a live table wrapper. + Workbook path to open, update, save, and close. - SwitchParameter + String - SwitchParameter + String None @@ -16224,27 +16428,27 @@ so they do not emit a live table wrapper. None - - InputPath + + PassThru - Workbook path to open, update, save, and close. + Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command, +so they do not emit a live table wrapper. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the updated table wrapper for open document or table inputs. Path-owned workbooks are saved and closed by this command, -so they do not emit a live table wrapper. + Workbook path to open, update, save, and close. - SwitchParameter + String - SwitchParameter + String None @@ -16531,18 +16735,6 @@ so they do not emit a live table wrapper. None - - InputPath - - Workbook path to update. - - String - - String - - - None - NoSave @@ -16579,6 +16771,18 @@ so they do not emit a live table wrapper. None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -16825,18 +17029,6 @@ so they do not emit a live table wrapper. None - - InputPath - - Workbook path to update. - - String - - String - - - None - NoSave @@ -16873,6 +17065,18 @@ so they do not emit a live table wrapper. None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -17024,18 +17228,6 @@ so they do not emit a live table wrapper. Add-OfficeExcelTimeline - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -17060,6 +17252,18 @@ so they do not emit a live table wrapper. None + + Path + + Workbook path to update. + + String + + String + + + None + PivotTableName @@ -17186,18 +17390,6 @@ so they do not emit a live table wrapper. None - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -17222,6 +17414,18 @@ so they do not emit a live table wrapper. None + + Path + + Workbook path to update. + + String + + String + + + None + PivotTableName @@ -21096,6 +21300,18 @@ so they do not emit a live table wrapper. None + + PassThru + + Emit the image added to the worksheet. + + SwitchParameter + + SwitchParameter + + + None + PointsPerPixel @@ -21308,6 +21524,18 @@ so they do not emit a live table wrapper. None + + PassThru + + Emit the image added to the worksheet. + + SwitchParameter + + SwitchParameter + + + None + PointsPerPixel @@ -24706,35 +24934,469 @@ so they do not emit a live table wrapper. - Add-OfficePdfAttachment + Add-OfficeOpenDocumentHeading Add - OfficePdfAttachment + OfficeOpenDocumentHeading - Adds an embedded file attachment to a generated PDF document. + Adds a heading to an OpenDocument text document. - Adds an embedded file attachment to a generated PDF document. + Adds a heading to an OpenDocument text document. - - Add-OfficePdfAttachment + + Add-OfficeOpenDocumentHeading + + Document + + OpenDocument text document. Omit inside New-OfficeOpenDocument -Content. + + OdtDocument + + OdtDocument + + + None + - Description + Level - Optional human-readable attachment description. + Heading level from 1 through 10. - String + Int32 + + Int32 + + + None + + + PassThru + + Emit the created heading paragraph. + + SwitchParameter + + SwitchParameter + + + None + + + Text + + Heading text. + + String String None + + + + + Document + + OpenDocument text document. Omit inside New-OfficeOpenDocument -Content. + + OdtDocument + + OdtDocument + + + None + + + Level + + Heading level from 1 through 10. + + Int32 + + Int32 + + + None + + + PassThru + + Emit the created heading paragraph. + + SwitchParameter + + SwitchParameter + + + None + + + Text + + Heading text. + + String + + String + + + None + + + + + + OfficeIMO.OpenDocument.OdtDocument + + + + + + + OfficeIMO.OpenDocument.OdtParagraph + + + + + + + + + + + Add a level-two heading inside an OpenDocument DSL. + + PS> + + Add-OfficeOpenDocumentHeading -Text 'Results' -Level 2 + + + + + + + + + + Add-OfficeOpenDocumentParagraph + Add + OfficeOpenDocumentParagraph + + Adds a paragraph to an OpenDocument text document. + + + + Adds a paragraph to an OpenDocument text document. + + + + Add-OfficeOpenDocumentParagraph + + Document + + OpenDocument text document. Omit inside New-OfficeOpenDocument -Content. + + OdtDocument + + OdtDocument + + + None + - MimeType + PassThru - Optional MIME type for the embedded file. + Emit the created paragraph. + + SwitchParameter + + SwitchParameter + + + None + + + Text + + Paragraph text. + + String + + String + + + None + + + + + + Document + + OpenDocument text document. Omit inside New-OfficeOpenDocument -Content. + + OdtDocument + + OdtDocument + + + None + + + PassThru + + Emit the created paragraph. + + SwitchParameter + + SwitchParameter + + + None + + + Text + + Paragraph text. + + String + + String + + + None + + + + + + OfficeIMO.OpenDocument.OdtDocument + + + + + + + OfficeIMO.OpenDocument.OdtParagraph + + + + + + + + + + + Add body text in the OpenDocument DSL. + + PS> + + New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content { Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice' } + + + + + + + + + + Add-OfficeOpenDocumentSheet + Add + OfficeOpenDocumentSheet + + Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content. + + + + Adds a worksheet to an OpenDocument spreadsheet and optionally runs nested cell content. + + + + Add-OfficeOpenDocumentSheet + + Content + + Nested cell commands that use this worksheet as their current target. + + ScriptBlock + + ScriptBlock + + + None + + + Document + + OpenDocument spreadsheet. Omit inside New-OfficeOpenDocument -Content. + + OdsDocument + + OdsDocument + + + None + + + Name + + Worksheet name. + + String + + String + + + None + + + PassThru + + Emit the created worksheet. + + SwitchParameter + + SwitchParameter + + + None + + + + + + Content + + Nested cell commands that use this worksheet as their current target. + + ScriptBlock + + ScriptBlock + + + None + + + Document + + OpenDocument spreadsheet. Omit inside New-OfficeOpenDocument -Content. + + OdsDocument + + OdsDocument + + + None + + + Name + + Worksheet name. + + String + + String + + + None + + + PassThru + + Emit the created worksheet. + + SwitchParameter + + SwitchParameter + + + None + + + + + + OfficeIMO.OpenDocument.OdsDocument + + + + + + + OfficeIMO.OpenDocument.OdsSheet + + + + + + + + + + + Add a worksheet inside an OpenDocument DSL. + + PS> + + Add-OfficeOpenDocumentSheet -Name 'Data' -Content { + Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Status' + } + + + + + + + + + + Add-OfficeOpenDocumentSlide + Add + OfficeOpenDocumentSlide + + Adds a slide to an OpenDocument presentation and optionally runs nested slide content. + + + + Adds a slide to an OpenDocument presentation and optionally runs nested slide content. + + + + Add-OfficeOpenDocumentSlide + + Content + + Nested slide commands that use this slide as their current target. + + ScriptBlock + + ScriptBlock + + + None + + + Document + + OpenDocument presentation. Omit inside New-OfficeOpenDocument -Content. + + OdpPresentation + + OdpPresentation + + + None + + + Name + + Optional unique slide name. String @@ -24743,10 +25405,136 @@ so they do not emit a live table wrapper. None + + PassThru + + Emit the created slide. + + SwitchParameter + + SwitchParameter + + + None + + + + + + Content + + Nested slide commands that use this slide as their current target. + + ScriptBlock + + ScriptBlock + + + None + + + Document + + OpenDocument presentation. Omit inside New-OfficeOpenDocument -Content. + + OdpPresentation + + OdpPresentation + + + None + + + Name + + Optional unique slide name. + + String + + String + + + None + + + PassThru + + Emit the created slide. + + SwitchParameter + + SwitchParameter + + + None + + + + + + OfficeIMO.OpenDocument.OdpPresentation + + + + + + + OfficeIMO.OpenDocument.OdpSlide + + + + + + + + + + + Add a slide with positioned text. + + PS> + + Add-OfficeOpenDocumentSlide -Name 'Summary' -Content { + Add-OfficeOpenDocumentTextBox -Text 'Quarterly summary' -X 2 -Y 2 -Width 20 -Height 3 + } + + + + + + + + + + Add-OfficeOpenDocumentTextBox + Add + OfficeOpenDocumentTextBox + + Adds a positioned text box to an OpenDocument presentation slide. + + + + Adds a positioned text box to an OpenDocument presentation slide. + + + + Add-OfficeOpenDocumentTextBox + + Height + + Height in centimeters. + + Double + + Double + + + None + Name - Optional embedded file name. The source file name is used when omitted. + Optional shape name. String @@ -24758,7 +25546,7 @@ so they do not emit a live table wrapper. PassThru - Accepted for compatibility. The replacement document is always emitted when -Document is used. + Emit the created text box. SwitchParameter @@ -24767,10 +25555,22 @@ so they do not emit a live table wrapper. None - - Path + + Slide - File path to embed in the generated PDF. + Slide target. Omit inside Add-OfficeOpenDocumentSlide -Content. + + OdpSlide + + OdpSlide + + + None + + + Text + + Text box content. String @@ -24780,48 +25580,292 @@ so they do not emit a live table wrapper. None - Relationship + Width - Associated-file relationship between the PDF and the embedded file. + Width in centimeters. - PdfAssociatedFileRelationship - - Unspecified - Source - Data - Alternative - Supplement - C2paManifest - + Double - PdfAssociatedFileRelationship + Double None - - - Add-OfficePdfAttachment - Description + X - Optional human-readable attachment description. + Horizontal position in centimeters. - String + Double - String + Double None - - Document + + Y - PDF document to update outside the DSL context. + Vertical position in centimeters. - PdfDocument + Double - PdfDocument + Double + + + None + + + + + + Height + + Height in centimeters. + + Double + + Double + + + None + + + Name + + Optional shape name. + + String + + String + + + None + + + PassThru + + Emit the created text box. + + SwitchParameter + + SwitchParameter + + + None + + + Slide + + Slide target. Omit inside Add-OfficeOpenDocumentSlide -Content. + + OdpSlide + + OdpSlide + + + None + + + Text + + Text box content. + + String + + String + + + None + + + Width + + Width in centimeters. + + Double + + Double + + + None + + + X + + Horizontal position in centimeters. + + Double + + Double + + + None + + + Y + + Vertical position in centimeters. + + Double + + Double + + + None + + + + + + OfficeIMO.OpenDocument.OdpSlide + + + + + + + OfficeIMO.OpenDocument.OdpTextBox + + + + + + + + + + + Place a text box using centimetre coordinates. + + PS> + + Add-OfficeOpenDocumentTextBox -Text 'Approved' -X 18 -Y 12 -Width 6 -Height 2 + + + + + + + + + + Add-OfficePdfAttachment + Add + OfficePdfAttachment + + Adds an embedded file attachment to a generated PDF document. + + + + Adds an embedded file attachment to a generated PDF document. + + + + Add-OfficePdfAttachment + + Description + + Optional human-readable attachment description. + + String + + String + + + None + + + MimeType + + Optional MIME type for the embedded file. + + String + + String + + + None + + + Name + + Optional embedded file name. The source file name is used when omitted. + + String + + String + + + None + + + PassThru + + Accepted for compatibility. The replacement document is always emitted when -Document is used. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + File path to embed in the generated PDF. + + String + + String + + + None + + + Relationship + + Associated-file relationship between the PDF and the embedded file. + + PdfAssociatedFileRelationship + + Unspecified + Source + Data + Alternative + Supplement + C2paManifest + + + PdfAssociatedFileRelationship + + + None + + + + Add-OfficePdfAttachment + + Description + + Optional human-readable attachment description. + + String + + String + + + None + + + Document + + PDF document to update outside the DSL context. + + PdfDocument + + PdfDocument None @@ -25975,6 +27019,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -26087,6 +27143,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -26312,6 +27380,18 @@ page area from the supplied coordinates. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Strike @@ -26453,6 +27533,18 @@ page area from the supplied coordinates. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Run @@ -26649,6 +27741,18 @@ page area from the supplied coordinates. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Run @@ -28636,6 +29740,18 @@ page area from the supplied coordinates. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -28896,6 +30012,18 @@ page area from the supplied coordinates. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -30200,6 +31328,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -30348,6 +31488,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -30520,6 +31672,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -34947,6 +36111,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -35046,6 +36222,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -35121,7 +36309,7 @@ URI links and bookmark links are supported; a single run cannot target both.PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointBullets.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Delivery update' Add-OfficePowerPointBullets -Slide $slide -Bullets 'Wins','Risks','Next steps' -X 60 -Y 120 -Width 420 -Height 180 } @@ -35159,6 +36347,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -35277,6 +36477,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SeriesProperty @@ -35395,6 +36607,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -35537,6 +36761,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SeriesProperty @@ -35683,7 +36919,7 @@ URI links and bookmark links are supported; a single run cannot target both. @@ -35700,7 +36936,7 @@ URI links and bookmark links are supported; a single run cannot target both. @@ -36163,6 +37399,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -36238,6 +37486,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -36326,7 +37586,7 @@ URI links and bookmark links are supported; a single run cannot target both. $image = '.\Tests\Assets\CellImage.png' New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImage.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Evidence' Add-OfficePowerPointImage -Slide $slide -Path $image -X 60 -Y 130 -Width 180 -Height 120 } @@ -37758,6 +39018,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -37797,6 +39069,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -37848,8 +39132,8 @@ URI links and bookmark links are supported; a single run cannot target both.PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSections.pptx { - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Overview' - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Results' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Overview' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Results' Add-OfficePowerPointSection -Name 'Results' -StartSlideIndex 1 } @@ -37934,6 +39218,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeType @@ -38057,6 +39353,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeType @@ -38138,7 +39446,7 @@ URI links and bookmark links are supported; a single run cannot target both.PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointShape.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Add-OfficePowerPointShape -Slide $slide -ShapeType Rectangle -X 60 -Y 120 -Width 220 -Height 90 -FillColor '#DDEEFF' -OutlineColor '#2563EB' -OutlineWidth 1 Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlighted status' -X 80 -Y 145 -Width 180 -Height 32 } @@ -38200,6 +39508,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -38263,6 +39583,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -38352,6 +39684,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -38477,6 +39821,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -38509,7 +39865,9 @@ URI links and bookmark links are supported; a single run cannot target both. PS> - $ppt = New-OfficePowerPoint -FilePath .\deck.pptx; Add-OfficePowerPointSlide -Presentation $ppt + $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave + Add-OfficePowerPointSlide -Presentation $ppt + $ppt | Close-OfficePowerPoint -Save Creates a deck and appends a new slide at the end. @@ -38650,6 +40008,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -38753,6 +40123,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Rows @@ -38948,6 +40330,18 @@ URI links and bookmark links are supported; a single run cannot target both. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Rows @@ -39282,6 +40676,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -39357,6 +40763,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Run @@ -39432,6 +40850,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Run @@ -39525,7 +40955,7 @@ table formatting, borders, and style choices are preserved. PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointTextBox.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Add-OfficePowerPointTextBox -Slide $slide -Text 'Quarterly overview' -X 80 -Y 150 -Width 320 -Height 50 Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated by PSWriteOffice' -X 80 -Y 210 -Width 320 -Height 35 } @@ -39635,6 +41065,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the picture added to the slide. + + SwitchParameter + + SwitchParameter + + + None + PointsPerPixel @@ -39811,6 +41253,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the picture added to the slide. + + SwitchParameter + + SwitchParameter + + + None + PointsPerPixel @@ -40089,6 +41543,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + To @@ -40266,6 +41732,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ToShape @@ -40455,6 +41933,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + To @@ -40719,6 +42209,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeId @@ -40914,6 +42416,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeId @@ -41075,6 +42589,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -41227,6 +42753,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -41427,6 +42965,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -41579,6 +43129,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -41743,6 +43305,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Unit @@ -41823,6 +43397,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Unit @@ -42037,6 +43623,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -42237,6 +43835,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -42485,6 +44095,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeName @@ -42692,6 +44314,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeName @@ -42917,6 +44551,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeName @@ -43166,6 +44812,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShapeName @@ -43386,6 +45044,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -43550,6 +45220,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Text @@ -44826,7 +46508,7 @@ table formatting, borders, and style choices are preserved. [pscustomobject]@{ Month = 'Feb'; Sales = 12; Profit = 5 } [pscustomobject]@{ Month = 'Mar'; Sales = 15; Profit = 7 } ) - $doc = New-OfficeWord -Path .\Trend.docx -PassThru + $doc = New-OfficeWord -Path .\Trend.docx -NoSave Add-OfficeWordChart -Document $doc -Type Line -InputObject $trend -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -Title 'Quarter trend' Save-OfficeWord -Document $doc @@ -46675,6 +48357,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Type @@ -46707,6 +48401,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Type @@ -46903,6 +48609,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Type @@ -46935,6 +48653,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Type @@ -47684,6 +49414,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Style @@ -47727,6 +49469,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Style @@ -47962,6 +49716,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + @@ -47977,6 +49743,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + @@ -50664,6 +52442,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + TableStyle @@ -50810,6 +52600,18 @@ table formatting, borders, and style choices are preserved. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + TableStyle @@ -52478,6 +54280,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the image added to the paragraph. + + SwitchParameter + + SwitchParameter + + + None + PointsPerPixel @@ -52651,6 +54465,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the image added to the paragraph. + + SwitchParameter + + SwitchParameter + + + None + PointsPerPixel @@ -53032,6 +54858,18 @@ cells. This keeps existing-document editing simple without forcing callers back Clear-OfficeExcelAutoFilter + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Clear-OfficeExcelAutoFilter @@ -53047,6 +54885,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Sheet @@ -53086,6 +54936,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Sheet @@ -53288,26 +55150,26 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru - Workbook path to update. + Returns the number of comments cleared. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Returns the number of comments cleared. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -53522,26 +55384,26 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru - Workbook path to update. + Returns the number of comments cleared. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Returns the number of comments cleared. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -53681,6 +55543,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -53768,8 +55642,20 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. @@ -53879,6 +55765,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -53978,8 +55876,20 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. @@ -54119,6 +56029,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -54206,8 +56128,20 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. @@ -54317,6 +56251,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -54416,8 +56362,20 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. @@ -54545,6 +56503,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -54608,8 +56578,20 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. @@ -54695,6 +56677,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -54770,8 +56764,20 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. @@ -54959,6 +56965,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -55118,22 +57136,22 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + Merges - Workbook path to update. + Clear merged-cell definitions that overlap the selected range. - String + SwitchParameter - String + SwitchParameter None - Merges + PassThru - Clear merged-cell definitions that overlap the selected range. + Emit the object created or changed by the command. SwitchParameter @@ -55142,6 +57160,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Workbook path to update. + + String + + String + + + None + Range @@ -55325,6 +57355,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -55496,22 +57538,22 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + Merges - Workbook path to update. + Clear merged-cell definitions that overlap the selected range. - String + SwitchParameter - String + SwitchParameter None - Merges + PassThru - Clear merged-cell definitions that overlap the selected range. + Emit the object created or changed by the command. SwitchParameter @@ -55520,6 +57562,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Workbook path to update. + + String + + String + + + None + Range @@ -55994,6 +58048,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Open + + Open the workbook after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56054,18 +58120,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Show - - Open the workbook in Excel after saving. - - SwitchParameter - - SwitchParameter - - - None - ValidateOpenXml @@ -56171,6 +58225,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Open + + Open the workbook after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56231,18 +58297,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Show - - Open the workbook in Excel after saving. - - SwitchParameter - - SwitchParameter - - - None - ValidateOpenXml @@ -56305,6 +58359,18 @@ cells. This keeps existing-document editing simple without forcing callers back Close-OfficePowerPoint + + Open + + Open the presentation after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56317,34 +58383,34 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Presentation + + Path - Presentation to close. + Optional target path when saving. - PowerPointPresentation + String - PowerPointPresentation + String None - - Save + + Presentation - Persist changes before closing. + Presentation to close. - SwitchParameter + PowerPointPresentation - SwitchParameter + PowerPointPresentation None - Show + Save - Open the presentation in PowerPoint after saving. + Persist changes before closing. SwitchParameter @@ -56356,6 +58422,18 @@ cells. This keeps existing-document editing simple without forcing callers back + + Open + + Open the presentation after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56368,34 +58446,34 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Presentation + + Path - Presentation to close. + Optional target path when saving. - PowerPointPresentation + String - PowerPointPresentation + String None - - Save + + Presentation - Persist changes before closing. + Presentation to close. - SwitchParameter + PowerPointPresentation - SwitchParameter + PowerPointPresentation None - Show + Save - Open the presentation in PowerPoint after saving. + Persist changes before closing. SwitchParameter @@ -56424,7 +58502,7 @@ cells. This keeps existing-document editing simple without forcing callers back PS> - $ppt = Get-OfficePowerPoint -FilePath .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt + $ppt = Get-OfficePowerPoint -Path .\deck.pptx; Close-OfficePowerPoint -Presentation $ppt Releases the loaded presentation instance. @@ -56434,7 +58512,7 @@ cells. This keeps existing-document editing simple without forcing callers back PS> - Close-OfficePowerPoint -Presentation $ppt -Save -Show + Close-OfficePowerPoint -Presentation $ppt -Save -Open Saves the presentation, opens it in PowerPoint, and releases the object. @@ -56469,6 +58547,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Open + + Open the file after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56505,18 +58595,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Show - - Open the file after saving. - - SwitchParameter - - SwitchParameter - - - None - Close-OfficeWord @@ -56532,6 +58610,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Open + + Open the file after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56568,18 +58658,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Show - - Open the file after saving. - - SwitchParameter - - SwitchParameter - - - None - Close-OfficeWord @@ -56595,34 +58673,34 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Password + + Open - Password used to save the document as an encrypted package. + Open the file after saving. Requires -Save or -Path. - String + SwitchParameter - String + SwitchParameter None - Save + Password - Persist changes before closing. + Password used to save the document as an encrypted package. - SwitchParameter + String - SwitchParameter + String None - Show + Save - Open the file after saving. + Persist changes before closing. SwitchParameter @@ -56670,6 +58748,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Open + + Open the file after saving. Requires -Save or -Path. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -56706,18 +58796,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - Show - - Open the file after saving. - - SwitchParameter - - SwitchParameter - - - None - @@ -56758,7 +58836,7 @@ cells. This keeps existing-document editing simple without forcing callers back PS> - Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Show + Close-OfficeWord -Document $doc -Save -Path .\Report-final.docx -Open Saves updates to Report-final.docx, opens it, and disposes the document. @@ -56793,18 +58871,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Left workbook path. - - String - - String - - - None - LeftRange @@ -56841,6 +58907,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Left workbook path. + + String + + String + + + None + RightPath @@ -57198,18 +59276,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Left workbook path. - - String - - String - - - None - LeftRange @@ -57246,6 +59312,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Left workbook path. + + String + + String + + + None + RightDocument @@ -57394,26 +59472,26 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + MaxDifferences - Workbook path. + Maximum number of differences to report. - String + Int32 - String + Int32 None - - MaxDifferences + + Path - Maximum number of differences to report. + Workbook path. - Int32 + String - Int32 + String None @@ -57640,26 +59718,26 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath + + MaxDifferences - Workbook path. + Maximum number of differences to report. - String + Int32 - String + Int32 None - - MaxDifferences + + Path - Maximum number of differences to report. + Workbook path. - Int32 + String - Int32 + String None @@ -58059,7 +60137,8 @@ cells. This keeps existing-document editing simple without forcing callers back PS> - $options = [OfficeIMO.Pdf.PdfVisualComparisonOptions]::new(); $options.AllowedDifferenceRatio = 0.001; Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options + $options = New-OfficePdfVisualComparisonOptions -AllowedDifferenceRatio 0.001 -ChannelTolerance 2 + Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -PageRange '1-3' -Options $options Returns per-page difference ratios, images, and diagnostics. @@ -58212,6 +60291,17 @@ cells. This keeps existing-document editing simple without forcing callers back Returns deterministic findings and saves a Word document containing revision marks. + + Ignore whitespace and volatile metadata. + + PS> + + $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -CompareVolatileMetadata:$false + Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options + + + + @@ -60202,18 +62292,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Path to an HTML file. - - String - - String - - - None - LineEnding @@ -60302,6 +62380,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to an HTML file. + + String + + String + + + None + Portable @@ -60488,18 +62578,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Path to an HTML file. - - String - - String - - - None - LineEnding @@ -60588,6 +62666,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to an HTML file. + + String + + String + + + None + Portable @@ -60885,8 +62975,12 @@ cells. This keeps existing-document editing simple without forcing callers back - EXAMPLE 1 - ConvertFrom-OfficeOpenDocument -Path 'C:\Path' + Convert an ODS spreadsheet to Excel. + + PS> + + $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumExpandedCells 250000 + ConvertFrom-OfficeOpenDocument -Path .\Status.ods -OutputPath .\Status.xlsx -ExcelOptions $options @@ -61050,18 +63144,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Path to an HTML file. - - String - - String - - - None - Open @@ -61110,6 +63192,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to an HTML file. + + String + + String + + + None + Profile @@ -61191,18 +63285,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Path to an HTML file. - - String - - String - - - None - Open @@ -61251,6 +63333,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to an HTML file. + + String + + String + + + None + Profile @@ -62306,18 +64400,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - FilePath - - Path to an HTML file. - - String - - String - - - None - FontFamily @@ -62378,6 +64460,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to an HTML file. + + String + + String + + + None + RenderPreAsTable @@ -62485,18 +64579,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - FilePath - - Path to an HTML file. - - String - - String - - - None - FontFamily @@ -62569,6 +64651,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to an HTML file. + + String + + String + + + None + RenderPreAsTable @@ -63156,18 +65250,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - FilePath - - Path to a Markdown file. - - String - - String - - - None - FitImagesToContextWidth @@ -63318,6 +65400,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to a Markdown file. + + String + + String + + + None + PreferNarrativeSingleLineDefinitions @@ -63862,18 +65956,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - FilePath - - Path to a Markdown file. - - String - - String - - - None - FitImagesToContextWidth @@ -64036,6 +66118,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to a Markdown file. + + String + + String + + + None + PreferNarrativeSingleLineDefinitions @@ -66767,18 +68861,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -66833,6 +68915,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -68189,18 +70283,6 @@ cells. This keeps existing-document editing simple without forcing callers back None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -68255,6 +70337,18 @@ cells. This keeps existing-document editing simple without forcing callers back None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -68920,22 +71014,12 @@ cells. This keeps existing-document editing simple without forcing callers back - EXAMPLE 1 - ConvertTo-OfficeOpenDocument -Path 'C:\Path' - - - - - - EXAMPLE 2 - ConvertTo-OfficeOpenDocument -ExcelDocument 'Value' - - - - - - EXAMPLE 3 - ConvertTo-OfficeOpenDocument -PowerPointPresentation 'Value' + Convert Word to ODT and reject lossy conversion. + + PS> + + $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters + ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options -FailOnLoss @@ -73161,6 +75245,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the PNG after saving. + + SwitchParameter + + SwitchParameter + + + None + OutputPath @@ -73209,18 +75305,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the PNG after saving. - - SwitchParameter - - SwitchParameter - - - None - Supersampling @@ -73356,6 +75440,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the PNG after saving. + + SwitchParameter + + SwitchParameter + + + None + OutputPath @@ -73392,18 +75488,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the PNG after saving. - - SwitchParameter - - SwitchParameter - - - None - Supersampling @@ -73539,6 +75623,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the PNG after saving. + + SwitchParameter + + SwitchParameter + + + None + OutputPath @@ -73587,18 +75683,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the PNG after saving. - - SwitchParameter - - SwitchParameter - - - None - Supersampling @@ -73755,6 +75839,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the SVG after saving. + + SwitchParameter + + SwitchParameter + + + None + OutputPath @@ -73803,18 +75899,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the SVG after saving. - - SwitchParameter - - SwitchParameter - - - None - Transparent @@ -73914,6 +75998,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the SVG after saving. + + SwitchParameter + + SwitchParameter + + + None + OutputPath @@ -73950,18 +76046,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the SVG after saving. - - SwitchParameter - - SwitchParameter - - - None - Transparent @@ -74061,6 +76145,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the SVG after saving. + + SwitchParameter + + SwitchParameter + + + None + OutputPath @@ -74109,18 +76205,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the SVG after saving. - - SwitchParameter - - SwitchParameter - - - None - Transparent @@ -74982,18 +77066,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - FilePath - - Path to a .docx file. - - String - - String - - - None - FontFamily @@ -75090,6 +77162,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Path to a .docx file. + + String + + String + + + None + UseImagePaths @@ -75264,18 +77348,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - FilePath - - Path to a .docx file. - - String - - String - - - None - FontFamily @@ -75372,6 +77444,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Path to a .docx file. + + String + + String + + + None + UseImagePaths @@ -75472,18 +77556,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - FilePath - - Path to a .docx file. - - String - - String - - - None - FontFamily @@ -75548,6 +77620,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Path to a .docx file. + + String + + String + + + None + ConvertTo-OfficeWordMarkdown @@ -75690,18 +77774,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - FilePath - - Path to a .docx file. - - String - - String - - - None - FontFamily @@ -75766,6 +77838,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Path to a .docx file. + + String + + String + + + None + @@ -75858,6 +77942,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SourceDocument @@ -75930,10 +78026,10 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - InputPath + + NewName - Target workbook path to update. + Name for the copied worksheet. String @@ -75942,10 +78038,22 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - NewName + + PassThru - Name for the copied worksheet. + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Target workbook path to update. String @@ -76050,6 +78158,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SourceDocument @@ -76134,10 +78254,10 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - InputPath + + NewName - Target workbook path to update. + Name for the copied worksheet. String @@ -76146,10 +78266,22 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - NewName + + PassThru - Name for the copied worksheet. + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Target workbook path to update. String @@ -76289,18 +78421,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - FilePath - - Source workbook or template package path. - - String - - String - - - None - Force @@ -76325,6 +78445,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Source workbook or template package path. + + String + + String + + + None + @@ -76340,18 +78472,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - FilePath - - Source workbook or template package path. - - String - - String - - - None - Force @@ -76376,172 +78496,208 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - - - - None - - - - - - - System.IO.FileInfo - - - - - - - - - - - Copy a workbook package and return the copied file. - - PS> - - $copy = Copy-OfficeExcelWorkbook -Path .\Template.xlsx -DestinationPath .\Report.xlsx -Force -PassThru - Test-OfficeExcelWorkbook -Path $copy.FullName -SkipOpenXmlValidation | - Select-Object Passed, WorksheetCount - - Copies the workbook package and normalizes the workbook content type for the destination extension. - - - - - - - - Copy-OfficePdfPage - Copy - OfficePdfPage - - Copies selected PDF pages into a new PDF. - - - - Copies selected PDF pages into a new PDF. - - - - Copy-OfficePdfPage - - IgnorePermissionRestrictions - - After successful password authentication, explicitly ignore owner-imposed assembly restrictions. - - SwitchParameter - - SwitchParameter - - - None - - - OutputPath - - Output PDF path. - - String - - String - - - None - - - PageRange - - Page ranges such as 1-3,5. - - String - - String - - - None - - - Password - - Password used to authenticate an encrypted PDF. - - String - - String - - - None - - - Path - - Input PDF path. - - String - - String - - - None - - - - - - IgnorePermissionRestrictions - - After successful password authentication, explicitly ignore owner-imposed assembly restrictions. - - SwitchParameter - - SwitchParameter - - - None - - - OutputPath - - Output PDF path. - - String - - String - - - None - - - PageRange - - Page ranges such as 1-3,5. - - String - - String - - - None - - - Password - - Password used to authenticate an encrypted PDF. - - String - - String - - - None - - + Path - Input PDF path. + Source workbook or template package path. + + String + + String + + + None + + + + + + None + + + + + + + System.IO.FileInfo + + + + + + + + + + + Copy a workbook package and return the copied file. + + PS> + + $copy = Copy-OfficeExcelWorkbook -Path .\Template.xlsx -DestinationPath .\Report.xlsx -Force -PassThru + Test-OfficeExcelWorkbook -Path $copy.FullName -SkipOpenXmlValidation | + Select-Object Passed, WorksheetCount + + Copies the workbook package and normalizes the workbook content type for the destination extension. + + + + + + + + Copy-OfficePdfPage + Copy + OfficePdfPage + + Copies selected PDF pages into a new PDF. + + + + Copies selected PDF pages into a new PDF. + + + + Copy-OfficePdfPage + + IgnorePermissionRestrictions + + After successful password authentication, explicitly ignore owner-imposed assembly restrictions. + + SwitchParameter + + SwitchParameter + + + None + + + OutputPath + + Output PDF path. + + String + + String + + + None + + + PageRange + + Page ranges such as 1-3,5. + + String + + String + + + None + + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to authenticate an encrypted PDF. + + String + + String + + + None + + + Path + + Input PDF path. + + String + + String + + + None + + + + + + IgnorePermissionRestrictions + + After successful password authentication, explicitly ignore owner-imposed assembly restrictions. + + SwitchParameter + + SwitchParameter + + + None + + + OutputPath + + Output PDF path. + + String + + String + + + None + + + PageRange + + Page ranges such as 1-3,5. + + String + + String + + + None + + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to authenticate an encrypted PDF. + + String + + String + + + None + + + Path + + Input PDF path. String @@ -76627,6 +78783,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -76666,6 +78834,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -76705,9 +78885,9 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCopySlide.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Original' - $copy = Copy-OfficePowerPointSlide -Index 0 + $copy = Copy-OfficePowerPointSlide -Index 0 -PassThru Set-OfficePowerPointSlideTitle -Slide $copy -Title 'Copied appendix' } @@ -76732,18 +78912,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Edit-OfficeExcelRow - - InputPath - - Workbook path to update. - - String - - String - - - None - NumericAsDecimal @@ -76768,6 +78936,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Workbook path to update. + + String + + String + + + None + Range @@ -76918,18 +79098,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - InputPath - - Workbook path to update. - - String - - String - - - None - NumericAsDecimal @@ -76954,6 +79122,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Path + + Workbook path to update. + + String + + String + + + None + Range @@ -79602,6 +81782,531 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe + + + Export-OfficeDocumentPdf + Export + OfficeDocumentPdf + + Exports a Word, Excel, PowerPoint, Markdown, or RTF document to PDF. + + + + Accepts either a live OfficeIMO document from the pipeline or a supported source file. + + + + Export-OfficeDocumentPdf + + Document + + Live Word, Excel, PowerPoint, Markdown, or RTF document to export. Saved FileInfo and path strings from the pipeline are opened automatically. + + Object + + Object + + + None + + + ExcelOptions + + Excel-specific PDF options. + + ExcelPdfSaveOptions + + ExcelPdfSaveOptions + + + None + + + MarkdownOptions + + Markdown-specific PDF options. + + MarkdownPdfSaveOptions + + MarkdownPdfSaveOptions + + + None + + + Open + + Open the PDF after exporting it. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved PDF file. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to open an encrypted Word, Excel, or PowerPoint source file. + + String + + String + + + None + + + Path + + Destination PDF path. + + String + + String + + + None + + + PdfConversionReportVariable + + Variable name that receives the structured PDF conversion report. + + String + + String + + + None + + + PdfWarningVariable + + Variable name that receives structured PDF conversion warnings. + + String + + String + + + None + + + PowerPointOptions + + PowerPoint-specific PDF options. + + PowerPointPdfSaveOptions + + PowerPointPdfSaveOptions + + + None + + + RtfOptions + + RTF-specific PDF options. + + RtfPdfSaveOptions + + RtfPdfSaveOptions + + + None + + + WordOptions + + Word-specific PDF options. + + WordPdfSaveOptions + + WordPdfSaveOptions + + + None + + + + Export-OfficeDocumentPdf + + ExcelOptions + + Excel-specific PDF options. + + ExcelPdfSaveOptions + + ExcelPdfSaveOptions + + + None + + + InputPath + + Source .docx, .xlsx, .pptx, .md, .markdown, or .rtf file. + + String + + String + + + None + + + MarkdownOptions + + Markdown-specific PDF options. + + MarkdownPdfSaveOptions + + MarkdownPdfSaveOptions + + + None + + + Open + + Open the PDF after exporting it. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved PDF file. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to open an encrypted Word, Excel, or PowerPoint source file. + + String + + String + + + None + + + Path + + Destination PDF path. + + String + + String + + + None + + + PdfConversionReportVariable + + Variable name that receives the structured PDF conversion report. + + String + + String + + + None + + + PdfWarningVariable + + Variable name that receives structured PDF conversion warnings. + + String + + String + + + None + + + PowerPointOptions + + PowerPoint-specific PDF options. + + PowerPointPdfSaveOptions + + PowerPointPdfSaveOptions + + + None + + + RtfOptions + + RTF-specific PDF options. + + RtfPdfSaveOptions + + RtfPdfSaveOptions + + + None + + + WordOptions + + Word-specific PDF options. + + WordPdfSaveOptions + + WordPdfSaveOptions + + + None + + + + + + Document + + Live Word, Excel, PowerPoint, Markdown, or RTF document to export. Saved FileInfo and path strings from the pipeline are opened automatically. + + Object + + Object + + + None + + + ExcelOptions + + Excel-specific PDF options. + + ExcelPdfSaveOptions + + ExcelPdfSaveOptions + + + None + + + InputPath + + Source .docx, .xlsx, .pptx, .md, .markdown, or .rtf file. + + String + + String + + + None + + + MarkdownOptions + + Markdown-specific PDF options. + + MarkdownPdfSaveOptions + + MarkdownPdfSaveOptions + + + None + + + Open + + Open the PDF after exporting it. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved PDF file. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to open an encrypted Word, Excel, or PowerPoint source file. + + String + + String + + + None + + + Path + + Destination PDF path. + + String + + String + + + None + + + PdfConversionReportVariable + + Variable name that receives the structured PDF conversion report. + + String + + String + + + None + + + PdfWarningVariable + + Variable name that receives structured PDF conversion warnings. + + String + + String + + + None + + + PowerPointOptions + + PowerPoint-specific PDF options. + + PowerPointPdfSaveOptions + + PowerPointPdfSaveOptions + + + None + + + RtfOptions + + RTF-specific PDF options. + + RtfPdfSaveOptions + + RtfPdfSaveOptions + + + None + + + WordOptions + + Word-specific PDF options. + + WordPdfSaveOptions + + WordPdfSaveOptions + + + None + + + + + + System.Object + + + + + System.String + + + + + + + System.IO.FileInfo + + + + + + + + + + + Export a live Word document. + + PS> + + $document | Export-OfficeDocumentPdf -Path .\Report.pdf + + + + + + Export a supported file without opening it explicitly. + + PS> + + Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -PassThru + + + + + + Configure Markdown PDF export with ordinary PowerShell parameters. + + PS> + + $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -IncludeLocalImages -BaseDirectory .\Assets + Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options + + The New-Office*PdfOptions commands build every format-specific options object; no hashtable or .NET constructor is required. + + + + + Export-OfficeExcel @@ -82854,6 +85559,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result when a destination path is used. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -82960,6 +85677,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result when a destination path is used. + + SwitchParameter + + SwitchParameter + + + None + WorksheetName @@ -83054,6 +85783,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result when a destination path is used. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -83467,6 +86208,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved sheet. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -83537,6 +86290,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved sheet. + + SwitchParameter + + SwitchParameter + + + None + @@ -83595,6 +86360,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved sheet. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -83635,7 +86412,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficeExcelImage -Path .\Report.xlsx -OutputPath .\Images - Writes one image per selected sheet and returns OfficeImageExportResult objects. + Writes one image per selected sheet. Add -PassThru to receive the structured export results. @@ -83711,6 +86488,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result when a destination path is used. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -83817,6 +86606,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result when a destination path is used. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -83911,6 +86712,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result when a destination path is used. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -84030,7 +86843,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination PNG, JPEG, TIFF, SVG, or WebP path. String @@ -84051,6 +86864,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -84124,7 +86949,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination PNG, JPEG, TIFF, SVG, or WebP path. String @@ -84145,6 +86970,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + RenderOptions @@ -84206,7 +87043,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination PNG, JPEG, TIFF, SVG, or WebP path. String @@ -84227,6 +87064,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + RenderOptions @@ -84300,7 +87149,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination PNG, JPEG, TIFF, SVG, or WebP path. String @@ -84321,6 +87170,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -84378,7 +87239,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.png - Uses the dependency-free OfficeIMO HTML renderer and returns OfficeImageExportResult. + Uses the dependency-free OfficeIMO HTML renderer. Add -PassThru to receive the structured export result. @@ -84466,6 +87327,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved page. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -84572,6 +87445,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved page. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -84636,7 +87521,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Pages -PageRange '1-3,5' - Writes the selected pages and returns normalized image results with rendering diagnostics. + Writes the selected pages. Add -PassThru to receive normalized image results with rendering diagnostics. @@ -84733,6 +87618,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -84860,6 +87757,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -84930,8 +87839,11 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe - EXAMPLE 1 - Export-OfficePdfLayoutOverlay -Path 'C:\Path' + Export an SVG layout overlay for the first page. + + PS> + + $result = Export-OfficePdfLayoutOverlay -Path .\Report.pdf -OutputPath .\Report-layout.svg -Page 1 -Format Svg -PassThru @@ -85195,6 +88107,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved slide. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -85253,6 +88177,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved slide. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -85311,6 +88247,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved slide. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -85363,7 +88311,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Format Svg - Writes one image per selected slide and returns OfficeImageExportResult objects. + Writes one image per selected slide. Add -PassThru to receive the structured export results. @@ -85427,6 +88375,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved page. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -85497,6 +88457,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved page. + + SwitchParameter + + SwitchParameter + + + None + @@ -85555,6 +88527,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit one structured image export result per saved page. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -85595,7 +88579,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficeVisioImage -Path .\diagram.vsdx -OutputPath .\Images -Format Png - Writes one PNG per selected page and returns one result object per file. + Writes one PNG per selected page. Add -PassThru to receive one result object per file. @@ -86089,6 +89073,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the generated VSDX after saving. + + SwitchParameter + + SwitchParameter + + + None + PageName @@ -86137,18 +89133,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the generated VSDX after saving. - - SwitchParameter - - SwitchParameter - - - None - UseNaturalPageSize @@ -86224,6 +89208,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + Open + + Open the generated VSDX after saving. + + SwitchParameter + + SwitchParameter + + + None + PageName @@ -86272,18 +89268,6 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - Show - - Open the generated VSDX after saving. - - SwitchParameter - - SwitchParameter - - - None - UseNaturalPageSize @@ -86638,15 +89622,27 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export OfficeWordImage - Exports a Word page as PNG or SVG with structured image diagnostics. + Exports one or more Word pages through the format-neutral OfficeIMO image pipeline. - Exports a Word page as PNG or SVG with structured image diagnostics. + Exports one or more Word pages through the format-neutral OfficeIMO image pipeline. Export-OfficeWordImage + + AllPages + + Export every estimated page to the destination folder. + + SwitchParameter + + SwitchParameter + + + None + Format @@ -86681,7 +89677,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch. String @@ -86690,6 +89686,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -86705,6 +89713,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficeWordImage + + AllPages + + Export every estimated page to the destination folder. + + SwitchParameter + + SwitchParameter + + + None + Document @@ -86751,7 +89771,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch. String @@ -86760,9 +89780,33 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + + + AllPages + + Export every estimated page to the destination folder. + + SwitchParameter + + SwitchParameter + + + None + Document @@ -86809,7 +89853,7 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe OutputPath - Destination PNG or SVG path. + Destination image file, or destination folder when -AllPages or Options.PageCount requests a batch. String @@ -86818,6 +89862,18 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None + + PassThru + + Emit the structured image export result. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -86858,7 +89914,17 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Report.svg -Format Svg - Returns the OfficeIMO image export result after writing the image. + Writes the image quietly. Add -PassThru to receive the structured export result. + + + + Export every page as JPEG files. + + PS> + + Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Format Jpeg -AllPages + + For a bounded batch, create options with New-OfficeWordImageOptions -PageIndex 0 -PageCount 2. @@ -86903,8 +89969,8 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - InputPath + + Path Workbook path to inspect. @@ -87113,8 +90179,8 @@ such as a rich generated header or footer. Styling remains owned by New-OfficeTe None - - InputPath + + Path Workbook path to inspect. @@ -88085,8 +91151,8 @@ the target shape without reading text content. None - - InputPath + + Path Path to the .docx file. @@ -88136,8 +91202,8 @@ the target shape without reading text content. None - - InputPath + + Path Path to the .docx file. @@ -88289,8 +91355,8 @@ the target shape without reading text content. None - - InputPath + + Path Path to the .docx file. @@ -88410,8 +91476,8 @@ returned list objects can be piped directly to Add-OfficeWordListItem. None - - InputPath + + Path Path to the document to open read-only for searching. @@ -88449,8 +91515,8 @@ returned list objects can be piped directly to Add-OfficeWordListItem. None - - InputPath + + Path Path to the document to open read-only for searching. @@ -88656,8 +91722,8 @@ returned list objects can be piped directly to Add-OfficeWordListItem. None - - InputPath + + Path Path to the document to open read-only for searching. @@ -88804,8 +91870,8 @@ expressions. None - - InputPath + + Path Path to the document to open read-only for searching. @@ -88855,8 +91921,8 @@ expressions. None - - InputPath + + Path Path to the document to open read-only for searching. @@ -89020,8 +92086,8 @@ expressions. None - - InputPath + + Path Path to the document to open read-only for searching. @@ -96413,7 +99479,8 @@ extraction, hashing, and chunk shaping. PS> - $options = [OfficeIMO.Reader.ReaderHierarchicalChunkingOptions]::new(); $options.MaxTokens = 500; $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options + $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText + $result = Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options Returns chunks, token evidence, overlap counts, and flattened parent/child nodes. @@ -98513,8 +101580,12 @@ extraction, hashing, and chunk shaping. - EXAMPLE 1 - Get-OfficeEmail -Path 'C:\Path' + Read a message without retaining attachment payloads. + + PS> + + $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB + Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult @@ -98639,8 +101710,12 @@ extraction, hashing, and chunk shaping. - EXAMPLE 1 - Get-OfficeEmailMailbox -Path 'C:\Path' + Read a bounded mbox mailbox with diagnostics. + + PS> + + $options = New-OfficeEmailMailboxReaderOptions -MaxMessageCount 5000 + Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult @@ -98664,19 +101739,19 @@ extraction, hashing, and chunk shaping. Get-OfficeExcel - AutoSave + Password - Enable automatic saves on the underlying document. + Password used to open an encrypted workbook package. - SwitchParameter + String - SwitchParameter + String None - - InputPath + + Path Path to the workbook to load. @@ -98687,18 +101762,6 @@ extraction, hashing, and chunk shaping. None - - Password - - Password used to open an encrypted workbook package. - - String - - String - - - None - ReadOnly @@ -98726,18 +101789,6 @@ extraction, hashing, and chunk shaping. None - - AutoSave - - Enable automatic saves on the underlying document. - - SwitchParameter - - SwitchParameter - - - None - Password @@ -98790,19 +101841,19 @@ extraction, hashing, and chunk shaping. None - AutoSave + Password - Enable automatic saves on the underlying document. + Password used to open an encrypted workbook package. - SwitchParameter + String - SwitchParameter + String None - - InputPath + + Path Path to the workbook to load. @@ -98813,18 +101864,6 @@ extraction, hashing, and chunk shaping. None - - Password - - Password used to open an encrypted workbook package. - - String - - String - - - None - ReadOnly @@ -98991,8 +102030,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -99177,8 +102216,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -99300,8 +102339,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path. @@ -99366,8 +102405,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path. @@ -99552,8 +102591,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -99762,8 +102801,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -100062,8 +103101,8 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelDataModel - - InputPath + + Path Workbook path. @@ -100104,8 +103143,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path. @@ -100291,8 +103330,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -100501,8 +103540,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -100647,26 +103686,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Name - Path to the workbook. + Property name filter (wildcards supported). - String + String[] - String + String[] None - - Name + + Path - Property name filter (wildcards supported). + Path to the workbook. - String[] + String - String[] + String None @@ -100785,26 +103824,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Name - Path to the workbook. + Property name filter (wildcards supported). - String + String[] - String + String[] None - - Name + + Path - Property name filter (wildcards supported). + Path to the workbook. - String[] + String - String[] + String None @@ -100875,8 +103914,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path. @@ -100941,8 +103980,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path. @@ -101005,24 +104044,24 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelNamedRange - - InputPath + + Name - Path to the workbook. + Optional named range to retrieve. - String + String String None - - Name + + Path - Optional named range to retrieve. + Path to the workbook. - String + String String @@ -101194,24 +104233,24 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Name - Path to the workbook. + Optional named range to retrieve. - String + String String None - - Name + + Path - Optional named range to retrieve. + Path to the workbook. - String + String String @@ -101464,8 +104503,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -101602,8 +104641,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -101701,24 +104740,24 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelPivotTable - - InputPath + + Name - Path to the workbook. + Optional pivot table name filter. - String + String String None - - Name + + Path - Optional pivot table name filter. + Path to the workbook. - String + String String @@ -101815,24 +104854,24 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Name - Path to the workbook. + Optional pivot table name filter. - String + String String None - - Name + + Path - Optional pivot table name filter. + Path to the workbook. - String + String String @@ -101972,8 +105011,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Path to the workbook. @@ -102152,8 +105191,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Path to the workbook. @@ -102268,26 +105307,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + NumericAsDecimal - Path to the workbook. + Prefer decimals instead of doubles for numeric values. - String + SwitchParameter - String + SwitchParameter None - - NumericAsDecimal + + Path - Prefer decimals instead of doubles for numeric values. + Path to the workbook. - SwitchParameter + String - SwitchParameter + String None @@ -102601,26 +105640,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + NumericAsDecimal - Path to the workbook. + Prefer decimals instead of doubles for numeric values. - String + SwitchParameter - String + SwitchParameter None - - NumericAsDecimal + + Path - Prefer decimals instead of doubles for numeric values. + Path to the workbook. - SwitchParameter + String - SwitchParameter + String None @@ -102822,8 +105861,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -102984,8 +106023,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -103129,8 +106168,8 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelStreamingContract - - InputPath + + Path Workbook path. @@ -103171,8 +106210,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path. @@ -103261,8 +106300,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Path to the workbook. @@ -103351,8 +106390,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Path to the workbook. @@ -103416,24 +106455,24 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelTable - - InputPath + + Name - Path to the workbook. + Optional table name filter. - String + String String None - - Name + + Path - Optional table name filter. + Path to the workbook. - String + String String @@ -103605,24 +106644,24 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Name - Path to the workbook. + Optional table name filter. - String + String String None - - Name + + Path - Optional table name filter. + Path to the workbook. - String + String String @@ -103872,26 +106911,26 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelTemplateMarker - - InputPath + + MissingOnly - Workbook path to inspect. + Only returns markers that are not supplied by -Value. - String + SwitchParameter - String + SwitchParameter None - - MissingOnly + + Path - Only returns markers that are not supplied by -Value. + Workbook path to inspect. - SwitchParameter + String - SwitchParameter + String None @@ -104010,26 +107049,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + MissingOnly - Workbook path to inspect. + Only returns markers that are not supplied by -Value. - String + SwitchParameter - String + SwitchParameter None - - MissingOnly + + Path - Only returns markers that are not supplied by -Value. + Workbook path to inspect. - SwitchParameter + String - SwitchParameter + String None @@ -104155,26 +107194,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + NumericAsDecimal - Path to the workbook. + Prefer decimals instead of doubles for numeric values. - String + SwitchParameter - String + SwitchParameter None - - NumericAsDecimal + + Path - Prefer decimals instead of doubles for numeric values. + Path to the workbook. - SwitchParameter + String - SwitchParameter + String None @@ -104452,26 +107491,26 @@ extraction, hashing, and chunk shaping. None - - InputPath + + NumericAsDecimal - Path to the workbook. + Prefer decimals instead of doubles for numeric values. - String + SwitchParameter - String + SwitchParameter None - - NumericAsDecimal + + Path - Prefer decimals instead of doubles for numeric values. + Path to the workbook. - SwitchParameter + String - SwitchParameter + String None @@ -104601,8 +107640,8 @@ extraction, hashing, and chunk shaping. Get-OfficeExcelWorksheetView - - InputPath + + Path Workbook path to inspect. @@ -104691,8 +107730,8 @@ extraction, hashing, and chunk shaping. None - - InputPath + + Path Workbook path to inspect. @@ -105135,18 +108174,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -105189,6 +108216,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -105453,18 +108492,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -105507,6 +108534,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -105692,18 +108731,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - Key @@ -105758,6 +108785,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -106253,18 +109292,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - Key @@ -106319,6 +109346,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -106533,231 +109572,231 @@ extraction, hashing, and chunk shaping. None - - InputPath + + MaxInputCharacters + + Maximum Markdown input length accepted by the reader. + + Int32 + + Int32 + + + None + + + MaxLevel + + Maximum heading level to return. + + Int32 + + Int32 + + + None + + + MinLevel + + Minimum heading level to return. + + Int32 + + Int32 + + + None + + + NormalizeInput + + Applies a built-in Markdown input normalization preset before parsing. + + MarkdownInputNormalizationPreset + + None + IntelligenceXTranscript + IntelligenceXTranscriptStrict + DocsLoose + + + MarkdownInputNormalizationPreset + + + None + + + Options + + Optional reader options used when parsing path or text input. + + MarkdownReaderOptions + + MarkdownReaderOptions + + + None + + + Path Path to the Markdown file. String - - String - - - None - - - MaxInputCharacters - - Maximum Markdown input length accepted by the reader. - - Int32 - - Int32 - - - None - - - MaxLevel - - Maximum heading level to return. - - Int32 - - Int32 - - - None - - - MinLevel - - Minimum heading level to return. - - Int32 - - Int32 - - - None - - - NormalizeInput - - Applies a built-in Markdown input normalization preset before parsing. - - MarkdownInputNormalizationPreset - - None - IntelligenceXTranscript - IntelligenceXTranscriptStrict - DocsLoose - - - MarkdownInputNormalizationPreset - - - None - - - Options - - Optional reader options used when parsing path or text input. - - MarkdownReaderOptions - - MarkdownReaderOptions - - - None - - - Profile - - Named reader profile used when Options is not supplied. - - MarkdownDialectProfile - - OfficeIMO - CommonMark - GitHubFlavoredMarkdown - Portable - - - MarkdownDialectProfile - - - None - - - RestrictUrlSchemes - - Restrict parsed URL schemes to the allow-list. - - Boolean - - Boolean - - - None - - - - Get-OfficeMarkdownHeading - - AllowDataUrls - - Allow data URLs while parsing Markdown links and images. - - Boolean - - Boolean - - - None - - - AllowedUrlScheme - - Allowed URL schemes when URL scheme restriction is enabled. - - String[] - - String[] - - - None - - - AllowMailtoUrls - - Allow mailto URLs while parsing Markdown links. - - Boolean - - Boolean - - - None - - - AllowProtocolRelativeUrls - - Allow protocol-relative URLs while parsing Markdown links and images. - - Boolean - - Boolean - - - None - - - Anchor - - Optional wildcard pattern matched against resolved heading anchors. - - String - - String - - - None - - - BaseUri - - Base URI used to resolve and restrict relative Markdown links and images. - - String - - String - - - None - - - CaseSensitive - - Use case-sensitive matching for text and anchor filters. - - SwitchParameter - - SwitchParameter - - - None - - - DisallowFileUrls - - Block file URLs while parsing Markdown links and images. - - Boolean - - Boolean - - - None - - - Document - - Markdown document to inspect. - - MarkdownDoc - - MarkdownDoc - - - None - - - HeadingText - - Optional wildcard pattern matched against heading text. - - String + + String + + + None + + + Profile + + Named reader profile used when Options is not supplied. + + MarkdownDialectProfile + + OfficeIMO + CommonMark + GitHubFlavoredMarkdown + Portable + + + MarkdownDialectProfile + + + None + + + RestrictUrlSchemes + + Restrict parsed URL schemes to the allow-list. + + Boolean + + Boolean + + + None + + + + Get-OfficeMarkdownHeading + + AllowDataUrls + + Allow data URLs while parsing Markdown links and images. + + Boolean + + Boolean + + + None + + + AllowedUrlScheme + + Allowed URL schemes when URL scheme restriction is enabled. + + String[] + + String[] + + + None + + + AllowMailtoUrls + + Allow mailto URLs while parsing Markdown links. + + Boolean + + Boolean + + + None + + + AllowProtocolRelativeUrls + + Allow protocol-relative URLs while parsing Markdown links and images. + + Boolean + + Boolean + + + None + + + Anchor + + Optional wildcard pattern matched against resolved heading anchors. + + String + + String + + + None + + + BaseUri + + Base URI used to resolve and restrict relative Markdown links and images. + + String + + String + + + None + + + CaseSensitive + + Use case-sensitive matching for text and anchor filters. + + SwitchParameter + + SwitchParameter + + + None + + + DisallowFileUrls + + Block file URLs while parsing Markdown links and images. + + Boolean + + Boolean + + + None + + + Document + + Markdown document to inspect. + + MarkdownDoc + + MarkdownDoc + + + None + + + HeadingText + + Optional wildcard pattern matched against heading text. + + String String @@ -107202,18 +110241,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -107280,6 +110307,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -107465,18 +110504,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxDepth @@ -107543,6 +110570,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -108098,18 +111137,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxDepth @@ -108176,6 +111203,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -108378,18 +111417,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -108432,6 +111459,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -108903,18 +111942,6 @@ extraction, hashing, and chunk shaping. None - - InputPath - - Path to the Markdown file. - - String - - String - - - None - MaxInputCharacters @@ -108957,6 +111984,18 @@ extraction, hashing, and chunk shaping. None + + Path + + Path to the Markdown file. + + String + + String + + + None + Profile @@ -109053,6 +112092,114 @@ extraction, hashing, and chunk shaping. Get-OfficeOpenDocument + + MaxCompressionRatio + + Maximum declared expansion ratio for a compressed entry. + + Double + + Double + + + None + + + MaxDepth + + Maximum archive path depth. + + Int32 + + Int32 + + + None + + + MaxEntries + + Maximum number of ZIP entries. + + Int32 + + Int32 + + + None + + + MaxEntryUncompressedBytes + + Maximum uncompressed size of one package entry. + + Int64 + + Int64 + + + None + + + MaxPackageBytes + + Maximum source package size in bytes. + + Int64 + + Int64 + + + None + + + MaxTotalKdfIterations + + Maximum aggregate PBKDF2 iterations across encrypted entries. + + Int64 + + Int64 + + + None + + + MaxTotalUncompressedBytes + + Maximum aggregate uncompressed package size. + + Int64 + + Int64 + + + None + + + MaxXmlCharacters + + Maximum characters allowed in one parsed XML part. + + Int64 + + Int64 + + + None + + + MaxXmlDepth + + Maximum element nesting depth in one parsed XML part. + + Int32 + + Int32 + + + None + Options @@ -109065,6 +112212,18 @@ extraction, hashing, and chunk shaping. None + + Password + + Password used to decrypt an encrypted OpenDocument package. + + String + + String + + + None + Path @@ -109080,6 +112239,114 @@ extraction, hashing, and chunk shaping. + + MaxCompressionRatio + + Maximum declared expansion ratio for a compressed entry. + + Double + + Double + + + None + + + MaxDepth + + Maximum archive path depth. + + Int32 + + Int32 + + + None + + + MaxEntries + + Maximum number of ZIP entries. + + Int32 + + Int32 + + + None + + + MaxEntryUncompressedBytes + + Maximum uncompressed size of one package entry. + + Int64 + + Int64 + + + None + + + MaxPackageBytes + + Maximum source package size in bytes. + + Int64 + + Int64 + + + None + + + MaxTotalKdfIterations + + Maximum aggregate PBKDF2 iterations across encrypted entries. + + Int64 + + Int64 + + + None + + + MaxTotalUncompressedBytes + + Maximum aggregate uncompressed package size. + + Int64 + + Int64 + + + None + + + MaxXmlCharacters + + Maximum characters allowed in one parsed XML part. + + Int64 + + Int64 + + + None + + + MaxXmlDepth + + Maximum element nesting depth in one parsed XML part. + + Int32 + + Int32 + + + None + Options @@ -109092,6 +112359,18 @@ extraction, hashing, and chunk shaping. None + + Password + + Password used to decrypt an encrypted OpenDocument package. + + String + + String + + + None + Path @@ -112706,24 +115985,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification Get-OfficePowerPoint - - FilePath + + Password - Path to the .pptx file. + Password used to open an encrypted presentation package. - String + String String None - - Password + + Path - Password used to open an encrypted presentation package. + Path to the .pptx file. - String + String String @@ -112733,24 +116012,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification - - FilePath + + Password - Path to the .pptx file. + Password used to open an encrypted presentation package. - String + String String None - - Password + + Path - Password used to open an encrypted presentation package. + Path to the .pptx file. - String + String String @@ -112777,7 +116056,7 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification PS> - $ppt = Get-OfficePowerPoint -FilePath .\Quarterly.pptx + $ppt = Get-OfficePowerPoint -Path .\Quarterly.pptx Reads Quarterly.pptx and exposes the presentation object. @@ -113265,7 +116544,7 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointLayoutBox.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru $box = Get-OfficePowerPointLayoutBox -MarginCm 1.5 Add-OfficePowerPointTextBox -Slide $slide -Text 'Inside the content box' -X ($box.LeftPoints) -Y ($box.TopPoints) -Width ($box.WidthPoints) -Height 60 } @@ -113279,7 +116558,7 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointColumns.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru $columns = Get-OfficePowerPointLayoutBox -ColumnCount 2 -MarginCm 1.5 -GutterCm 1.0 Add-OfficePowerPointTextBox -Slide $slide -Text 'Left column' -X ($columns[0].LeftPoints) -Y ($columns[0].TopPoints) -Width ($columns[0].WidthPoints) -Height 80 Add-OfficePowerPointTextBox -Slide $slide -Text 'Right column' -X ($columns[1].LeftPoints) -Y ($columns[1].TopPoints) -Width ($columns[1].WidthPoints) -Height 80 @@ -113856,10 +117135,11 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSectionsRead.pptx - Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null - Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0 | Out-Null - Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSectionsRead.pptx -NoSave + Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 + Add-OfficePowerPointSection -Presentation $ppt -Name 'Appendix' -StartSlideIndex 0 + Get-OfficePowerPointSection -Presentation $ppt | Select-Object Name, FirstSlideIndex, SlideCount + $ppt | Close-OfficePowerPoint Returns section information including section names and slide indexes. @@ -114488,10 +117768,11 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointThemeRead.pptx + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeRead.pptx -NoSave Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Service Brief' Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos Display' -MinorLatin 'Aptos' - Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master + Get-OfficePowerPointTheme -Presentation $ppt | Select-Object Name, Master + $ppt | Close-OfficePowerPoint Returns theme information after updating the deck theme metadata. @@ -115613,18 +118894,6 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification Get-OfficeWord - - AutoSave - - Enable AutoSave when editing. - - SwitchParameter - - SwitchParameter - - - None - Content @@ -115637,24 +118906,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Password - Path to the .docx. Accepts PS paths. + Password used to open an encrypted document package. - String + String String None - - Password + + Path - Password used to open an encrypted document package. + Path to the .docx. Accepts PS paths. - String + String String @@ -115676,18 +118945,6 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification - - AutoSave - - Enable AutoSave when editing. - - SwitchParameter - - SwitchParameter - - - None - Content @@ -115700,24 +118957,24 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Password - Path to the .docx. Accepts PS paths. + Password used to open an encrypted document package. - String + String String None - - Password + + Path - Password used to open an encrypted document package. + Path to the .docx. Accepts PS paths. - String + String String @@ -115789,26 +119046,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification Get-OfficeWordBookmark - - InputPath + + Name - Path to the .docx file. + Bookmark name filter (wildcards supported). - String + String[] - String + String[] None - - Name + + Path - Bookmark name filter (wildcards supported). + Path to the .docx file. - String[] + String - String[] + String None @@ -115855,26 +119112,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Name - Path to the .docx file. + Bookmark name filter (wildcards supported). - String + String[] - String + String[] None - - Name + + Path - Bookmark name filter (wildcards supported). + Path to the .docx file. - String[] + String - String[] + String None @@ -115955,8 +119212,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116093,8 +119350,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116193,8 +119450,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116283,8 +119540,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116371,8 +119628,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116485,8 +119742,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116585,8 +119842,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116675,8 +119932,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -116775,26 +120032,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Name - Path to the document. + Property name filter (wildcards supported). - String + String[] - String + String[] None - - Name + + Path - Property name filter (wildcards supported). + Path to the document. - String[] + String - String[] + String None @@ -116889,26 +120146,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Name - Path to the document. + Property name filter (wildcards supported). - String + String[] - String + String[] None - - Name + + Path - Property name filter (wildcards supported). + Path to the document. - String[] + String - String[] + String None @@ -116980,8 +120237,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -117070,8 +120327,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -117146,8 +120403,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification Get-OfficeWordEndnote - - InputPath + + Path Path to the document. @@ -117203,8 +120460,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the document. @@ -117398,8 +120655,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -117662,8 +120919,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the .docx file. @@ -117726,8 +120983,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification Get-OfficeWordFootnote - - InputPath + + Path Path to the document. @@ -117783,8 +121040,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the document. @@ -117879,8 +121136,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Path Path to the document. @@ -118095,26 +121352,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Paragraph - Path to the document. + Paragraph to inspect. - String + WordParagraph - String + WordParagraph None - - Paragraph + + Path - Paragraph to inspect. + Path to the document. - WordParagraph + String - WordParagraph + String None @@ -118217,8 +121474,8 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification Get-OfficeWordImage - - InputPath + + Path Path to the document. @@ -118289,26 +121546,26 @@ Certificate-chain trust, revocation, digest, and CMS cryptographic verification None - - InputPath + + Paragraph - Path to the document. + Paragraph to inspect. - String + WordParagraph - String + WordParagraph None - - Paragraph + + Path - Paragraph to inspect. + Path to the document. - WordParagraph + String - WordParagraph + String None @@ -118401,8 +121658,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document to open read-only for list inspection. @@ -118494,8 +121751,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document to open read-only for list inspection. @@ -118588,8 +121845,8 @@ the script needs to work with list objects directly instead of using a text sear Get-OfficeWordParagraph - - InputPath + + Path Path to the document. @@ -118645,8 +121902,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document. @@ -118739,8 +121996,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the .docx file. @@ -118829,8 +122086,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the .docx file. @@ -118917,8 +122174,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the .docx file. @@ -119007,8 +122264,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the .docx file. @@ -119198,8 +122455,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document. @@ -119264,8 +122521,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document. @@ -119328,8 +122585,8 @@ the script needs to work with list objects directly instead of using a text sear Get-OfficeWordShape - - InputPath + + Path Path to the document. @@ -119400,26 +122657,26 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Paragraph - Path to the document. + Paragraph to inspect. - String + WordParagraph - String + WordParagraph None - - Paragraph + + Path - Paragraph to inspect. + Path to the document. - WordParagraph + String - WordParagraph + String None @@ -119498,8 +122755,8 @@ the script needs to work with list objects directly instead of using a text sear Get-OfficeWordStatistics - - InputPath + + Path Path to the Word document. @@ -119540,8 +122797,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the Word document. @@ -119619,8 +122876,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document. @@ -119712,8 +122969,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the document. @@ -119921,8 +123178,8 @@ the script needs to work with list objects directly instead of using a text sear Get-OfficeWordTableOfContents - - InputPath + + Path Path to the .docx file. @@ -119963,8 +123220,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Path to the .docx file. @@ -120074,8 +123331,8 @@ the script needs to work with list objects directly instead of using a text sear Get-OfficeWordText - - InputPath + + Path Path to the document. @@ -120101,26 +123358,26 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Paragraph - Path to the document. + Paragraph to enumerate. - String + WordParagraph - String + WordParagraph None - - Paragraph + + Path - Paragraph to enumerate. + Path to the document. - WordParagraph + String - WordParagraph + String None @@ -124909,18 +128166,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path. - - String - - String - - - None - NoHeader @@ -124969,6 +128214,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path. + + String + + String + + + None + SheetName @@ -125167,18 +128424,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path. - - String - - String - - - None - NoHeader @@ -125227,6 +128472,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path. + + String + + String + + + None + SheetName @@ -125902,7 +129159,7 @@ the script needs to work with list objects directly instead of using a text sear PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointImportTarget.pptx { - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Target deck' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Target deck' Import-OfficePowerPointSlide -SourcePath .\Examples\Documents\SourceDeck.pptx -SourceIndex 0 -InsertAt 1 } @@ -127373,18 +130630,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - MissingValueBehavior @@ -127414,6 +130659,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -127593,18 +130850,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - MissingValueBehavior @@ -127634,6 +130879,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -127883,154 +131140,154 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + MissingValueBehavior + + Behavior used when a marker in the optional block is not supplied by -Value. + + ExcelTemplateMissingValueBehavior + + PreserveMarker + EmptyString + Throw + + + ExcelTemplateMissingValueBehavior + + + None + + + PassThru + + Returns the number of marker replacements. + + SwitchParameter + + SwitchParameter + + + None + + + Path Workbook path to update. String String - - - None - - - MissingValueBehavior - - Behavior used when a marker in the optional block is not supplied by -Value. - - ExcelTemplateMissingValueBehavior - - PreserveMarker - EmptyString - Throw - - - ExcelTemplateMissingValueBehavior - - - None - - - PassThru - - Returns the number of marker replacements. - - SwitchParameter - - SwitchParameter - - - None - - - Remove - - Removes the optional row block instead of keeping and binding it. - - SwitchParameter - - SwitchParameter - - - None - - - RowCount - - Number of rows in the optional block. - - Int32 - - Int32 - - - None - - - Sheet - - Worksheet name. Defaults to the current sheet inside an ExcelSheet block. - - String - - String - - - None - - - SheetIndex - - Worksheet index when using a workbook object or path. - - Int32 - - Int32 - - - None - - - ThrowOnMissing - - Throws when a marker in the optional block is not supplied by -Value. - - SwitchParameter - - SwitchParameter - - - None - - - Value - - Template marker values used when the optional row block is included. - - Hashtable - - Hashtable - - - None - - - - Invoke-OfficeExcelTemplateOptionalRow - - CultureName - - Culture name used for built-in marker format aliases such as currency and date. - - String - - String - - - None - - - Document - - Workbook to update outside the DSL context. - - ExcelDocument - - ExcelDocument - - - None - - - FirstRow - - 1-based first row in the optional block. - - Int32 - - Int32 + + + None + + + Remove + + Removes the optional row block instead of keeping and binding it. + + SwitchParameter + + SwitchParameter + + + None + + + RowCount + + Number of rows in the optional block. + + Int32 + + Int32 + + + None + + + Sheet + + Worksheet name. Defaults to the current sheet inside an ExcelSheet block. + + String + + String + + + None + + + SheetIndex + + Worksheet index when using a workbook object or path. + + Int32 + + Int32 + + + None + + + ThrowOnMissing + + Throws when a marker in the optional block is not supplied by -Value. + + SwitchParameter + + SwitchParameter + + + None + + + Value + + Template marker values used when the optional row block is included. + + Hashtable + + Hashtable + + + None + + + + Invoke-OfficeExcelTemplateOptionalRow + + CultureName + + Culture name used for built-in marker format aliases such as currency and date. + + String + + String + + + None + + + Document + + Workbook to update outside the DSL context. + + ExcelDocument + + ExcelDocument + + + None + + + FirstRow + + 1-based first row in the optional block. + + Int32 + + Int32 None @@ -128175,18 +131432,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - MissingValueBehavior @@ -128216,6 +131461,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + Remove @@ -128465,18 +131722,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - MissingValueBehavior @@ -128506,6 +131751,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -128709,18 +131966,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - MissingValueBehavior @@ -128750,6 +131995,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -128956,18 +132213,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - Item @@ -129009,6 +132254,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + SheetNameProperty @@ -129176,18 +132433,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Workbook path to update. - - String - - String - - - None - Item @@ -129229,6 +132474,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Workbook path to update. + + String + + String + + + None + SheetNameProperty @@ -129850,18 +133107,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Target workbook path to update. - - String - - String - - - None - MatchColumnsByHeader @@ -129898,6 +133143,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Target workbook path to update. + + String + + String + + + None + SourceDocument @@ -130228,18 +133485,6 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath - - Target workbook path to update. - - String - - String - - - None - MatchColumnsByHeader @@ -130276,6 +133521,18 @@ the script needs to work with list objects directly instead of using a text sear None + + Path + + Target workbook path to update. + + String + + String + + + None + SourceDocument @@ -130451,8 +133708,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Target workbook path to create or update. @@ -130655,8 +133912,8 @@ the script needs to work with list objects directly instead of using a text sear None - - InputPath + + Path Target workbook path to create or update. @@ -131210,14 +134467,14 @@ This does not discover, bypass, or crack a missing password. None - - InputPath + + Open - Base document path. + Open the saved output with the shell. - String + SwitchParameter - String + SwitchParameter None @@ -131246,14 +134503,14 @@ This does not discover, bypass, or crack a missing password. None - - Show + + Path - Open the saved output with the shell. + Base document path. - SwitchParameter + String - SwitchParameter + String None @@ -131285,34 +134542,34 @@ This does not discover, bypass, or crack a missing password. None - - OutputPath + + Open - Optional output path. When omitted for path input, the base document is updated in place. + Open the saved output with the shell. - String + SwitchParameter - String + SwitchParameter None - PassThru + OutputPath - Emit the merged Word document instead of disposing it. + Optional output path. When omitted for path input, the base document is updated in place. - SwitchParameter + String - SwitchParameter + String None - Show + PassThru - Open the saved output with the shell. + Emit the merged Word document instead of disposing it. SwitchParameter @@ -131348,14 +134605,14 @@ This does not discover, bypass, or crack a missing password. None - - InputPath + + Open - Base document path. + Open the saved output with the shell. - String + SwitchParameter - String + SwitchParameter None @@ -131384,14 +134641,14 @@ This does not discover, bypass, or crack a missing password. None - - Show + + Path - Open the saved output with the shell. + Base document path. - SwitchParameter + String - SwitchParameter + String None @@ -131525,26 +134782,26 @@ This does not discover, bypass, or crack a missing password. None - - InputPath + + PassThru - Workbook path to update. + Emit the moved worksheet. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the moved worksheet. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -131663,26 +134920,26 @@ This does not discover, bypass, or crack a missing password. None - - InputPath + + PassThru - Workbook path to update. + Emit the moved worksheet. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the moved worksheet. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -131808,6 +135065,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -131883,6 +135152,18 @@ This does not discover, bypass, or crack a missing password. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -132520,161 +135801,295 @@ This does not discover, bypass, or crack a missing password. - New-OfficeExcel + New-OfficeEmailMailboxReaderOptions New - OfficeExcel + OfficeEmailMailboxReaderOptions - Creates a new Excel workbook using the DSL. + Creates bounded mbox reader settings through ordinary PowerShell parameters. - Runs the provided script block inside an ExcelSheet/ExcelCell DSL context and saves the file. + Creates bounded mbox reader settings through ordinary PowerShell parameters. - New-OfficeExcel - - ApplicationName - - Workbook application-name metadata. - - String - - String - - - None - - - Author - - Workbook author metadata. - - String - - String - - - None - - - AutoSave - - Opt into OfficeIMO automatic saves during operations. - - SwitchParameter - - SwitchParameter - - - None - + New-OfficeEmailMailboxReaderOptions - Category - - Workbook category metadata. - - String - - String - - - None - - - ClearCachedFormulaResults + MaxMailboxBytes - Remove cached formula results before saving. + Maximum aggregate source bytes consumed from one mailbox. - SwitchParameter + Int64 - SwitchParameter + Int64 None - Company + MaxMessageCount - Workbook company metadata. + Maximum messages in one mailbox. - String + Int32 - String + Int32 None - - Content + + MessageOptions - DSL scriptblock describing workbook content. + Bounded policy applied independently to each message. - ScriptBlock + EmailReaderOptions - ScriptBlock + EmailReaderOptions None - DateSystem + Variant - Workbook date system for Excel date serials. + Escaping convention to decode. - String + MboxVariant - 1900 - 1904 - NineteenHundred - NineteenFour + Auto + Mboxo + Mboxrd - String - - - None - - - Description - - Workbook description metadata. - - String - - String + MboxVariant None - - DisableFastPackageWriter + + + + + MaxMailboxBytes + + Maximum aggregate source bytes consumed from one mailbox. + + Int64 + + Int64 + + + None + + + MaxMessageCount + + Maximum messages in one mailbox. + + Int32 + + Int32 + + + None + + + MessageOptions + + Bounded policy applied independently to each message. + + EmailReaderOptions + + EmailReaderOptions + + + None + + + Variant + + Escaping convention to decode. + + MboxVariant + + Auto + Mboxo + Mboxrd + + + MboxVariant + + + None + + + + + + OfficeIMO.Email.EmailReaderOptions + + + + + + + OfficeIMO.Email.EmailMailboxReaderOptions + + + + + + + + + + + Read a bounded mailbox with a reusable per-message policy. + + PS> + + $messageOptions = New-OfficeEmailReaderOptions -ExcludeAttachmentContent + $options = New-OfficeEmailMailboxReaderOptions -MessageOptions $messageOptions -MaxMessageCount 5000 + Get-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -AsResult + + + + + + + + + + New-OfficeEmailMailboxWriterOptions + New + OfficeEmailMailboxWriterOptions + + Creates deterministic mbox writer settings through ordinary PowerShell parameters. + + + + Creates deterministic mbox writer settings through ordinary PowerShell parameters. + + + + New-OfficeEmailMailboxWriterOptions + + MessageOptions - Disable OfficeIMO fast package writers for this save. + Serialization policy applied independently to each message. - SwitchParameter + EmailWriterOptions - SwitchParameter + EmailWriterOptions None - DocumentTitle + Variant - Workbook document title metadata. + Concrete mbox escaping convention to write. - String + MboxVariant + + Auto + Mboxo + Mboxrd + - String + MboxVariant None + + + + + MessageOptions + + Serialization policy applied independently to each message. + + EmailWriterOptions + + EmailWriterOptions + + + None + + + Variant + + Concrete mbox escaping convention to write. + + MboxVariant + + Auto + Mboxo + Mboxrd + + + MboxVariant + + + None + + + + + + OfficeIMO.Email.EmailWriterOptions + + + + + + + OfficeIMO.Email.EmailMailboxWriterOptions + + + + + + + + + + + Write an mboxo mailbox with a reusable per-message policy. + + PS> + + $messageOptions = New-OfficeEmailWriterOptions -IncludeBccHeader + $options = New-OfficeEmailMailboxWriterOptions -MessageOptions $messageOptions -Variant Mboxo + $mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru + + + + + + + + + + New-OfficeEmailReaderOptions + New + OfficeEmailReaderOptions + + Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters. + + + + Creates bounded EML, MSG, and TNEF reader settings through ordinary PowerShell parameters. + + + + New-OfficeEmailReaderOptions - EvaluateFormulas + ExcludeAttachmentContent - Evaluate supported formulas and write cached values before saving. + Do not retain decoded attachment payloads in memory. SwitchParameter @@ -132683,190 +136098,166 @@ This does not discover, bypass, or crack a missing password. None - - FilePath - - Destination path for the workbook. - - String - - String - - - None - - ForceFullCalculationOnOpen + MaxAttachmentBytes - Request a full workbook recalculation when opened in Excel-compatible applications. + Maximum decoded bytes for one attachment. - SwitchParameter + Int64 - SwitchParameter + Int64 None - Keywords + MaxAttachmentCount - Workbook keyword metadata. + Maximum aggregate attachment count. - String + Int32 - String + Int32 None - LastModifiedBy + MaxCompoundDirectoryEntries - Workbook last-modified-by metadata. + Maximum CFB directory entries accepted while reading MSG. - String + Int32 - String + Int32 None - Manager + MaxDecodedPropertyBytes - Workbook manager metadata. + Maximum aggregate bytes represented by decoded MSG property streams. - String + Int64 - String + Int64 None - MarkFormulasDirty + MaxHeaderBytes - Mark formula cells dirty before saving. + Maximum bytes allowed in one MIME header section. - SwitchParameter + Int32 - SwitchParameter + Int32 None - NoSave + MaxHeaderCount - Skip saving the workbook after running the DSL. + Maximum number of header fields in one entity. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Open + MaxInputBytes - Open the workbook in Excel after saving. + Maximum artifact size accepted by the reader. - SwitchParameter + Int64 - SwitchParameter + Int64 None - PassThru + MaxMapiPropertyCount - Emit a FileInfo for convenience. + Maximum aggregate MAPI properties across a message and embedded messages. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Password + MaxMimeDepth - Password used to save the workbook as an encrypted package. + Maximum nested MIME depth. - String + Int32 - String + Int32 None - PdfPath + MaxNestedMessageDepth - Optional PDF path to create from the same workbook before closing it. + Maximum embedded-message recursion depth. - String + Int32 - String + Int32 None - SafePreflight + MaxPartCount - Run OfficeIMO worksheet preflight cleanup before saving. + Maximum MIME entity count. - SwitchParameter + Int32 - SwitchParameter + Int32 None - SafeRepairDefinedNames + MaxTnefAttributeCount - Repair common defined-name issues before saving. + Maximum number of TNEF attributes. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Subject - - Workbook subject metadata. - - String - - String - - - None - - - TemplatePath + MaxTotalAttachmentBytes - Optional workbook template package copied before running the DSL. + Maximum aggregate decoded attachment bytes. - String + Int64 - String + Int64 None - ValidateOpenXml + PreserveRawSource - Validate the saved package with OpenXmlValidator and throw on errors. + Retain original artifact bytes for an explicit lossless write. SwitchParameter @@ -132879,147 +136270,9 @@ This does not discover, bypass, or crack a missing password. - ApplicationName - - Workbook application-name metadata. - - String - - String - - - None - - - Author - - Workbook author metadata. - - String - - String - - - None - - - AutoSave - - Opt into OfficeIMO automatic saves during operations. - - SwitchParameter - - SwitchParameter - - - None - - - Category - - Workbook category metadata. - - String - - String - - - None - - - ClearCachedFormulaResults - - Remove cached formula results before saving. - - SwitchParameter - - SwitchParameter - - - None - - - Company - - Workbook company metadata. - - String - - String - - - None - - - Content - - DSL scriptblock describing workbook content. - - ScriptBlock - - ScriptBlock - - - None - - - DateSystem - - Workbook date system for Excel date serials. - - String - - 1900 - 1904 - NineteenHundred - NineteenFour - - - String - - - None - - - Description - - Workbook description metadata. - - String - - String - - - None - - - DisableFastPackageWriter - - Disable OfficeIMO fast package writers for this save. - - SwitchParameter - - SwitchParameter - - - None - - - DocumentTitle - - Workbook document title metadata. - - String - - String - - - None - - - EvaluateFormulas + ExcludeAttachmentContent - Evaluate supported formulas and write cached values before saving. + Do not retain decoded attachment payloads in memory. SwitchParameter @@ -133028,190 +136281,166 @@ This does not discover, bypass, or crack a missing password. None - - FilePath - - Destination path for the workbook. - - String - - String - - - None - - ForceFullCalculationOnOpen + MaxAttachmentBytes - Request a full workbook recalculation when opened in Excel-compatible applications. + Maximum decoded bytes for one attachment. - SwitchParameter + Int64 - SwitchParameter + Int64 None - Keywords + MaxAttachmentCount - Workbook keyword metadata. + Maximum aggregate attachment count. - String + Int32 - String + Int32 None - LastModifiedBy + MaxCompoundDirectoryEntries - Workbook last-modified-by metadata. + Maximum CFB directory entries accepted while reading MSG. - String + Int32 - String + Int32 None - Manager + MaxDecodedPropertyBytes - Workbook manager metadata. + Maximum aggregate bytes represented by decoded MSG property streams. - String + Int64 - String + Int64 None - MarkFormulasDirty + MaxHeaderBytes - Mark formula cells dirty before saving. + Maximum bytes allowed in one MIME header section. - SwitchParameter + Int32 - SwitchParameter + Int32 None - NoSave + MaxHeaderCount - Skip saving the workbook after running the DSL. + Maximum number of header fields in one entity. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Open + MaxInputBytes - Open the workbook in Excel after saving. + Maximum artifact size accepted by the reader. - SwitchParameter + Int64 - SwitchParameter + Int64 None - PassThru + MaxMapiPropertyCount - Emit a FileInfo for convenience. + Maximum aggregate MAPI properties across a message and embedded messages. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Password + MaxMimeDepth - Password used to save the workbook as an encrypted package. + Maximum nested MIME depth. - String + Int32 - String + Int32 None - PdfPath + MaxNestedMessageDepth - Optional PDF path to create from the same workbook before closing it. + Maximum embedded-message recursion depth. - String + Int32 - String + Int32 None - SafePreflight + MaxPartCount - Run OfficeIMO worksheet preflight cleanup before saving. + Maximum MIME entity count. - SwitchParameter + Int32 - SwitchParameter + Int32 None - SafeRepairDefinedNames + MaxTnefAttributeCount - Repair common defined-name issues before saving. + Maximum number of TNEF attributes. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Subject - - Workbook subject metadata. - - String - - String - - - None - - - TemplatePath + MaxTotalAttachmentBytes - Optional workbook template package copied before running the DSL. + Maximum aggregate decoded attachment bytes. - String + Int64 - String + Int64 None - ValidateOpenXml + PreserveRawSource - Validate the saved package with OpenXmlValidator and throw on errors. + Retain original artifact bytes for an explicit lossless write. SwitchParameter @@ -133228,7 +136457,13 @@ This does not discover, bypass, or crack a missing password. - + + + + OfficeIMO.Email.EmailReaderOptions + + + @@ -133236,27 +136471,14 @@ This does not discover, bypass, or crack a missing password. - Create a workbook with a sheet and a few cells. - - PS> - - New-OfficeExcel -Path .\report.xlsx { ExcelSheet 'Data' { ExcelCell -Address 'A1' -Value 'Region' } } - - Creates report.xlsx and writes “Region” into cell A1 on the Data worksheet. - - - - Keep a workbook for incremental composition. + Read message diagnostics without retaining attachment payloads. PS> - $workbook = New-OfficeExcel -Path .\report.xlsx -NoSave - $sheet = $workbook | Add-OfficeExcelSheet -Name 'Data' -PassThru - $sheet | Set-OfficeExcelCell -Address A1 -Value 'Region' - $workbook | Save-OfficeExcel - $workbook | Close-OfficeExcel + $options = New-OfficeEmailReaderOptions -ExcludeAttachmentContent -MaxAttachmentBytes 25MB + Get-OfficeEmail -Path .\Message.msg -Options $options -AsResult - Associates the output path with a live workbook, changes a worksheet, then saves and closes it once. + @@ -133264,89 +136486,23 @@ This does not discover, bypass, or crack a missing password. - New-OfficeExcelDashboard + New-OfficeEmailStoreReaderOptions New - OfficeExcelDashboard + OfficeEmailStoreReaderOptions - Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults. + Creates bounded email-store reader settings without requiring .NET constructor syntax. - Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults. + Creates bounded email-store reader settings without requiring .NET constructor syntax. - - New-OfficeExcelDashboard - - ChartColumn - - Top-left chart column. - - Int32 - - Int32 - - - None - - - ChartPreset - - Dashboard chart preset. - - ExcelDashboardChartPreset - - Comparison - Trend - Contribution - CompactComparison - - - ExcelDashboardChartPreset - - - None - - - ChartRow - - Top-left chart row. - - Int32 - - Int32 - - - None - - - ChartTitle - - Chart title. Defaults to Title when omitted. - - String - - String - - - None - - - InputObject - - Rows to render in the dashboard table. - - Object - - Object - - - None - + + New-OfficeEmailStoreReaderOptions - NoAutoFilter + ExcludeAttachmentContent - Disable AutoFilter dropdowns on the generated table. + Do not retain decoded attachment payloads in memory. SwitchParameter @@ -133356,9 +136512,9 @@ This does not discover, bypass, or crack a missing password. None - NoAutoFit + IncludeAssociatedItems - Disable auto-fit for generated table columns. + Materialize folder-associated information items. SwitchParameter @@ -133368,9 +136524,9 @@ This does not discover, bypass, or crack a missing password. None - NoChart + IncludeOrphanedItems - Do not create a chart. + Recover item nodes absent from folder contents tables. SwitchParameter @@ -133380,57 +136536,57 @@ This does not discover, bypass, or crack a missing password. None - PassThru + MaxArchiveDecodedBytes - Emit dashboard build metadata. + Maximum total decoded size declared by archive entries. - SwitchParameter + Int64 - SwitchParameter + Int64 None - Subtitle + MaxArchiveEntries - Dashboard subtitle. + Maximum entries accepted from a compressed email-store archive. - String + Int32 - String + Int32 None - TableColumn + MaxArchiveEntryBytes - Top-left column for the generated table. + Maximum decoded size declared by one archive entry. - Int32 + Int64 - Int32 + Int64 None - TableName + MaxAttachmentBytes - Name for the generated table. + Maximum decoded bytes in one attachment. - String + Int64 - String + Int64 None - TableRow + MaxAttachmentsPerItem - Top-left row for the generated table. + Maximum attachments per item. Int32 @@ -133440,66 +136596,57 @@ This does not discover, bypass, or crack a missing password. None - TableStyle + MaxBTreeDepth - Built-in table style. + Maximum tree traversal depth. - String + Int32 - String + Int32 None - Title + MaxCachedBTreePages - Dashboard title. + Maximum PST/OST B-tree pages retained by the cache. - String + Int32 - String + Int32 None - - - New-OfficeExcelDashboard - ChartColumn + MaxDecodedPropertyBytesPerItem - Top-left chart column. + Maximum decoded property bytes per item. - Int32 + Int64 - Int32 + Int64 None - ChartPreset + MaxDecodedTableBytes - Dashboard chart preset. + Maximum decoded bytes traversed from one PST/OST table data tree. - ExcelDashboardChartPreset - - Comparison - Trend - Contribution - CompactComparison - + Int64 - ExcelDashboardChartPreset + Int64 None - ChartRow + MaxDirectoryDepth - Top-left chart row. + Maximum directory depth traversed by mailbox-directory sessions. Int32 @@ -133509,105 +136656,69 @@ This does not discover, bypass, or crack a missing password. None - ChartTitle - - Chart title. Defaults to Title when omitted. - - String - - String - - - None - - - InputObject - - Rows to render in the dashboard table. - - Object - - Object - - - None - - - InputPath + MaxDirectoryFileCount - Workbook path to update. + Maximum EML, EMLX, and Maildir files indexed by one directory session. - String + Int32 - String + Int32 None - NoAutoFilter + MaxFolderCount - Disable AutoFilter dropdowns on the generated table. + Maximum folders materialized. - SwitchParameter + Int32 - SwitchParameter + Int32 None - NoAutoFit + MaxInputBytes - Disable auto-fit for generated table columns. + Maximum seekable source length. - SwitchParameter + Int64 - SwitchParameter + Int64 None - NoChart + MaxItemCount - Do not create a chart. + Maximum items materialized. - SwitchParameter + Int32 - SwitchParameter + Int32 None - PassThru - - Emit dashboard build metadata. - - SwitchParameter - - SwitchParameter - - - None - - - Sheet + MaxMessageBytes - Worksheet name when using Path or Document. + Maximum RFC 5322/MIME message bytes accepted from one item. - String + Int64 - String + Int64 None - SheetIndex + MaxNestedMessageDepth - Worksheet index (0-based) when using Path or Document. + Maximum embedded-message recursion depth. Int32 @@ -133617,21 +136728,21 @@ This does not discover, bypass, or crack a missing password. None - Subtitle + MaxNodeCount - Dashboard subtitle. + Maximum NDB nodes and blocks visited. - String + Int32 - String + Int32 None - TableColumn + MaxPropertiesPerItem - Top-left column for the generated table. + Maximum MAPI properties decoded per item. Int32 @@ -133641,33 +136752,33 @@ This does not discover, bypass, or crack a missing password. None - TableName + MaxTotalAttachmentBytes - Name for the generated table. + Maximum decoded attachment bytes across the read. - String + Int64 - String + Int64 None - TableRow + MaxXmlCharactersPerItem - Top-left row for the generated table. + Maximum XML characters parsed from one archive item. - Int32 + Int64 - Int32 + Int64 None - TableStyle + PstPassword - Built-in table style. + Password used to validate legacy protected PST files. String @@ -133677,234 +136788,9 @@ This does not discover, bypass, or crack a missing password. None - Title + PstPasswordEncoding - Dashboard title. - - String - - String - - - None - - - - New-OfficeExcelDashboard - - ChartColumn - - Top-left chart column. - - Int32 - - Int32 - - - None - - - ChartPreset - - Dashboard chart preset. - - ExcelDashboardChartPreset - - Comparison - Trend - Contribution - CompactComparison - - - ExcelDashboardChartPreset - - - None - - - ChartRow - - Top-left chart row. - - Int32 - - Int32 - - - None - - - ChartTitle - - Chart title. Defaults to Title when omitted. - - String - - String - - - None - - - Document - - Workbook to update outside the DSL context. - - ExcelDocument - - ExcelDocument - - - None - - - InputObject - - Rows to render in the dashboard table. - - Object - - Object - - - None - - - NoAutoFilter - - Disable AutoFilter dropdowns on the generated table. - - SwitchParameter - - SwitchParameter - - - None - - - NoAutoFit - - Disable auto-fit for generated table columns. - - SwitchParameter - - SwitchParameter - - - None - - - NoChart - - Do not create a chart. - - SwitchParameter - - SwitchParameter - - - None - - - PassThru - - Emit dashboard build metadata. - - SwitchParameter - - SwitchParameter - - - None - - - Sheet - - Worksheet name when using Path or Document. - - String - - String - - - None - - - SheetIndex - - Worksheet index (0-based) when using Path or Document. - - Int32 - - Int32 - - - None - - - Subtitle - - Dashboard subtitle. - - String - - String - - - None - - - TableColumn - - Top-left column for the generated table. - - Int32 - - Int32 - - - None - - - TableName - - Name for the generated table. - - String - - String - - - None - - - TableRow - - Top-left row for the generated table. - - Int32 - - Int32 - - - None - - - TableStyle - - Built-in table style. - - String - - String - - - None - - - Title - - Dashboard title. + Encoding name used for the legacy PST password checksum. String @@ -133917,39 +136803,57 @@ This does not discover, bypass, or crack a missing password. - ChartColumn + ExcludeAttachmentContent - Top-left chart column. + Do not retain decoded attachment payloads in memory. - Int32 + SwitchParameter - Int32 + SwitchParameter None - ChartPreset + IncludeAssociatedItems - Dashboard chart preset. + Materialize folder-associated information items. - ExcelDashboardChartPreset - - Comparison - Trend - Contribution - CompactComparison - + SwitchParameter - ExcelDashboardChartPreset + SwitchParameter None - ChartRow + IncludeOrphanedItems - Top-left chart row. + Recover item nodes absent from folder contents tables. + + SwitchParameter + + SwitchParameter + + + None + + + MaxArchiveDecodedBytes + + Maximum total decoded size declared by archive entries. + + Int64 + + Int64 + + + None + + + MaxArchiveEntries + + Maximum entries accepted from a compressed email-store archive. Int32 @@ -133959,117 +136863,117 @@ This does not discover, bypass, or crack a missing password. None - ChartTitle + MaxArchiveEntryBytes - Chart title. Defaults to Title when omitted. + Maximum decoded size declared by one archive entry. - String + Int64 - String + Int64 None - - Document + + MaxAttachmentBytes - Workbook to update outside the DSL context. + Maximum decoded bytes in one attachment. - ExcelDocument + Int64 - ExcelDocument + Int64 None - - InputObject + + MaxAttachmentsPerItem - Rows to render in the dashboard table. + Maximum attachments per item. - Object + Int32 - Object + Int32 None - - InputPath + + MaxBTreeDepth - Workbook path to update. + Maximum tree traversal depth. - String + Int32 - String + Int32 None - NoAutoFilter + MaxCachedBTreePages - Disable AutoFilter dropdowns on the generated table. + Maximum PST/OST B-tree pages retained by the cache. - SwitchParameter + Int32 - SwitchParameter + Int32 None - NoAutoFit + MaxDecodedPropertyBytesPerItem - Disable auto-fit for generated table columns. + Maximum decoded property bytes per item. - SwitchParameter + Int64 - SwitchParameter + Int64 None - NoChart + MaxDecodedTableBytes - Do not create a chart. + Maximum decoded bytes traversed from one PST/OST table data tree. - SwitchParameter + Int64 - SwitchParameter + Int64 None - PassThru + MaxDirectoryDepth - Emit dashboard build metadata. + Maximum directory depth traversed by mailbox-directory sessions. - SwitchParameter + Int32 - SwitchParameter + Int32 None - - Sheet + + MaxDirectoryFileCount - Worksheet name when using Path or Document. + Maximum EML, EMLX, and Maildir files indexed by one directory session. - String + Int32 - String + Int32 None - SheetIndex + MaxFolderCount - Worksheet index (0-based) when using Path or Document. + Maximum folders materialized. Int32 @@ -134079,21 +136983,21 @@ This does not discover, bypass, or crack a missing password. None - Subtitle + MaxInputBytes - Dashboard subtitle. + Maximum seekable source length. - String + Int64 - String + Int64 None - TableColumn + MaxItemCount - Top-left column for the generated table. + Maximum items materialized. Int32 @@ -134103,21 +137007,21 @@ This does not discover, bypass, or crack a missing password. None - TableName + MaxMessageBytes - Name for the generated table. + Maximum RFC 5322/MIME message bytes accepted from one item. - String + Int64 - String + Int64 None - TableRow + MaxNestedMessageDepth - Top-left row for the generated table. + Maximum embedded-message recursion depth. Int32 @@ -134127,9 +137031,57 @@ This does not discover, bypass, or crack a missing password. None - TableStyle + MaxNodeCount - Built-in table style. + Maximum NDB nodes and blocks visited. + + Int32 + + Int32 + + + None + + + MaxPropertiesPerItem + + Maximum MAPI properties decoded per item. + + Int32 + + Int32 + + + None + + + MaxTotalAttachmentBytes + + Maximum decoded attachment bytes across the read. + + Int64 + + Int64 + + + None + + + MaxXmlCharactersPerItem + + Maximum XML characters parsed from one archive item. + + Int64 + + Int64 + + + None + + + PstPassword + + Password used to validate legacy protected PST files. String @@ -134139,9 +137091,9 @@ This does not discover, bypass, or crack a missing password. None - Title + PstPasswordEncoding - Dashboard title. + Encoding name used for the legacy PST password checksum. String @@ -134154,14 +137106,14 @@ This does not discover, bypass, or crack a missing password. - System.Object + None - System.Management.Automation.PSObject + OfficeIMO.Email.Store.EmailStoreReaderOptions @@ -134172,13 +137124,14 @@ This does not discover, bypass, or crack a missing password. - Create a dashboard table and chart. + Read an EMLX message without retaining attachment payloads. PS> - $rows | New-OfficeExcelDashboard -Title 'Sales Dashboard' -TableName Sales -ChartPreset CompactComparison + $options = New-OfficeEmailStoreReaderOptions -ExcludeAttachmentContent -MaxAttachmentsPerItem 100 + Get-OfficeEmail -Path .\Message.emlx -StoreOptions $options -AsResult - Writes a table and chart into the current Excel DSL worksheet. + @@ -134186,100 +137139,88 @@ This does not discover, bypass, or crack a missing password. - New-OfficeMarkdown + New-OfficeEmailWriterOptions New - OfficeMarkdown + OfficeEmailWriterOptions - Creates a Markdown document using a DSL scriptblock. + Creates deterministic email writer settings through ordinary PowerShell parameters. - Runs the scriptblock against a Markdown document and saves it to disk unless -NoSave is specified. + Creates deterministic email writer settings through ordinary PowerShell parameters. - New-OfficeMarkdown - - Content + New-OfficeEmailWriterOptions + + Base64LineLength - DSL scriptblock describing Markdown content. + Maximum encoded characters on one Base64 body line. - ScriptBlock + Int32 - ScriptBlock + Int32 None - ImageRenderingMode + ConversionLossPolicy - Controls how Markdown images are serialized. + Policy applied when the requested format cannot preserve known message semantics. - MarkdownImageRenderingMode + EmailConversionLossPolicy - RichMarkdown - PortableMarkdown - Html + Block + Warn + Allow - MarkdownImageRenderingMode + EmailConversionLossPolicy None - LineEnding + IncludeBccHeader - Markdown line ending: CRLF, LF, CR, or a literal line ending string. + Write Bcc recipients into the message header. - String + SwitchParameter - String + SwitchParameter None - MarkdownPdfOptions + MaxNestedMessageDepth - Advanced Markdown PDF options. Friendly PDF parameters override matching values. + Maximum embedded-message write depth. - MarkdownPdfSaveOptions + Int32 - MarkdownPdfSaveOptions + Int32 None - NoSave - - Skip saving after executing the DSL. - - SwitchParameter - - SwitchParameter - - - None - - - OutputPath + MaxOutputBytes - Destination path for the Markdown file. + Maximum serialized artifact size. - String + Int64 - String + Int64 None - PassThru + UsePreservedRawSource - Emit a FileInfo for chaining. + Emit an unchanged preserved source instead of regenerating the artifact when possible. SwitchParameter @@ -134288,22 +137229,152 @@ This does not discover, bypass, or crack a missing password. None + + + + + Base64LineLength + + Maximum encoded characters on one Base64 body line. + + Int32 + + Int32 + + + None + + + ConversionLossPolicy + + Policy applied when the requested format cannot preserve known message semantics. + + EmailConversionLossPolicy + + Block + Warn + Allow + + + EmailConversionLossPolicy + + + None + + + IncludeBccHeader + + Write Bcc recipients into the message header. + + SwitchParameter + + SwitchParameter + + + None + + + MaxNestedMessageDepth + + Maximum embedded-message write depth. + + Int32 + + Int32 + + + None + + + MaxOutputBytes + + Maximum serialized artifact size. + + Int64 + + Int64 + + + None + + + UsePreservedRawSource + + Emit an unchanged preserved source instead of regenerating the artifact when possible. + + SwitchParameter + + SwitchParameter + + + None + + + + + + None + + + + + + + OfficeIMO.Email.EmailWriterOptions + + + + + + + + + + + Preserve the original source when possible and block semantic loss. + + PS> + + $options = New-OfficeEmailWriterOptions -UsePreservedRawSource -ConversionLossPolicy Block + $message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru + + + + + + + + + + New-OfficeExcel + New + OfficeExcel + + Creates a new Excel workbook using the DSL. + + + + Runs the provided script block inside an ExcelSheet/ExcelCell DSL context and saves the file. + + + + New-OfficeExcel - PdfApplyWordLikeTheme + ApplicationName - Apply the built-in Word-like Markdown PDF baseline theme. + Workbook application-name metadata. - Boolean + String - Boolean + String None - PdfAuthor + Author - PDF author metadata. + Workbook author metadata. String @@ -134313,9 +137384,9 @@ This does not discover, bypass, or crack a missing password. None - PdfBaseDirectory + Category - Base directory used to resolve local Markdown images during PDF export. + Workbook category metadata. String @@ -134325,57 +137396,63 @@ This does not discover, bypass, or crack a missing password. None - PdfConversionReportVariable + ClearCachedFormulaResults - Variable name that receives the Markdown PDF conversion report. + Remove cached formula results before saving. - String + SwitchParameter - String + SwitchParameter None - PdfCreateOutlineFromHeadings + Company - Create PDF outlines from Markdown headings. + Workbook company metadata. - Boolean + String - Boolean + String None - - PdfDefaultImageHeight + + Content - Fallback PDF image height in points. + DSL scriptblock describing workbook content. - Double + ScriptBlock - Double + ScriptBlock None - PdfDefaultImageWidth + DateSystem - Fallback PDF image width in points. + Workbook date system for Excel date serials. - Double + String + + 1900 + 1904 + NineteenHundred + NineteenFour + - Double + String None - PdfFontFamily + Description - Default font family used by Markdown PDF export. + Workbook description metadata. String @@ -134385,86 +137462,81 @@ This does not discover, bypass, or crack a missing password. None - PdfFrontMatterRenderMode + DisableFastPackageWriter - Controls how YAML front matter appears in the PDF body. + Disable OfficeIMO fast package writers for this save. - MarkdownPdfFrontMatterRenderMode - - Hidden - DocumentHeader - Table - + SwitchParameter - MarkdownPdfFrontMatterRenderMode + SwitchParameter None - PdfIncludeDataUriImages + DocumentTitle - Embed supported data URI images in Markdown PDF output. + Workbook document title metadata. - Boolean + String - Boolean + String None - PdfIncludeLocalImages + EvaluateFormulas - Embed supported local image files in Markdown PDF output. + Evaluate supported formulas and write cached values before saving. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfKeywords + ForceFullCalculationOnOpen - PDF keywords metadata. + Request a full workbook recalculation when opened in Excel-compatible applications. - String + SwitchParameter - String + SwitchParameter None - PdfMaximumDataUriImageBytes + Keywords - Maximum decoded bytes for one data URI image in Markdown PDF output. + Workbook keyword metadata. - Int32 + String - Int32 + String None - PdfOptions + LastModifiedBy - Underlying OfficeIMO.Pdf options used by Markdown PDF export. + Workbook last-modified-by metadata. - PdfOptions + String - PdfOptions + String None - PdfPath + Manager - Optional PDF path to create from the same Markdown document. + Workbook manager metadata. String @@ -134474,113 +137546,105 @@ This does not discover, bypass, or crack a missing password. None - PdfRestrictLocalImagesToBaseDirectory + MarkFormulasDirty - Require local images to resolve under the base directory. + Mark formula cells dirty before saving. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfSubject + NoSave - PDF subject metadata. + Skip saving the workbook after running the DSL. - String + SwitchParameter - String + SwitchParameter None - PdfTheme + Open - Built-in Markdown PDF visual theme. + Open the workbook in Excel after saving. - OfficeVisualThemeKind - - Plain - WordLike - TechnicalDocument - GitHubLike - Compact - Report - + SwitchParameter - OfficeVisualThemeKind + SwitchParameter None - PdfTitle + PassThru - PDF title metadata. + Emit a FileInfo for convenience. - String + SwitchParameter - String + SwitchParameter None - PdfUseFirstHeadingAsTitle + Password - Use the first Markdown heading as the PDF title when no title is supplied. + Password used to save the workbook as an encrypted package. - Boolean + String - Boolean + String None - - PdfUseFrontMatterMetadata + + Path - Use front matter values as PDF metadata. + Destination path for the workbook. - Boolean + String - Boolean + String None - PdfUseFrontMatterVisualTheme + SafePreflight - Use front matter values to select a visual theme. + Run OfficeIMO worksheet preflight cleanup before saving. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfWarningVariable + SafeRepairDefinedNames - Variable name that receives Markdown PDF export warnings. + Repair common defined-name issues before saving. - String + SwitchParameter - String + SwitchParameter None - UnorderedListMarker + Subject - Unordered list marker: '-', '*', or '+'. + Workbook subject metadata. String @@ -134589,31 +137653,26 @@ This does not discover, bypass, or crack a missing password. None - - WriteOptions + + TemplatePath - Optional Markdown writer options. + Optional workbook template package copied before running the DSL. - MarkdownWriteOptions + String - MarkdownWriteOptions + String None - WriteProfile + ValidateOpenXml - Friendly Markdown writer profile. + Validate the saved package with OpenXmlValidator and throw on errors. - OfficeMarkdownWriteProfile - - OfficeIMO - Portable - HtmlImage - + SwitchParameter - OfficeMarkdownWriteProfile + SwitchParameter None @@ -134621,39 +137680,10 @@ This does not discover, bypass, or crack a missing password. - - Content - - DSL scriptblock describing Markdown content. - - ScriptBlock - - ScriptBlock - - - None - - - ImageRenderingMode - - Controls how Markdown images are serialized. - - MarkdownImageRenderingMode - - RichMarkdown - PortableMarkdown - Html - - - MarkdownImageRenderingMode - - - None - - LineEnding + ApplicationName - Markdown line ending: CRLF, LF, CR, or a literal line ending string. + Workbook application-name metadata. String @@ -134663,35 +137693,23 @@ This does not discover, bypass, or crack a missing password. None - MarkdownPdfOptions + Author - Advanced Markdown PDF options. Friendly PDF parameters override matching values. + Workbook author metadata. - MarkdownPdfSaveOptions + String - MarkdownPdfSaveOptions + String None - NoSave - - Skip saving after executing the DSL. - - SwitchParameter - - SwitchParameter - - - None - - - OutputPath + Category - Destination path for the Markdown file. + Workbook category metadata. - String + String String @@ -134699,9 +137717,9 @@ This does not discover, bypass, or crack a missing password. None - PassThru + ClearCachedFormulaResults - Emit a FileInfo for chaining. + Remove cached formula results before saving. SwitchParameter @@ -134711,21 +137729,9 @@ This does not discover, bypass, or crack a missing password. None - PdfApplyWordLikeTheme - - Apply the built-in Word-like Markdown PDF baseline theme. - - Boolean - - Boolean - - - None - - - PdfAuthor + Company - PDF author metadata. + Workbook company metadata. String @@ -134734,24 +137740,30 @@ This does not discover, bypass, or crack a missing password. None - - PdfBaseDirectory + + Content - Base directory used to resolve local Markdown images during PDF export. + DSL scriptblock describing workbook content. - String + ScriptBlock - String + ScriptBlock None - PdfConversionReportVariable + DateSystem - Variable name that receives the Markdown PDF conversion report. + Workbook date system for Excel date serials. String + + 1900 + 1904 + NineteenHundred + NineteenFour + String @@ -134759,45 +137771,33 @@ This does not discover, bypass, or crack a missing password. None - PdfCreateOutlineFromHeadings - - Create PDF outlines from Markdown headings. - - Boolean - - Boolean - - - None - - - PdfDefaultImageHeight + Description - Fallback PDF image height in points. + Workbook description metadata. - Double + String - Double + String None - PdfDefaultImageWidth + DisableFastPackageWriter - Fallback PDF image width in points. + Disable OfficeIMO fast package writers for this save. - Double + SwitchParameter - Double + SwitchParameter None - PdfFontFamily + DocumentTitle - Default font family used by Markdown PDF export. + Workbook document title metadata. String @@ -134807,50 +137807,33 @@ This does not discover, bypass, or crack a missing password. None - PdfFrontMatterRenderMode - - Controls how YAML front matter appears in the PDF body. - - MarkdownPdfFrontMatterRenderMode - - Hidden - DocumentHeader - Table - - - MarkdownPdfFrontMatterRenderMode - - - None - - - PdfIncludeDataUriImages + EvaluateFormulas - Embed supported data URI images in Markdown PDF output. + Evaluate supported formulas and write cached values before saving. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfIncludeLocalImages + ForceFullCalculationOnOpen - Embed supported local image files in Markdown PDF output. + Request a full workbook recalculation when opened in Excel-compatible applications. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfKeywords + Keywords - PDF keywords metadata. + Workbook keyword metadata. String @@ -134860,89 +137843,81 @@ This does not discover, bypass, or crack a missing password. None - PdfMaximumDataUriImageBytes + LastModifiedBy - Maximum decoded bytes for one data URI image in Markdown PDF output. + Workbook last-modified-by metadata. - Int32 + String - Int32 + String None - PdfOptions + Manager - Underlying OfficeIMO.Pdf options used by Markdown PDF export. + Workbook manager metadata. - PdfOptions + String - PdfOptions + String None - PdfPath + MarkFormulasDirty - Optional PDF path to create from the same Markdown document. + Mark formula cells dirty before saving. - String + SwitchParameter - String + SwitchParameter None - PdfRestrictLocalImagesToBaseDirectory + NoSave - Require local images to resolve under the base directory. + Skip saving the workbook after running the DSL. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfSubject + Open - PDF subject metadata. + Open the workbook in Excel after saving. - String + SwitchParameter - String + SwitchParameter None - PdfTheme + PassThru - Built-in Markdown PDF visual theme. + Emit a FileInfo for convenience. - OfficeVisualThemeKind - - Plain - WordLike - TechnicalDocument - GitHubLike - Compact - Report - + SwitchParameter - OfficeVisualThemeKind + SwitchParameter None - PdfTitle + Password - PDF title metadata. + Password used to save the workbook as an encrypted package. String @@ -134951,46 +137926,46 @@ This does not discover, bypass, or crack a missing password. None - - PdfUseFirstHeadingAsTitle + + Path - Use the first Markdown heading as the PDF title when no title is supplied. + Destination path for the workbook. - Boolean + String - Boolean + String None - PdfUseFrontMatterMetadata + SafePreflight - Use front matter values as PDF metadata. + Run OfficeIMO worksheet preflight cleanup before saving. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfUseFrontMatterVisualTheme + SafeRepairDefinedNames - Use front matter values to select a visual theme. + Repair common defined-name issues before saving. - Boolean + SwitchParameter - Boolean + SwitchParameter None - PdfWarningVariable + Subject - Variable name that receives Markdown PDF export warnings. + Workbook subject metadata. String @@ -134999,10 +137974,10 @@ This does not discover, bypass, or crack a missing password. None - - UnorderedListMarker + + TemplatePath - Unordered list marker: '-', '*', or '+'. + Optional workbook template package copied before running the DSL. String @@ -135012,30 +137987,13 @@ This does not discover, bypass, or crack a missing password. None - WriteOptions - - Optional Markdown writer options. - - MarkdownWriteOptions - - MarkdownWriteOptions - - - None - - - WriteProfile + ValidateOpenXml - Friendly Markdown writer profile. + Validate the saved package with OpenXmlValidator and throw on errors. - OfficeMarkdownWriteProfile - - OfficeIMO - Portable - HtmlImage - + SwitchParameter - OfficeMarkdownWriteProfile + SwitchParameter None @@ -135048,18 +138006,7 @@ This does not discover, bypass, or crack a missing password. - - - - System.IO.FileInfo - - - - - OfficeIMO.Markdown.MarkdownDoc - - - + @@ -135067,28 +138014,27 @@ This does not discover, bypass, or crack a missing password. - Create a Markdown document with headings and a table. + Create a workbook with a sheet and a few cells. PS> - New-OfficeMarkdown -Path .\README.md { MarkdownHeading -Level 1 -Text 'Report'; MarkdownTable -InputObject $data } + New-OfficeExcel -Path .\report.xlsx { ExcelSheet 'Data' { ExcelCell -Address 'A1' -Value 'Region' } } - Creates a README file with a heading and table content. + Creates report.xlsx and writes “Region” into cell A1 on the Data worksheet. - Create a report with multiple tables. + Keep a workbook for incremental composition. PS> - New-OfficeMarkdown -Path .\Report.md { - MarkdownHeading -Level 1 -Text 'Summary' - MarkdownTable -InputObject $summary - MarkdownHeading -Level 2 -Text 'Details' - MarkdownTable -InputObject $details - } + $workbook = New-OfficeExcel -Path .\report.xlsx -NoSave + $sheet = $workbook | Add-OfficeExcelSheet -Name 'Data' -PassThru + $sheet | Set-OfficeExcelCell -Address A1 -Value 'Region' + $workbook | Save-OfficeExcel + $workbook | Close-OfficeExcel - Creates a report with two tables separated by headings. + Associates the output path with a live workbook, changes a worksheet, then saves and closes it once. @@ -135096,145 +138042,65 @@ This does not discover, bypass, or crack a missing password. - New-OfficeOpenDocument + New-OfficeExcelDashboard New - OfficeOpenDocument + OfficeExcelDashboard - Creates a native ODT, ODS, or ODP document. + Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults. - Creates a native ODT, ODS, or ODP document. + Builds a worksheet dashboard from tabular data using OfficeIMO dashboard defaults. - - New-OfficeOpenDocument - - Kind + + New-OfficeExcelDashboard + + ChartColumn - OpenDocument text, spreadsheet, or presentation kind. + Top-left chart column. - OdfDocumentKind - - Text - Spreadsheet - Presentation - + Int32 - OdfDocumentKind + Int32 None - - Path + + ChartPreset - Optional initial destination path. + Dashboard chart preset. - String + ExcelDashboardChartPreset + + Comparison + Trend + Contribution + CompactComparison + - String + ExcelDashboardChartPreset None - - - - - Kind - - OpenDocument text, spreadsheet, or presentation kind. - - OdfDocumentKind - - Text - Spreadsheet - Presentation - - - OdfDocumentKind - - - None - - - Path - - Optional initial destination path. - - String - - String - - - None - - - - - - None - - - - - - - OfficeIMO.OpenDocument.OdfDocument - - - - - - - - - - - EXAMPLE 1 - New-OfficeOpenDocument -Path 'C:\Path' - - - - - - - - - - New-OfficePdf - New - OfficePdf - - Creates a PDF document using the OfficeIMO.Pdf composition engine. - - - - New-OfficePdf starts a generated PDF document and optionally executes a PSWriteOffice PDF DSL script block. -The DSL commands are thin adapters over OfficeIMO.Pdf and support document metadata, page setup, headers, footers, -themes, styled text, tables, panels, row layouts, form fields, attachments, compliance settings, and save/open behavior. -Use -NoSave or omit -Path when a document object should be returned for further pipeline operations. - - - - New-OfficePdf - BoldFontPath + ChartRow - Optional bold TrueType font path used when -FontFamily is provided. + Top-left chart row. - String + Int32 - String + Int32 None - BoldItalicFontPath + ChartTitle - Optional bold italic TrueType font path used when -FontFamily is provided. + Chart title. Defaults to Title when omitted. String @@ -135243,34 +138109,22 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - CenterWindow - - Request PDF viewers to center the document window on screen. - - SwitchParameter - - SwitchParameter - - - None - - - Content + + InputObject - DSL script block describing generated PDF content. + Rows to render in the dashboard table. - ScriptBlock + Object - ScriptBlock + Object None - CreateOutlineFromHeadings + NoAutoFilter - Create PDF outline/bookmark entries from heading elements. + Disable AutoFilter dropdowns on the generated table. SwitchParameter @@ -135280,47 +138134,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - DefaultFont - - Default standard PDF font for generated text. - - PdfStandardFont - - Helvetica - HelveticaOblique - HelveticaBold - HelveticaBoldOblique - TimesRoman - TimesItalic - TimesBold - TimesBoldItalic - Courier - CourierOblique - CourierBold - CourierBoldOblique - - - PdfStandardFont - - - None - - - DefaultFontSize - - Default generated text font size in points. - - Double - - Double - - - None - - - DisplayDocTitle + NoAutoFit - Request PDF viewers to display the document title instead of the file name. + Disable auto-fit for generated table columns. SwitchParameter @@ -135330,28 +138146,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FileVersion - - PDF file header version emitted by OfficeIMO.Pdf. - - PdfFileVersion - - Pdf14 - Pdf15 - Pdf16 - Pdf17 - Pdf20 - - - PdfFileVersion - - - None - - - FitWindow + NoChart - Request PDF viewers to fit the document window to the first displayed page. + Do not create a chart. SwitchParameter @@ -135361,9 +138158,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FlattenVisualAnnotations + PassThru - Flatten generated FreeText and Highlight annotations into static page content. + Emit dashboard build metadata. SwitchParameter @@ -135373,9 +138170,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FontFamily + Subtitle - Embedded TrueType font family name for generated text. + Dashboard subtitle. String @@ -135385,57 +138182,57 @@ Use -NoSave or omit -Path when a document object should be returned for further None - HideMenubar + TableColumn - Request PDF viewers to hide the menu bar. + Top-left column for the generated table. - SwitchParameter + Int32 - SwitchParameter + Int32 None - HideToolbar + TableName - Request PDF viewers to hide the toolbar. + Name for the generated table. - SwitchParameter + String - SwitchParameter + String None - HideWindowUI + TableRow - Request PDF viewers to hide user-interface elements. + Top-left row for the generated table. - SwitchParameter + Int32 - SwitchParameter + Int32 None - IncludePageLabels + TableStyle - Emit generated catalog page labels. + Built-in table style. - SwitchParameter + String - SwitchParameter + String None - ItalicFontPath + Title - Optional italic TrueType font path used when -FontFamily is provided. + Dashboard title. String @@ -135444,44 +138241,43 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + + New-OfficeExcelDashboard - NoSave + ChartColumn - Skip saving even when -Path is provided. + Top-left chart column. - SwitchParameter + Int32 - SwitchParameter + Int32 None - OpenActionMode + ChartPreset - Open-action destination mode. + Dashboard chart preset. - PdfOpenActionDestinationMode + ExcelDashboardChartPreset - Xyz - Fit - FitHorizontal - FitVertical - FitRectangle - FitBoundingBox - FitBoundingBoxHorizontal - FitBoundingBoxVertical + Comparison + Trend + Contribution + CompactComparison - PdfOpenActionDestinationMode + ExcelDashboardChartPreset None - OpenActionPage + ChartRow - Initial one-based page shown by PDF viewers that honor open actions. + Top-left chart row. Int32 @@ -135491,89 +138287,61 @@ Use -NoSave or omit -Path when a document object should be returned for further None - OpenActionTop - - Optional open-action top coordinate. - - Double - - Double - - - None - - - OutlineExpansionLevel + ChartTitle - Initial outline expansion level when heading outlines are created. + Chart title. Defaults to Title when omitted. - Int32 + String - Int32 + String None - - OwnerPassword + + InputObject - Optional owner password for the generated encrypted PDF. + Rows to render in the dashboard table. - String + Object - String + Object None - PageLabelPrefix + NoAutoFilter - Optional generated page-label prefix. + Disable AutoFilter dropdowns on the generated table. - String + SwitchParameter - String + SwitchParameter None - PageLayout + NoAutoFit - Catalog page layout hint emitted for generated PDFs. + Disable auto-fit for generated table columns. - PdfCatalogPageLayout - - SinglePage - OneColumn - TwoColumnLeft - TwoColumnRight - TwoPageLeft - TwoPageRight - + SwitchParameter - PdfCatalogPageLayout + SwitchParameter None - PageMode + NoChart - Catalog page mode hint emitted for generated PDFs. + Do not create a chart. - PdfCatalogPageMode - - UseNone - UseOutlines - UseThumbs - FullScreen - UseOC - UseAttachments - + SwitchParameter - PdfCatalogPageMode + SwitchParameter None @@ -135581,7 +138349,7 @@ Use -NoSave or omit -Path when a document object should be returned for further PassThru - Emit the generated document or saved file for chaining. + Emit dashboard build metadata. SwitchParameter @@ -135590,22 +138358,22 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Password + + Path - Password required to open the generated PDF. + Workbook path to update. - String + String String None - - Path + + Sheet - Optional destination PDF path. + Worksheet name when using Path or Document. String @@ -135614,10 +138382,10 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Permission + + SheetIndex - Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations. + Worksheet index (0-based) when using Path or Document. Int32 @@ -135626,10 +138394,10 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - RegularFontPath + + Subtitle - Regular TrueType font path used when -FontFamily is provided. + Dashboard subtitle. String @@ -135639,54 +138407,45 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Show + TableColumn - Open the PDF after saving. + Top-left column for the generated table. - SwitchParameter + Int32 - SwitchParameter + Int32 None - Theme + TableName - Built-in OfficeIMO.Pdf theme applied before the DSL content runs. + Name for the generated table. - OfficePdfThemePreset - - WordLike - TechnicalDocument - Compact - Report - + String - OfficePdfThemePreset + String None - - - New-OfficePdf - BoldFontPath + TableRow - Optional bold TrueType font path used when -FontFamily is provided. + Top-left row for the generated table. - String + Int32 - String + Int32 None - BoldItalicFontPath + TableStyle - Optional bold italic TrueType font path used when -FontFamily is provided. + Built-in table style. String @@ -135696,150 +138455,102 @@ Use -NoSave or omit -Path when a document object should be returned for further None - CenterWindow - - Request PDF viewers to center the document window on screen. - - SwitchParameter - - SwitchParameter - - - None - - - Content + Title - DSL script block describing generated PDF content. + Dashboard title. - ScriptBlock + String - ScriptBlock + String None + + + New-OfficeExcelDashboard - CreateOutlineFromHeadings + ChartColumn - Create PDF outline/bookmark entries from heading elements. + Top-left chart column. - SwitchParameter + Int32 - SwitchParameter + Int32 None - DefaultFont + ChartPreset - Default standard PDF font for generated text. + Dashboard chart preset. - PdfStandardFont + ExcelDashboardChartPreset - Helvetica - HelveticaOblique - HelveticaBold - HelveticaBoldOblique - TimesRoman - TimesItalic - TimesBold - TimesBoldItalic - Courier - CourierOblique - CourierBold - CourierBoldOblique + Comparison + Trend + Contribution + CompactComparison - PdfStandardFont - - - None - - - DefaultFontSize - - Default generated text font size in points. - - Double - - Double - - - None - - - DisplayDocTitle - - Request PDF viewers to display the document title instead of the file name. - - SwitchParameter - - SwitchParameter + ExcelDashboardChartPreset None - FileVersion + ChartRow - PDF file header version emitted by OfficeIMO.Pdf. + Top-left chart row. - PdfFileVersion - - Pdf14 - Pdf15 - Pdf16 - Pdf17 - Pdf20 - + Int32 - PdfFileVersion + Int32 None - FitWindow + ChartTitle - Request PDF viewers to fit the document window to the first displayed page. + Chart title. Defaults to Title when omitted. - SwitchParameter + String - SwitchParameter + String None - - FlattenVisualAnnotations + + Document - Flatten generated FreeText and Highlight annotations into static page content. + Workbook to update outside the DSL context. - SwitchParameter + ExcelDocument - SwitchParameter + ExcelDocument None - - FontFamily + + InputObject - Embedded TrueType font family name for generated text. + Rows to render in the dashboard table. - String + Object - String + Object None - HideMenubar + NoAutoFilter - Request PDF viewers to hide the menu bar. + Disable AutoFilter dropdowns on the generated table. SwitchParameter @@ -135849,9 +138560,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - HideToolbar + NoAutoFit - Request PDF viewers to hide the toolbar. + Disable auto-fit for generated table columns. SwitchParameter @@ -135861,9 +138572,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - HideWindowUI + NoChart - Request PDF viewers to hide user-interface elements. + Do not create a chart. SwitchParameter @@ -135873,9 +138584,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - IncludePageLabels + PassThru - Emit generated catalog page labels. + Emit dashboard build metadata. SwitchParameter @@ -135884,10 +138595,10 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - ItalicFontPath + + Sheet - Optional italic TrueType font path used when -FontFamily is provided. + Worksheet name when using Path or Document. String @@ -135897,43 +138608,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - NoSave - - Skip saving even when -Path is provided. - - SwitchParameter - - SwitchParameter - - - None - - - OpenActionMode - - Open-action destination mode. - - PdfOpenActionDestinationMode - - Xyz - Fit - FitHorizontal - FitVertical - FitRectangle - FitBoundingBox - FitBoundingBoxHorizontal - FitBoundingBoxVertical - - - PdfOpenActionDestinationMode - - - None - - - OpenActionPage + SheetIndex - Initial one-based page shown by PDF viewers that honor open actions. + Worksheet index (0-based) when using Path or Document. Int32 @@ -135943,21 +138620,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - OpenActionTop + Subtitle - Optional open-action top coordinate. + Dashboard subtitle. - Double + String - Double + String None - OutlineExpansionLevel + TableColumn - Initial outline expansion level when heading outlines are created. + Top-left column for the generated table. Int32 @@ -135967,21 +138644,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - OwnerPassword - - Optional owner password for the generated encrypted PDF. - - String - - String - - - None - - - PageLabelPrefix + TableName - Optional generated page-label prefix. + Name for the generated table. String @@ -135991,73 +138656,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PageLayout - - Catalog page layout hint emitted for generated PDFs. - - PdfCatalogPageLayout - - SinglePage - OneColumn - TwoColumnLeft - TwoColumnRight - TwoPageLeft - TwoPageRight - - - PdfCatalogPageLayout - - - None - - - PageMode - - Catalog page mode hint emitted for generated PDFs. - - PdfCatalogPageMode - - UseNone - UseOutlines - UseThumbs - FullScreen - UseOC - UseAttachments - - - PdfCatalogPageMode - - - None - - - PassThru - - Emit the generated document or saved file for chaining. - - SwitchParameter - - SwitchParameter - - - None - - - Password - - Password required to open the generated PDF. - - String - - String - - - None - - - Permission + TableRow - Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations. + Top-left row for the generated table. Int32 @@ -136066,10 +138667,10 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - RegularFontPath + + TableStyle - Regular TrueType font path used when -FontFamily is provided. + Built-in table style. String @@ -136079,31 +138680,13 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Show - - Open the PDF after saving. - - SwitchParameter - - SwitchParameter - - - None - - - Theme + Title - Built-in OfficeIMO.Pdf theme applied before the DSL content runs. + Dashboard title. - OfficePdfThemePreset - - WordLike - TechnicalDocument - Compact - Report - + String - OfficePdfThemePreset + String None @@ -136112,150 +138695,87 @@ Use -NoSave or omit -Path when a document object should be returned for further - BoldFontPath - - Optional bold TrueType font path used when -FontFamily is provided. - - String - - String - - - None - - - BoldItalicFontPath - - Optional bold italic TrueType font path used when -FontFamily is provided. - - String - - String - - - None - - - CenterWindow - - Request PDF viewers to center the document window on screen. - - SwitchParameter - - SwitchParameter - - - None - - - Content - - DSL script block describing generated PDF content. - - ScriptBlock - - ScriptBlock - - - None - - - CreateOutlineFromHeadings + ChartColumn - Create PDF outline/bookmark entries from heading elements. + Top-left chart column. - SwitchParameter + Int32 - SwitchParameter + Int32 None - DefaultFont + ChartPreset - Default standard PDF font for generated text. + Dashboard chart preset. - PdfStandardFont + ExcelDashboardChartPreset - Helvetica - HelveticaOblique - HelveticaBold - HelveticaBoldOblique - TimesRoman - TimesItalic - TimesBold - TimesBoldItalic - Courier - CourierOblique - CourierBold - CourierBoldOblique + Comparison + Trend + Contribution + CompactComparison - PdfStandardFont + ExcelDashboardChartPreset None - DefaultFontSize + ChartRow - Default generated text font size in points. + Top-left chart row. - Double + Int32 - Double + Int32 None - DisplayDocTitle + ChartTitle - Request PDF viewers to display the document title instead of the file name. + Chart title. Defaults to Title when omitted. - SwitchParameter + String - SwitchParameter + String None - - FileVersion + + Document - PDF file header version emitted by OfficeIMO.Pdf. + Workbook to update outside the DSL context. - PdfFileVersion - - Pdf14 - Pdf15 - Pdf16 - Pdf17 - Pdf20 - + ExcelDocument - PdfFileVersion + ExcelDocument None - - FitWindow + + InputObject - Request PDF viewers to fit the document window to the first displayed page. + Rows to render in the dashboard table. - SwitchParameter + Object - SwitchParameter + Object None - FlattenVisualAnnotations + NoAutoFilter - Flatten generated FreeText and Highlight annotations into static page content. + Disable AutoFilter dropdowns on the generated table. SwitchParameter @@ -136265,21 +138785,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FontFamily - - Embedded TrueType font family name for generated text. - - String - - String - - - None - - - HideMenubar + NoAutoFit - Request PDF viewers to hide the menu bar. + Disable auto-fit for generated table columns. SwitchParameter @@ -136289,9 +138797,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - HideToolbar + NoChart - Request PDF viewers to hide the toolbar. + Do not create a chart. SwitchParameter @@ -136301,9 +138809,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - HideWindowUI + PassThru - Request PDF viewers to hide user-interface elements. + Emit dashboard build metadata. SwitchParameter @@ -136312,22 +138820,22 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - IncludePageLabels + + Path - Emit generated catalog page labels. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None - - ItalicFontPath + + Sheet - Optional italic TrueType font path used when -FontFamily is provided. + Worksheet name when using Path or Document. String @@ -136337,43 +138845,33 @@ Use -NoSave or omit -Path when a document object should be returned for further None - NoSave + SheetIndex - Skip saving even when -Path is provided. + Worksheet index (0-based) when using Path or Document. - SwitchParameter + Int32 - SwitchParameter + Int32 None - OpenActionMode + Subtitle - Open-action destination mode. + Dashboard subtitle. - PdfOpenActionDestinationMode - - Xyz - Fit - FitHorizontal - FitVertical - FitRectangle - FitBoundingBox - FitBoundingBoxHorizontal - FitBoundingBoxVertical - + String - PdfOpenActionDestinationMode + String None - OpenActionPage + TableColumn - Initial one-based page shown by PDF viewers that honor open actions. + Top-left column for the generated table. Int32 @@ -136383,21 +138881,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - OpenActionTop + TableName - Optional open-action top coordinate. + Name for the generated table. - Double + String - Double + String None - OutlineExpansionLevel + TableRow - Initial outline expansion level when heading outlines are created. + Top-left row for the generated table. Int32 @@ -136407,9 +138905,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - OwnerPassword + TableStyle - Optional owner password for the generated encrypted PDF. + Built-in table style. String @@ -136419,9 +138917,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PageLabelPrefix + Title - Optional generated page-label prefix. + Dashboard title. String @@ -136430,153 +138928,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - PageLayout - - Catalog page layout hint emitted for generated PDFs. - - PdfCatalogPageLayout - - SinglePage - OneColumn - TwoColumnLeft - TwoColumnRight - TwoPageLeft - TwoPageRight - - - PdfCatalogPageLayout - - - None - - - PageMode - - Catalog page mode hint emitted for generated PDFs. - - PdfCatalogPageMode - - UseNone - UseOutlines - UseThumbs - FullScreen - UseOC - UseAttachments - + + + - PdfCatalogPageMode - + System.Object - None - - - PassThru - - Emit the generated document or saved file for chaining. - - SwitchParameter + + + + - SwitchParameter - - - None - - - Password - - Password required to open the generated PDF. - - String - - String - - - None - - - Path - - Optional destination PDF path. - - String - - String - - - None - - - Permission - - Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations. - - Int32 - - Int32 - - - None - - - RegularFontPath - - Regular TrueType font path used when -FontFamily is provided. - - String - - String - - - None - - - Show - - Open the PDF after saving. - - SwitchParameter - - SwitchParameter - - - None - - - Theme - - Built-in OfficeIMO.Pdf theme applied before the DSL content runs. - - OfficePdfThemePreset - - WordLike - TechnicalDocument - Compact - Report - - - OfficePdfThemePreset - - - None - - - - - - None - - - - - - - OfficeIMO.Pdf.PdfDocument - - - - - System.IO.FileInfo + System.Management.Automation.PSObject @@ -136587,39 +138950,13 @@ Use -NoSave or omit -Path when a document object should be returned for further - Create a PDF report. - - PS> - - New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Show - - Builds a PDF and opens it after saving. - - - - Create a polished report with theme, metadata, and layout. + Create a dashboard table and chart. PS> - New-OfficePdf -Path .\ServiceReview.pdf { - PdfTheme Report - PdfMetadata -Title 'Service Review' -Author 'PSWriteOffice' - PdfPageSetup -PageSize A4 -Margin 42 - PdfHeader 'Service Review' - PdfFooter 'Page {page}/{pages}' - PdfHeading 'Service Review' - PdfText -Run @( - @{ Text = 'Generated with ' } - @{ Text = 'rich inline text'; Bold = $true; Color = '#0F766E' } - @{ Text = ' and OfficeIMO.Pdf layout.' } - ) - PdfRow -Column @( - @{ Width = 40; Content = @(@{ Type = 'Panel'; Text = 'Left summary' }) } - @{ Width = 60; Content = @(@{ Type = 'Paragraph'; Text = 'Right details' }) } - ) - } + $rows | New-OfficeExcelDashboard -Title 'Sales Dashboard' -TableName Sales -ChartPreset CompactComparison - Shows the preferred high-level PDF report authoring shape. + Writes a table and chart into the current Excel DSL worksheet. @@ -136627,23 +138964,23 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficePdfSignature + New-OfficeExcelImageOptions New - OfficePdfSignature + OfficeExcelImageOptions - Prepares an existing PDF for external digital signing by appending a signature field, /ByteRange, and reserved /Contents placeholder. + Creates discoverable rendering settings for Excel range and chart image export. - The command does not create CMS, CAdES, timestamp, certificate-chain, or revocation data. Use the returned byte range or digest with an external signing service, then inject the produced signature bytes with Set-OfficePdfSignature. + Creates discoverable rendering settings for Excel range and chart image export. - New-OfficePdfSignature + New-OfficeExcelImageOptions - ContactInfo + BackgroundColor - Signer contact information stored in the signature dictionary. + String @@ -136653,33 +138990,33 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FieldName + IncludeCharts - Signature field name to append. + Include worksheet charts. - String + SwitchParameter - String + SwitchParameter None - Filter + IncludeConditionalFormatting - Signature handler filter name. The default is Adobe.PPKLite. + Include conditional formatting. - String + SwitchParameter - String + SwitchParameter None - IgnorePermissionRestrictions + IncludeDrawingObjects - After successful password authentication, explicitly ignore owner-imposed signature-field restrictions. + Include drawing objects. SwitchParameter @@ -136689,93 +139026,93 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Location + IncludeHidden - Signing location stored in the signature dictionary. + Include hidden rows and columns. - String + SwitchParameter - String + SwitchParameter None - Name + IncludeImages - Display signer name stored in the signature dictionary. + Include worksheet images. - String + SwitchParameter - String + SwitchParameter None - - OutputPath + + MaximumDegreeOfParallelism - Output prepared PDF path. + - String + Int32 - String + Int32 None - PassThruReport + MaximumOutputCount - Return the OfficeIMO.Pdf preparation report instead of only the output file. + - SwitchParameter + Int32 - SwitchParameter + Int32 None - Password + MaximumOutputHeight - Password used to authenticate an encrypted PDF. + - String + Int32 - String + Int32 None - - Path + + MaximumOutputWidth - Input PDF path. + - String + Int32 - String + Int32 None - Reason + MaximumRasterPixels - Signing reason stored in the signature dictionary. + - String + Int64 - String + Int64 None - ReservedBytes + MaximumRenderedCells - Raw signature bytes to reserve in /Contents before hex encoding. + Maximum cells rendered. Int32 @@ -136785,18 +139122,125 @@ Use -NoSave or omit -Path when a document object should be returned for further None - SubFilter + MaximumTotalEncodedBytes - Signature subfilter that describes the external signature bytes to inject later. + - PdfExternalSignatureSubFilter + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior - DetachedCms - CadesDetached - DocumentTimestamp + ReduceScale + Throw - PdfExternalSignatureSubFilter + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + ShowCommentBodies + + Show cell comment bodies. + + SwitchParameter + + SwitchParameter + + + None + + + ShowGridlines + + Show worksheet gridlines. + + SwitchParameter + + SwitchParameter + + + None + + + ShowHyperlinkHints + + Show hyperlink hints. + + SwitchParameter + + SwitchParameter + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String None @@ -136805,9 +139249,9 @@ Use -NoSave or omit -Path when a document object should be returned for further - ContactInfo + BackgroundColor - Signer contact information stored in the signature dictionary. + String @@ -136817,33 +139261,33 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FieldName + IncludeCharts - Signature field name to append. + Include worksheet charts. - String + SwitchParameter - String + SwitchParameter None - Filter + IncludeConditionalFormatting - Signature handler filter name. The default is Adobe.PPKLite. + Include conditional formatting. - String + SwitchParameter - String + SwitchParameter None - IgnorePermissionRestrictions + IncludeDrawingObjects - After successful password authentication, explicitly ignore owner-imposed signature-field restrictions. + Include drawing objects. SwitchParameter @@ -136853,93 +139297,93 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Location + IncludeHidden - Signing location stored in the signature dictionary. + Include hidden rows and columns. - String + SwitchParameter - String + SwitchParameter None - Name + IncludeImages - Display signer name stored in the signature dictionary. + Include worksheet images. - String + SwitchParameter - String + SwitchParameter None - - OutputPath + + MaximumDegreeOfParallelism - Output prepared PDF path. + - String + Int32 - String + Int32 None - PassThruReport + MaximumOutputCount - Return the OfficeIMO.Pdf preparation report instead of only the output file. + - SwitchParameter + Int32 - SwitchParameter + Int32 None - Password + MaximumOutputHeight - Password used to authenticate an encrypted PDF. + - String + Int32 - String + Int32 None - - Path + + MaximumOutputWidth - Input PDF path. + - String + Int32 - String + Int32 None - Reason + MaximumRasterPixels - Signing reason stored in the signature dictionary. + - String + Int64 - String + Int64 None - ReservedBytes + MaximumRenderedCells - Raw signature bytes to reserve in /Contents before hex encoding. + Maximum cells rendered. Int32 @@ -136949,18 +139393,125 @@ Use -NoSave or omit -Path when a document object should be returned for further None - SubFilter + MaximumTotalEncodedBytes - Signature subfilter that describes the external signature bytes to inject later. + - PdfExternalSignatureSubFilter + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior - DetachedCms - CadesDetached - DocumentTimestamp + ReduceScale + Throw - PdfExternalSignatureSubFilter + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + ShowCommentBodies + + Show cell comment bodies. + + SwitchParameter + + SwitchParameter + + + None + + + ShowGridlines + + Show worksheet gridlines. + + SwitchParameter + + SwitchParameter + + + None + + + ShowHyperlinkHints + + Show hyperlink hints. + + SwitchParameter + + SwitchParameter + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String None @@ -136969,19 +139520,208 @@ Use -NoSave or omit -Path when a document object should be returned for further - System.String + None - System.IO.FileInfo + OfficeIMO.Excel.ExcelImageExportOptions + + + + + + + + + Render a range with gridlines and hyperlinks visible. + + PS> + + $options = New-OfficeExcelImageOptions -ShowGridlines -ShowHyperlinkHints -TargetDpi 144 + Export-OfficeExcelRangeImage -Path .\Workbook.xlsx -Worksheet Summary -Range A1:H20 -OutputPath .\Summary.svg -Options $options + + + + + + Reuse the same rendering controls for a chart. + + PS> + + $options = New-OfficeExcelImageOptions -TargetDpi 144 -MaximumOutputWidth 1600 + Export-OfficeExcelChartImage -Path .\Workbook.xlsx -Worksheet Summary -ChartName Revenue -OutputPath .\Revenue.svg -Options $options + + + + + + + + + + New-OfficeExcelOpenDocumentOptions + New + OfficeExcelOpenDocumentOptions + + Creates Excel/OpenDocument conversion settings. + + + + Creates Excel/OpenDocument conversion settings. + + + + New-OfficeExcelOpenDocumentOptions + + IncludeBasicStyles + + Copy common font, fill, and number-format styles. + + SwitchParameter + + SwitchParameter + + + None + + + LossPolicy + + Whether conversion loss is reported or rejected. + + OdfConversionLossPolicy + + ReportOnly + ThrowOnSkippedOrUnsupported + ThrowOnAnyLoss + + + OdfConversionLossPolicy + + + None + + + MaximumColumns + + Maximum spreadsheet columns. + + Int32 + + Int32 + + + None + + + MaximumExpandedCells + + Maximum cells materialized during conversion. + + Int64 + + Int64 + + + None + + + MaximumRows + + Maximum spreadsheet rows. + + Int32 + + Int32 + + + None + + + + + + IncludeBasicStyles + + Copy common font, fill, and number-format styles. + + SwitchParameter + + SwitchParameter + + + None + + + LossPolicy + + Whether conversion loss is reported or rejected. + + OdfConversionLossPolicy + + ReportOnly + ThrowOnSkippedOrUnsupported + ThrowOnAnyLoss + + + OdfConversionLossPolicy + + + None + + + MaximumColumns + + Maximum spreadsheet columns. + + Int32 + + Int32 + + + None + + + MaximumExpandedCells + + Maximum cells materialized during conversion. + + Int64 + + Int64 + + + None + + + MaximumRows + + Maximum spreadsheet rows. + + Int32 + + Int32 + + + None + + + + + + None + + + + - OfficeIMO.Pdf.PdfExternalSignaturePreparation + OfficeIMO.Excel.OpenDocument.ExcelOpenDocumentConversionOptions @@ -136992,15 +139732,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Prepare a PDF for detached CMS signing. + Convert a bounded worksheet area with basic styles. PS> - $plan = New-OfficePdfSignature -Path .\Input.pdf -OutputPath .\Prepared.pdf -FieldName Approval -Name 'Alice' -Reason Approval -PassThruReport - $plan.ByteRangeValues - $plan.ComputeSha256Digest() + $options = New-OfficeExcelOpenDocumentOptions -IncludeBasicStyles -MaximumRows 10000 -MaximumColumns 100 + ConvertTo-OfficeOpenDocument -Path .\Data.xlsx -OutputPath .\Data.ods -ExcelOptions $options - Writes a prepared PDF and returns the OfficeIMO.Pdf external signing preparation report. + @@ -137008,40 +139747,35 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficePdfTableCell + New-OfficeExcelPdfOptions New - OfficePdfTableCell + OfficeExcelPdfOptions - Creates a reusable PDF table cell definition for explicit table rows. + Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf. - Creates a reusable PDF table cell definition for explicit table rows. + Creates discoverable Excel-to-PDF conversion options for Export-OfficeDocumentPdf. - New-OfficePdfTableCell + New-OfficeExcelPdfOptions - Align + AllowDocumentFontEmbedding - Horizontal cell alignment. + Allow embedding fonts stored in the workbook. - PdfColumnAlign - - Left - Center - Right - + SwitchParameter - PdfColumnAlign + SwitchParameter None - Bold + AllowSystemFontEmbedding - Render the cell text in bold. + Allow embedding fonts discovered on the current system. SwitchParameter @@ -137050,34 +139784,34 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - CheckBox + + ChartLayout - Typed check boxes rendered inside the cell. + Chart layout override. - PdfTableCellCheckBox[] + OfficeChartLayout - PdfTableCellCheckBox[] + OfficeChartLayout None - ColumnSpan + ChartStyle - Number of logical columns covered by the cell. + Chart visual style override. - Int32 + OfficeChartStyle - Int32 + OfficeChartStyle None - - FillColor + + EmptyCellText - Cell fill color. Named colors and hexadecimal colors are accepted. + Text used when a worksheet cell is empty. String @@ -137087,9 +139821,45 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FontSize + FontFamily - Cell font size in PDF points. + Default font family used when the workbook does not specify one. + + String + + String + + + None + + + HeaderRowCount + + Number of leading rows treated as headers. + + Int32 + + Int32 + + + None + + + IncludeSheetHeadings + + Include worksheet row and column headings. + + SwitchParameter + + SwitchParameter + + + None + + + MarginBottom + + Bottom page margin in PDF points. Double @@ -137098,34 +139868,82 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - FormField + + MarginLeft - Typed text or choice form fields rendered inside the cell. + Left page margin in PDF points. - PdfTableCellFormField[] + Double - PdfTableCellFormField[] + Double None - - Image + + MarginRight - Typed images rendered inside the cell. + Right page margin in PDF points. - PdfTableCellImage[] + Double - PdfTableCellImage[] + Double None - Italic + MarginTop - Render the cell text in italics. + Top page margin in PDF points. + + Double + + Double + + + None + + + MaxRowsPerSheet + + Maximum worksheet rows to read and render. + + Int32 + + Int32 + + + None + + + PageSize + + PDF page size. + + PageSize + + PageSize + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + RespectWorkbookSheetVisibility + + Exclude workbook sheets marked hidden. SwitchParameter @@ -137135,57 +139953,69 @@ Use -NoSave or omit -Path when a document object should be returned for further None - LinkContents + RespectWorksheetHiddenRowsAndColumns - Accessible annotation text for the cell link. + Exclude hidden worksheet rows and columns. - String + SwitchParameter - String + SwitchParameter + + + None + + + SheetName + + Worksheet names to export. The default exports all eligible sheets. + + String[] + + String[] None - LinkDestinationName + UseBoundedWorksheetRead - Named PDF destination linked from the cell. + Use bounded worksheet reads for large workbooks. - String + SwitchParameter - String + SwitchParameter None - LinkUri + UseWorksheetCellStyles - Absolute or catalog-base-relative URI linked from the cell. + Render worksheet cell styles. - String + SwitchParameter - String + SwitchParameter None - NamedDestinationName + UseWorksheetCharts - Named PDF destination defined at this cell. + Render worksheet charts. - String + SwitchParameter - String + SwitchParameter None - NoWrap + UseWorksheetColumnWidths - Keep the cell content on one visual line. + Honor worksheet column widths. SwitchParameter @@ -137195,33 +140025,33 @@ Use -NoSave or omit -Path when a document object should be returned for further None - RowSpan + UseWorksheetHeaderFooterImages - Number of logical rows covered by the cell. + Render images referenced by worksheet headers and footers. - Int32 + SwitchParameter - Int32 + SwitchParameter None - - Run + + UseWorksheetHeadersAndFooters - Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object. + Render worksheet headers and footers. - Object[] + SwitchParameter - Object[] + SwitchParameter None - Strike + UseWorksheetHyperlinks - Render the cell text with strikethrough. + Render worksheet hyperlinks. SwitchParameter @@ -137230,34 +140060,34 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Text + + UseWorksheetImages - Cell text. + Render worksheet images. - String + SwitchParameter - String + SwitchParameter None - - TextColor + + UseWorksheetMergedCells - Cell text color. Named colors and hexadecimal colors are accepted. + Render merged worksheet cells. - String + SwitchParameter - String + SwitchParameter None - Underline + UseWorksheetPageBreaks - Render the cell text with underline. + Honor worksheet page breaks. SwitchParameter @@ -137267,30 +140097,65 @@ Use -NoSave or omit -Path when a document object should be returned for further None - UnderlineStyle + UseWorksheetPageSetup - Optional underline style name. PDF table rendering treats any supported value as underline. + Honor worksheet page setup. - String + SwitchParameter - String + SwitchParameter None - VerticalAlign + UseWorksheetPrintAreas - Vertical cell alignment. + Honor worksheet print areas. - PdfCellVerticalAlign + SwitchParameter + + SwitchParameter + + + None + + + UseWorksheetPrintTitleRows + + Honor worksheet rows configured to repeat on printed pages. + + SwitchParameter + + SwitchParameter + + + None + + + UseWorksheetRowHeights + + Honor worksheet row heights. + + SwitchParameter + + SwitchParameter + + + None + + + WorksheetLayout + + Controls how worksheet content is laid out on PDF pages. + + ExcelPdfWorksheetLayoutMode - Top - Middle - Bottom + WorksheetCanvas + FlowTable - PdfCellVerticalAlign + ExcelPdfWorksheetLayoutMode None @@ -137299,26 +140164,21 @@ Use -NoSave or omit -Path when a document object should be returned for further - Align + AllowDocumentFontEmbedding - Horizontal cell alignment. + Allow embedding fonts stored in the workbook. - PdfColumnAlign - - Left - Center - Right - + SwitchParameter - PdfColumnAlign + SwitchParameter None - Bold + AllowSystemFontEmbedding - Render the cell text in bold. + Allow embedding fonts discovered on the current system. SwitchParameter @@ -137327,34 +140187,34 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - CheckBox + + ChartLayout - Typed check boxes rendered inside the cell. + Chart layout override. - PdfTableCellCheckBox[] + OfficeChartLayout - PdfTableCellCheckBox[] + OfficeChartLayout None - ColumnSpan + ChartStyle - Number of logical columns covered by the cell. + Chart visual style override. - Int32 + OfficeChartStyle - Int32 + OfficeChartStyle None - - FillColor + + EmptyCellText - Cell fill color. Named colors and hexadecimal colors are accepted. + Text used when a worksheet cell is empty. String @@ -137364,141 +140224,141 @@ Use -NoSave or omit -Path when a document object should be returned for further None - FontSize + FontFamily - Cell font size in PDF points. + Default font family used when the workbook does not specify one. - Double + String - Double + String None - - FormField + + HeaderRowCount - Typed text or choice form fields rendered inside the cell. + Number of leading rows treated as headers. - PdfTableCellFormField[] + Int32 - PdfTableCellFormField[] + Int32 None - - Image + + IncludeSheetHeadings - Typed images rendered inside the cell. + Include worksheet row and column headings. - PdfTableCellImage[] + SwitchParameter - PdfTableCellImage[] + SwitchParameter None - Italic + MarginBottom - Render the cell text in italics. + Bottom page margin in PDF points. - SwitchParameter + Double - SwitchParameter + Double None - LinkContents + MarginLeft - Accessible annotation text for the cell link. + Left page margin in PDF points. - String + Double - String + Double None - LinkDestinationName + MarginRight - Named PDF destination linked from the cell. + Right page margin in PDF points. - String + Double - String + Double None - LinkUri + MarginTop - Absolute or catalog-base-relative URI linked from the cell. + Top page margin in PDF points. - String + Double - String + Double None - NamedDestinationName + MaxRowsPerSheet - Named PDF destination defined at this cell. + Maximum worksheet rows to read and render. - String + Int32 - String + Int32 None - NoWrap + PageSize - Keep the cell content on one visual line. + PDF page size. - SwitchParameter + PageSize - SwitchParameter + PageSize None - RowSpan + PdfOptions - Number of logical rows covered by the cell. + Underlying low-level OfficeIMO PDF options. - Int32 + PdfOptions - Int32 + PdfOptions None - - Run + + RespectWorkbookSheetVisibility - Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object. + Exclude workbook sheets marked hidden. - Object[] + SwitchParameter - Object[] + SwitchParameter None - Strike + RespectWorksheetHiddenRowsAndColumns - Render the cell text with strikethrough. + Exclude hidden worksheet rows and columns. SwitchParameter @@ -137507,34 +140367,34 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Text + + SheetName - Cell text. + Worksheet names to export. The default exports all eligible sheets. - String + String[] - String + String[] None - - TextColor + + UseBoundedWorksheetRead - Cell text color. Named colors and hexadecimal colors are accepted. + Use bounded worksheet reads for large workbooks. - String + SwitchParameter - String + SwitchParameter None - Underline + UseWorksheetCellStyles - Render the cell text with underline. + Render worksheet cell styles. SwitchParameter @@ -137544,141 +140404,45 @@ Use -NoSave or omit -Path when a document object should be returned for further None - UnderlineStyle + UseWorksheetCharts - Optional underline style name. PDF table rendering treats any supported value as underline. + Render worksheet charts. - String + SwitchParameter - String + SwitchParameter None - VerticalAlign + UseWorksheetColumnWidths - Vertical cell alignment. + Honor worksheet column widths. - PdfCellVerticalAlign - - Top - Middle - Bottom - + SwitchParameter - PdfCellVerticalAlign + SwitchParameter None - - - - - None - - - - - - - PSWriteOffice.Services.Table.OfficeTableCellSpec - + + UseWorksheetHeaderFooterImages - Describes a logical table cell that can be rendered by multiple Office table surfaces. + Render images referenced by worksheet headers and footers. - - - - - - - - - - Create a full-width PDF table section row. - - PS> - - $row = @(New-OfficePdfTableCell -Text 'Identity systems' -ColumnSpan 3 -FillColor '#DBEAFE' -TextColor '#1E3A8A' -Bold) - - The returned cell can be passed to PdfTable inside explicit row arrays. - - - - - - - - New-OfficePdfTableCellCheckBox - New - OfficePdfTableCellCheckBox - - Creates a typed check box for a PDF table cell. - - - - Creates a typed check box for a PDF table cell. - - - - New-OfficePdfTableCellCheckBox - - Checked - - Create the check box in its checked state. - - SwitchParameter - - SwitchParameter - - - None - - - CheckedValueName - - PDF appearance-state name written when checked. - - String - - String - - - None - - - Name - - Unique AcroForm field name. - - String - - String - - - None - - - Size - - Visual square size in PDF points. - - Double - - Double - - - None - - - - + SwitchParameter + + SwitchParameter + + + None + - Checked + UseWorksheetHeadersAndFooters - Create the check box in its checked state. + Render worksheet headers and footers. SwitchParameter @@ -137688,37 +140452,113 @@ Use -NoSave or omit -Path when a document object should be returned for further None - CheckedValueName + UseWorksheetHyperlinks - PDF appearance-state name written when checked. + Render worksheet hyperlinks. - String + SwitchParameter - String + SwitchParameter None - - Name + + UseWorksheetImages - Unique AcroForm field name. + Render worksheet images. - String + SwitchParameter - String + SwitchParameter None - Size + UseWorksheetMergedCells - Visual square size in PDF points. + Render merged worksheet cells. - Double + SwitchParameter - Double + SwitchParameter + + + None + + + UseWorksheetPageBreaks + + Honor worksheet page breaks. + + SwitchParameter + + SwitchParameter + + + None + + + UseWorksheetPageSetup + + Honor worksheet page setup. + + SwitchParameter + + SwitchParameter + + + None + + + UseWorksheetPrintAreas + + Honor worksheet print areas. + + SwitchParameter + + SwitchParameter + + + None + + + UseWorksheetPrintTitleRows + + Honor worksheet rows configured to repeat on printed pages. + + SwitchParameter + + SwitchParameter + + + None + + + UseWorksheetRowHeights + + Honor worksheet row heights. + + SwitchParameter + + SwitchParameter + + + None + + + WorksheetLayout + + Controls how worksheet content is laid out on PDF pages. + + ExcelPdfWorksheetLayoutMode + + WorksheetCanvas + FlowTable + + + ExcelPdfWorksheetLayoutMode None @@ -137734,7 +140574,7 @@ Use -NoSave or omit -Path when a document object should be returned for further - OfficeIMO.Pdf.PdfTableCellCheckBox + OfficeIMO.Excel.Pdf.ExcelPdfSaveOptions @@ -137745,14 +140585,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Create a checked table-cell field. + Export selected visible sheets with workbook layout features. PS> - $approved = New-OfficePdfTableCellCheckBox -Name Approved -Checked - $cell = New-OfficePdfTableCell -Text 'Approved' -CheckBox $approved + $options = New-OfficeExcelPdfOptions -SheetName Summary,Services -UseWorksheetCharts -UseWorksheetImages + Export-OfficeDocumentPdf -InputPath .\Report.xlsx -Path .\Report.pdf -ExcelOptions $options - The check box remains an AcroForm field positioned by the OfficeIMO table renderer. + @@ -137760,86 +140600,219 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficePdfTableCellField + New-OfficeExcelWorkbookImageOptions New - OfficePdfTableCellField + OfficeExcelWorkbookImageOptions - Creates a typed text or choice field for a PDF table cell. + Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage. - Creates a typed text or choice field for a PDF table cell. + Creates discoverable sheet selection and rendering settings for Export-OfficeExcelImage. - - New-OfficePdfTableCellField + + New-OfficeExcelWorkbookImageOptions - FontSize + BackgroundColor - Field font size in PDF points. + - Double + String - Double + String None - Height + IncludeCharts - Rendered field height in PDF points. + Include worksheet charts. - Double + SwitchParameter - Double + SwitchParameter None - - Name + + IncludeConditionalFormatting - Unique AcroForm field name. + Include conditional formatting. - String + SwitchParameter - String + SwitchParameter None - - Value + + IncludeDrawingObjects - Initial field value. + Include drawing objects. - String + SwitchParameter - String + SwitchParameter None - Width + IncludeHidden - Rendered field width in PDF points. + Include hidden rows and columns. - Double + SwitchParameter - Double + SwitchParameter None - - - New-OfficePdfTableCellField - FontSize + IncludeHiddenSheets - Field font size in PDF points. + Include hidden worksheets. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Include worksheet images. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumRenderedCells + + Maximum cells rendered per worksheet. + + Int32 + + Int32 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + Double @@ -137849,9 +140822,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Height + Scale - Rendered field height in PDF points. + Double @@ -137860,10 +140833,22 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + SheetName + + Worksheet names to export. + + String[] + + String[] + + + None + - ListBox + ShowGridlines - Render a choice field as a list box instead of a combo box. + Show worksheet gridlines. SwitchParameter @@ -137872,34 +140857,34 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Name + + SplitWorksheetsByManualPageBreaks - Unique AcroForm field name. + Split worksheets at manual page breaks. - String + SwitchParameter - String + SwitchParameter None - - Option + + TargetDpi - Available values for a choice field. + - String[] + Double - String[] + Double None - - Value + + TextShapingLanguage - Initial field value. + String @@ -137909,13 +140894,13 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Width + UseWorksheetPrintAreas - Rendered field width in PDF points. + Use worksheet print areas. - Double + SwitchParameter - Double + SwitchParameter None @@ -137924,9 +140909,205 @@ Use -NoSave or omit -Path when a document object should be returned for further - FontSize + BackgroundColor - Field font size in PDF points. + + + String + + String + + + None + + + IncludeCharts + + Include worksheet charts. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeConditionalFormatting + + Include conditional formatting. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeDrawingObjects + + Include drawing objects. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHidden + + Include hidden rows and columns. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenSheets + + Include hidden worksheets. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Include worksheet images. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumRenderedCells + + Maximum cells rendered per worksheet. + + Int32 + + Int32 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + Double @@ -137936,9 +141117,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Height + Scale - Rendered field height in PDF points. + Double @@ -137947,10 +141128,22 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + SheetName + + Worksheet names to export. + + String[] + + String[] + + + None + - ListBox + ShowGridlines - Render a choice field as a list box instead of a combo box. + Show worksheet gridlines. SwitchParameter @@ -137959,34 +141152,34 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Name + + SplitWorksheetsByManualPageBreaks - Unique AcroForm field name. + Split worksheets at manual page breaks. - String + SwitchParameter - String + SwitchParameter None - - Option + + TargetDpi - Available values for a choice field. + - String[] + Double - String[] + Double None - - Value + + TextShapingLanguage - Initial field value. + String @@ -137996,13 +141189,13 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Width + UseWorksheetPrintAreas - Rendered field width in PDF points. + Use worksheet print areas. - Double + SwitchParameter - Double + SwitchParameter None @@ -138018,7 +141211,7 @@ Use -NoSave or omit -Path when a document object should be returned for further - OfficeIMO.Pdf.PdfTableCellFormField + OfficeIMO.Excel.ExcelWorkbookImageExportOptions @@ -138029,14 +141222,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Create a reviewer choice field for a typed PDF table cell. + Render selected worksheets with charts and conditional formatting. PS> - $reviewer = New-OfficePdfTableCellField -Name Reviewer -Option 'Unassigned', 'Alice', 'Bob' -Value 'Unassigned' - $cell = New-OfficePdfTableCell -Text 'Reviewer' -FormField $reviewer + $options = New-OfficeExcelWorkbookImageOptions -SheetName Summary,Data -IncludeCharts -IncludeConditionalFormatting + Export-OfficeExcelImage -Path .\Workbook.xlsx -OutputPath .\Sheets -Options $options - The choice field is positioned by the OfficeIMO PDF table renderer. + @@ -138044,75 +141237,85 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficePdfTableCellImage + New-OfficeHtmlConversionOptions New - OfficePdfTableCellImage + OfficeHtmlConversionOptions - Creates a typed image for a PDF table cell. + Creates discoverable parsing, trust, and document settings for HTML conversion. - Creates a typed image for a PDF table cell. + Creates discoverable parsing, trust, and document settings for HTML conversion. - New-OfficePdfTableCellImage - - Height + New-OfficeHtmlConversionOptions + + BaseUri - Rendered height in PDF points. + Base URI used to resolve relative references. - Double + String - Double + String None - LinkContents + IncludeNormalizedHtml - Accessible annotation text for the image link. + Retain normalized HTML in the conversion document. - String + SwitchParameter - String + SwitchParameter None - LinkUri + Profile - Optional absolute or catalog-base-relative URI linked from the image. + Built-in conversion profile. - String + HtmlConversionProfile + + Semantic + Document + HighFidelityPrint + PositionedReview + - String + HtmlConversionProfile None - - Path + + Trust - Raster image path. + Input trust level. - String + HtmlInputTrust + + Untrusted + Trusted + - String + HtmlInputTrust None - - Width + + UseBodyContentsOnly - Rendered width in PDF points. + Convert only body contents. - Double + SwitchParameter - Double + SwitchParameter None @@ -138120,62 +141323,72 @@ Use -NoSave or omit -Path when a document object should be returned for further - - Height + + BaseUri - Rendered height in PDF points. + Base URI used to resolve relative references. - Double + String - Double + String None - LinkContents + IncludeNormalizedHtml - Accessible annotation text for the image link. + Retain normalized HTML in the conversion document. - String + SwitchParameter - String + SwitchParameter None - LinkUri + Profile - Optional absolute or catalog-base-relative URI linked from the image. + Built-in conversion profile. - String + HtmlConversionProfile + + Semantic + Document + HighFidelityPrint + PositionedReview + - String + HtmlConversionProfile None - - Path + + Trust - Raster image path. + Input trust level. - String + HtmlInputTrust + + Untrusted + Trusted + - String + HtmlInputTrust None - - Width + + UseBodyContentsOnly - Rendered width in PDF points. + Convert only body contents. - Double + SwitchParameter - Double + SwitchParameter None @@ -138191,7 +141404,7 @@ Use -NoSave or omit -Path when a document object should be returned for further - OfficeIMO.Pdf.PdfTableCellImage + OfficeIMO.Html.HtmlConversionDocumentOptions @@ -138202,14 +141415,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Add a linked logo to a typed PDF table cell. + Resolve relative resources from a trusted report directory. PS> - $logo = New-OfficePdfTableCellImage -Path .\logo.png -Width 28 -Height 28 -LinkUri 'https://example.com' - $cell = New-OfficePdfTableCell -Text 'Portal' -Image $logo + $document = New-OfficeHtmlConversionOptions -BaseUri (Resolve-Path .\Assets) -UseBodyContentsOnly + Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -DocumentOptions $document - The image remains a native PDF table-cell visual and may carry its own link. + @@ -138217,37 +141430,37 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficePowerPoint + New-OfficeHtmlRenderOptions New - OfficePowerPoint + OfficeHtmlRenderOptions - Creates a PowerPoint presentation using the DSL. + Creates discoverable layout, resource-limit, and rendering settings for HTML image export. - Initializes a presentation, runs the DSL script block, and optionally saves the deck. + Creates discoverable layout, resource-limit, and rendering settings for HTML image export. - New-OfficePowerPoint - - Content + New-OfficeHtmlRenderOptions + + BackgroundColor - DSL scriptblock describing presentation content. + - ScriptBlock + String - ScriptBlock + String None - - FilePath + + BaseUri - Destination path for the new .pptx. + Base URI for relative resources. - String + String String @@ -138255,33 +141468,61 @@ Use -NoSave or omit -Path when a document object should be returned for further None - NoSave + DefaultFontFamily - Skip saving after executing the DSL. + Default font family. - SwitchParameter + String - SwitchParameter + String None - Open + DefaultFontSize - Open the presentation after saving. + Default font size. - SwitchParameter + Double - SwitchParameter + Double None - PassThru + DefaultLineHeight - Emit a FileInfo for chaining. + Default line-height multiplier. + + Double + + Double + + + None + + + FidelityPolicy + + Fidelity policy for unsupported content. + + HtmlRenderFidelityPolicy + + AllowDiagnosedLoss + RequireNoLoss + + + HtmlRenderFidelityPolicy + + + None + + + HonorCssPageRules + + Honor CSS page rules. SwitchParameter @@ -138291,21 +141532,233 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Password + MaxHtmlNodes - Password used to save the presentation as an encrypted package. + Maximum HTML nodes. - String + Int32 - String + Int32 None - PdfPath + MaximumDegreeOfParallelism - Optional PDF path to create from the same presentation before closing it. + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + MaxInputCharacters + + Maximum HTML input characters. + + Int32 + + Int32 + + + None + + + MaxPageCount + + Maximum rendered page count. + + Int32 + + Int32 + + + None + + + MaxTotalResourceBytes + + Maximum resource bytes loaded for the document. + + Int64 + + Int64 + + + None + + + Mode + + HTML render mode. + + HtmlRenderMode + + Continuous + Paged + + + HtmlRenderMode + + + None + + + PageSize + + Page size used by paged rendering. + + OfficePageSize + + OfficePageSize + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + ResourceTimeoutSeconds + + Maximum duration allowed for one resource load. + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + String @@ -138314,27 +141767,51 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + ViewportHeight + + Optional viewport height in CSS pixels. + + Double + + Double + + + None + + + ViewportWidth + + Viewport width in CSS pixels. + + Double + + Double + + + None + - - Content + + BackgroundColor - DSL scriptblock describing presentation content. + - ScriptBlock + String - ScriptBlock + String None - - FilePath + + BaseUri - Destination path for the new .pptx. + Base URI for relative resources. - String + String String @@ -138342,98 +141819,359 @@ Use -NoSave or omit -Path when a document object should be returned for further None - NoSave + DefaultFontFamily - Skip saving after executing the DSL. + Default font family. - SwitchParameter + String - SwitchParameter + String None - Open + DefaultFontSize - Open the presentation after saving. + Default font size. - SwitchParameter + Double - SwitchParameter + Double None - PassThru + DefaultLineHeight - Emit a FileInfo for chaining. + Default line-height multiplier. - SwitchParameter + Double - SwitchParameter + Double None - Password + FidelityPolicy - Password used to save the presentation as an encrypted package. + Fidelity policy for unsupported content. - String + HtmlRenderFidelityPolicy + + AllowDiagnosedLoss + RequireNoLoss + - String + HtmlRenderFidelityPolicy None - PdfPath + HonorCssPageRules - Optional PDF path to create from the same presentation before closing it. + Honor CSS page rules. - String + SwitchParameter - String + SwitchParameter None - - - + + MaxHtmlNodes + + Maximum HTML nodes. + + Int32 - None + Int32 + - - - - - - - + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + MaxInputCharacters + + Maximum HTML input characters. + + Int32 + + Int32 + + + None + + + MaxPageCount + + Maximum rendered page count. + + Int32 + + Int32 + + + None + + + MaxTotalResourceBytes + + Maximum resource bytes loaded for the document. + + Int64 + + Int64 + + + None + + + Mode + + HTML render mode. + + HtmlRenderMode + + Continuous + Paged + + + HtmlRenderMode + + + None + + + PageSize + + Page size used by paged rendering. + + OfficePageSize + + OfficePageSize + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + ResourceTimeoutSeconds + + Maximum duration allowed for one resource load. + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + ViewportHeight + + Optional viewport height in CSS pixels. + + Double + + Double + + + None + + + ViewportWidth + + Viewport width in CSS pixels. + + Double + + Double + + + None + + + + + + None + + + + + + + OfficeIMO.Html.HtmlRenderOptions + + + + + + + - Create and capture the presentation object. - - PS> - - $ppt = New-OfficePowerPoint -FilePath .\deck.pptx - - Creates deck.pptx and returns the live presentation object for further editing. - - - - Create a deck with a title slide. + Render HTML with a bounded viewport and resource budget. PS> - New-OfficePowerPoint -Path .\deck.pptx { PptSlide { PptTitle -Title 'Status Update' } } -Open + $render = New-OfficeHtmlRenderOptions -ViewportWidth 1280 -ViewportHeight 720 -MaxPageCount 10 + Export-OfficeHtmlImage -Path .\Report.html -OutputPath .\Report.svg -RenderOptions $render - Creates, saves, and opens a deck with one titled slide. + @@ -138441,23 +142179,23 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficePowerPointDeckPlan + New-OfficeMarkdown New - OfficePowerPointDeckPlan + OfficeMarkdown - Creates a semantic PowerPoint deck plan for designer rendering. + Creates a Markdown document using a DSL scriptblock. - Creates a semantic PowerPoint deck plan for designer rendering. + Runs the scriptblock against a Markdown document and saves it to disk unless -NoSave is specified. - New-OfficePowerPointDeckPlan - + New-OfficeMarkdown + Content - Nested deck-plan DSL content. + DSL scriptblock describing Markdown content. ScriptBlock @@ -138466,13 +142204,119 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + ImageRenderingMode + + Controls how Markdown images are serialized. + + MarkdownImageRenderingMode + + RichMarkdown + PortableMarkdown + Html + + + MarkdownImageRenderingMode + + + None + + + LineEnding + + Markdown line ending: CRLF, LF, CR, or a literal line ending string. + + String + + String + + + None + + + NoSave + + Skip saving after executing the DSL. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit a FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Destination path for the Markdown file. + + String + + String + + + None + + + UnorderedListMarker + + Unordered list marker: '-', '*', or '+'. + + String + + String + + + None + + + WriteOptions + + Optional Markdown writer options. + + MarkdownWriteOptions + + MarkdownWriteOptions + + + None + + + WriteProfile + + Friendly Markdown writer profile. + + OfficeMarkdownWriteProfile + + OfficeIMO + Portable + HtmlImage + + + OfficeMarkdownWriteProfile + + + None + - + Content - Nested deck-plan DSL content. + DSL scriptblock describing Markdown content. ScriptBlock @@ -138481,6 +142325,112 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + ImageRenderingMode + + Controls how Markdown images are serialized. + + MarkdownImageRenderingMode + + RichMarkdown + PortableMarkdown + Html + + + MarkdownImageRenderingMode + + + None + + + LineEnding + + Markdown line ending: CRLF, LF, CR, or a literal line ending string. + + String + + String + + + None + + + NoSave + + Skip saving after executing the DSL. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit a FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Destination path for the Markdown file. + + String + + String + + + None + + + UnorderedListMarker + + Unordered list marker: '-', '*', or '+'. + + String + + String + + + None + + + WriteOptions + + Optional Markdown writer options. + + MarkdownWriteOptions + + MarkdownWriteOptions + + + None + + + WriteProfile + + Friendly Markdown writer profile. + + OfficeMarkdownWriteProfile + + OfficeIMO + Portable + HtmlImage + + + OfficeMarkdownWriteProfile + + + None + @@ -138492,7 +142442,12 @@ Use -NoSave or omit -Path when a document object should be returned for further - OfficeIMO.PowerPoint.PowerPointDeckPlan + System.IO.FileInfo + + + + + OfficeIMO.Markdown.MarkdownDoc @@ -138503,23 +142458,28 @@ Use -NoSave or omit -Path when a document object should be returned for further - Create a semantic service brief plan. + Create a Markdown document with headings and a table. PS> - $plan = New-OfficePowerPointDeckPlan { - Add-OfficePowerPointPlanSection -Title 'Service Review' -Subtitle 'Monthly operating brief' - Add-OfficePowerPointPlanProcess -Title 'Operating rhythm' -Steps @( - @{ Title = 'Collect'; Body = 'Gather health signals' } - @{ Title = 'Review'; Body = 'Confirm owner decisions' } - @{ Title = 'Publish'; Body = 'Share the final brief' } - ) - } - New-OfficePowerPoint -Path .\Examples\Documents\DesignerDeck.pptx { - Add-OfficePowerPointDesignerDeck -Plan $plan - } + New-OfficeMarkdown -Path .\README.md { MarkdownHeading -Level 1 -Text 'Report'; MarkdownTable -InputObject $data } - Builds a deck plan and renders it through the OfficeIMO designer helpers. + Creates a README file with a heading and table content. + + + + Create a report with multiple tables. + + PS> + + New-OfficeMarkdown -Path .\Report.md { + MarkdownHeading -Level 1 -Text 'Summary' + MarkdownTable -InputObject $summary + MarkdownHeading -Level 2 -Text 'Details' + MarkdownTable -InputObject $details + } + + Creates a report with two tables separated by headings. @@ -138527,23 +142487,23 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficeRtf + New-OfficeMarkdownPdfOptions New - OfficeRtf + OfficeMarkdownPdfOptions - Creates an RTF document with plain paragraph content. + Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf. - Creates an RTF document with plain paragraph content. + Creates discoverable Markdown-to-PDF conversion options for Export-OfficeDocumentPdf. - New-OfficeRtf + New-OfficeMarkdownPdfOptions - NoSave + ApplyWordLikeTheme - Return the OfficeIMO RTF document without saving. + Apply the built-in Word-like Markdown PDF baseline theme. SwitchParameter @@ -138552,12 +142512,12 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - OutputPath + + Author - Destination path for the RTF file. + PDF author metadata. - String + String String @@ -138565,9 +142525,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PassThru + BaseDirectory - Emit a FileInfo for chaining. + Base directory used to resolve local Markdown images. + + String + + String + + + None + + + CreateOutlineFromHeadings + + Create PDF outlines from Markdown headings. SwitchParameter @@ -138576,14 +142548,219 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Text + + DefaultImageHeight - Plain paragraph text to add to the document. + Fallback image height in PDF points. - String[] + Double - String[] + Double + + + None + + + DefaultImageWidth + + Fallback image width in PDF points. + + Double + + Double + + + None + + + FontFamily + + Default font family. + + String + + String + + + None + + + FrontMatterRenderMode + + Controls how YAML front matter appears in the PDF body. + + MarkdownPdfFrontMatterRenderMode + + Hidden + DocumentHeader + Table + + + MarkdownPdfFrontMatterRenderMode + + + None + + + IncludeDataUriImages + + Embed supported data URI images. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeLocalImages + + Embed supported local image files. + + SwitchParameter + + SwitchParameter + + + None + + + Keywords + + PDF keywords metadata. + + String + + String + + + None + + + MaximumDataUriImageBytes + + Maximum decoded bytes for one data URI image. + + Int32 + + Int32 + + + None + + + Options + + Existing Markdown PDF options to clone and override. + + MarkdownPdfSaveOptions + + MarkdownPdfSaveOptions + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + RestrictLocalImagesToBaseDirectory + + Require local images to resolve under BaseDirectory. + + SwitchParameter + + SwitchParameter + + + None + + + Subject + + PDF subject metadata. + + String + + String + + + None + + + Theme + + Built-in visual theme. + + OfficeVisualThemeKind + + Plain + WordLike + TechnicalDocument + GitHubLike + Compact + Report + + + OfficeVisualThemeKind + + + None + + + Title + + PDF title metadata. + + String + + String + + + None + + + UseFirstHeadingAsTitle + + Use the first Markdown heading as the PDF title when no title is supplied. + + SwitchParameter + + SwitchParameter + + + None + + + UseFrontMatterMetadata + + Use front matter values as PDF metadata. + + SwitchParameter + + SwitchParameter + + + None + + + UseFrontMatterVisualTheme + + Use front matter values to select a visual theme. + + SwitchParameter + + SwitchParameter None @@ -138592,9 +142769,10962 @@ Use -NoSave or omit -Path when a document object should be returned for further - NoSave + ApplyWordLikeTheme + + Apply the built-in Word-like Markdown PDF baseline theme. + + SwitchParameter + + SwitchParameter + + + None + + + Author + + PDF author metadata. + + String + + String + + + None + + + BaseDirectory + + Base directory used to resolve local Markdown images. + + String + + String + + + None + + + CreateOutlineFromHeadings + + Create PDF outlines from Markdown headings. + + SwitchParameter + + SwitchParameter + + + None + + + DefaultImageHeight + + Fallback image height in PDF points. + + Double + + Double + + + None + + + DefaultImageWidth + + Fallback image width in PDF points. + + Double + + Double + + + None + + + FontFamily + + Default font family. + + String + + String + + + None + + + FrontMatterRenderMode + + Controls how YAML front matter appears in the PDF body. + + MarkdownPdfFrontMatterRenderMode + + Hidden + DocumentHeader + Table + + + MarkdownPdfFrontMatterRenderMode + + + None + + + IncludeDataUriImages + + Embed supported data URI images. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeLocalImages + + Embed supported local image files. + + SwitchParameter + + SwitchParameter + + + None + + + Keywords + + PDF keywords metadata. + + String + + String + + + None + + + MaximumDataUriImageBytes + + Maximum decoded bytes for one data URI image. + + Int32 + + Int32 + + + None + + + Options + + Existing Markdown PDF options to clone and override. + + MarkdownPdfSaveOptions + + MarkdownPdfSaveOptions + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + RestrictLocalImagesToBaseDirectory + + Require local images to resolve under BaseDirectory. + + SwitchParameter + + SwitchParameter + + + None + + + Subject + + PDF subject metadata. + + String + + String + + + None + + + Theme + + Built-in visual theme. + + OfficeVisualThemeKind + + Plain + WordLike + TechnicalDocument + GitHubLike + Compact + Report + + + OfficeVisualThemeKind + + + None + + + Title + + PDF title metadata. + + String + + String + + + None + + + UseFirstHeadingAsTitle + + Use the first Markdown heading as the PDF title when no title is supplied. + + SwitchParameter + + SwitchParameter + + + None + + + UseFrontMatterMetadata + + Use front matter values as PDF metadata. + + SwitchParameter + + SwitchParameter + + + None + + + UseFrontMatterVisualTheme + + Use front matter values to select a visual theme. + + SwitchParameter + + SwitchParameter + + + None + + + + + + OfficeIMO.Markdown.Pdf.MarkdownPdfSaveOptions + + + + + + + OfficeIMO.Markdown.Pdf.MarkdownPdfSaveOptions + + + + + + + + + + + Allow local report images and apply PDF metadata. + + PS> + + $options = New-OfficeMarkdownPdfOptions -Title 'Service report' -Author 'Evotec' -IncludeLocalImages -BaseDirectory .\Assets + Export-OfficeDocumentPdf -InputPath .\Report.md -Path .\Report.pdf -MarkdownOptions $options + + Builds a typed options object through ordinary PowerShell parameters; no hashtable or .NET construction is required. + + + + + + + + New-OfficeOpenDocument + New + OfficeOpenDocument + + Creates a native ODT, ODS, or ODP document. + + + + Creates a native ODT, ODS, or ODP document. + + + + New-OfficeOpenDocument + + Content + + DSL scriptblock describing OpenDocument text, spreadsheet, or presentation content. + + ScriptBlock + + ScriptBlock + + + None + + + Kind + + OpenDocument text, spreadsheet, or presentation kind. + + OdfDocumentKind + + Text + Spreadsheet + Presentation + + + OdfDocumentKind + + + None + + + NoSave + + Skip saving and emit the live OpenDocument model even when -Path is supplied. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved file when a destination path is supplied. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Optional initial destination path. + + String + + String + + + None + + + + + + Content + + DSL scriptblock describing OpenDocument text, spreadsheet, or presentation content. + + ScriptBlock + + ScriptBlock + + + None + + + Kind + + OpenDocument text, spreadsheet, or presentation kind. + + OdfDocumentKind + + Text + Spreadsheet + Presentation + + + OdfDocumentKind + + + None + + + NoSave + + Skip saving and emit the live OpenDocument model even when -Path is supplied. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved file when a destination path is supplied. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Optional initial destination path. + + String + + String + + + None + + + + + + None + + + + + + + OfficeIMO.OpenDocument.OdfDocument + + + + + System.IO.FileInfo + + + + + + + + + + + Create an OpenDocument text report. + + PS> + + New-OfficeOpenDocument -Kind Text -Path .\Report.odt -Content { + Add-OfficeOpenDocumentHeading -Text 'Service report' -Level 1 + Add-OfficeOpenDocumentParagraph -Text 'Generated by PSWriteOffice.' + } + + + + + + Create a spreadsheet with typed cells. + + PS> + + New-OfficeOpenDocument -Kind Spreadsheet -Path .\Status.ods -Content { + Add-OfficeOpenDocumentSheet -Name 'Services' -Content { + Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Service' + Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value 'Healthy' + Set-OfficeOpenDocumentCell -Row 1 -Column 0 -Value 'Directory' + Set-OfficeOpenDocumentCell -Row 1 -Column 1 -Value $true + } + } + + + + + + + + + + New-OfficePdf + New + OfficePdf + + Creates a PDF document using the OfficeIMO.Pdf composition engine. + + + + New-OfficePdf starts a generated PDF document and optionally executes a PSWriteOffice PDF DSL script block. +The DSL commands are thin adapters over OfficeIMO.Pdf and support document metadata, page setup, headers, footers, +themes, styled text, tables, panels, row layouts, form fields, attachments, compliance settings, and save/open behavior. +Use -NoSave or omit -Path when a document object should be returned for further pipeline operations. + + + + New-OfficePdf + + BoldFontPath + + Optional bold TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + BoldItalicFontPath + + Optional bold italic TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + CenterWindow + + Request PDF viewers to center the document window on screen. + + SwitchParameter + + SwitchParameter + + + None + + + Content + + DSL script block describing generated PDF content. + + ScriptBlock + + ScriptBlock + + + None + + + CreateOutlineFromHeadings + + Create PDF outline/bookmark entries from heading elements. + + SwitchParameter + + SwitchParameter + + + None + + + DefaultFont + + Default standard PDF font for generated text. + + PdfStandardFont + + Helvetica + HelveticaOblique + HelveticaBold + HelveticaBoldOblique + TimesRoman + TimesItalic + TimesBold + TimesBoldItalic + Courier + CourierOblique + CourierBold + CourierBoldOblique + + + PdfStandardFont + + + None + + + DefaultFontSize + + Default generated text font size in points. + + Double + + Double + + + None + + + DisplayDocTitle + + Request PDF viewers to display the document title instead of the file name. + + SwitchParameter + + SwitchParameter + + + None + + + FileVersion + + PDF file header version emitted by OfficeIMO.Pdf. + + PdfFileVersion + + Pdf14 + Pdf15 + Pdf16 + Pdf17 + Pdf20 + + + PdfFileVersion + + + None + + + FitWindow + + Request PDF viewers to fit the document window to the first displayed page. + + SwitchParameter + + SwitchParameter + + + None + + + FlattenVisualAnnotations + + Flatten generated FreeText and Highlight annotations into static page content. + + SwitchParameter + + SwitchParameter + + + None + + + FontFamily + + Embedded TrueType font family name for generated text. + + String + + String + + + None + + + HideMenubar + + Request PDF viewers to hide the menu bar. + + SwitchParameter + + SwitchParameter + + + None + + + HideToolbar + + Request PDF viewers to hide the toolbar. + + SwitchParameter + + SwitchParameter + + + None + + + HideWindowUI + + Request PDF viewers to hide user-interface elements. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePageLabels + + Emit generated catalog page labels. + + SwitchParameter + + SwitchParameter + + + None + + + ItalicFontPath + + Optional italic TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + NoSave + + Skip saving even when -Path is provided. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the PDF after saving. + + SwitchParameter + + SwitchParameter + + + None + + + OpenActionMode + + Open-action destination mode. + + PdfOpenActionDestinationMode + + Xyz + Fit + FitHorizontal + FitVertical + FitRectangle + FitBoundingBox + FitBoundingBoxHorizontal + FitBoundingBoxVertical + + + PdfOpenActionDestinationMode + + + None + + + OpenActionPage + + Initial one-based page shown by PDF viewers that honor open actions. + + Int32 + + Int32 + + + None + + + OpenActionTop + + Optional open-action top coordinate. + + Double + + Double + + + None + + + OutlineExpansionLevel + + Initial outline expansion level when heading outlines are created. + + Int32 + + Int32 + + + None + + + OwnerPassword + + Optional owner password for the generated encrypted PDF. + + String + + String + + + None + + + PageLabelPrefix + + Optional generated page-label prefix. + + String + + String + + + None + + + PageLayout + + Catalog page layout hint emitted for generated PDFs. + + PdfCatalogPageLayout + + SinglePage + OneColumn + TwoColumnLeft + TwoColumnRight + TwoPageLeft + TwoPageRight + + + PdfCatalogPageLayout + + + None + + + PageMode + + Catalog page mode hint emitted for generated PDFs. + + PdfCatalogPageMode + + UseNone + UseOutlines + UseThumbs + FullScreen + UseOC + UseAttachments + + + PdfCatalogPageMode + + + None + + + PassThru + + Emit the generated document or saved file for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password required to open the generated PDF. + + String + + String + + + None + + + Path + + Optional destination PDF path. + + String + + String + + + None + + + Permission + + Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations. + + Int32 + + Int32 + + + None + + + RegularFontPath + + Regular TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + Theme + + Built-in OfficeIMO.Pdf theme applied before the DSL content runs. + + OfficePdfThemePreset + + WordLike + TechnicalDocument + Compact + Report + + + OfficePdfThemePreset + + + None + + + + New-OfficePdf + + BoldFontPath + + Optional bold TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + BoldItalicFontPath + + Optional bold italic TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + CenterWindow + + Request PDF viewers to center the document window on screen. + + SwitchParameter + + SwitchParameter + + + None + + + Content + + DSL script block describing generated PDF content. + + ScriptBlock + + ScriptBlock + + + None + + + CreateOutlineFromHeadings + + Create PDF outline/bookmark entries from heading elements. + + SwitchParameter + + SwitchParameter + + + None + + + DefaultFont + + Default standard PDF font for generated text. + + PdfStandardFont + + Helvetica + HelveticaOblique + HelveticaBold + HelveticaBoldOblique + TimesRoman + TimesItalic + TimesBold + TimesBoldItalic + Courier + CourierOblique + CourierBold + CourierBoldOblique + + + PdfStandardFont + + + None + + + DefaultFontSize + + Default generated text font size in points. + + Double + + Double + + + None + + + DisplayDocTitle + + Request PDF viewers to display the document title instead of the file name. + + SwitchParameter + + SwitchParameter + + + None + + + FileVersion + + PDF file header version emitted by OfficeIMO.Pdf. + + PdfFileVersion + + Pdf14 + Pdf15 + Pdf16 + Pdf17 + Pdf20 + + + PdfFileVersion + + + None + + + FitWindow + + Request PDF viewers to fit the document window to the first displayed page. + + SwitchParameter + + SwitchParameter + + + None + + + FlattenVisualAnnotations + + Flatten generated FreeText and Highlight annotations into static page content. + + SwitchParameter + + SwitchParameter + + + None + + + FontFamily + + Embedded TrueType font family name for generated text. + + String + + String + + + None + + + HideMenubar + + Request PDF viewers to hide the menu bar. + + SwitchParameter + + SwitchParameter + + + None + + + HideToolbar + + Request PDF viewers to hide the toolbar. + + SwitchParameter + + SwitchParameter + + + None + + + HideWindowUI + + Request PDF viewers to hide user-interface elements. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePageLabels + + Emit generated catalog page labels. + + SwitchParameter + + SwitchParameter + + + None + + + ItalicFontPath + + Optional italic TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + NoSave + + Skip saving even when -Path is provided. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the PDF after saving. + + SwitchParameter + + SwitchParameter + + + None + + + OpenActionMode + + Open-action destination mode. + + PdfOpenActionDestinationMode + + Xyz + Fit + FitHorizontal + FitVertical + FitRectangle + FitBoundingBox + FitBoundingBoxHorizontal + FitBoundingBoxVertical + + + PdfOpenActionDestinationMode + + + None + + + OpenActionPage + + Initial one-based page shown by PDF viewers that honor open actions. + + Int32 + + Int32 + + + None + + + OpenActionTop + + Optional open-action top coordinate. + + Double + + Double + + + None + + + OutlineExpansionLevel + + Initial outline expansion level when heading outlines are created. + + Int32 + + Int32 + + + None + + + OwnerPassword + + Optional owner password for the generated encrypted PDF. + + String + + String + + + None + + + PageLabelPrefix + + Optional generated page-label prefix. + + String + + String + + + None + + + PageLayout + + Catalog page layout hint emitted for generated PDFs. + + PdfCatalogPageLayout + + SinglePage + OneColumn + TwoColumnLeft + TwoColumnRight + TwoPageLeft + TwoPageRight + + + PdfCatalogPageLayout + + + None + + + PageMode + + Catalog page mode hint emitted for generated PDFs. + + PdfCatalogPageMode + + UseNone + UseOutlines + UseThumbs + FullScreen + UseOC + UseAttachments + + + PdfCatalogPageMode + + + None + + + PassThru + + Emit the generated document or saved file for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password required to open the generated PDF. + + String + + String + + + None + + + Permission + + Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations. + + Int32 + + Int32 + + + None + + + RegularFontPath + + Regular TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + Theme + + Built-in OfficeIMO.Pdf theme applied before the DSL content runs. + + OfficePdfThemePreset + + WordLike + TechnicalDocument + Compact + Report + + + OfficePdfThemePreset + + + None + + + + + + BoldFontPath + + Optional bold TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + BoldItalicFontPath + + Optional bold italic TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + CenterWindow + + Request PDF viewers to center the document window on screen. + + SwitchParameter + + SwitchParameter + + + None + + + Content + + DSL script block describing generated PDF content. + + ScriptBlock + + ScriptBlock + + + None + + + CreateOutlineFromHeadings + + Create PDF outline/bookmark entries from heading elements. + + SwitchParameter + + SwitchParameter + + + None + + + DefaultFont + + Default standard PDF font for generated text. + + PdfStandardFont + + Helvetica + HelveticaOblique + HelveticaBold + HelveticaBoldOblique + TimesRoman + TimesItalic + TimesBold + TimesBoldItalic + Courier + CourierOblique + CourierBold + CourierBoldOblique + + + PdfStandardFont + + + None + + + DefaultFontSize + + Default generated text font size in points. + + Double + + Double + + + None + + + DisplayDocTitle + + Request PDF viewers to display the document title instead of the file name. + + SwitchParameter + + SwitchParameter + + + None + + + FileVersion + + PDF file header version emitted by OfficeIMO.Pdf. + + PdfFileVersion + + Pdf14 + Pdf15 + Pdf16 + Pdf17 + Pdf20 + + + PdfFileVersion + + + None + + + FitWindow + + Request PDF viewers to fit the document window to the first displayed page. + + SwitchParameter + + SwitchParameter + + + None + + + FlattenVisualAnnotations + + Flatten generated FreeText and Highlight annotations into static page content. + + SwitchParameter + + SwitchParameter + + + None + + + FontFamily + + Embedded TrueType font family name for generated text. + + String + + String + + + None + + + HideMenubar + + Request PDF viewers to hide the menu bar. + + SwitchParameter + + SwitchParameter + + + None + + + HideToolbar + + Request PDF viewers to hide the toolbar. + + SwitchParameter + + SwitchParameter + + + None + + + HideWindowUI + + Request PDF viewers to hide user-interface elements. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePageLabels + + Emit generated catalog page labels. + + SwitchParameter + + SwitchParameter + + + None + + + ItalicFontPath + + Optional italic TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + NoSave + + Skip saving even when -Path is provided. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the PDF after saving. + + SwitchParameter + + SwitchParameter + + + None + + + OpenActionMode + + Open-action destination mode. + + PdfOpenActionDestinationMode + + Xyz + Fit + FitHorizontal + FitVertical + FitRectangle + FitBoundingBox + FitBoundingBoxHorizontal + FitBoundingBoxVertical + + + PdfOpenActionDestinationMode + + + None + + + OpenActionPage + + Initial one-based page shown by PDF viewers that honor open actions. + + Int32 + + Int32 + + + None + + + OpenActionTop + + Optional open-action top coordinate. + + Double + + Double + + + None + + + OutlineExpansionLevel + + Initial outline expansion level when heading outlines are created. + + Int32 + + Int32 + + + None + + + OwnerPassword + + Optional owner password for the generated encrypted PDF. + + String + + String + + + None + + + PageLabelPrefix + + Optional generated page-label prefix. + + String + + String + + + None + + + PageLayout + + Catalog page layout hint emitted for generated PDFs. + + PdfCatalogPageLayout + + SinglePage + OneColumn + TwoColumnLeft + TwoColumnRight + TwoPageLeft + TwoPageRight + + + PdfCatalogPageLayout + + + None + + + PageMode + + Catalog page mode hint emitted for generated PDFs. + + PdfCatalogPageMode + + UseNone + UseOutlines + UseThumbs + FullScreen + UseOC + UseAttachments + + + PdfCatalogPageMode + + + None + + + PassThru + + Emit the generated document or saved file for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password required to open the generated PDF. + + String + + String + + + None + + + Path + + Optional destination PDF path. + + String + + String + + + None + + + Permission + + Raw PDF Standard security permission bit mask. Defaults to allowing all standard operations. + + Int32 + + Int32 + + + None + + + RegularFontPath + + Regular TrueType font path used when -FontFamily is provided. + + String + + String + + + None + + + Theme + + Built-in OfficeIMO.Pdf theme applied before the DSL content runs. + + OfficePdfThemePreset + + WordLike + TechnicalDocument + Compact + Report + + + OfficePdfThemePreset + + + None + + + + + + None + + + + + + + OfficeIMO.Pdf.PdfDocument + + + + + System.IO.FileInfo + + + + + + + + + + + Create a PDF report. + + PS> + + New-OfficePdf -Path .\Report.pdf { PdfHeading 'Report'; PdfParagraph 'Generated by PSWriteOffice' } -Open + + Builds a PDF and opens it after saving. + + + + Create a polished report with theme, metadata, and layout. + + PS> + + New-OfficePdf -Path .\ServiceReview.pdf { + PdfTheme Report + PdfMetadata -Title 'Service Review' -Author 'PSWriteOffice' + PdfPageSetup -PageSize A4 -Margin 42 + PdfHeader 'Service Review' + PdfFooter 'Page {page}/{pages}' + PdfHeading 'Service Review' + PdfText -Run @( + @{ Text = 'Generated with ' } + @{ Text = 'rich inline text'; Bold = $true; Color = '#0F766E' } + @{ Text = ' and OfficeIMO.Pdf layout.' } + ) + PdfRow -Column @( + @{ Width = 40; Content = @(@{ Type = 'Panel'; Text = 'Left summary' }) } + @{ Width = 60; Content = @(@{ Type = 'Paragraph'; Text = 'Right details' }) } + ) + } + + Shows the preferred high-level PDF report authoring shape. + + + + + + + + New-OfficePdfExcelImportOptions + New + OfficePdfExcelImportOptions + + Creates discoverable PDF-table-to-Excel reconstruction settings. + + + + Creates discoverable PDF-table-to-Excel reconstruction settings. + + + + New-OfficePdfExcelImportOptions + + AutoFitColumns + + Auto-fit worksheet columns. + + SwitchParameter + + SwitchParameter + + + None + + + ContinuationGeometryTolerancePoints + + Geometry tolerance in PDF points for page continuations. + + Double + + Double + + + None + + + ConvertBooleanColumns + + Convert consistently boolean columns. + + SwitchParameter + + SwitchParameter + + + None + + + ConvertDateTimeColumns + + Convert unambiguous date columns. + + SwitchParameter + + SwitchParameter + + + None + + + ConvertNumericColumns + + Convert consistently numeric columns. + + SwitchParameter + + SwitchParameter + + + None + + + ConvertPercentageColumns + + Convert percentage columns to fractional numbers. + + SwitchParameter + + SwitchParameter + + + None + + + EmptyWorkbookSheetName + + Worksheet name used when no tables are detected. + + String + + String + + + None + + + IncludeAutoFilter + + Add table-scoped AutoFilters. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumContinuationSegments + + Maximum table segments merged into one table. + + Int32 + + Int32 + + + None + + + MaxRows + + Maximum body rows imported per detected table; zero means unlimited. + + Int32 + + Int32 + + + None + + + MergePageContinuations + + Merge compatible table segments across pages. + + SwitchParameter + + SwitchParameter + + + None + + + NumericCulture + + Culture name used for numeric parsing, such as en-US. + + String + + String + + + None + + + SheetNamePrefix + + Prefix for generated worksheet names. + + String + + String + + + None + + + SuppressRepeatedBodyHeaderRows + + Suppress repeated body header rows in merged segments. + + SwitchParameter + + SwitchParameter + + + None + + + TableNamePrefix + + Prefix for generated Excel table names. + + String + + String + + + None + + + TableStyle + + Excel table style. + + ExcelTableStyle + + TableStyleLight1 + TableStyleLight2 + TableStyleLight3 + TableStyleLight4 + TableStyleLight5 + TableStyleLight6 + TableStyleLight7 + TableStyleLight8 + TableStyleLight9 + TableStyleLight10 + TableStyleLight11 + TableStyleLight12 + TableStyleLight13 + TableStyleLight14 + TableStyleLight15 + TableStyleLight16 + TableStyleLight17 + TableStyleLight18 + TableStyleLight19 + TableStyleLight20 + TableStyleLight21 + TableStyleMedium1 + TableStyleMedium2 + TableStyleMedium3 + TableStyleMedium4 + TableStyleMedium5 + TableStyleMedium6 + TableStyleMedium7 + TableStyleMedium8 + TableStyleMedium9 + TableStyleMedium10 + TableStyleMedium11 + TableStyleMedium12 + TableStyleMedium13 + TableStyleMedium14 + TableStyleMedium15 + TableStyleMedium16 + TableStyleMedium17 + TableStyleMedium18 + TableStyleMedium19 + TableStyleMedium20 + TableStyleMedium21 + TableStyleMedium22 + TableStyleMedium23 + TableStyleMedium24 + TableStyleMedium25 + TableStyleMedium26 + TableStyleMedium27 + TableStyleMedium28 + TableStyleDark1 + TableStyleDark2 + TableStyleDark3 + TableStyleDark4 + TableStyleDark5 + TableStyleDark6 + TableStyleDark7 + TableStyleDark8 + TableStyleDark9 + TableStyleDark10 + TableStyleDark11 + + + ExcelTableStyle + + + None + + + + + + AutoFitColumns + + Auto-fit worksheet columns. + + SwitchParameter + + SwitchParameter + + + None + + + ContinuationGeometryTolerancePoints + + Geometry tolerance in PDF points for page continuations. + + Double + + Double + + + None + + + ConvertBooleanColumns + + Convert consistently boolean columns. + + SwitchParameter + + SwitchParameter + + + None + + + ConvertDateTimeColumns + + Convert unambiguous date columns. + + SwitchParameter + + SwitchParameter + + + None + + + ConvertNumericColumns + + Convert consistently numeric columns. + + SwitchParameter + + SwitchParameter + + + None + + + ConvertPercentageColumns + + Convert percentage columns to fractional numbers. + + SwitchParameter + + SwitchParameter + + + None + + + EmptyWorkbookSheetName + + Worksheet name used when no tables are detected. + + String + + String + + + None + + + IncludeAutoFilter + + Add table-scoped AutoFilters. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumContinuationSegments + + Maximum table segments merged into one table. + + Int32 + + Int32 + + + None + + + MaxRows + + Maximum body rows imported per detected table; zero means unlimited. + + Int32 + + Int32 + + + None + + + MergePageContinuations + + Merge compatible table segments across pages. + + SwitchParameter + + SwitchParameter + + + None + + + NumericCulture + + Culture name used for numeric parsing, such as en-US. + + String + + String + + + None + + + SheetNamePrefix + + Prefix for generated worksheet names. + + String + + String + + + None + + + SuppressRepeatedBodyHeaderRows + + Suppress repeated body header rows in merged segments. + + SwitchParameter + + SwitchParameter + + + None + + + TableNamePrefix + + Prefix for generated Excel table names. + + String + + String + + + None + + + TableStyle + + Excel table style. + + ExcelTableStyle + + TableStyleLight1 + TableStyleLight2 + TableStyleLight3 + TableStyleLight4 + TableStyleLight5 + TableStyleLight6 + TableStyleLight7 + TableStyleLight8 + TableStyleLight9 + TableStyleLight10 + TableStyleLight11 + TableStyleLight12 + TableStyleLight13 + TableStyleLight14 + TableStyleLight15 + TableStyleLight16 + TableStyleLight17 + TableStyleLight18 + TableStyleLight19 + TableStyleLight20 + TableStyleLight21 + TableStyleMedium1 + TableStyleMedium2 + TableStyleMedium3 + TableStyleMedium4 + TableStyleMedium5 + TableStyleMedium6 + TableStyleMedium7 + TableStyleMedium8 + TableStyleMedium9 + TableStyleMedium10 + TableStyleMedium11 + TableStyleMedium12 + TableStyleMedium13 + TableStyleMedium14 + TableStyleMedium15 + TableStyleMedium16 + TableStyleMedium17 + TableStyleMedium18 + TableStyleMedium19 + TableStyleMedium20 + TableStyleMedium21 + TableStyleMedium22 + TableStyleMedium23 + TableStyleMedium24 + TableStyleMedium25 + TableStyleMedium26 + TableStyleMedium27 + TableStyleMedium28 + TableStyleDark1 + TableStyleDark2 + TableStyleDark3 + TableStyleDark4 + TableStyleDark5 + TableStyleDark6 + TableStyleDark7 + TableStyleDark8 + TableStyleDark9 + TableStyleDark10 + TableStyleDark11 + + + ExcelTableStyle + + + None + + + + + + None + + + + + + + OfficeIMO.Excel.Pdf.PdfExcelTableImportOptions + + + + + + + + + + + Import PDF tables with typed columns and filters. + + PS> + + $options = New-OfficePdfExcelImportOptions -IncludeAutoFilter -AutoFitColumns -ConvertNumericColumns -ConvertDateTimeColumns + ConvertTo-OfficePdfExcel -Path .\Tables.pdf -OutputPath .\Tables.xlsx -Options $options + + + + + + + + + + New-OfficePdfImageOptions + New + OfficePdfImageOptions + + Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage. + + + + Creates discoverable thumbnail and rendering settings for Export-OfficePdfImage. + + + + New-OfficePdfImageOptions + + BackgroundColor + + + + String + + String + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + ThumbnailMaxDimension + + Maximum thumbnail width or height. + + Int32 + + Int32 + + + None + + + + + + BackgroundColor + + + + String + + String + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + ThumbnailMaxDimension + + Maximum thumbnail width or height. + + Int32 + + Int32 + + + None + + + + + + None + + + + + + + OfficeIMO.Pdf.PdfImageExportOptions + + + + + + + + + + + Create compact PDF thumbnails with bounded output dimensions. + + PS> + + $options = New-OfficePdfImageOptions -ThumbnailMaxDimension 320 -MaximumOutputWidth 640 + Export-OfficePdfImage -Path .\Report.pdf -OutputPath .\Thumbnails -Options $options + + + + + + + + + + New-OfficePdfPowerPointImportOptions + New + OfficePdfPowerPointImportOptions + + Creates discoverable PDF-to-PowerPoint reconstruction settings. + + + + Creates discoverable PDF-to-PowerPoint reconstruction settings. + + + + New-OfficePdfPowerPointImportOptions + + AlignNumericColumns + + Right-align inferred numeric columns. + + SwitchParameter + + SwitchParameter + + + None + + + BandedRows + + Enable banded-row styling. + + SwitchParameter + + SwitchParameter + + + None + + + Dpi + + Raster resolution used by visual import. + + Double + + Double + + + None + + + EmptyPresentationMessage + + Message used when no supported content is detected. + + String + + String + + + None + + + EmptyPresentationTitle + + Title used when no supported content is detected. + + String + + String + + + None + + + IncludeColumnHeaderRows + + Add inferred column headers. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSourceTitles + + Add source-page titles. + + SwitchParameter + + SwitchParameter + + + None + + + MaxColumnsPerSlide + + Maximum columns written to one slide; zero means unlimited. + + Int32 + + Int32 + + + None + + + MaxEditableObjectsPerPage + + Maximum editable objects reconstructed per page. + + Int32 + + Int32 + + + None + + + MaxOutputBytesPerPage + + Maximum encoded bytes per rendered page. + + Int64 + + Int64 + + + None + + + MaxPages + + Maximum pages imported. + + Int32 + + Int32 + + + None + + + MaxPixelsPerPage + + Maximum pixels per rendered page. + + Int64 + + Int64 + + + None + + + MaxRows + + Maximum body rows imported per table; zero means unlimited. + + Int32 + + Int32 + + + None + + + MaxRowsPerSlide + + Maximum rows written to one slide; zero means unlimited. + + Int32 + + Int32 + + + None + + + MaxTotalOutputBytes + + Maximum aggregate encoded output bytes. + + Int64 + + Int64 + + + None + + + MergePageContinuations + + Merge compatible table segments across pages. + + SwitchParameter + + SwitchParameter + + + None + + + Mode + + Visual, editable-table, hybrid, editable-content, or automatic import mode. + + PdfPowerPointImportMode + + VisualPages + EditableTables + HybridVisualAndEditableTables + EditableContent + Auto + + + PdfPowerPointImportMode + + + None + + + PageRange + + Optional one-based page ranges such as 1-3,5. + + String + + String + + + None + + + SuppressRepeatedBodyHeaderRows + + Suppress repeated body header rows. + + SwitchParameter + + SwitchParameter + + + None + + + TableStyle + + PowerPoint table style. + + PowerPointTableStylePreset + + PowerPointTableStylePreset + + + None + + + + + + AlignNumericColumns + + Right-align inferred numeric columns. + + SwitchParameter + + SwitchParameter + + + None + + + BandedRows + + Enable banded-row styling. + + SwitchParameter + + SwitchParameter + + + None + + + Dpi + + Raster resolution used by visual import. + + Double + + Double + + + None + + + EmptyPresentationMessage + + Message used when no supported content is detected. + + String + + String + + + None + + + EmptyPresentationTitle + + Title used when no supported content is detected. + + String + + String + + + None + + + IncludeColumnHeaderRows + + Add inferred column headers. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSourceTitles + + Add source-page titles. + + SwitchParameter + + SwitchParameter + + + None + + + MaxColumnsPerSlide + + Maximum columns written to one slide; zero means unlimited. + + Int32 + + Int32 + + + None + + + MaxEditableObjectsPerPage + + Maximum editable objects reconstructed per page. + + Int32 + + Int32 + + + None + + + MaxOutputBytesPerPage + + Maximum encoded bytes per rendered page. + + Int64 + + Int64 + + + None + + + MaxPages + + Maximum pages imported. + + Int32 + + Int32 + + + None + + + MaxPixelsPerPage + + Maximum pixels per rendered page. + + Int64 + + Int64 + + + None + + + MaxRows + + Maximum body rows imported per table; zero means unlimited. + + Int32 + + Int32 + + + None + + + MaxRowsPerSlide + + Maximum rows written to one slide; zero means unlimited. + + Int32 + + Int32 + + + None + + + MaxTotalOutputBytes + + Maximum aggregate encoded output bytes. + + Int64 + + Int64 + + + None + + + MergePageContinuations + + Merge compatible table segments across pages. + + SwitchParameter + + SwitchParameter + + + None + + + Mode + + Visual, editable-table, hybrid, editable-content, or automatic import mode. + + PdfPowerPointImportMode + + VisualPages + EditableTables + HybridVisualAndEditableTables + EditableContent + Auto + + + PdfPowerPointImportMode + + + None + + + PageRange + + Optional one-based page ranges such as 1-3,5. + + String + + String + + + None + + + SuppressRepeatedBodyHeaderRows + + Suppress repeated body header rows. + + SwitchParameter + + SwitchParameter + + + None + + + TableStyle + + PowerPoint table style. + + PowerPointTableStylePreset + + PowerPointTableStylePreset + + + None + + + + + + None + + + + + + + OfficeIMO.PowerPoint.Pdf.PdfPowerPointImportOptions + + + + + + + + + + + Import selected PDF pages as bounded slide content. + + PS> + + $options = New-OfficePdfPowerPointImportOptions -PageRange '1-5' -MaxPages 5 -IncludeSourceTitles + ConvertTo-OfficePdfPowerPoint -Path .\Source.pdf -OutputPath .\Slides.pptx -Options $options + + + + + + + + + + New-OfficePdfSignature + New + OfficePdfSignature + + Prepares an existing PDF for external digital signing by appending a signature field, /ByteRange, and reserved /Contents placeholder. + + + + The command does not create CMS, CAdES, timestamp, certificate-chain, or revocation data. Use the returned byte range or digest with an external signing service, then inject the produced signature bytes with Set-OfficePdfSignature. + + + + New-OfficePdfSignature + + ContactInfo + + Signer contact information stored in the signature dictionary. + + String + + String + + + None + + + FieldName + + Signature field name to append. + + String + + String + + + None + + + Filter + + Signature handler filter name. The default is Adobe.PPKLite. + + String + + String + + + None + + + IgnorePermissionRestrictions + + After successful password authentication, explicitly ignore owner-imposed signature-field restrictions. + + SwitchParameter + + SwitchParameter + + + None + + + Location + + Signing location stored in the signature dictionary. + + String + + String + + + None + + + Name + + Display signer name stored in the signature dictionary. + + String + + String + + + None + + + OutputPath + + Output prepared PDF path. + + String + + String + + + None + + + PassThruReport + + Return the OfficeIMO.Pdf preparation report instead of only the output file. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to authenticate an encrypted PDF. + + String + + String + + + None + + + Path + + Input PDF path. + + String + + String + + + None + + + Reason + + Signing reason stored in the signature dictionary. + + String + + String + + + None + + + ReservedBytes + + Raw signature bytes to reserve in /Contents before hex encoding. + + Int32 + + Int32 + + + None + + + SubFilter + + Signature subfilter that describes the external signature bytes to inject later. + + PdfExternalSignatureSubFilter + + DetachedCms + CadesDetached + DocumentTimestamp + + + PdfExternalSignatureSubFilter + + + None + + + + + + ContactInfo + + Signer contact information stored in the signature dictionary. + + String + + String + + + None + + + FieldName + + Signature field name to append. + + String + + String + + + None + + + Filter + + Signature handler filter name. The default is Adobe.PPKLite. + + String + + String + + + None + + + IgnorePermissionRestrictions + + After successful password authentication, explicitly ignore owner-imposed signature-field restrictions. + + SwitchParameter + + SwitchParameter + + + None + + + Location + + Signing location stored in the signature dictionary. + + String + + String + + + None + + + Name + + Display signer name stored in the signature dictionary. + + String + + String + + + None + + + OutputPath + + Output prepared PDF path. + + String + + String + + + None + + + PassThruReport + + Return the OfficeIMO.Pdf preparation report instead of only the output file. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to authenticate an encrypted PDF. + + String + + String + + + None + + + Path + + Input PDF path. + + String + + String + + + None + + + Reason + + Signing reason stored in the signature dictionary. + + String + + String + + + None + + + ReservedBytes + + Raw signature bytes to reserve in /Contents before hex encoding. + + Int32 + + Int32 + + + None + + + SubFilter + + Signature subfilter that describes the external signature bytes to inject later. + + PdfExternalSignatureSubFilter + + DetachedCms + CadesDetached + DocumentTimestamp + + + PdfExternalSignatureSubFilter + + + None + + + + + + System.String + + + + + + + System.IO.FileInfo + + + + + OfficeIMO.Pdf.PdfExternalSignaturePreparation + + + + + + + + + + + Prepare a PDF for detached CMS signing. + + PS> + + $plan = New-OfficePdfSignature -Path .\Input.pdf -OutputPath .\Prepared.pdf -FieldName Approval -Name 'Alice' -Reason Approval -PassThruReport + $plan.ByteRangeValues + $plan.ComputeSha256Digest() + + Writes a prepared PDF and returns the OfficeIMO.Pdf external signing preparation report. + + + + + + + + New-OfficePdfTableCell + New + OfficePdfTableCell + + Creates a reusable PDF table cell definition for explicit table rows. + + + + Creates a reusable PDF table cell definition for explicit table rows. + + + + New-OfficePdfTableCell + + Align + + Horizontal cell alignment. + + PdfColumnAlign + + Left + Center + Right + + + PdfColumnAlign + + + None + + + Bold + + Render the cell text in bold. + + SwitchParameter + + SwitchParameter + + + None + + + CheckBox + + Typed check boxes rendered inside the cell. + + PdfTableCellCheckBox[] + + PdfTableCellCheckBox[] + + + None + + + ColumnSpan + + Number of logical columns covered by the cell. + + Int32 + + Int32 + + + None + + + FillColor + + Cell fill color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + FontSize + + Cell font size in PDF points. + + Double + + Double + + + None + + + FormField + + Typed text or choice form fields rendered inside the cell. + + PdfTableCellFormField[] + + PdfTableCellFormField[] + + + None + + + Image + + Typed images rendered inside the cell. + + PdfTableCellImage[] + + PdfTableCellImage[] + + + None + + + Italic + + Render the cell text in italics. + + SwitchParameter + + SwitchParameter + + + None + + + LinkContents + + Accessible annotation text for the cell link. + + String + + String + + + None + + + LinkDestinationName + + Named PDF destination linked from the cell. + + String + + String + + + None + + + LinkUri + + Absolute or catalog-base-relative URI linked from the cell. + + String + + String + + + None + + + NamedDestinationName + + Named PDF destination defined at this cell. + + String + + String + + + None + + + NoWrap + + Keep the cell content on one visual line. + + SwitchParameter + + SwitchParameter + + + None + + + RowSpan + + Number of logical rows covered by the cell. + + Int32 + + Int32 + + + None + + + Run + + Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object. + + Object[] + + Object[] + + + None + + + Strike + + Render the cell text with strikethrough. + + SwitchParameter + + SwitchParameter + + + None + + + Text + + Cell text. + + String + + String + + + None + + + TextColor + + Cell text color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + Underline + + Render the cell text with underline. + + SwitchParameter + + SwitchParameter + + + None + + + UnderlineStyle + + Optional underline style name. PDF table rendering treats any supported value as underline. + + String + + String + + + None + + + VerticalAlign + + Vertical cell alignment. + + PdfCellVerticalAlign + + Top + Middle + Bottom + + + PdfCellVerticalAlign + + + None + + + + + + Align + + Horizontal cell alignment. + + PdfColumnAlign + + Left + Center + Right + + + PdfColumnAlign + + + None + + + Bold + + Render the cell text in bold. + + SwitchParameter + + SwitchParameter + + + None + + + CheckBox + + Typed check boxes rendered inside the cell. + + PdfTableCellCheckBox[] + + PdfTableCellCheckBox[] + + + None + + + ColumnSpan + + Number of logical columns covered by the cell. + + Int32 + + Int32 + + + None + + + FillColor + + Cell fill color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + FontSize + + Cell font size in PDF points. + + Double + + Double + + + None + + + FormField + + Typed text or choice form fields rendered inside the cell. + + PdfTableCellFormField[] + + PdfTableCellFormField[] + + + None + + + Image + + Typed images rendered inside the cell. + + PdfTableCellImage[] + + PdfTableCellImage[] + + + None + + + Italic + + Render the cell text in italics. + + SwitchParameter + + SwitchParameter + + + None + + + LinkContents + + Accessible annotation text for the cell link. + + String + + String + + + None + + + LinkDestinationName + + Named PDF destination linked from the cell. + + String + + String + + + None + + + LinkUri + + Absolute or catalog-base-relative URI linked from the cell. + + String + + String + + + None + + + NamedDestinationName + + Named PDF destination defined at this cell. + + String + + String + + + None + + + NoWrap + + Keep the cell content on one visual line. + + SwitchParameter + + SwitchParameter + + + None + + + RowSpan + + Number of logical rows covered by the cell. + + Int32 + + Int32 + + + None + + + Run + + Rich text runs for the cell. Each run can be created with TextRun/PdfTextRun or provided as a hashtable/object. + + Object[] + + Object[] + + + None + + + Strike + + Render the cell text with strikethrough. + + SwitchParameter + + SwitchParameter + + + None + + + Text + + Cell text. + + String + + String + + + None + + + TextColor + + Cell text color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + Underline + + Render the cell text with underline. + + SwitchParameter + + SwitchParameter + + + None + + + UnderlineStyle + + Optional underline style name. PDF table rendering treats any supported value as underline. + + String + + String + + + None + + + VerticalAlign + + Vertical cell alignment. + + PdfCellVerticalAlign + + Top + Middle + Bottom + + + PdfCellVerticalAlign + + + None + + + + + + None + + + + + + + PSWriteOffice.Services.Table.OfficeTableCellSpec + + + Describes a logical table cell that can be rendered by multiple Office table surfaces. + + + + + + + + + + + Create a full-width PDF table section row. + + PS> + + $row = @(New-OfficePdfTableCell -Text 'Identity systems' -ColumnSpan 3 -FillColor '#DBEAFE' -TextColor '#1E3A8A' -Bold) + + The returned cell can be passed to PdfTable inside explicit row arrays. + + + + + + + + New-OfficePdfTableCellCheckBox + New + OfficePdfTableCellCheckBox + + Creates a typed check box for a PDF table cell. + + + + Creates a typed check box for a PDF table cell. + + + + New-OfficePdfTableCellCheckBox + + Checked + + Create the check box in its checked state. + + SwitchParameter + + SwitchParameter + + + None + + + CheckedValueName + + PDF appearance-state name written when checked. + + String + + String + + + None + + + Name + + Unique AcroForm field name. + + String + + String + + + None + + + Size + + Visual square size in PDF points. + + Double + + Double + + + None + + + + + + Checked + + Create the check box in its checked state. + + SwitchParameter + + SwitchParameter + + + None + + + CheckedValueName + + PDF appearance-state name written when checked. + + String + + String + + + None + + + Name + + Unique AcroForm field name. + + String + + String + + + None + + + Size + + Visual square size in PDF points. + + Double + + Double + + + None + + + + + + None + + + + + + + OfficeIMO.Pdf.PdfTableCellCheckBox + + + + + + + + + + + Create a checked table-cell field. + + PS> + + $approved = New-OfficePdfTableCellCheckBox -Name Approved -Checked + $cell = New-OfficePdfTableCell -Text 'Approved' -CheckBox $approved + + The check box remains an AcroForm field positioned by the OfficeIMO table renderer. + + + + + + + + New-OfficePdfTableCellField + New + OfficePdfTableCellField + + Creates a typed text or choice field for a PDF table cell. + + + + Creates a typed text or choice field for a PDF table cell. + + + + New-OfficePdfTableCellField + + FontSize + + Field font size in PDF points. + + Double + + Double + + + None + + + Height + + Rendered field height in PDF points. + + Double + + Double + + + None + + + Name + + Unique AcroForm field name. + + String + + String + + + None + + + Value + + Initial field value. + + String + + String + + + None + + + Width + + Rendered field width in PDF points. + + Double + + Double + + + None + + + + New-OfficePdfTableCellField + + FontSize + + Field font size in PDF points. + + Double + + Double + + + None + + + Height + + Rendered field height in PDF points. + + Double + + Double + + + None + + + ListBox + + Render a choice field as a list box instead of a combo box. + + SwitchParameter + + SwitchParameter + + + None + + + Name + + Unique AcroForm field name. + + String + + String + + + None + + + Option + + Available values for a choice field. + + String[] + + String[] + + + None + + + Value + + Initial field value. + + String + + String + + + None + + + Width + + Rendered field width in PDF points. + + Double + + Double + + + None + + + + + + FontSize + + Field font size in PDF points. + + Double + + Double + + + None + + + Height + + Rendered field height in PDF points. + + Double + + Double + + + None + + + ListBox + + Render a choice field as a list box instead of a combo box. + + SwitchParameter + + SwitchParameter + + + None + + + Name + + Unique AcroForm field name. + + String + + String + + + None + + + Option + + Available values for a choice field. + + String[] + + String[] + + + None + + + Value + + Initial field value. + + String + + String + + + None + + + Width + + Rendered field width in PDF points. + + Double + + Double + + + None + + + + + + None + + + + + + + OfficeIMO.Pdf.PdfTableCellFormField + + + + + + + + + + + Create a reviewer choice field for a typed PDF table cell. + + PS> + + $reviewer = New-OfficePdfTableCellField -Name Reviewer -Option 'Unassigned', 'Alice', 'Bob' -Value 'Unassigned' + $cell = New-OfficePdfTableCell -Text 'Reviewer' -FormField $reviewer + + The choice field is positioned by the OfficeIMO PDF table renderer. + + + + + + + + New-OfficePdfTableCellImage + New + OfficePdfTableCellImage + + Creates a typed image for a PDF table cell. + + + + Creates a typed image for a PDF table cell. + + + + New-OfficePdfTableCellImage + + Height + + Rendered height in PDF points. + + Double + + Double + + + None + + + LinkContents + + Accessible annotation text for the image link. + + String + + String + + + None + + + LinkUri + + Optional absolute or catalog-base-relative URI linked from the image. + + String + + String + + + None + + + Path + + Raster image path. + + String + + String + + + None + + + Width + + Rendered width in PDF points. + + Double + + Double + + + None + + + + + + Height + + Rendered height in PDF points. + + Double + + Double + + + None + + + LinkContents + + Accessible annotation text for the image link. + + String + + String + + + None + + + LinkUri + + Optional absolute or catalog-base-relative URI linked from the image. + + String + + String + + + None + + + Path + + Raster image path. + + String + + String + + + None + + + Width + + Rendered width in PDF points. + + Double + + Double + + + None + + + + + + None + + + + + + + OfficeIMO.Pdf.PdfTableCellImage + + + + + + + + + + + Add a linked logo to a typed PDF table cell. + + PS> + + $logo = New-OfficePdfTableCellImage -Path .\logo.png -Width 28 -Height 28 -LinkUri 'https://example.com' + $cell = New-OfficePdfTableCell -Text 'Portal' -Image $logo + + The image remains a native PDF table-cell visual and may carry its own link. + + + + + + + + New-OfficePdfVisualComparisonOptions + New + OfficePdfVisualComparisonOptions + + Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual. + + + + Creates discoverable rendering and tolerance settings for Compare-OfficePdfVisual. + + + + New-OfficePdfVisualComparisonOptions + + Alignment + + Page alignment used for differently sized renders. + + PdfVisualPageAlignment + + TopLeft + Center + + + PdfVisualPageAlignment + + + None + + + AllowedDifferenceRatio + + Maximum differing-pixel ratio treated as equal. + + Double + + Double + + + None + + + BackgroundColor + + Background color name or hex value. + + String + + String + + + None + + + ChannelTolerance + + Maximum per-channel byte difference treated as equal. + + Byte + + Byte + + + None + + + MaxPages + + Maximum pages compared. + + Int32 + + Int32 + + + None + + + MaxPixelsPerImage + + Maximum pixels accepted per rendered image. + + Int64 + + Int64 + + + None + + + MaxTotalOutputBytes + + Maximum total bytes retained for comparison artifacts. + + Int64 + + Int64 + + + None + + + MaxTotalPixels + + Maximum pixels accepted across the comparison. + + Int64 + + Int64 + + + None + + + Scale + + Render scale applied before comparison. + + Double + + Double + + + None + + + + + + Alignment + + Page alignment used for differently sized renders. + + PdfVisualPageAlignment + + TopLeft + Center + + + PdfVisualPageAlignment + + + None + + + AllowedDifferenceRatio + + Maximum differing-pixel ratio treated as equal. + + Double + + Double + + + None + + + BackgroundColor + + Background color name or hex value. + + String + + String + + + None + + + ChannelTolerance + + Maximum per-channel byte difference treated as equal. + + Byte + + Byte + + + None + + + MaxPages + + Maximum pages compared. + + Int32 + + Int32 + + + None + + + MaxPixelsPerImage + + Maximum pixels accepted per rendered image. + + Int64 + + Int64 + + + None + + + MaxTotalOutputBytes + + Maximum total bytes retained for comparison artifacts. + + Int64 + + Int64 + + + None + + + MaxTotalPixels + + Maximum pixels accepted across the comparison. + + Int64 + + Int64 + + + None + + + Scale + + Render scale applied before comparison. + + Double + + Double + + + None + + + + + + None + + + + + + + OfficeIMO.Pdf.PdfVisualComparisonOptions + + + + + + + + + + + Compare PDFs with a small rendering tolerance. + + PS> + + $options = New-OfficePdfVisualComparisonOptions -ChannelTolerance 2 -AllowedDifferenceRatio 0.001 -MaxPages 50 + Compare-OfficePdfVisual -ReferencePath .\Expected.pdf -DifferencePath .\Actual.pdf -Options $options + + + + + + + + + + New-OfficePdfWordImportOptions + New + OfficePdfWordImportOptions + + Creates discoverable PDF-to-Word reconstruction settings. + + + + Creates discoverable PDF-to-Word reconstruction settings. + + + + New-OfficePdfWordImportOptions + + AlignNumericColumns + + Right-align inferred numeric columns. + + SwitchParameter + + SwitchParameter + + + None + + + AllowedHyperlinkUriScheme + + Allowed absolute hyperlink URI schemes. + + String[] + + String[] + + + None + + + BookmarkPrefix + + Prefix for generated Word bookmarks. + + String + + String + + + None + + + EmptyDocumentMessage + + Text used when no supported content is detected. + + String + + String + + + None + + + FitTablesToPageWidth + + Fit imported tables to page width. + + SwitchParameter + + SwitchParameter + + + None + + + ImportHeadings + + Import detected headings. + + SwitchParameter + + SwitchParameter + + + None + + + ImportImages + + Import supported embedded images. + + SwitchParameter + + SwitchParameter + + + None + + + ImportInternalLinks + + Import supported internal links. + + SwitchParameter + + SwitchParameter + + + None + + + ImportLists + + Import detected lists. + + SwitchParameter + + SwitchParameter + + + None + + + ImportParagraphs + + Import detected paragraphs. + + SwitchParameter + + SwitchParameter + + + None + + + ImportTables + + Import detected tables. + + SwitchParameter + + SwitchParameter + + + None + + + ImportUriLinks + + Import safe URI links. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeEmptyPages + + Represent empty PDF pages. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeFormFieldPlaceholders + + Represent AcroForm widgets with editable placeholders. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImagePlaceholders + + Use paragraphs when an image cannot be embedded. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeMetadata + + Copy PDF metadata into Word properties. + + SwitchParameter + + SwitchParameter + + + None + + + MaxTableRows + + Maximum body rows imported per table; zero means unlimited. + + Int32 + + Int32 + + + None + + + PreserveImagePlacementSize + + Preserve detected image placement size. + + SwitchParameter + + SwitchParameter + + + None + + + PreservePageBreaks + + Represent source pages with Word page breaks. + + SwitchParameter + + SwitchParameter + + + None + + + RepeatHeaderRows + + Repeat inferred table header rows. + + SwitchParameter + + SwitchParameter + + + None + + + TablesOnly + + Use the built-in tables-only import profile. + + SwitchParameter + + SwitchParameter + + + None + + + TableStyle + + Word table style for imported tables. + + WordTableStyle + + TableNormal + TableGrid + PlainTable1 + PlainTable2 + PlainTable3 + PlainTable4 + PlainTable5 + GridTable1Light + GridTable1LightAccent1 + GridTable1LightAccent2 + GridTable1LightAccent3 + GridTable1LightAccent4 + GridTable1LightAccent5 + GridTable1LightAccent6 + GridTable2 + GridTable2Accent1 + GridTable2Accent2 + GridTable2Accent3 + GridTable2Accent4 + GridTable2Accent5 + GridTable2Accent6 + GridTable3 + GridTable3Accent1 + GridTable3Accent2 + GridTable3Accent3 + GridTable3Accent4 + GridTable3Accent5 + GridTable3Accent6 + GridTable4 + GridTable4Accent1 + GridTable4Accent2 + GridTable4Accent3 + GridTable4Accent4 + GridTable4Accent5 + GridTable4Accent6 + GridTable5Dark + GridTable5DarkAccent1 + GridTable5DarkAccent2 + GridTable5DarkAccent3 + GridTable5DarkAccent4 + GridTable5DarkAccent5 + GridTable5DarkAccent6 + GridTable6Colorful + GridTable6ColorfulAccent1 + GridTable6ColorfulAccent2 + GridTable6ColorfulAccent3 + GridTable6ColorfulAccent4 + GridTable6ColorfulAccent5 + GridTable6ColorfulAccent6 + GridTable7Colorful + GridTable7ColorfulAccent1 + GridTable7ColorfulAccent2 + GridTable7ColorfulAccent3 + GridTable7ColorfulAccent4 + GridTable7ColorfulAccent5 + GridTable7ColorfulAccent6 + ListTable1Light + ListTable1LightAccent1 + ListTable1LightAccent2 + ListTable1LightAccent3 + ListTable1LightAccent4 + ListTable1LightAccent5 + ListTable1LightAccent6 + ListTable2 + ListTable2Accent1 + ListTable2Accent2 + ListTable2Accent3 + ListTable2Accent4 + ListTable2Accent5 + ListTable2Accent6 + ListTable3 + ListTable3Accent1 + ListTable3Accent2 + ListTable3Accent3 + ListTable3Accent4 + ListTable3Accent5 + ListTable3Accent6 + ListTable4 + ListTable4Accent1 + ListTable4Accent2 + ListTable4Accent3 + ListTable4Accent4 + ListTable4Accent5 + ListTable4Accent6 + ListTable5Dark + ListTable5DarkAccent1 + ListTable5DarkAccent2 + ListTable5DarkAccent3 + ListTable5DarkAccent4 + ListTable5DarkAccent5 + ListTable5DarkAccent6 + ListTable6Colorful + ListTable6ColorfulAccent1 + ListTable6ColorfulAccent2 + ListTable6ColorfulAccent3 + ListTable6ColorfulAccent4 + ListTable6ColorfulAccent5 + ListTable6ColorfulAccent6 + ListTable7Colorful + ListTable7ColorfulAccent1 + ListTable7ColorfulAccent2 + ListTable7ColorfulAccent3 + ListTable7ColorfulAccent4 + ListTable7ColorfulAccent5 + ListTable7ColorfulAccent6 + + + WordTableStyle + + + None + + + UseSharedPageReadingOrder + + Use the crop-, rotation-, and column-aware reading order. + + SwitchParameter + + SwitchParameter + + + None + + + + + + AlignNumericColumns + + Right-align inferred numeric columns. + + SwitchParameter + + SwitchParameter + + + None + + + AllowedHyperlinkUriScheme + + Allowed absolute hyperlink URI schemes. + + String[] + + String[] + + + None + + + BookmarkPrefix + + Prefix for generated Word bookmarks. + + String + + String + + + None + + + EmptyDocumentMessage + + Text used when no supported content is detected. + + String + + String + + + None + + + FitTablesToPageWidth + + Fit imported tables to page width. + + SwitchParameter + + SwitchParameter + + + None + + + ImportHeadings + + Import detected headings. + + SwitchParameter + + SwitchParameter + + + None + + + ImportImages + + Import supported embedded images. + + SwitchParameter + + SwitchParameter + + + None + + + ImportInternalLinks + + Import supported internal links. + + SwitchParameter + + SwitchParameter + + + None + + + ImportLists + + Import detected lists. + + SwitchParameter + + SwitchParameter + + + None + + + ImportParagraphs + + Import detected paragraphs. + + SwitchParameter + + SwitchParameter + + + None + + + ImportTables + + Import detected tables. + + SwitchParameter + + SwitchParameter + + + None + + + ImportUriLinks + + Import safe URI links. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeEmptyPages + + Represent empty PDF pages. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeFormFieldPlaceholders + + Represent AcroForm widgets with editable placeholders. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImagePlaceholders + + Use paragraphs when an image cannot be embedded. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeMetadata + + Copy PDF metadata into Word properties. + + SwitchParameter + + SwitchParameter + + + None + + + MaxTableRows + + Maximum body rows imported per table; zero means unlimited. + + Int32 + + Int32 + + + None + + + PreserveImagePlacementSize + + Preserve detected image placement size. + + SwitchParameter + + SwitchParameter + + + None + + + PreservePageBreaks + + Represent source pages with Word page breaks. + + SwitchParameter + + SwitchParameter + + + None + + + RepeatHeaderRows + + Repeat inferred table header rows. + + SwitchParameter + + SwitchParameter + + + None + + + TablesOnly + + Use the built-in tables-only import profile. + + SwitchParameter + + SwitchParameter + + + None + + + TableStyle + + Word table style for imported tables. + + WordTableStyle + + TableNormal + TableGrid + PlainTable1 + PlainTable2 + PlainTable3 + PlainTable4 + PlainTable5 + GridTable1Light + GridTable1LightAccent1 + GridTable1LightAccent2 + GridTable1LightAccent3 + GridTable1LightAccent4 + GridTable1LightAccent5 + GridTable1LightAccent6 + GridTable2 + GridTable2Accent1 + GridTable2Accent2 + GridTable2Accent3 + GridTable2Accent4 + GridTable2Accent5 + GridTable2Accent6 + GridTable3 + GridTable3Accent1 + GridTable3Accent2 + GridTable3Accent3 + GridTable3Accent4 + GridTable3Accent5 + GridTable3Accent6 + GridTable4 + GridTable4Accent1 + GridTable4Accent2 + GridTable4Accent3 + GridTable4Accent4 + GridTable4Accent5 + GridTable4Accent6 + GridTable5Dark + GridTable5DarkAccent1 + GridTable5DarkAccent2 + GridTable5DarkAccent3 + GridTable5DarkAccent4 + GridTable5DarkAccent5 + GridTable5DarkAccent6 + GridTable6Colorful + GridTable6ColorfulAccent1 + GridTable6ColorfulAccent2 + GridTable6ColorfulAccent3 + GridTable6ColorfulAccent4 + GridTable6ColorfulAccent5 + GridTable6ColorfulAccent6 + GridTable7Colorful + GridTable7ColorfulAccent1 + GridTable7ColorfulAccent2 + GridTable7ColorfulAccent3 + GridTable7ColorfulAccent4 + GridTable7ColorfulAccent5 + GridTable7ColorfulAccent6 + ListTable1Light + ListTable1LightAccent1 + ListTable1LightAccent2 + ListTable1LightAccent3 + ListTable1LightAccent4 + ListTable1LightAccent5 + ListTable1LightAccent6 + ListTable2 + ListTable2Accent1 + ListTable2Accent2 + ListTable2Accent3 + ListTable2Accent4 + ListTable2Accent5 + ListTable2Accent6 + ListTable3 + ListTable3Accent1 + ListTable3Accent2 + ListTable3Accent3 + ListTable3Accent4 + ListTable3Accent5 + ListTable3Accent6 + ListTable4 + ListTable4Accent1 + ListTable4Accent2 + ListTable4Accent3 + ListTable4Accent4 + ListTable4Accent5 + ListTable4Accent6 + ListTable5Dark + ListTable5DarkAccent1 + ListTable5DarkAccent2 + ListTable5DarkAccent3 + ListTable5DarkAccent4 + ListTable5DarkAccent5 + ListTable5DarkAccent6 + ListTable6Colorful + ListTable6ColorfulAccent1 + ListTable6ColorfulAccent2 + ListTable6ColorfulAccent3 + ListTable6ColorfulAccent4 + ListTable6ColorfulAccent5 + ListTable6ColorfulAccent6 + ListTable7Colorful + ListTable7ColorfulAccent1 + ListTable7ColorfulAccent2 + ListTable7ColorfulAccent3 + ListTable7ColorfulAccent4 + ListTable7ColorfulAccent5 + ListTable7ColorfulAccent6 + + + WordTableStyle + + + None + + + UseSharedPageReadingOrder + + Use the crop-, rotation-, and column-aware reading order. + + SwitchParameter + + SwitchParameter + + + None + + + + + + None + + + + + + + OfficeIMO.Word.Pdf.PdfWordImportOptions + + + + + + + + + + + Reconstruct headings, paragraphs, lists, and tables. + + PS> + + $options = New-OfficePdfWordImportOptions -ImportHeadings -ImportParagraphs -ImportLists -ImportTables + ConvertTo-OfficePdfWord -Path .\Source.pdf -OutputPath .\Rebuilt.docx -Options $options + + + + + + + + + + New-OfficePowerPoint + New + OfficePowerPoint + + Creates a PowerPoint presentation using the DSL. + + + + Initializes a presentation, runs the DSL script block, and optionally saves the deck. + + + + New-OfficePowerPoint + + Content + + DSL scriptblock describing presentation content. + + ScriptBlock + + ScriptBlock + + + None + + + NoSave + + Skip saving after executing the DSL. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the presentation after saving. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to save the presentation as an encrypted package. + + String + + String + + + None + + + Path + + Destination path for the new .pptx. + + String + + String + + + None + + + + + + Content + + DSL scriptblock describing presentation content. + + ScriptBlock + + ScriptBlock + + + None + + + NoSave + + Skip saving after executing the DSL. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the presentation after saving. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the saved FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to save the presentation as an encrypted package. + + String + + String + + + None + + + Path + + Destination path for the new .pptx. + + String + + String + + + None + + + + + + None + + + + + + + + + + + + Create and capture the presentation object. + + PS> + + $ppt = New-OfficePowerPoint -Path .\deck.pptx -NoSave + + Creates a live presentation associated with deck.pptx for incremental composition. + + + + Create a deck with a title slide. + + PS> + + New-OfficePowerPoint -Path .\deck.pptx { PptSlide { PptTitle -Title 'Status Update' } } -Open + + Creates, saves, and opens a deck with one titled slide. + + + + + + + + New-OfficePowerPointDeckPlan + New + OfficePowerPointDeckPlan + + Creates a semantic PowerPoint deck plan for designer rendering. + + + + Creates a semantic PowerPoint deck plan for designer rendering. + + + + New-OfficePowerPointDeckPlan + + Content + + Nested deck-plan DSL content. + + ScriptBlock + + ScriptBlock + + + None + + + + + + Content + + Nested deck-plan DSL content. + + ScriptBlock + + ScriptBlock + + + None + + + + + + None + + + + + + + OfficeIMO.PowerPoint.PowerPointDeckPlan + + + + + + + + + + + Create a semantic service brief plan. + + PS> + + $plan = New-OfficePowerPointDeckPlan { + Add-OfficePowerPointPlanSection -Title 'Service Review' -Subtitle 'Monthly operating brief' + Add-OfficePowerPointPlanProcess -Title 'Operating rhythm' -Steps @( + @{ Title = 'Collect'; Body = 'Gather health signals' } + @{ Title = 'Review'; Body = 'Confirm owner decisions' } + @{ Title = 'Publish'; Body = 'Share the final brief' } + ) + } + New-OfficePowerPoint -Path .\Examples\Documents\DesignerDeck.pptx { + Add-OfficePowerPointDesignerDeck -Plan $plan + } + + Builds a deck plan and renders it through the OfficeIMO designer helpers. + + + + + + + + New-OfficePowerPointImageOptions + New + OfficePowerPointImageOptions + + Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage. + + + + Creates discoverable slide selection and rendering settings for Export-OfficePowerPointImage. + + + + New-OfficePowerPointImageOptions + + BackgroundColor + + + + String + + String + + + None + + + IncludeAutoShapes + + Render auto shapes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeCharts + + Render charts. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenShapes + + Render hidden shapes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenSlides + + Include hidden slides. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePictures + + Render pictures. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSlideBackground + + Render slide backgrounds. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSlideContent + + Render slide content. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTables + + Render tables. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTextBoxes + + Render text boxes. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + SlideNumber + + One-based slide numbers to export. + + Int32[] + + Int32[] + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + + + + BackgroundColor + + + + String + + String + + + None + + + IncludeAutoShapes + + Render auto shapes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeCharts + + Render charts. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenShapes + + Render hidden shapes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenSlides + + Include hidden slides. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePictures + + Render pictures. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSlideBackground + + Render slide backgrounds. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSlideContent + + Render slide content. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTables + + Render tables. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTextBoxes + + Render text boxes. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + Scale + + + + Double + + Double + + + None + + + SlideNumber + + One-based slide numbers to export. + + Int32[] + + Int32[] + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + + + + None + + + + + + + OfficeIMO.PowerPoint.PowerPointPresentationImageExportOptions + + + + + + + + + + + Render selected slides with their backgrounds and content. + + PS> + + $options = New-OfficePowerPointImageOptions -SlideNumber 1,3 -IncludeSlideBackground -IncludeSlideContent + Export-OfficePowerPointImage -Path .\Deck.pptx -OutputPath .\Slides -Options $options + + + + + + + + + + New-OfficePowerPointOpenDocumentOptions + New + OfficePowerPointOpenDocumentOptions + + Creates PowerPoint/OpenDocument conversion settings. + + + + Creates PowerPoint/OpenDocument conversion settings. + + + + New-OfficePowerPointOpenDocumentOptions + + IncludeBasicFormatting + + Copy common fills, outlines, and text-run formatting. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Copy supported embedded images. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSpeakerNotes + + Copy plain speaker-note text. + + SwitchParameter + + SwitchParameter + + + None + + + LossPolicy + + Whether conversion loss is reported or rejected. + + OdfConversionLossPolicy + + ReportOnly + ThrowOnSkippedOrUnsupported + ThrowOnAnyLoss + + + OdfConversionLossPolicy + + + None + + + MaxTableColumns + + Maximum columns in converted presentation tables. + + Int32 + + Int32 + + + None + + + MaxTableRows + + Maximum rows in converted presentation tables. + + Int32 + + Int32 + + + None + + + + + + IncludeBasicFormatting + + Copy common fills, outlines, and text-run formatting. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Copy supported embedded images. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSpeakerNotes + + Copy plain speaker-note text. + + SwitchParameter + + SwitchParameter + + + None + + + LossPolicy + + Whether conversion loss is reported or rejected. + + OdfConversionLossPolicy + + ReportOnly + ThrowOnSkippedOrUnsupported + ThrowOnAnyLoss + + + OdfConversionLossPolicy + + + None + + + MaxTableColumns + + Maximum columns in converted presentation tables. + + Int32 + + Int32 + + + None + + + MaxTableRows + + Maximum rows in converted presentation tables. + + Int32 + + Int32 + + + None + + + + + + None + + + + + + + OfficeIMO.PowerPoint.OpenDocument.PowerPointOpenDocumentConversionOptions + + + + + + + + + + + Include slide images, notes, and basic formatting. + + PS> + + $options = New-OfficePowerPointOpenDocumentOptions -IncludeImages -IncludeSpeakerNotes -IncludeBasicFormatting + ConvertTo-OfficeOpenDocument -Path .\Deck.pptx -OutputPath .\Deck.odp -PowerPointOptions $options + + + + + + + + + + New-OfficePowerPointPdfOptions + New + OfficePowerPointPdfOptions + + Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf. + + + + Creates discoverable PowerPoint-to-PDF conversion options for Export-OfficeDocumentPdf. + + + + New-OfficePowerPointPdfOptions + + AllowDocumentFontEmbedding + + Allow embedding fonts stored in the presentation. + + SwitchParameter + + SwitchParameter + + + None + + + AllowSystemFontEmbedding + + Allow embedding fonts discovered on the current system. + + SwitchParameter + + SwitchParameter + + + None + + + ChartLayout + + Chart layout override. + + OfficeChartLayout + + OfficeChartLayout + + + None + + + ChartStyle + + Chart visual style override. + + OfficeChartStyle + + OfficeChartStyle + + + None + + + FontFamily + + Default font family used when the presentation does not specify one. + + String + + String + + + None + + + HandoutSlidesPerPage + + Number of slides on each handout page. + + Int32 + + Int32 + + + None + + + IncludeAutoShapes + + Render automatic shapes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeCharts + + Render charts. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenSlides + + Include slides marked hidden. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePictures + + Render pictures. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSlideBackgrounds + + Render slide backgrounds. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSmartArt + + Render SmartArt. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSpeakerNotes + + Include speaker notes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTables + + Render tables. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTextBoxes + + Render text boxes. + + SwitchParameter + + SwitchParameter + + + None + + + MaxGroupShapeDepth + + Maximum nested group-shape depth to render. + + Int32 + + Int32 + + + None + + + PageLayout + + PDF page layout, such as slides, notes, or handouts. + + PowerPointPdfPageLayout + + Slides + NotesPages + Handouts + + + PowerPointPdfPageLayout + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + PictureFit + + How pictures fit their shape bounds. + + OfficeImageFit + + Stretch + Contain + Cover + + + OfficeImageFit + + + None + + + WarnOnPictureAspectRatioDistortion + + Report pictures whose requested fit distorts their aspect ratio. + + SwitchParameter + + SwitchParameter + + + None + + + + + + AllowDocumentFontEmbedding + + Allow embedding fonts stored in the presentation. + + SwitchParameter + + SwitchParameter + + + None + + + AllowSystemFontEmbedding + + Allow embedding fonts discovered on the current system. + + SwitchParameter + + SwitchParameter + + + None + + + ChartLayout + + Chart layout override. + + OfficeChartLayout + + OfficeChartLayout + + + None + + + ChartStyle + + Chart visual style override. + + OfficeChartStyle + + OfficeChartStyle + + + None + + + FontFamily + + Default font family used when the presentation does not specify one. + + String + + String + + + None + + + HandoutSlidesPerPage + + Number of slides on each handout page. + + Int32 + + Int32 + + + None + + + IncludeAutoShapes + + Render automatic shapes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeCharts + + Render charts. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenSlides + + Include slides marked hidden. + + SwitchParameter + + SwitchParameter + + + None + + + IncludePictures + + Render pictures. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSlideBackgrounds + + Render slide backgrounds. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSmartArt + + Render SmartArt. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeSpeakerNotes + + Include speaker notes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTables + + Render tables. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTextBoxes + + Render text boxes. + + SwitchParameter + + SwitchParameter + + + None + + + MaxGroupShapeDepth + + Maximum nested group-shape depth to render. + + Int32 + + Int32 + + + None + + + PageLayout + + PDF page layout, such as slides, notes, or handouts. + + PowerPointPdfPageLayout + + Slides + NotesPages + Handouts + + + PowerPointPdfPageLayout + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + PictureFit + + How pictures fit their shape bounds. + + OfficeImageFit + + Stretch + Contain + Cover + + + OfficeImageFit + + + None + + + WarnOnPictureAspectRatioDistortion + + Report pictures whose requested fit distorts their aspect ratio. + + SwitchParameter + + SwitchParameter + + + None + + + + + + None + + + + + + + OfficeIMO.PowerPoint.Pdf.PowerPointPdfSaveOptions + + + + + + + + + + + Create a handout PDF with notes and hidden slides. + + PS> + + $options = New-OfficePowerPointPdfOptions -PageLayout Handouts -HandoutSlidesPerPage 3 -IncludeSpeakerNotes -IncludeHiddenSlides + Export-OfficeDocumentPdf -InputPath .\Briefing.pptx -Path .\Briefing.pdf -PowerPointOptions $options + + + + + + + + + + New-OfficeReaderHierarchyOptions + New + OfficeReaderHierarchyOptions + + Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy. + + + + Creates discoverable token and hierarchy settings for Get-OfficeDocumentHierarchy. + + + + New-OfficeReaderHierarchyOptions + + IncludeContextInText + + Include hierarchy context in chunk text. + + SwitchParameter + + SwitchParameter + + + None + + + MaxContextCharacters + + Maximum heading-context characters retained. + + Int32 + + Int32 + + + None + + + MaxHierarchyDepth + + Maximum heading hierarchy depth. + + Int32 + + Int32 + + + None + + + MaxInputChunks + + Maximum source chunks accepted. + + Int32 + + Int32 + + + None + + + MaxOutputChunks + + Maximum chunks returned. + + Int32 + + Int32 + + + None + + + MaxTokens + + Maximum tokens per output chunk. + + Int32 + + Int32 + + + None + + + OverlapTokens + + Tokens repeated between adjacent chunks. + + Int32 + + Int32 + + + None + + + PreferMarkdown + + Prefer Markdown text where the reader supports it. + + SwitchParameter + + SwitchParameter + + + None + + + + + + IncludeContextInText + + Include hierarchy context in chunk text. + + SwitchParameter + + SwitchParameter + + + None + + + MaxContextCharacters + + Maximum heading-context characters retained. + + Int32 + + Int32 + + + None + + + MaxHierarchyDepth + + Maximum heading hierarchy depth. + + Int32 + + Int32 + + + None + + + MaxInputChunks + + Maximum source chunks accepted. + + Int32 + + Int32 + + + None + + + MaxOutputChunks + + Maximum chunks returned. + + Int32 + + Int32 + + + None + + + MaxTokens + + Maximum tokens per output chunk. + + Int32 + + Int32 + + + None + + + OverlapTokens + + Tokens repeated between adjacent chunks. + + Int32 + + Int32 + + + None + + + PreferMarkdown + + Prefer Markdown text where the reader supports it. + + SwitchParameter + + SwitchParameter + + + None + + + + + + None + + + + + + + OfficeIMO.Reader.ReaderHierarchicalChunkingOptions + + + + + + + + + + + Create embedding-ready chunks. + + PS> + + $options = New-OfficeReaderHierarchyOptions -MaxTokens 500 -OverlapTokens 50 -IncludeContextInText + Get-OfficeDocumentHierarchy -Path .\handbook.pdf -ChunkingOptions $options + + + + + + + + + + New-OfficeRtf + New + OfficeRtf + + Creates an RTF document with plain paragraph content. + + + + Creates an RTF document with plain paragraph content. + + + + New-OfficeRtf + + NoSave + + Return the OfficeIMO RTF document without saving. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit a FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Destination path for the RTF file. + + String + + String + + + None + + + Text + + Plain paragraph text to add to the document. + + String[] + + String[] + + + None + + + + + + NoSave + + Return the OfficeIMO RTF document without saving. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit a FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Destination path for the RTF file. + + String + + String + + + None + + + Text + + Plain paragraph text to add to the document. + + String[] + + String[] + + + None + + + + + + System.String[] + + + + + + + System.IO.FileInfo + + + + + OfficeIMO.Rtf.RtfDocument + + + + + + + + + + + Create a small RTF file. + + PS> + + $file = New-OfficeRtf -Path .\Report.rtf -Text 'Summary', 'Ready for review' -PassThru + Get-OfficeRtf -Path $file.FullName + + Creates an RTF document with two paragraphs and returns the file. + + + + + + + + New-OfficeRtfPdfOptions + New + OfficeRtfPdfOptions + + Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf. + + + + Creates discoverable RTF-to-PDF conversion options for Export-OfficeDocumentPdf. + + + + New-OfficeRtfPdfOptions + + AllowDocumentFontEmbedding + + Allow embedding fonts referenced by the RTF document. + + SwitchParameter + + SwitchParameter + + + None + + + AllowSystemFontEmbedding + + Allow embedding fonts discovered on the current system. + + SwitchParameter + + SwitchParameter + + + None + + + DefaultImageHeight + + Fallback image height in PDF points. + + Double + + Double + + + None + + + DefaultImageWidth + + Fallback image width in PDF points. + + Double + + Double + + + None + + + IncludeHeaderFooters + + Render headers and footers. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenText + + Include text marked hidden. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Render images. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeMetadata + + Copy document metadata into the PDF. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeNotes + + Render document notes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTables + + Render tables. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumSystemFontFamilies + + Maximum number of system font families to discover. + + Int32 + + Int32 + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + + + + AllowDocumentFontEmbedding + + Allow embedding fonts referenced by the RTF document. + + SwitchParameter + + SwitchParameter + + + None + + + AllowSystemFontEmbedding + + Allow embedding fonts discovered on the current system. + + SwitchParameter + + SwitchParameter + + + None + + + DefaultImageHeight + + Fallback image height in PDF points. + + Double + + Double + + + None + + + DefaultImageWidth + + Fallback image width in PDF points. + + Double + + Double + + + None + + + IncludeHeaderFooters + + Render headers and footers. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeHiddenText + + Include text marked hidden. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Render images. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeMetadata + + Copy document metadata into the PDF. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeNotes + + Render document notes. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeTables + + Render tables. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumSystemFontFamilies + + Maximum number of system font families to discover. + + Int32 + + Int32 + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + + + + None + + + + + + + OfficeIMO.Rtf.Pdf.RtfPdfSaveOptions + + + + + + + + + + + Include document structure and bound system-font discovery. + + PS> + + $options = New-OfficeRtfPdfOptions -IncludeImages -IncludeTables -IncludeHeaderFooters -MaximumSystemFontFamilies 32 + Export-OfficeDocumentPdf -InputPath .\Report.rtf -Path .\Report.pdf -RtfOptions $options + + + + + + + + + + New-OfficeTextRun + New + OfficeTextRun + + Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands. + + + + Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands. + + + + New-OfficeTextRun + + BackgroundColor + + Run background or highlight color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + Baseline + + Target-specific baseline name, such as Superscript or Subscript. + + String + + String + + + None + + + Bold + + Render the run in bold. + + SwitchParameter + + SwitchParameter + + + None + + + Color + + Text color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + FontName + + Font name, family, or target-specific font identifier. + + String + + String + + + None + + + FontSize + + Font size in points. + + Double + + Double + + + None + + + Italic + + Render the run in italics. + + SwitchParameter + + SwitchParameter + + + None + + + Kind + + Run kind such as Text, LineBreak, Tab, Superscript, or Subscript. + + String + + String + + + None + + + LinkContents + + Optional link tooltip or annotation contents. + + String + + String + + + None + + + LinkDestinationName + + Named destination or bookmark target when supported by the target format. + + String + + String + + + None + + + LinkUri + + URI link target when supported by the target format. + + String + + String + + + None + + + Strike + + Render the run with strikethrough. + + SwitchParameter + + SwitchParameter + + + None + + + TabAlignment + + Tab alignment name. + + String + + String + + + None + + + TabLeader + + PDF tab leader style name. + + String + + String + + + None + + + Text + + Run text. + + String + + String + + + None + + + Underline + + Render the run with underline. + + SwitchParameter + + SwitchParameter + + + None + + + UnderlineStyle + + Optional underline style name when the target format supports it. + + String + + String + + + None + + + + + + BackgroundColor + + Run background or highlight color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + Baseline + + Target-specific baseline name, such as Superscript or Subscript. + + String + + String + + + None + + + Bold + + Render the run in bold. + + SwitchParameter + + SwitchParameter + + + None + + + Color + + Text color. Named colors and hexadecimal colors are accepted. + + String + + String + + + None + + + FontName + + Font name, family, or target-specific font identifier. + + String + + String + + + None + + + FontSize + + Font size in points. + + Double + + Double + + + None + + + Italic + + Render the run in italics. + + SwitchParameter + + SwitchParameter + + + None + + + Kind + + Run kind such as Text, LineBreak, Tab, Superscript, or Subscript. + + String + + String + + + None + + + LinkContents + + Optional link tooltip or annotation contents. + + String + + String + + + None + + + LinkDestinationName + + Named destination or bookmark target when supported by the target format. + + String + + String + + + None + + + LinkUri + + URI link target when supported by the target format. + + String + + String + + + None + + + Strike + + Render the run with strikethrough. + + SwitchParameter + + SwitchParameter + + + None + + + TabAlignment + + Tab alignment name. + + String + + String + + + None + + + TabLeader + + PDF tab leader style name. + + String + + String + + + None + + + Text + + Run text. + + String + + String + + + None + + + Underline + + Render the run with underline. + + SwitchParameter + + SwitchParameter + + + None + + + UnderlineStyle + + Optional underline style name when the target format supports it. + + String + + String + + + None + + + + + + None + + + + + + + PSWriteOffice.Services.Text.OfficeTextRunSpec + + + PowerShell-friendly rich text run specification used by document adapters. + + + + + + + + + + + EXAMPLE 1 + New-OfficeTextRun -BackgroundColor 'Value' + + + + + + + + + + New-OfficeVisio + New + OfficeVisio + + Creates a new OfficeIMO.Visio document with an initial page and optional DSL content. + + + + Creates a new OfficeIMO.Visio document with an initial page and optional DSL content. + + + + New-OfficeVisio + + Author + + Optional document author. + + String + + String + + + None + + + Content + + DSL script block describing Visio pages, shapes, and connectors. + + ScriptBlock + + ScriptBlock + + + None + + + Height + + Initial page height. + + Double + + Double + + + None + + + NoSave + + Skip saving and emit the document object. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the document after saving. + + SwitchParameter + + SwitchParameter + + + None + + + PageName + + Initial page name. + + String + + String + + + None + + + PassThru + + Emit the document object instead of the saved file. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Destination .vsdx path. + + String + + String + + + None + + + RequestRecalcOnOpen + + Ask Visio to recalculate layout and connector routing when the document opens. + + SwitchParameter + + SwitchParameter + + + None + + + Title + + Optional document title. + + String + + String + + + None + + + Unit + + Measurement unit for page width and height. + + VisioMeasurementUnit + + Inches + Centimeters + Millimeters + + + VisioMeasurementUnit + + + None + + + UseMastersByDefault + + Use Visio masters for supported built-in stencil shapes when saving. + + SwitchParameter + + SwitchParameter + + + None + + + Width + + Initial page width. + + Double + + Double + + + None + + + + + + Author + + Optional document author. + + String + + String + + + None + + + Content + + DSL script block describing Visio pages, shapes, and connectors. + + ScriptBlock + + ScriptBlock + + + None + + + Height + + Initial page height. + + Double + + Double + + + None + + + NoSave + + Skip saving and emit the document object. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the document after saving. + + SwitchParameter + + SwitchParameter + + + None + + + PageName + + Initial page name. + + String + + String + + + None + + + PassThru + + Emit the document object instead of the saved file. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Destination .vsdx path. + + String + + String + + + None + + + RequestRecalcOnOpen + + Ask Visio to recalculate layout and connector routing when the document opens. + + SwitchParameter + + SwitchParameter + + + None + + + Title + + Optional document title. + + String + + String + + + None + + + Unit + + Measurement unit for page width and height. + + VisioMeasurementUnit + + Inches + Centimeters + Millimeters + + + VisioMeasurementUnit + + + None + + + UseMastersByDefault + + Use Visio masters for supported built-in stencil shapes when saving. + + SwitchParameter + + SwitchParameter + + + None + + + Width + + Initial page width. + + Double + + Double + + + None + + + + + + None + + + + + + + OfficeIMO.Visio.VisioDocument + + + + + System.IO.FileInfo + + + + + + + + + + + Create a simple service map. + + PS> + + New-OfficeVisio -Path .\ServiceMap.vsdx -Title 'Service map' -RequestRecalcOnOpen { + VisioRectangle -Key web -Text 'Web' -X 1 -Y 4 -FillColor LightBlue + VisioRectangle -Key api -Text 'API' -X 4 -Y 4 -FillColor LightGreen + VisioConnector -From web -To api -EndArrow Triangle -Label 'calls' + } + + Creates an editable .vsdx diagram with two shapes and a connector. + + + + + + + + New-OfficeVisioGallery + New + OfficeVisioGallery + + Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams. + + + + Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams. + + + + New-OfficeVisioGallery + + NoPackageValidation + + Skip structural package validation after gallery documents are generated. + + SwitchParameter + + SwitchParameter + + + None + + + NoVisualQualityAnalysis + + Skip visual quality analysis after gallery documents are generated. + + SwitchParameter + + SwitchParameter + + + None + + + OutputDirectory + + Directory that receives generated .vsdx gallery documents. + + String + + String + + + None + + + + + + NoPackageValidation + + Skip structural package validation after gallery documents are generated. + + SwitchParameter + + SwitchParameter + + + None + + + NoVisualQualityAnalysis + + Skip visual quality analysis after gallery documents are generated. + + SwitchParameter + + SwitchParameter + + + None + + + OutputDirectory + + Directory that receives generated .vsdx gallery documents. + + String + + String + + + None + + + + + + None + + + + + + + OfficeIMO.Visio.VisioGalleryResult + + + + + + + + + + + Generate the Visio reference gallery. + + PS> + + New-OfficeVisioGallery -OutputDirectory .\VisioGallery | + Select-Object Name, FilePath, IsClean + + Creates polished, editable Visio samples for flowcharts, architecture, network, timeline, swimlane, org chart, and graph diagrams. + + + + + + + + New-OfficeVisioImageOptions + New + OfficeVisioImageOptions + + Creates discoverable page and rendering settings for Export-OfficeVisioImage. + + + + Creates discoverable page and rendering settings for Export-OfficeVisioImage. + + + + New-OfficeVisioImageOptions + + BackgroundColor + + + + String + + String + + + None + + + IncludeSvgXmlDeclaration + + Include an XML declaration in SVG output. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + PageCount + + Maximum pages exported. + + Int32 + + Int32 + + + None + + + PageIndex + + Zero-based first page index. + + Int32 + + Int32 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderConnectorLabels + + Render connector labels. + + SwitchParameter + + SwitchParameter + + + None + + + RenderStencilArtwork + + Render supported stencil artwork. + + SwitchParameter + + SwitchParameter + + + None + + + RenderText + + Render page text. + + SwitchParameter + + SwitchParameter + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + ResolveConnectorLabelOverlaps + + Resolve connector-label overlaps. + + SwitchParameter + + SwitchParameter + + + None + + + Scale + + + + Double + + Double + + + None + + + Supersampling + + Raster supersampling factor. + + Int32 + + Int32 + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + + + + BackgroundColor + + + + String + + String + + + None + + + IncludeSvgXmlDeclaration + + Include an XML declaration in SVG output. + + SwitchParameter + + SwitchParameter + + + None + + + MaximumDegreeOfParallelism + + + + Int32 + + Int32 + + + None + + + MaximumOutputCount + + + + Int32 + + Int32 + + + None + + + MaximumOutputHeight + + + + Int32 + + Int32 + + + None + + + MaximumOutputWidth + + + + Int32 + + Int32 + + + None + + + MaximumRasterPixels + + + + Int64 + + Int64 + + + None + + + MaximumTotalEncodedBytes + + + + Int64 + + Int64 + + + None + + + MaximumTotalRasterPixels + + + + Int64 + + Int64 + + + None + + + PageCount + + Maximum pages exported. + + Int32 + + Int32 + + + None + + + PageIndex + + Zero-based first page index. + + Int32 + + Int32 + + + None + + + RasterOverflowBehavior + + + + OfficeRasterOverflowBehavior + + ReduceScale + Throw + + + OfficeRasterOverflowBehavior + + + None + + + RenderConnectorLabels + + Render connector labels. + + SwitchParameter + + SwitchParameter + + + None + + + RenderStencilArtwork + + Render supported stencil artwork. + + SwitchParameter + + SwitchParameter + + + None + + + RenderText + + Render page text. + + SwitchParameter + + SwitchParameter + + + None + + + RenderTimeoutSeconds + + + + Double + + Double + + + None + + + ResolveConnectorLabelOverlaps + + Resolve connector-label overlaps. + + SwitchParameter + + SwitchParameter + + + None + + + Scale + + + + Double + + Double + + + None + + + Supersampling + + Raster supersampling factor. + + Int32 + + Int32 + + + None + + + TargetDpi + + + + Double + + Double + + + None + + + TextShapingLanguage + + + + String + + String + + + None + + + + + + None + + + + + + + OfficeIMO.Visio.VisioImageExportOptions + + + + + + + + + + + Render the first Visio page with text and connector labels. + + PS> + + $options = New-OfficeVisioImageOptions -PageIndex 0 -PageCount 1 -RenderText -RenderConnectorLabels + Export-OfficeVisioImage -Path .\Diagram.vsdx -OutputPath .\Preview -Format Svg -Options $options + + + + + + + + + + New-OfficeWord + New + OfficeWord + + Creates a Word document using the DSL. + + + + Handles file creation or template cloning, scriptblock execution, explicit save or live-document composition, and emits the document path when -PassThru is used. + + + + New-OfficeWord + + Content + + DSL scriptblock describing document content. + + ScriptBlock + + ScriptBlock + + + None + + + NoSave + + Skip saving after executing the DSL. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the document after saving. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit a FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to save the document as an encrypted package. + + String + + String + + + None + + + Path + + Destination path for the document. + + String + + String + + + None + + + TemplatePath + + Existing .docx file to clone before running the DSL. + + String + + String + + + None + + + + + + Content + + DSL scriptblock describing document content. + + ScriptBlock + + ScriptBlock + + + None + + + NoSave + + Skip saving after executing the DSL. + + SwitchParameter + + SwitchParameter + + + None + + + Open + + Open the document after saving. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit a FileInfo for chaining. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Password used to save the document as an encrypted package. + + String + + String + + + None + + + Path + + Destination path for the document. + + String + + String + + + None + + + TemplatePath + + Existing .docx file to clone before running the DSL. + + String + + String + + + None + + + + + + None + + + + + + + + + + + + Create a document inline. + + PS> + + New-OfficeWord -Path .\Report.docx { WordSection { WordParagraph 'Hello DSL' } } -Open + + Builds a document, adds one paragraph, saves it to disk, and opens it. + + + + Create a document from a template. + + PS> + + New-OfficeWord -TemplatePath .\Template.docx -Path .\Report.docx { WordParagraph -Text 'Generated content' -StyleId 'ReportBody' } + + Copies the template to the output path, runs the DSL against the copied document, and saves it. + + + + Keep a document for incremental composition. + + PS> + + $document = New-OfficeWord -Path .\Report.docx -NoSave + $document | Add-OfficeWordParagraph -Text 'Status report' -Style Heading1 + $document | Save-OfficeWord + $document | Close-OfficeWord + + Associates the output path with a live document, adds content through the pipeline, then saves and closes it once. + + + + + + + + New-OfficeWordComparisonOptions + New + OfficeWordComparisonOptions + + Creates discoverable structural comparison settings for Compare-OfficeWordDocument. + + + + Creates discoverable structural comparison settings for Compare-OfficeWordDocument. + + + + New-OfficeWordComparisonOptions + + CompareBlockOrder + + Compare document block order. + + SwitchParameter + + SwitchParameter + + + None + + + CompareBookmarks + + Compare bookmarks. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentAuthors + + Compare comment authors. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentReplies + + Compare comment replies. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentResolvedState + + Compare comment resolved state. + + SwitchParameter + + SwitchParameter + + + None + + + CompareComments + + Compare comments. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentTargets + + Compare comment targets. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentText + + Compare comment text. + + SwitchParameter + + SwitchParameter + + + None + + + CompareContentControls + + Compare content controls. + + SwitchParameter + + SwitchParameter + + + None + + + CompareEffectiveFormatting + + Compare resolved effective formatting. + + SwitchParameter + + SwitchParameter + + + None + + + CompareFields + + Compare fields. + + SwitchParameter + + SwitchParameter + + + None + + + CompareGeneratedIds + + Compare generated identifiers. + + SwitchParameter + + SwitchParameter + + + None + + + CompareHyperlinks + + Compare hyperlinks. + + SwitchParameter + + SwitchParameter + + + None + + + CompareImages + + Compare images. + + SwitchParameter + + SwitchParameter + + + None + + + CompareLists + + Compare lists. + + SwitchParameter + + SwitchParameter + + + None + + + CompareParagraphStyleIds + + Compare paragraph style identifiers. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisionAuthors + + Compare revision authors. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisionLocations + + Compare revision locations. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisions + + Compare tracked revisions. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisionText + + Compare revision text. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRunFormatting + + Compare direct run formatting. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRunStyleIds + + Compare run style identifiers. + + SwitchParameter + + SwitchParameter + + + None + + + CompareShapes + + Compare supported shapes. + + SwitchParameter + + SwitchParameter + + + None + + + CompareVolatileMetadata + + Compare volatile timestamps and metadata. + + SwitchParameter + + SwitchParameter + + + None + + + ExcludeScope + + Remove these comparison scopes from results. + + WordComparisonScope[] + + Paragraph + Run + Field + ContentControl + Bookmark + Hyperlink + List + Comment + Revision + Table + TableRow + TableCell + Image + Shape + + + WordComparisonScope[] + + + None + + + IgnoreCase + + Ignore character casing. + + SwitchParameter + + SwitchParameter + + + None + + + IgnoreWhitespace + + Ignore differences caused only by whitespace runs. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeScope + + Limit results to these comparison scopes. + + WordComparisonScope[] + + Paragraph + Run + Field + ContentControl + Bookmark + Hyperlink + List + Comment + Revision + Table + TableRow + TableCell + Image + Shape + + + WordComparisonScope[] + + + None + + + + + + CompareBlockOrder + + Compare document block order. + + SwitchParameter + + SwitchParameter + + + None + + + CompareBookmarks + + Compare bookmarks. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentAuthors + + Compare comment authors. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentReplies + + Compare comment replies. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentResolvedState + + Compare comment resolved state. + + SwitchParameter + + SwitchParameter + + + None + + + CompareComments + + Compare comments. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentTargets + + Compare comment targets. + + SwitchParameter + + SwitchParameter + + + None + + + CompareCommentText + + Compare comment text. + + SwitchParameter + + SwitchParameter + + + None + + + CompareContentControls + + Compare content controls. + + SwitchParameter + + SwitchParameter + + + None + + + CompareEffectiveFormatting + + Compare resolved effective formatting. + + SwitchParameter + + SwitchParameter + + + None + + + CompareFields + + Compare fields. + + SwitchParameter + + SwitchParameter + + + None + + + CompareGeneratedIds + + Compare generated identifiers. + + SwitchParameter + + SwitchParameter + + + None + + + CompareHyperlinks + + Compare hyperlinks. + + SwitchParameter + + SwitchParameter + + + None + + + CompareImages + + Compare images. + + SwitchParameter + + SwitchParameter + + + None + + + CompareLists + + Compare lists. + + SwitchParameter + + SwitchParameter + + + None + + + CompareParagraphStyleIds + + Compare paragraph style identifiers. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisionAuthors + + Compare revision authors. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisionLocations + + Compare revision locations. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisions + + Compare tracked revisions. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRevisionText + + Compare revision text. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRunFormatting + + Compare direct run formatting. + + SwitchParameter + + SwitchParameter + + + None + + + CompareRunStyleIds + + Compare run style identifiers. + + SwitchParameter + + SwitchParameter + + + None + + + CompareShapes + + Compare supported shapes. + + SwitchParameter + + SwitchParameter + + + None + + + CompareVolatileMetadata - Return the OfficeIMO RTF document without saving. + Compare volatile timestamps and metadata. SwitchParameter @@ -138603,22 +153733,38 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - OutputPath + + ExcludeScope - Destination path for the RTF file. + Remove these comparison scopes from results. - String + WordComparisonScope[] + + Paragraph + Run + Field + ContentControl + Bookmark + Hyperlink + List + Comment + Revision + Table + TableRow + TableCell + Image + Shape + - String + WordComparisonScope[] None - PassThru + IgnoreCase - Emit a FileInfo for chaining. + Ignore character casing. SwitchParameter @@ -138627,14 +153773,42 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Text + + IgnoreWhitespace - Plain paragraph text to add to the document. + Ignore differences caused only by whitespace runs. - String[] + SwitchParameter - String[] + SwitchParameter + + + None + + + IncludeScope + + Limit results to these comparison scopes. + + WordComparisonScope[] + + Paragraph + Run + Field + ContentControl + Bookmark + Hyperlink + List + Comment + Revision + Table + TableRow + TableCell + Image + Shape + + + WordComparisonScope[] None @@ -138643,19 +153817,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - System.String[] + None - System.IO.FileInfo - - - - - OfficeIMO.Rtf.RtfDocument + OfficeIMO.Word.WordComparisonOptions @@ -138666,14 +153835,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Create a small RTF file. + Ignore text normalization differences and exclude volatile metadata. PS> - $file = New-OfficeRtf -Path .\Report.rtf -Text 'Summary', 'Ready for review' -PassThru - Get-OfficeRtf -Path $file.FullName + $options = New-OfficeWordComparisonOptions -IgnoreWhitespace -IgnoreCase -CompareVolatileMetadata:$false + Compare-OfficeWordDocument -ReferencePath .\Before.docx -DifferencePath .\After.docx -Options $options - Creates an RTF document with two paragraphs and returns the file. + @@ -138681,35 +153850,23 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficeTextRun + New-OfficeWordImageOptions New - OfficeTextRun + OfficeWordImageOptions - Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands. + Creates discoverable page and rendering settings for Export-OfficeWordImage. - Creates a reusable rich text run specification for Word, Excel, PowerPoint, and PDF commands. + Creates discoverable page and rendering settings for Export-OfficeWordImage. - New-OfficeTextRun - - BackgroundColor - - Run background or highlight color. Named colors and hexadecimal colors are accepted. - - String - - String - - - None - + New-OfficeWordImageOptions - Baseline + BackgroundColor - Target-specific baseline name, such as Superscript or Subscript. + String @@ -138719,9 +153876,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Bold + IncludeDocumentContent - Render the run in bold. + Render document content. SwitchParameter @@ -138730,166 +153887,170 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Color + + MaximumDegreeOfParallelism - Text color. Named colors and hexadecimal colors are accepted. + - String + Int32 - String + Int32 None - - FontName + + MaximumOutputCount - Font name, family, or target-specific font identifier. + - String + Int32 - String + Int32 None - FontSize + MaximumOutputHeight - Font size in points. + - Double + Int32 - Double + Int32 None - Italic + MaximumOutputWidth - Render the run in italics. + - SwitchParameter + Int32 - SwitchParameter + Int32 None - Kind + MaximumRasterPixels - Run kind such as Text, LineBreak, Tab, Superscript, or Subscript. + - String + Int64 - String + Int64 None - - LinkContents + + MaximumTotalEncodedBytes - Optional link tooltip or annotation contents. + - String + Int64 - String + Int64 None - - LinkDestinationName + + MaximumTotalRasterPixels - Named destination or bookmark target when supported by the target format. + - String + Int64 - String + Int64 None - - LinkUri + + PageCount - URI link target when supported by the target format. + Maximum pages exported. Supplying this value selects batch export. - String + Int32 - String + Int32 None - Strike + PageIndex - Render the run with strikethrough. + Zero-based first page index. - SwitchParameter + Int32 - SwitchParameter + Int32 None - - TabAlignment + + RasterOverflowBehavior - Tab alignment name. + - String + OfficeRasterOverflowBehavior + + ReduceScale + Throw + - String + OfficeRasterOverflowBehavior None - - TabLeader + + RenderTimeoutSeconds - PDF tab leader style name. + - String + Double - String + Double None - - Text + + Scale - Run text. + - String + Double - String + Double None - Underline + TargetDpi - Render the run with underline. + - SwitchParameter + Double - SwitchParameter + Double None - UnderlineStyle + TextShapingLanguage - Optional underline style name when the target format supports it. + String @@ -138901,10 +154062,10 @@ Use -NoSave or omit -Path when a document object should be returned for further - + BackgroundColor - Run background or highlight color. Named colors and hexadecimal colors are accepted. + String @@ -138914,165 +154075,181 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Baseline + IncludeDocumentContent - Target-specific baseline name, such as Superscript or Subscript. + Render document content. - String + SwitchParameter - String + SwitchParameter None - Bold + MaximumDegreeOfParallelism - Render the run in bold. + - SwitchParameter + Int32 - SwitchParameter + Int32 None - - Color + + MaximumOutputCount - Text color. Named colors and hexadecimal colors are accepted. + - String + Int32 - String + Int32 None - - FontName + + MaximumOutputHeight - Font name, family, or target-specific font identifier. + - String + Int32 - String + Int32 None - FontSize + MaximumOutputWidth - Font size in points. + - Double + Int32 - Double + Int32 None - Italic + MaximumRasterPixels - Render the run in italics. + - SwitchParameter + Int64 - SwitchParameter + Int64 None - Kind + MaximumTotalEncodedBytes - Run kind such as Text, LineBreak, Tab, Superscript, or Subscript. + - String + Int64 - String + Int64 None - - LinkContents + + MaximumTotalRasterPixels - Optional link tooltip or annotation contents. + - String + Int64 - String + Int64 None - - LinkDestinationName + + PageCount - Named destination or bookmark target when supported by the target format. + Maximum pages exported. Supplying this value selects batch export. - String + Int32 - String + Int32 None - - LinkUri + + PageIndex - URI link target when supported by the target format. + Zero-based first page index. - String + Int32 - String + Int32 None - Strike + RasterOverflowBehavior - Render the run with strikethrough. + - SwitchParameter + OfficeRasterOverflowBehavior + + ReduceScale + Throw + - SwitchParameter + OfficeRasterOverflowBehavior None - - TabAlignment + + RenderTimeoutSeconds - Tab alignment name. + - String + Double - String + Double None - - TabLeader + + Scale - PDF tab leader style name. + - String + Double - String + Double None - - Text + + TargetDpi - Run text. + + + Double + + Double + + + None + + + TextShapingLanguage + + String @@ -139081,10 +154258,104 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + + + + None + + + + + + + OfficeIMO.Word.WordImageExportOptions + + + + + + + + + + + Render the first two pages at higher density. + + PS> + + $options = New-OfficeWordImageOptions -PageIndex 0 -PageCount 2 -TargetDpi 144 -IncludeDocumentContent + Export-OfficeWordImage -Path .\Report.docx -OutputPath .\Pages -Options $options + + Supplying PageCount selects batch export, so OutputPath is a folder. Use -AllPages on the export command for the complete document. + + + + + + + + New-OfficeWordOpenDocumentOptions + New + OfficeWordOpenDocumentOptions + + Creates Word/OpenDocument conversion settings. + + + + Creates Word/OpenDocument conversion settings. + + + + New-OfficeWordOpenDocumentOptions + + IncludeHeadersAndFooters + + Copy default headers and footers. + + SwitchParameter + + SwitchParameter + + + None + + + IncludeImages + + Copy supported inline images. + + SwitchParameter + + SwitchParameter + + + None + + + LossPolicy + + Whether conversion loss is reported or rejected. + + OdfConversionLossPolicy + + ReportOnly + ThrowOnSkippedOrUnsupported + ThrowOnAnyLoss + + + OdfConversionLossPolicy + + + None + + + + - Underline + IncludeHeadersAndFooters - Render the run with underline. + Copy default headers and footers. SwitchParameter @@ -139094,13 +154365,30 @@ Use -NoSave or omit -Path when a document object should be returned for further None - UnderlineStyle + IncludeImages - Optional underline style name when the target format supports it. + Copy supported inline images. - String + SwitchParameter - String + SwitchParameter + + + None + + + LossPolicy + + Whether conversion loss is reported or rejected. + + OdfConversionLossPolicy + + ReportOnly + ThrowOnSkippedOrUnsupported + ThrowOnAnyLoss + + + OdfConversionLossPolicy None @@ -139116,11 +154404,8 @@ Use -NoSave or omit -Path when a document object should be returned for further - PSWriteOffice.Services.Text.OfficeTextRunSpec + OfficeIMO.Word.OpenDocument.WordOpenDocumentConversionOptions - - PowerShell-friendly rich text run specification used by document adapters. - @@ -139130,8 +154415,12 @@ Use -NoSave or omit -Path when a document object should be returned for further - EXAMPLE 1 - New-OfficeTextRun -BackgroundColor 'Value' + Include Word images and headers during conversion. + + PS> + + $options = New-OfficeWordOpenDocumentOptions -IncludeImages -IncludeHeadersAndFooters + ConvertTo-OfficeOpenDocument -Path .\Report.docx -OutputPath .\Report.odt -WordOptions $options @@ -139141,23 +154430,47 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficeVisio + New-OfficeWordPdfOptions New - OfficeVisio + OfficeWordPdfOptions - Creates a new OfficeIMO.Visio document with an initial page and optional DSL content. + Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf. - Creates a new OfficeIMO.Visio document with an initial page and optional DSL content. + Creates discoverable Word-to-PDF conversion options for Export-OfficeDocumentPdf. - New-OfficeVisio + New-OfficeWordPdfOptions + + AllowDocumentFontEmbedding + + Allow embedding fonts stored in the Word document. + + SwitchParameter + + SwitchParameter + + + None + + + AllowSystemFontEmbedding + + Allow embedding fonts discovered on the current system. + + SwitchParameter + + SwitchParameter + + + None + Author - Optional document author. + PDF author metadata. String @@ -139166,34 +154479,50 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Content + + DefaultOrientation - DSL script block describing Visio pages, shapes, and connectors. + Fallback page orientation for sections without page settings. - ScriptBlock + OfficePageOrientation + + Portrait + Landscape + - ScriptBlock + OfficePageOrientation None - Height + DefaultPageSize - Initial page height. + Fallback Word page size for sections without page settings. - Double + WordPageSize + + Unknown + Letter + Legal + Statement + Executive + A3 + A4 + A5 + A6 + B5 + - Double + WordPageSize None - NoSave + DefaultTableBorders - Skip saving and emit the document object. + Draw default borders for tables that do not specify borders. SwitchParameter @@ -139203,9 +154532,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PageName + FontFamily - Initial page name. + Default font family used when the document does not specify one. String @@ -139215,9 +154544,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PassThru + IncludePageNumbers - Emit the document object instead of the saved file. + Include page numbers in the generated PDF. SwitchParameter @@ -139226,12 +154555,12 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Path + + Keywords - Destination .vsdx path. + PDF keywords metadata. - String + String String @@ -139239,78 +154568,125 @@ Use -NoSave or omit -Path when a document object should be returned for further None - RequestRecalcOnOpen + MarginBottom - Ask Visio to recalculate layout and connector routing when the document opens. + Bottom page margin in PDF points. - SwitchParameter + Double - SwitchParameter + Double None - Show + MarginLeft - Open the document after saving. + Left page margin in PDF points. - SwitchParameter + Double - SwitchParameter + Double None - Title + MarginRight - Optional document title. + Right page margin in PDF points. - String + Double - String + Double None - Unit + MarginTop - Measurement unit for page width and height. + Top page margin in PDF points. - VisioMeasurementUnit + Double + + Double + + + None + + + Orientation + + PDF page orientation. + + OfficePageOrientation - Inches - Centimeters - Millimeters + Portrait + Landscape - VisioMeasurementUnit + OfficePageOrientation None - UseMastersByDefault + PageNumberFormat - Use Visio masters for supported built-in stencil shapes when saving. + Page number text format. - SwitchParameter + String - SwitchParameter + String None - Width + PageSize - Initial page width. + PDF page size. - Double + PageSize - Double + PageSize + + + None + + + PdfOptions + + Underlying low-level OfficeIMO PDF options. + + PdfOptions + + PdfOptions + + + None + + + Subject + + PDF subject metadata. + + String + + String + + + None + + + Title + + PDF title metadata. + + String + + String None @@ -139319,69 +154695,85 @@ Use -NoSave or omit -Path when a document object should be returned for further - Author + AllowDocumentFontEmbedding - Optional document author. + Allow embedding fonts stored in the Word document. - String + SwitchParameter - String + SwitchParameter None - - Content + + AllowSystemFontEmbedding - DSL script block describing Visio pages, shapes, and connectors. + Allow embedding fonts discovered on the current system. - ScriptBlock + SwitchParameter - ScriptBlock + SwitchParameter None - Height + Author - Initial page height. + PDF author metadata. - Double + String - Double + String None - NoSave + DefaultOrientation - Skip saving and emit the document object. + Fallback page orientation for sections without page settings. - SwitchParameter + OfficePageOrientation + + Portrait + Landscape + - SwitchParameter + OfficePageOrientation None - PageName + DefaultPageSize - Initial page name. + Fallback Word page size for sections without page settings. - String + WordPageSize + + Unknown + Letter + Legal + Statement + Executive + A3 + A4 + A5 + A6 + B5 + - String + WordPageSize None - PassThru + DefaultTableBorders - Emit the document object instead of the saved file. + Draw default borders for tables that do not specify borders. SwitchParameter @@ -139390,12 +154782,12 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Path + + FontFamily - Destination .vsdx path. + Default font family used when the document does not specify one. - String + String String @@ -139403,9 +154795,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - RequestRecalcOnOpen + IncludePageNumbers - Ask Visio to recalculate layout and connector routing when the document opens. + Include page numbers in the generated PDF. SwitchParameter @@ -139415,62 +154807,57 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Show + Keywords - Open the document after saving. + PDF keywords metadata. - SwitchParameter + String - SwitchParameter + String None - Title + MarginBottom - Optional document title. + Bottom page margin in PDF points. - String + Double - String + Double None - Unit + MarginLeft - Measurement unit for page width and height. + Left page margin in PDF points. - VisioMeasurementUnit - - Inches - Centimeters - Millimeters - + Double - VisioMeasurementUnit + Double None - UseMastersByDefault + MarginRight - Use Visio masters for supported built-in stencil shapes when saving. + Right page margin in PDF points. - SwitchParameter + Double - SwitchParameter + Double None - Width + MarginTop - Initial page width. + Top page margin in PDF points. Double @@ -139479,133 +154866,76 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - - + + Orientation + + PDF page orientation. + + OfficePageOrientation + + Portrait + Landscape + - None + OfficePageOrientation + - - - - + None + + + PageNumberFormat + + Page number text format. + + String - OfficeIMO.Visio.VisioDocument + String + - - + None + + + PageSize + + PDF page size. + + PageSize - System.IO.FileInfo + PageSize + - - - - - - - - - - Create a simple service map. - - PS> - - New-OfficeVisio -Path .\ServiceMap.vsdx -Title 'Service map' -RequestRecalcOnOpen { - VisioRectangle -Key web -Text 'Web' -X 1 -Y 4 -FillColor LightBlue - VisioRectangle -Key api -Text 'API' -X 4 -Y 4 -FillColor LightGreen - VisioConnector -From web -To api -EndArrow Triangle -Label 'calls' - } - - Creates an editable .vsdx diagram with two shapes and a connector. - - - - - - - - New-OfficeVisioGallery - New - OfficeVisioGallery - - Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams. - - - - Generates the OfficeIMO Visio reference gallery as editable .vsdx diagrams. - - - - New-OfficeVisioGallery - - NoPackageValidation - - Skip structural package validation after gallery documents are generated. - - SwitchParameter - - SwitchParameter - - - None - - - NoVisualQualityAnalysis - - Skip visual quality analysis after gallery documents are generated. - - SwitchParameter - - SwitchParameter - - - None - - - OutputDirectory - - Directory that receives generated .vsdx gallery documents. - - String - - String - - - None - - - - + None + - NoPackageValidation + PdfOptions - Skip structural package validation after gallery documents are generated. + Underlying low-level OfficeIMO PDF options. - SwitchParameter + PdfOptions - SwitchParameter + PdfOptions None - NoVisualQualityAnalysis + Subject - Skip visual quality analysis after gallery documents are generated. + PDF subject metadata. - SwitchParameter + String - SwitchParameter + String None - - OutputDirectory + + Title - Directory that receives generated .vsdx gallery documents. + PDF title metadata. - String + String String @@ -139623,7 +154953,7 @@ Use -NoSave or omit -Path when a document object should be returned for further - OfficeIMO.Visio.VisioGalleryResult + OfficeIMO.Word.Pdf.WordPdfSaveOptions @@ -139634,14 +154964,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Generate the Visio reference gallery. + Configure metadata, page numbers, and font embedding. PS> - New-OfficeVisioGallery -OutputDirectory .\VisioGallery | - Select-Object Name, FilePath, IsClean + $options = New-OfficeWordPdfOptions -Title 'Service report' -Author 'Evotec' -IncludePageNumbers -AllowSystemFontEmbedding + Export-OfficeDocumentPdf -InputPath .\Report.docx -Path .\Report.pdf -WordOptions $options - Creates polished, editable Visio samples for flowcharts, architecture, network, timeline, swimlane, org chart, and graph diagrams. + @@ -139649,47 +154979,59 @@ Use -NoSave or omit -Path when a document object should be returned for further - New-OfficeWord + New-OfficeWordRevisionFilter New - OfficeWord + OfficeWordRevisionFilter - Creates a Word document using the DSL. + Creates a discoverable Word revision filter for Resolve-OfficeWordRevision. - Handles file creation or template cloning, scriptblock execution, optional autosave, and emits the document path when -PassThru is used. + Creates a discoverable Word revision filter for Resolve-OfficeWordRevision. - New-OfficeWord + New-OfficeWordRevisionFilter - AutoSave + Author - Enable OfficeIMO AutoSave mode. + Revision author. - SwitchParameter + String - SwitchParameter + String None - - Content + + DateFrom - DSL scriptblock describing document content. + Earliest revision date. - ScriptBlock + DateTime - ScriptBlock + DateTime None - NoSave + DateTo - Skip saving after executing the DSL. + Latest revision date. + + DateTime + + DateTime + + + None + + + InContentControl + + Limit results to revisions inside content controls. SwitchParameter @@ -139699,9 +155041,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Open + InTable - Open the document after saving. + Limit results to revisions inside tables. SwitchParameter @@ -139710,22 +155052,41 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - OutputPath + + InTextBox - Destination path for the document. + Limit results to revisions inside text boxes. - String + SwitchParameter - String + SwitchParameter None - PassThru + LocationKind - Emit a FileInfo for chaining. + Word part or container location kind. + + WordReviewLocationKind + + Body + Header + Footer + Footnote + Endnote + + + WordReviewLocationKind + + + None + + + NotInContentControl + + Limit results to revisions outside content controls. SwitchParameter @@ -139735,21 +155096,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Password + NotInTable - Password used to save the document as an encrypted package. + Limit results to revisions outside tables. - String + SwitchParameter - String + SwitchParameter None - - PdfAllowSystemFontEmbedding + + NotInTextBox - Allow the native Word PDF converter to embed installed system fonts used by the document. + Limit results to revisions outside text boxes. SwitchParameter @@ -139759,9 +155120,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PdfFontFamily + PartUri - Optional default font family used by the native Word PDF converter. + Package part URI. String @@ -139771,9 +155132,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PdfPath + RevisionId - Optional PDF path to create from the same Word document before closing it. + Revision identifier. String @@ -139783,13 +155144,26 @@ Use -NoSave or omit -Path when a document object should be returned for further None - TemplatePath + RevisionType - Existing .docx file to clone before running the DSL. + Revision operation type. - String + WordReviewRevisionType + + Insertion + Deletion + MoveFrom + MoveTo + ParagraphFormatting + RunFormatting + TableFormatting + TableRowFormatting + TableCellFormatting + SectionFormatting + Unknown + - String + WordReviewRevisionType None @@ -139798,33 +155172,45 @@ Use -NoSave or omit -Path when a document object should be returned for further - AutoSave + Author - Enable OfficeIMO AutoSave mode. + Revision author. - SwitchParameter + String - SwitchParameter + String None - - Content + + DateFrom - DSL scriptblock describing document content. + Earliest revision date. - ScriptBlock + DateTime - ScriptBlock + DateTime None - NoSave + DateTo - Skip saving after executing the DSL. + Latest revision date. + + DateTime + + DateTime + + + None + + + InContentControl + + Limit results to revisions inside content controls. SwitchParameter @@ -139834,9 +155220,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Open + InTable - Open the document after saving. + Limit results to revisions inside tables. SwitchParameter @@ -139845,22 +155231,41 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - OutputPath + + InTextBox - Destination path for the document. + Limit results to revisions inside text boxes. - String + SwitchParameter - String + SwitchParameter None - PassThru + LocationKind - Emit a FileInfo for chaining. + Word part or container location kind. + + WordReviewLocationKind + + Body + Header + Footer + Footnote + Endnote + + + WordReviewLocationKind + + + None + + + NotInContentControl + + Limit results to revisions outside content controls. SwitchParameter @@ -139870,21 +155275,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Password + NotInTable - Password used to save the document as an encrypted package. + Limit results to revisions outside tables. - String + SwitchParameter - String + SwitchParameter None - - PdfAllowSystemFontEmbedding + + NotInTextBox - Allow the native Word PDF converter to embed installed system fonts used by the document. + Limit results to revisions outside text boxes. SwitchParameter @@ -139894,9 +155299,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PdfFontFamily + PartUri - Optional default font family used by the native Word PDF converter. + Package part URI. String @@ -139906,9 +155311,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PdfPath + RevisionId - Optional PDF path to create from the same Word document before closing it. + Revision identifier. String @@ -139918,13 +155323,26 @@ Use -NoSave or omit -Path when a document object should be returned for further None - TemplatePath + RevisionType - Existing .docx file to clone before running the DSL. + Revision operation type. - String + WordReviewRevisionType + + Insertion + Deletion + MoveFrom + MoveTo + ParagraphFormatting + RunFormatting + TableFormatting + TableRowFormatting + TableCellFormatting + SectionFormatting + Unknown + - String + WordReviewRevisionType None @@ -139937,7 +155355,13 @@ Use -NoSave or omit -Path when a document object should be returned for further - + + + + OfficeIMO.Word.WordRevisionFilter + + + @@ -139945,36 +155369,14 @@ Use -NoSave or omit -Path when a document object should be returned for further - Create a document inline. - - PS> - - New-OfficeWord -Path .\Report.docx { WordSection { WordParagraph 'Hello DSL' } } -Open - - Builds a document, adds one paragraph, saves it to disk, and opens it. - - - - Create a document from a template. - - PS> - - New-OfficeWord -TemplatePath .\Template.docx -Path .\Report.docx { WordParagraph -Text 'Generated content' -StyleId 'ReportBody' } - - Copies the template to the output path, runs the DSL against the copied document, and saves it. - - - - Keep a document for incremental composition. + Accept only table revisions from one author. PS> - $document = New-OfficeWord -Path .\Report.docx -NoSave - $document | Add-OfficeWordParagraph -Text 'Status report' -Style Heading1 - $document | Save-OfficeWord - $document | Close-OfficeWord + $filter = New-OfficeWordRevisionFilter -Author 'Alex' -InTable + Resolve-OfficeWordRevision -Path .\Review.docx -Action Accept -Filter $filter - Associates the output path with a live document, adds content through the pipeline, then saves and closes it once. + @@ -141173,23 +156575,71 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - ProtectWindows - - Protect workbook windows where supported by the consuming application. - - SwitchParameter - - SwitchParameter - - - None - - - - Protect-OfficeExcelWorkbook - - InputPath + + ProtectWindows + + Protect workbook windows where supported by the consuming application. + + SwitchParameter + + SwitchParameter + + + None + + + + Protect-OfficeExcelWorkbook + + LegacyPasswordHash + + Optional precomputed legacy workbook protection hash to write as-is. + + String + + String + + + None + + + NoStructure + + Do not protect workbook structure. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the workbook after protection. + + SwitchParameter + + SwitchParameter + + + None + + + Password + + Optional workbook protection password. This is UI protection, not package encryption. + + String + + String + + + None + + + Path Workbook path to update. @@ -141200,54 +156650,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - LegacyPasswordHash - - Optional precomputed legacy workbook protection hash to write as-is. - - String - - String - - - None - - - NoStructure - - Do not protect workbook structure. - - SwitchParameter - - SwitchParameter - - - None - - - PassThru - - Emit the workbook after protection. - - SwitchParameter - - SwitchParameter - - - None - - - Password - - Optional workbook protection password. This is UI protection, not package encryption. - - String - - String - - - None - ProtectWindows @@ -141350,18 +156752,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - InputPath - - Workbook path to update. - - String - - String - - - None - LegacyPasswordHash @@ -141410,6 +156800,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + Path + + Workbook path to update. + + String + + String + + + None + ProtectWindows @@ -142133,6 +157535,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Return the completed delete plan after a live operation. + + SwitchParameter + + SwitchParameter + + + None + PlanOnly @@ -142196,6 +157610,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Return the completed delete plan after a live operation. + + SwitchParameter + + SwitchParameter + + + None + PlanOnly @@ -142877,6 +158303,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PassThruReport @@ -142988,6 +158426,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PassThruReport @@ -143063,8 +158513,11 @@ Use -NoSave or omit -Path when a document object should be returned for further - EXAMPLE 1 - Remove-OfficePdfAnnotation -Path 'C:\Path' + Remove text annotations from the first page. + + PS> + + Remove-OfficePdfAnnotation -Path .\Reviewed.pdf -OutputPath .\Clean.pdf -PageNumber 1 -Subtype Text -Confirm:$false @@ -143123,6 +158576,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -143186,6 +158651,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -143275,6 +158752,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -143302,6 +158791,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -143334,11 +158835,11 @@ Use -NoSave or omit -Path when a document object should be returned for further PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRemoveSlide.pptx - Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null - Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRemoveSlide.pptx -NoSave + Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 + Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 Remove-OfficePowerPointSlide -Presentation $ppt -Index 0 -Confirm:$false - Save-OfficePowerPoint -Presentation $ppt + Close-OfficePowerPoint -Presentation $ppt -Save Removes the first slide and saves the updated deck. @@ -143956,10 +159457,11 @@ Use -NoSave or omit -Path when a document object should be returned for further PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointRenameSection.pptx - Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Out-Null - Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0 | Out-Null - Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointRenameSection.pptx -NoSave + Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 + Add-OfficePowerPointSection -Presentation $ppt -Name 'Results' -StartSlideIndex 0 + Rename-OfficePowerPointSection -Presentation $ppt -Name 'Results' -NewName 'Deep Dive' -PassThru + $ppt | Close-OfficePowerPoint -Save Renames the first matching section and returns the updated section metadata. @@ -143982,18 +159484,6 @@ Use -NoSave or omit -Path when a document object should be returned for further Repair-OfficeExcelWorkbook - - InputPath - - Workbook path to repair. - - String - - String - - - None - NoSave @@ -144018,6 +159508,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + Path + + Workbook path to repair. + + String + + String + + + None + SkipCalculation @@ -144216,18 +159718,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - InputPath - - Workbook path to repair. - - String - - String - - - None - NoSave @@ -144252,6 +159742,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + Path + + Workbook path to repair. + + String + + String + + + None + SkipCalculation @@ -144589,7 +160091,8 @@ Use -NoSave or omit -Path when a document object should be returned for further PS> - $filter = [OfficeIMO.Word.WordRevisionFilter]::new(); $filter.Author = 'Reviewer'; Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter + $filter = New-OfficeWordRevisionFilter -Author 'Reviewer' -InContentControl + Resolve-OfficeWordRevision -Path .\Draft.docx -OutputPath .\Accepted.docx -Action Accept -Filter $filter Applies only matching revisions, saves the result, and returns the matched revision report. @@ -144624,6 +160127,39 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + LineEnding + + Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference. + + String + + LF + CRLF + CR + + + String + + + None + + + Mode + + Writer mode. Preserve retains unchanged source; Canonical emits stable formatting. + + AsciiDocWriterMode + + Preserve + Canonical + + + AsciiDocWriterMode + + + None + Options @@ -144675,6 +160211,39 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + LineEnding + + Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference. + + String + + LF + CRLF + CR + + + String + + + None + + + Mode + + Writer mode. Preserve retains unchanged source; Canonical emits stable formatting. + + AsciiDocWriterMode + + Preserve + Canonical + + + AsciiDocWriterMode + + + None + Options @@ -144733,8 +160302,12 @@ Use -NoSave or omit -Path when a document object should be returned for further - EXAMPLE 1 - Save-OfficeAsciiDoc -Path 'C:\Path' + Load, edit, and save an AsciiDoc document. + + PS> + + $document = Get-OfficeAsciiDoc -Path .\Guide.adoc + $document | Save-OfficeAsciiDoc -Path .\Guide-normalized.adoc -Mode Canonical @@ -144802,6 +160375,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -144862,6 +160447,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -144896,8 +160493,12 @@ Use -NoSave or omit -Path when a document object should be returned for further - EXAMPLE 1 - Save-OfficeEmail -Document 'Value' + Save a message with an explicit loss policy. + + PS> + + $options = New-OfficeEmailWriterOptions -ConversionLossPolicy Block + $message | Save-OfficeEmail -Path .\Message.eml -Options $options -PassThru @@ -144944,6 +160545,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -144983,6 +160596,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -145017,8 +160642,12 @@ Use -NoSave or omit -Path when a document object should be returned for further - EXAMPLE 1 - Save-OfficeEmailMailbox -Mailbox 'Value' + Save an mboxrd mailbox and return its diagnostics. + + PS> + + $options = New-OfficeEmailMailboxWriterOptions -Variant Mboxrd + $mailbox | Save-OfficeEmailMailbox -Path .\Archive.mbox -Options $options -PassThru @@ -145131,10 +160760,10 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - PassThru + + Open - Emit the workbook for further processing. + Open the workbook after saving. SwitchParameter @@ -145144,21 +160773,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Password + PassThru - Password used to save the workbook as an encrypted package. + Emit the workbook for further processing. - String + SwitchParameter - String + SwitchParameter None - Path + Password - Optional save-as path. + Password used to save the workbook as an encrypted package. String @@ -145168,9 +160797,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PdfPath + Path - Optional PDF path to create from the same workbook. + Optional save-as path. String @@ -145203,18 +160832,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Show - - Open the workbook after saving. - - SwitchParameter - - SwitchParameter - - - None - ValidateOpenXml @@ -145320,10 +160937,10 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - PassThru + + Open - Emit the workbook for further processing. + Open the workbook after saving. SwitchParameter @@ -145333,21 +160950,21 @@ Use -NoSave or omit -Path when a document object should be returned for further None - Password + PassThru - Password used to save the workbook as an encrypted package. + Emit the workbook for further processing. - String + SwitchParameter - String + SwitchParameter None - Path + Password - Optional save-as path. + Password used to save the workbook as an encrypted package. String @@ -145357,9 +160974,9 @@ Use -NoSave or omit -Path when a document object should be returned for further None - PdfPath + Path - Optional PDF path to create from the same workbook. + Optional save-as path. String @@ -145392,18 +161009,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - Show - - Open the workbook after saving. - - SwitchParameter - - SwitchParameter - - - None - ValidateOpenXml @@ -145477,6 +161082,39 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + LineEnding + + Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference. + + String + + LF + CRLF + CR + + + String + + + None + + + Mode + + Writer mode. Preserve retains unchanged source; Canonical normalizes output. + + LatexWriterMode + + Preserve + Canonical + + + LatexWriterMode + + + None + Options @@ -145528,6 +161166,39 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + LineEnding + + Canonical line ending: LF, CRLF, or CR. Omit it to retain the source preference. + + String + + LF + CRLF + CR + + + String + + + None + + + Mode + + Writer mode. Preserve retains unchanged source; Canonical normalizes output. + + LatexWriterMode + + Preserve + Canonical + + + LatexWriterMode + + + None + Options @@ -145586,8 +161257,12 @@ Use -NoSave or omit -Path when a document object should be returned for further - EXAMPLE 1 - Save-OfficeLatex -Path 'C:\Path' + Load and save a canonical LaTeX document. + + PS> + + $document = Get-OfficeLatex -Path .\Article.tex + $document | Save-OfficeLatex -Path .\Article-normalized.tex -Mode Canonical @@ -145601,11 +161276,11 @@ Use -NoSave or omit -Path when a document object should be returned for further Save OfficeMarkdown - Saves a Markdown document and optionally creates a PDF sidecar. + Saves a Markdown document without changing its lifetime. - Saves a Markdown document and optionally creates a PDF sidecar. + Saves a Markdown document without changing its lifetime. @@ -145651,18 +161326,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - MarkdownPdfOptions - - Advanced Markdown PDF options. Friendly PDF parameters override matching values. - - MarkdownPdfSaveOptions - - MarkdownPdfSaveOptions - - - None - PassThru @@ -145675,301 +161338,12 @@ Use -NoSave or omit -Path when a document object should be returned for further None - + Path Destination Markdown path. - String - - String - - - None - - - PdfApplyWordLikeTheme - - Apply the built-in Word-like Markdown PDF baseline theme. - - Boolean - - Boolean - - - None - - - PdfAuthor - - PDF author metadata. - - String - - String - - - None - - - PdfBaseDirectory - - Base directory used to resolve local Markdown images during PDF export. - - String - - String - - - None - - - PdfConversionReportVariable - - Variable name that receives the Markdown PDF conversion report. - - String - - String - - - None - - - PdfCreateOutlineFromHeadings - - Create PDF outlines from Markdown headings. - - Boolean - - Boolean - - - None - - - PdfDefaultImageHeight - - Fallback PDF image height in points. - - Double - - Double - - - None - - - PdfDefaultImageWidth - - Fallback PDF image width in points. - - Double - - Double - - - None - - - PdfFontFamily - - Default font family used by Markdown PDF export. - - String - - String - - - None - - - PdfFrontMatterRenderMode - - Controls how YAML front matter appears in the PDF body. - - MarkdownPdfFrontMatterRenderMode - - Hidden - DocumentHeader - Table - - - MarkdownPdfFrontMatterRenderMode - - - None - - - PdfIncludeDataUriImages - - Embed supported data URI images in Markdown PDF output. - - Boolean - - Boolean - - - None - - - PdfIncludeLocalImages - - Embed supported local image files in Markdown PDF output. - - Boolean - - Boolean - - - None - - - PdfKeywords - - PDF keywords metadata. - - String - - String - - - None - - - PdfMaximumDataUriImageBytes - - Maximum decoded bytes for one data URI image in Markdown PDF output. - - Int32 - - Int32 - - - None - - - PdfOptions - - Underlying OfficeIMO.Pdf options used by Markdown PDF export. - - PdfOptions - - PdfOptions - - - None - - - PdfPath - - Optional PDF path to create from the same Markdown document. - - String - - String - - - None - - - PdfRestrictLocalImagesToBaseDirectory - - Require local images to resolve under the base directory. - - Boolean - - Boolean - - - None - - - PdfSubject - - PDF subject metadata. - - String - - String - - - None - - - PdfTheme - - Built-in Markdown PDF visual theme. - - OfficeVisualThemeKind - - Plain - WordLike - TechnicalDocument - GitHubLike - Compact - Report - - - OfficeVisualThemeKind - - - None - - - PdfTitle - - PDF title metadata. - - String - - String - - - None - - - PdfUseFirstHeadingAsTitle - - Use the first Markdown heading as the PDF title when no title is supplied. - - Boolean - - Boolean - - - None - - - PdfUseFrontMatterMetadata - - Use front matter values as PDF metadata. - - Boolean - - Boolean - - - None - - - PdfUseFrontMatterVisualTheme - - Use front matter values to select a visual theme. - - Boolean - - Boolean - - - None - - - PdfWarningVariable - - Variable name that receives Markdown PDF export warnings. - - String + String String @@ -146061,18 +161435,6 @@ Use -NoSave or omit -Path when a document object should be returned for further None - - MarkdownPdfOptions - - Advanced Markdown PDF options. Friendly PDF parameters override matching values. - - MarkdownPdfSaveOptions - - MarkdownPdfSaveOptions - - - None - PassThru @@ -146085,301 +161447,12 @@ Use -NoSave or omit -Path when a document object should be returned for further None - + Path Destination Markdown path. - String - - String - - - None - - - PdfApplyWordLikeTheme - - Apply the built-in Word-like Markdown PDF baseline theme. - - Boolean - - Boolean - - - None - - - PdfAuthor - - PDF author metadata. - - String - - String - - - None - - - PdfBaseDirectory - - Base directory used to resolve local Markdown images during PDF export. - - String - - String - - - None - - - PdfConversionReportVariable - - Variable name that receives the Markdown PDF conversion report. - - String - - String - - - None - - - PdfCreateOutlineFromHeadings - - Create PDF outlines from Markdown headings. - - Boolean - - Boolean - - - None - - - PdfDefaultImageHeight - - Fallback PDF image height in points. - - Double - - Double - - - None - - - PdfDefaultImageWidth - - Fallback PDF image width in points. - - Double - - Double - - - None - - - PdfFontFamily - - Default font family used by Markdown PDF export. - - String - - String - - - None - - - PdfFrontMatterRenderMode - - Controls how YAML front matter appears in the PDF body. - - MarkdownPdfFrontMatterRenderMode - - Hidden - DocumentHeader - Table - - - MarkdownPdfFrontMatterRenderMode - - - None - - - PdfIncludeDataUriImages - - Embed supported data URI images in Markdown PDF output. - - Boolean - - Boolean - - - None - - - PdfIncludeLocalImages - - Embed supported local image files in Markdown PDF output. - - Boolean - - Boolean - - - None - - - PdfKeywords - - PDF keywords metadata. - - String - - String - - - None - - - PdfMaximumDataUriImageBytes - - Maximum decoded bytes for one data URI image in Markdown PDF output. - - Int32 - - Int32 - - - None - - - PdfOptions - - Underlying OfficeIMO.Pdf options used by Markdown PDF export. - - PdfOptions - - PdfOptions - - - None - - - PdfPath - - Optional PDF path to create from the same Markdown document. - - String - - String - - - None - - - PdfRestrictLocalImagesToBaseDirectory - - Require local images to resolve under the base directory. - - Boolean - - Boolean - - - None - - - PdfSubject - - PDF subject metadata. - - String - - String - - - None - - - PdfTheme - - Built-in Markdown PDF visual theme. - - OfficeVisualThemeKind - - Plain - WordLike - TechnicalDocument - GitHubLike - Compact - Report - - - OfficeVisualThemeKind - - - None - - - PdfTitle - - PDF title metadata. - - String - - String - - - None - - - PdfUseFirstHeadingAsTitle - - Use the first Markdown heading as the PDF title when no title is supplied. - - Boolean - - Boolean - - - None - - - PdfUseFrontMatterMetadata - - Use front matter values as PDF metadata. - - Boolean - - Boolean - - - None - - - PdfUseFrontMatterVisualTheme - - Use front matter values to select a visual theme. - - Boolean - - Boolean - - - None - - - PdfWarningVariable - - Variable name that receives Markdown PDF export warnings. - - String + String String @@ -146441,11 +161514,6 @@ Use -NoSave or omit -Path when a document object should be returned for further OfficeIMO.Markdown.MarkdownDoc - - - System.IO.FileInfo - - @@ -146454,13 +161522,13 @@ Use -NoSave or omit -Path when a document object should be returned for further - Save Markdown and PDF outputs. + Save a Markdown document. PS> - $doc | Save-OfficeMarkdown -Path .\Report.md -PdfPath .\Report.pdf + $doc | Save-OfficeMarkdown -Path .\Report.md - Writes both artifacts from the same Markdown document model. + Writes the Markdown artifact and keeps the document available for further changes. @@ -146517,6 +161585,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the save result, including preservation diagnostics. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -146568,6 +161648,18 @@ Use -NoSave or omit -Path when a document object should be returned for further None + + PassThru + + Emit the save result, including preservation diagnostics. + + SwitchParameter + + SwitchParameter + + + None + Path @@ -146639,6 +161731,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Open + + Open the PDF after saving. + + SwitchParameter + + SwitchParameter + + + None + OwnerPassword @@ -146654,7 +161758,7 @@ The document is saved through the normal OfficeIMO.Pdf save path. PassThru - Emit the document instead of the saved file. + Emit the document for further processing. SwitchParameter @@ -146699,18 +161803,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Show - - Open the PDF after saving. - - SwitchParameter - - SwitchParameter - - - None - @@ -146726,6 +161818,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Open + + Open the PDF after saving. + + SwitchParameter + + SwitchParameter + + + None + OwnerPassword @@ -146741,7 +161845,7 @@ The document is saved through the normal OfficeIMO.Pdf save path. PassThru - Emit the document instead of the saved file. + Emit the document for further processing. SwitchParameter @@ -146786,18 +161890,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Show - - Open the PDF after saving. - - SwitchParameter - - SwitchParameter - - - None - @@ -146812,11 +161904,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. OfficeIMO.Pdf.PdfDocument - - - System.IO.FileInfo - - @@ -146853,6 +161940,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. Save-OfficePowerPoint + + Open + + Launch the saved file in the default viewer. + + SwitchParameter + + SwitchParameter + + + None + PassThru @@ -146889,18 +161988,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PdfPath - - Optional PDF path to create from the same presentation. - - String - - String - - - None - Presentation @@ -146913,21 +162000,21 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Show - - Launch the saved file in the default viewer. - - SwitchParameter - - SwitchParameter - - - None - + + Open + + Launch the saved file in the default viewer. + + SwitchParameter + + SwitchParameter + + + None + PassThru @@ -146964,18 +162051,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PdfPath - - Optional PDF path to create from the same presentation. - - String - - String - - - None - Presentation @@ -146988,18 +162063,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Show - - Launch the saved file in the default viewer. - - SwitchParameter - - SwitchParameter - - - None - @@ -147026,12 +162089,12 @@ The document is saved through the normal OfficeIMO.Pdf save path. PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointSave.pptx - $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointSave.pptx -NoSave + $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Saved later' - Save-OfficePowerPoint -Presentation $ppt -PdfPath .\Examples\Documents\PowerPointSave.pdf + Save-OfficePowerPoint -Presentation $ppt - Saves the current presentation and exports a PDF sidecar. + Saves the current presentation without closing it. @@ -147064,10 +162127,10 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PassThru + + Open - Emit the document object instead of the saved file. + Open the document after saving. SwitchParameter @@ -147076,26 +162139,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Path + + PassThru - Optional save-as path. + Emit the document object for further processing. - String + SwitchParameter - String + SwitchParameter None - - Show + + Path - Open the document after saving. + Optional save-as path. - SwitchParameter + String - SwitchParameter + String None @@ -147115,10 +162178,10 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PassThru + + Open - Emit the document object instead of the saved file. + Open the document after saving. SwitchParameter @@ -147127,26 +162190,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Path + + PassThru - Optional save-as path. + Emit the document object for further processing. - String + SwitchParameter - String + SwitchParameter None - - Show + + Path - Open the document after saving. + Optional save-as path. - SwitchParameter + String - SwitchParameter + String None @@ -147165,11 +162228,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. OfficeIMO.Visio.VisioDocument - - - System.IO.FileInfo - - @@ -147218,6 +162276,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Open + + Open the document after saving. + + SwitchParameter + + SwitchParameter + + + None + PassThru @@ -147254,54 +162324,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PdfAllowSystemFontEmbedding - - Allow the native Word PDF converter to embed installed system fonts used by the document. - - SwitchParameter - - SwitchParameter - - - None - - - PdfFontFamily - - Optional default font family used by the native Word PDF converter. - - String - - String - - - None - - - PdfPath - - Optional PDF path to create from the same Word document. - - String - - String - - - None - - - Show - - Open the document after saving. - - SwitchParameter - - SwitchParameter - - - None - @@ -147317,10 +162339,10 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PassThru + + Open - Emit the document object for further processing. + Open the document after saving. SwitchParameter @@ -147330,33 +162352,9 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - Password - - Password used to save the document as an encrypted package. - - String - - String - - - None - - - Path - - Optional save-as path. - - String - - String - - - None - - - PdfAllowSystemFontEmbedding + PassThru - Allow the native Word PDF converter to embed installed system fonts used by the document. + Emit the document object for further processing. SwitchParameter @@ -147366,9 +162364,9 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - PdfFontFamily + Password - Optional default font family used by the native Word PDF converter. + Password used to save the document as an encrypted package. String @@ -147377,10 +162375,10 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - PdfPath + + Path - Optional PDF path to create from the same Word document. + Optional save-as path. String @@ -147389,18 +162387,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - Show - - Open the document after saving. - - SwitchParameter - - SwitchParameter - - - None - @@ -148384,26 +163370,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. Set-OfficeExcelActiveSheet - - InputPath + + PassThru - Workbook path to update. + Emit the activated worksheet. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the activated worksheet. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -148498,26 +163484,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath + + PassThru - Workbook path to update. + Emit the activated worksheet. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the activated worksheet. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -149287,6 +164273,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -149446,6 +164444,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Sheet @@ -149605,6 +164615,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -149842,6 +164864,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShowCategoryMajorGridlines @@ -150113,6 +165147,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + ShowCategoryMajorGridlines @@ -150461,6 +165507,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Position @@ -150703,6 +165761,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Position @@ -150943,6 +166013,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Position @@ -151061,6 +166143,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Position @@ -151177,6 +166271,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PointIndex @@ -151264,6 +166370,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PointIndex @@ -151351,6 +166469,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PointIndex @@ -151544,6 +166674,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SeriesIndex @@ -151679,6 +166821,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SeriesName @@ -151814,6 +166968,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + SeriesIndex @@ -151911,6 +167077,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StyleId @@ -151950,6 +167128,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StyleId @@ -152119,6 +167309,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Period @@ -152278,6 +167480,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Period @@ -152437,6 +167651,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Period @@ -152582,6 +167808,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StartRow @@ -152669,6 +167907,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StartRow @@ -152832,6 +168082,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StartColumn @@ -152955,6 +168217,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StartColumn @@ -153219,6 +168493,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Pattern @@ -153467,6 +168753,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Pattern @@ -153739,6 +169037,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Pattern @@ -154088,26 +169398,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath + + PassThru - Workbook path to update. + Returns matching validation rules after updating them. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Returns matching validation rules after updating them. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -154466,26 +169776,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath + + PassThru - Workbook path to update. + Returns matching validation rules after updating them. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Returns matching validation rules after updating them. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -155336,6 +170646,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -155375,6 +170697,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + @@ -155414,6 +170748,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -155481,6 +170827,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + TopRows @@ -155520,6 +170878,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Sheet @@ -155583,6 +170953,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Sheet @@ -160259,26 +175641,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. Set-OfficeExcelPrintArea - - InputPath + + PassThru - Workbook path to update. + Emit the worksheet after setting the print area. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the worksheet after setting the print area. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -160397,26 +175779,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath + + PassThru - Workbook path to update. + Emit the worksheet after setting the print area. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the worksheet after setting the print area. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -160743,18 +176125,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - Margins @@ -160829,6 +176199,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + Preset @@ -161209,18 +176591,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - Margins @@ -161295,6 +176665,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + Preset @@ -161598,18 +176980,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - LastColumn @@ -161646,6 +177016,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -161832,18 +177214,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - LastColumn @@ -161880,6 +177250,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + Sheet @@ -162051,18 +177433,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - NoSavePivotSourceData @@ -162087,6 +177457,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + PivotTables @@ -162237,18 +177619,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - NoSavePivotSourceData @@ -162273,6 +177643,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + PivotTables @@ -162459,26 +177841,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath + + PassThru - Workbook path to update. + Emit written rich text runs. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit written rich text runs. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -162669,26 +178051,26 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath + + PassThru - Workbook path to update. + Emit written rich text runs. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit written rich text runs. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -162906,6 +178288,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -163089,6 +178483,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Row @@ -163264,6 +178670,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StartRow @@ -163363,6 +178781,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + StartRow @@ -164336,18 +179766,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -164372,6 +179790,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + Xml @@ -164498,18 +179928,6 @@ The document is saved through the normal OfficeIMO.Pdf save path. None - - InputPath - - Workbook path to update. - - String - - String - - - None - Name @@ -164534,6 +179952,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + Path + + Workbook path to update. + + String + + String + + + None + Xml @@ -166369,6 +181799,179 @@ The document is saved through the normal OfficeIMO.Pdf save path. + + + Set-OfficeOpenDocumentCell + Set + OfficeOpenDocumentCell + + Sets a typed zero-based cell value in an OpenDocument spreadsheet. + + + + Sets a typed zero-based cell value in an OpenDocument spreadsheet. + + + + Set-OfficeOpenDocumentCell + + Column + + Zero-based column index. + + Int64 + + Int64 + + + None + + + PassThru + + Emit the updated cell. + + SwitchParameter + + SwitchParameter + + + None + + + Row + + Zero-based row index. + + Int64 + + Int64 + + + None + + + Sheet + + Worksheet target. Omit inside Add-OfficeOpenDocumentSheet -Content. + + OdsSheet + + OdsSheet + + + None + + + Value + + String, number, decimal, boolean, date, date-time offset, or time span value. + + Object + + Object + + + None + + + + + + Column + + Zero-based column index. + + Int64 + + Int64 + + + None + + + PassThru + + Emit the updated cell. + + SwitchParameter + + SwitchParameter + + + None + + + Row + + Zero-based row index. + + Int64 + + Int64 + + + None + + + Sheet + + Worksheet target. Omit inside Add-OfficeOpenDocumentSheet -Content. + + OdsSheet + + OdsSheet + + + None + + + Value + + String, number, decimal, boolean, date, date-time offset, or time span value. + + Object + + Object + + + None + + + + + + OfficeIMO.OpenDocument.OdsSheet + + + + + + + OfficeIMO.OpenDocument.OdsCell + + + + + + + + + + + Set typed values inside the active worksheet. + + PS> + + Set-OfficeOpenDocumentCell -Row 0 -Column 0 -Value 'Healthy' + Set-OfficeOpenDocumentCell -Row 0 -Column 1 -Value $true + + + + + + + Set-OfficePdfAnnotation @@ -166468,6 +182071,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PassThruReport @@ -166615,6 +182230,18 @@ The document is saved through the normal OfficeIMO.Pdf save path. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PassThruReport @@ -168279,6 +183906,18 @@ default, first-page, and even-page text, zones, images, shapes, rich text, and p None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -168402,6 +184041,18 @@ default, first-page, and even-page text, zones, images, shapes, rich text, and p None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -169363,6 +185014,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -169588,6 +185251,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Password @@ -170570,6 +186245,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PassThruReport @@ -170645,6 +186332,18 @@ With -Path and -OutputPath, it rewrites an existing PDF with updated metadata un None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + PassThruReport @@ -170934,6 +186633,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -170961,6 +186672,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -170988,6 +186711,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -171039,6 +186774,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -172265,6 +188012,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in Set-OfficePowerPointNotes + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -172292,6 +188051,18 @@ Apply a theme near the start of a New-OfficePdf script block so later content in + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -172343,7 +188114,7 @@ Apply a theme near the start of a New-OfficePdf script block so later content in PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointNotes.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Executive summary' Set-OfficePowerPointNotes -Slide $slide -Text 'Keep this slide under five minutes and focus on decisions.' } @@ -172543,7 +188314,7 @@ Apply a theme near the start of a New-OfficePdf script block so later content in PS> New-OfficePowerPoint -Path .\Examples\Documents\PowerPointPlaceholderText.pptx { - $slide = Add-OfficePowerPointSlide -Layout 1 + $slide = Add-OfficePowerPointSlide -Layout 1 -PassThru Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Agenda' Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Body -Text 'Review signals and decisions' -IgnoreMissing } @@ -173444,6 +189215,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -173495,6 +189278,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -173572,6 +189367,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -173685,6 +189492,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -173746,6 +189565,18 @@ contents, then save or close the presentation. Set-OfficePowerPointSlideSize + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Portrait @@ -173802,6 +189633,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -173841,6 +189684,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -173880,6 +189735,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -173919,6 +189786,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -173994,6 +189873,18 @@ contents, then save or close the presentation. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Portrait @@ -174111,7 +190002,7 @@ contents, then save or close the presentation. New-OfficePowerPoint -Path .\Examples\Documents\PowerPointWidescreen.pptx { Set-OfficePowerPointSlideSize -Preset Screen16x9 - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Widescreen deck' } Applies the 16:9 widescreen preset before adding slides. @@ -174122,9 +190013,10 @@ contents, then save or close the presentation. PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointCustomSize.pptx + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointCustomSize.pptx -NoSave Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 25.4 -HeightCm 14.0 - Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Custom size' + Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Custom size' + $ppt | Close-OfficePowerPoint -Save Sets the presentation slide size to a custom 25.4 x 14.0 cm layout. @@ -174147,6 +190039,18 @@ contents, then save or close the presentation. Set-OfficePowerPointSlideTitle + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -174174,6 +190078,18 @@ contents, then save or close the presentation. + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -174241,6 +190157,18 @@ contents, then save or close the presentation. Set-OfficePowerPointSlideTransition + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -174336,6 +190264,18 @@ contents, then save or close the presentation. + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -175343,7 +191283,7 @@ cell inside a deck that already exists. New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeFonts.pptx { Set-OfficePowerPointThemeFonts -MajorLatin 'Aptos Display' -MinorLatin 'Aptos' -AllMasters - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Theme fonts' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Theme fonts' } Updates theme fonts before creating slides. @@ -175494,7 +191434,7 @@ cell inside a deck that already exists. New-OfficePowerPoint -Path .\Examples\Documents\PowerPointThemeName.pptx { Set-OfficePowerPointThemeName -Name 'Service Brief' -AllMasters - Add-OfficePowerPointSlide -Layout 1 | Set-OfficePowerPointSlideTitle -Title 'Named theme' + Add-OfficePowerPointSlide -Layout 1 -PassThru | Set-OfficePowerPointSlideTitle -Title 'Named theme' } Applies a friendly theme name across every master before saving. @@ -180403,8 +196343,8 @@ cell inside a deck that already exists. Test-OfficeExcelAccessibility - - InputPath + + Path Workbook path. @@ -180469,8 +196409,8 @@ cell inside a deck that already exists. None - - InputPath + + Path Workbook path. @@ -180569,8 +196509,8 @@ cell inside a deck that already exists. None - - InputPath + + Path Workbook path. @@ -180707,8 +196647,8 @@ cell inside a deck that already exists. None - - InputPath + + Path Workbook path. @@ -180808,8 +196748,8 @@ cell inside a deck that already exists. Test-OfficeExcelWorkbook - - InputPath + + Path Workbook path. @@ -180922,8 +196862,8 @@ cell inside a deck that already exists. None - - InputPath + + Path Workbook path. @@ -181437,26 +197377,26 @@ cell inside a deck that already exists. Unprotect-OfficeExcelWorkbook - - InputPath + + PassThru - Workbook path to update. + Emit the workbook after removing protection. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the workbook after removing protection. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -181503,26 +197443,26 @@ cell inside a deck that already exists. None - - InputPath + + PassThru - Workbook path to update. + Emit the workbook after removing protection. - String + SwitchParameter - String + SwitchParameter None - - PassThru + + Path - Emit the workbook after removing protection. + Workbook path to update. - SwitchParameter + String - SwitchParameter + String None @@ -181778,18 +197718,6 @@ cell inside a deck that already exists. None - - InputPath - - Workbook path to update. - - String - - String - - - None - MatchAuthor @@ -181814,6 +197742,18 @@ cell inside a deck that already exists. None + + Path + + Workbook path to update. + + String + + String + + + None + Range @@ -182108,18 +198048,6 @@ cell inside a deck that already exists. None - - InputPath - - Workbook path to update. - - String - - String - - - None - MatchAuthor @@ -182144,6 +198072,18 @@ cell inside a deck that already exists. None + + Path + + Workbook path to update. + + String + + String + + + None + Range @@ -182279,10 +198219,10 @@ cell inside a deck that already exists. None - - InputPath + + NewValue - Workbook path to update. + Replacement text. String @@ -182292,9 +198232,9 @@ cell inside a deck that already exists. None - NewValue + OldValue - Replacement text. + Text or pattern to replace. String @@ -182303,10 +198243,34 @@ cell inside a deck that already exists. None - - OldValue + + Open - Text or pattern to replace. + Open the file after saving when using -Path. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Workbook path to update. String @@ -182363,18 +198327,6 @@ cell inside a deck that already exists. None - - Show - - Open the file after saving when using -Path. - - SwitchParameter - - SwitchParameter - - - None - Update-OfficeExcelText @@ -182426,6 +198378,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Range @@ -182501,10 +198465,10 @@ cell inside a deck that already exists. None - - InputPath + + NewValue - Workbook path to update. + Replacement text. String @@ -182514,9 +198478,9 @@ cell inside a deck that already exists. None - NewValue + OldValue - Replacement text. + Text or pattern to replace. String @@ -182525,10 +198489,34 @@ cell inside a deck that already exists. None - - OldValue + + Open - Text or pattern to replace. + Open the file after saving when using -Path. + + SwitchParameter + + SwitchParameter + + + None + + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + + + Path + + Workbook path to update. String @@ -182585,18 +198573,6 @@ cell inside a deck that already exists. None - - Show - - Open the file after saving when using -Path. - - SwitchParameter - - SwitchParameter - - - None - @@ -182623,7 +198599,7 @@ cell inside a deck that already exists. PS> - $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready + $count = Update-OfficeExcelText -Path .\Report.xlsx -Sheet Summary -OldValue Draft -NewValue Ready -PassThru [pscustomobject]@{ Path = '.\Report.xlsx' Replacements = $count @@ -182698,6 +198674,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Update-OfficePowerPointText @@ -182749,6 +198737,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -182812,6 +198812,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Slide @@ -182875,6 +198887,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Presentation @@ -182930,11 +198954,12 @@ cell inside a deck that already exists. PS> - $ppt = New-OfficePowerPoint -FilePath .\Examples\Documents\PowerPointUpdateText.pptx - $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 - Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary' | Out-Null - Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.' | Out-Null - Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes + $ppt = New-OfficePowerPoint -Path .\Examples\Documents\PowerPointUpdateText.pptx -NoSave + $slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru + Add-OfficePowerPointTextBox -Slide $slide -Text 'FY24 summary' + Set-OfficePowerPointNotes -Slide $slide -Text 'Mention FY24 assumptions.' + $count = Update-OfficePowerPointText -Presentation $ppt -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes -PassThru + $ppt | Close-OfficePowerPoint -Save Replaces matching text throughout the presentation and notes, returning the replacement count. @@ -183629,6 +199654,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Update-OfficeWordText @@ -183728,6 +199765,18 @@ cell inside a deck that already exists. None + + PassThru + + Emit the object created or changed by the command. + + SwitchParameter + + SwitchParameter + + + None + Update-OfficeWordText @@ -183791,10 +199840,10 @@ cell inside a deck that already exists. None - - InputPath + + NewValue - Path to the .docx file to update in place. + Replacement text. String @@ -183804,9 +199853,9 @@ cell inside a deck that already exists. None - NewValue + OldValue - Replacement text. + Text to find. String @@ -183815,22 +199864,22 @@ cell inside a deck that already exists. None - - OldValue + + Open - Text to find. + Open the file after saving when using -Path. - String + SwitchParameter - String + SwitchParameter None - Show + PassThru - Open the file after saving when using -Path. + Emit the object created or changed by the command. SwitchParameter @@ -183839,6 +199888,18 @@ cell inside a deck that already exists. None + + Path + + Path to the .docx file to update in place. + + String + + String + + + None + @@ -183914,10 +199975,10 @@ cell inside a deck that already exists. None - - InputPath + + NewValue - Path to the .docx file to update in place. + Replacement text. String @@ -183927,9 +199988,9 @@ cell inside a deck that already exists. None - NewValue + OldValue - Replacement text. + Text to find. String @@ -183938,22 +199999,22 @@ cell inside a deck that already exists. None - - OldValue + + Open - Text to find. + Open the file after saving when using -Path. - String + SwitchParameter - String + SwitchParameter None - Show + PassThru - Open the file after saving when using -Path. + Emit the object created or changed by the command. SwitchParameter @@ -183962,6 +200023,18 @@ cell inside a deck that already exists. None + + Path + + Path to the .docx file to update in place. + + String + + String + + + None + @@ -183988,7 +200061,7 @@ cell inside a deck that already exists. PS> - $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' + $count = $doc | Update-OfficeWordText -OldValue 'FY24' -NewValue 'FY25' -PassThru Updates matching text in the loaded document and returns the number of replacements. diff --git a/WebsiteArtifacts/apidocs/powershell/PSWriteOffice.psd1 b/WebsiteArtifacts/apidocs/powershell/PSWriteOffice.psd1 index 02aba850..3f34f5b5 100644 --- a/WebsiteArtifacts/apidocs/powershell/PSWriteOffice.psd1 +++ b/WebsiteArtifacts/apidocs/powershell/PSWriteOffice.psd1 @@ -1,7 +1,7 @@ @{ AliasesToExport = @('Compare-OfficeExcelSheet', 'ConvertFrom-MarkdownHtml', 'ConvertFrom-PdfHtml', 'ConvertFrom-Rtf', 'ConvertFrom-WordHtml', 'ConvertFrom-WordMarkdown', 'ConvertTo-ExcelHtml', 'ConvertTo-MarkdownHtml', 'ConvertTo-PdfExcel', 'ConvertTo-PdfHtml', 'ConvertTo-PdfPowerPoint', 'ConvertTo-PdfWord', 'ConvertTo-PowerPointHtml', 'ConvertTo-Rtf', 'ConvertTo-VisioPng', 'ConvertTo-VisioSvg', 'ConvertTo-WordHtml', 'ConvertTo-WordMarkdown', 'Edit-ExcelRow', 'ExcelAccessibility', 'ExcelActiveSheet', 'ExcelAutoFilter', 'ExcelAutoFilterClear', 'ExcelAutoFilterSet', 'ExcelAutoFit', 'ExcelCell', 'ExcelChart', 'ExcelChartAxis', 'ExcelChartPoint', 'ExcelChartSeries', 'ExcelChartTrendline', 'ExcelColumn', 'ExcelColumnGroup', 'ExcelColumnStyle', 'ExcelColumnStyleByHeader', 'ExcelComment', 'ExcelCommentAudit', 'ExcelCommentClear', 'ExcelCommentRemove', 'ExcelComments', 'ExcelCommentsAudit', 'ExcelCommentUpdate', 'ExcelCompare', 'ExcelConditionalColorScale', 'ExcelConditionalDataBar', 'ExcelConditionalFormatting', 'ExcelConditionalFormattingClear', 'ExcelConditionalIconSet', 'ExcelConditionalRule', 'ExcelConnectionMetadata', 'ExcelCsvImport', 'ExcelDashboard', 'ExcelDashboardChart', 'ExcelDataModel', 'ExcelDataSet', 'ExcelDataValidation', 'ExcelDataValidationClear', 'ExcelDataValidationMessage', 'ExcelDateSystem', 'ExcelDelimitedImport', 'ExcelDoctor', 'ExcelExecutionPolicy', 'ExcelExport', 'ExcelFormula', 'ExcelFormulaAnalysis', 'ExcelFormulaAudit', 'ExcelFreeze', 'ExcelGridlines', 'ExcelHeaderFooter', 'ExcelHyperlink', 'ExcelHyperlinkHost', 'ExcelHyperlinkSmart', 'ExcelImage', 'ExcelImageFromUrl', 'ExcelImport', 'ExcelInternalLinks', 'ExcelInternalLinksByHeader', 'ExcelMargins', 'ExcelNamedRange', 'ExcelNamedRangeRemove', 'ExcelNamedRangeRename', 'ExcelNew', 'ExcelNumberFormatPreset', 'ExcelOrientation', 'ExcelPackageCopy', 'ExcelPackageMetadata', 'ExcelPageBreak', 'ExcelPageBreakClear', 'ExcelPageBreaks', 'ExcelPageSetup', 'ExcelPivotTable', 'ExcelPivotTables', 'ExcelPowerQuery', 'ExcelPowerQueryMetadata', 'ExcelPreflight', 'ExcelPrintArea', 'ExcelPrintLayout', 'ExcelPrintTitles', 'ExcelProtect', 'ExcelQueryMetadata', 'ExcelRangeClear', 'ExcelRefreshOnOpen', 'ExcelRepair', 'ExcelReportCallout', 'ExcelReportKpiRow', 'ExcelReportLegend', 'ExcelReportParagraph', 'ExcelReportSection', 'ExcelReportSheet', 'ExcelReportSpacer', 'ExcelReportTable', 'ExcelReportTitle', 'ExcelRichText', 'ExcelRichTextRuns', 'ExcelRow', 'ExcelRowEdit', 'ExcelRowGroup', 'ExcelRuntimePreflight', 'ExcelSheet', 'ExcelSheetCopy', 'ExcelSheetJoin', 'ExcelSheetMerge', 'ExcelSheetOrder', 'ExcelSheetTabColor', 'ExcelSheetView', 'ExcelSheetVisibility', 'ExcelSlicer', 'ExcelSort', 'ExcelSparkline', 'ExcelStreamingContract', 'ExcelSubtotals', 'ExcelSubtotalSummary', 'ExcelSummary', 'ExcelTable', 'ExcelTableOfContents', 'ExcelTableStyle', 'ExcelTemplate', 'ExcelTemplateApply', 'ExcelTemplateBinding', 'ExcelTemplateMarkers', 'ExcelTemplateOptionalRow', 'ExcelTemplateOptionalRows', 'ExcelTemplateRow', 'ExcelTemplateRows', 'ExcelTemplateSheet', 'ExcelTemplateSheets', 'ExcelTemplateValidate', 'ExcelTextRun', 'ExcelTheme', 'ExcelThreadedComment', 'ExcelTimeline', 'ExcelUnprotect', 'ExcelUrlLinks', 'ExcelUrlLinksByHeader', 'ExcelValidationCustomFormula', 'ExcelValidationDate', 'ExcelValidationDecimal', 'ExcelValidationList', 'ExcelValidationTextLength', 'ExcelValidationTime', 'ExcelValidationWholeNumber', 'ExcelVisual', 'ExcelWorkbookCompare', 'ExcelWorkbookCopy', 'ExcelWorkbookDoctor', 'ExcelWorkbookJoin', 'ExcelWorkbookMerge', 'ExcelWorkbookProtect', 'ExcelWorkbookRepair', 'ExcelWorkbookUnprotect', 'ExcelWorksheetView', 'ExcelWriteReservation', 'ExcelWriteReservationClear', 'ExcelWriteReservationSet', 'Export-OfficeDocumentAsset', 'Export-VisioStencilPreviewGallery', 'Find-VisioStencil', 'Get-OfficeReaderCapability', 'Import-VisioStencil', 'MarkdownCallout', 'MarkdownCode', 'MarkdownDefinitionList', 'MarkdownDetails', 'MarkdownFrontMatter', 'MarkdownHeading', 'MarkdownHorizontalRule', 'MarkdownHr', 'MarkdownImage', 'MarkdownList', 'MarkdownNew', 'MarkdownParagraph', 'MarkdownQuote', 'MarkdownTable', 'MarkdownTableOfContents', 'MarkdownTaskList', 'MarkdownToc', 'Merge-OfficeExcelSheet', 'Merge-OfficeExcelWorkbook', 'Merge-OfficeWordDocument', 'New-VisioGallery', 'OfficeVisual', 'PdfAttachment', 'PdfBackground', 'PdfBackgroundImage', 'PdfBackgroundShape', 'PdfBookmark', 'PdfCanvasStamp', 'PdfCanvasText', 'PdfCompliance', 'PdfElectronicInvoice', 'PdfFooter', 'PdfFormField', 'PdfHeader', 'PdfHeading', 'PdfHorizontalRule', 'PdfHr', 'PdfImage', 'PdfList', 'PdfMetadata', 'PdfNativeTextRun', 'PdfNew', 'PdfPageBorder', 'PdfPageBreak', 'PdfPageOverlay', 'PdfPageSetup', 'PdfPanel', 'PdfParagraph', 'PdfRow', 'PdfSpace', 'PdfSpacer', 'PdfStamp', 'PdfTable', 'PdfTableCell', 'PdfTableCellCheckBox', 'PdfTableCellField', 'PdfTableCellImage', 'PdfText', 'PdfTextRun', 'PdfTheme', 'PdfVisual', 'PdfWatermark', 'PowerPointNew', 'PowerPointTextRun', 'PptArrange', 'PptBackground', 'PptBullets', 'PptChart', 'PptDeckPlan', 'PptDesignerDeck', 'PptImage', 'PptLayoutBox', 'PptLayoutPlaceholderBounds', 'PptLayoutPlaceholderMargins', 'PptLayoutPlaceholders', 'PptLayoutPlaceholderTextStyle', 'PptNew', 'PptNotes', 'PptPlaceholderText', 'PptPlanCapability', 'PptPlanCardGrid', 'PptPlanCaseStudy', 'PptPlanCoverage', 'PptPlanLogoWall', 'PptPlanProcess', 'PptPlanSection', 'PptSection', 'PptShape', 'PptShapeLayout', 'PptSlide', 'PptSlideLayout', 'PptSlideSize', 'PptTable', 'PptTextBox', 'PptTextRun', 'PptTheme', 'PptThemeColor', 'PptThemeFonts', 'PptThemeName', 'PptTitle', 'PptTransition', 'PptVisual', 'Read-OfficeDocument', 'Read-OfficeDocumentAsset', 'Read-OfficeDocumentChunk', 'Read-OfficeDocumentTable', 'Read-OfficeDocumentVisual', 'Replace-OfficeExcelText', 'Replace-OfficePowerPointText', 'Replace-OfficeRtfText', 'Replace-OfficeWordText', 'RtfNew', 'RtfOpen', 'RtfText', 'Set-OfficeExcelSheetOrder', 'TextRun', 'VisioArrange', 'VisioConnector', 'VisioContainer', 'VisioDiamond', 'VisioEllipse', 'VisioInfo', 'VisioLayout', 'VisioNew', 'VisioOpen', 'VisioPage', 'VisioRect', 'VisioRectangle', 'VisioSave', 'VisioStencil', 'VisioStencilCatalog', 'VisioText', 'VisioTextBox', 'WordBold', 'WordBookmark', 'WordBreak', 'WordChart', 'WordCheckBox', 'WordCheckBoxes', 'WordComboBox', 'WordComboBoxes', 'WordContentControl', 'WordContentControls', 'WordCoverPage', 'WordDatePicker', 'WordDatePickers', 'WordDocumentJoin', 'WordDropDownList', 'WordDropDownLists', 'WordEndnote', 'WordEndnotes', 'WordEquation', 'WordField', 'WordFooter', 'WordFootnote', 'WordFootnotes', 'WordHeader', 'WordHyperlink', 'WordImage', 'WordImages', 'WordImageStyle', 'WordItalic', 'WordList', 'WordListItem', 'WordNew', 'WordPageNumber', 'WordPageSetup', 'WordParagraph', 'WordParagraphStyle', 'WordPictureControl', 'WordPictureControls', 'WordRepeatingSection', 'WordRepeatingSections', 'WordSection', 'WordShape', 'WordShapes', 'WordShapeStyle', 'WordStatistics', 'WordTable', 'WordTableCell', 'WordTableCells', 'WordTableCellSpec', 'WordTableCellStyle', 'WordTableCondition', 'WordTableOfContents', 'WordTabStop', 'WordText', 'WordTextBox', 'WordTextRun', 'WordTextStyle', 'WordVisual', 'WordWatermark') Author = 'Przemyslaw Klys' - CmdletsToExport = @('Add-OfficeExcelAutoFilter', 'Add-OfficeExcelChart', 'Add-OfficeExcelComment', 'Add-OfficeExcelConditionalColorScale', 'Add-OfficeExcelConditionalDataBar', 'Add-OfficeExcelConditionalIconSet', 'Add-OfficeExcelConditionalRule', 'Add-OfficeExcelDashboardChart', 'Add-OfficeExcelDataSet', 'Add-OfficeExcelImage', 'Add-OfficeExcelImageFromUrl', 'Add-OfficeExcelPackageMetadata', 'Add-OfficeExcelPageBreak', 'Add-OfficeExcelPivotTable', 'Add-OfficeExcelPowerQueryMetadata', 'Add-OfficeExcelReportCallout', 'Add-OfficeExcelReportKpiRow', 'Add-OfficeExcelReportLegend', 'Add-OfficeExcelReportParagraph', 'Add-OfficeExcelReportSection', 'Add-OfficeExcelReportSheet', 'Add-OfficeExcelReportSpacer', 'Add-OfficeExcelReportTable', 'Add-OfficeExcelReportTitle', 'Add-OfficeExcelSheet', 'Add-OfficeExcelSlicer', 'Add-OfficeExcelSparkline', 'Add-OfficeExcelSubtotalSummary', 'Add-OfficeExcelTable', 'Add-OfficeExcelTableOfContents', 'Add-OfficeExcelTableRow', 'Add-OfficeExcelThreadedComment', 'Add-OfficeExcelTimeline', 'Add-OfficeExcelValidationCustomFormula', 'Add-OfficeExcelValidationDate', 'Add-OfficeExcelValidationDecimal', 'Add-OfficeExcelValidationList', 'Add-OfficeExcelValidationTextLength', 'Add-OfficeExcelValidationTime', 'Add-OfficeExcelValidationWholeNumber', 'Add-OfficeExcelVisual', 'Add-OfficeMarkdownCallout', 'Add-OfficeMarkdownCode', 'Add-OfficeMarkdownDefinitionList', 'Add-OfficeMarkdownDetails', 'Add-OfficeMarkdownFrontMatter', 'Add-OfficeMarkdownHeading', 'Add-OfficeMarkdownHorizontalRule', 'Add-OfficeMarkdownImage', 'Add-OfficeMarkdownList', 'Add-OfficeMarkdownParagraph', 'Add-OfficeMarkdownQuote', 'Add-OfficeMarkdownTable', 'Add-OfficeMarkdownTableOfContents', 'Add-OfficeMarkdownTaskList', 'Add-OfficePdfAttachment', 'Add-OfficePdfBackgroundShape', 'Add-OfficePdfBookmark', 'Add-OfficePdfCanvas', 'Add-OfficePdfCanvasText', 'Add-OfficePdfFormField', 'Add-OfficePdfHeading', 'Add-OfficePdfHorizontalRule', 'Add-OfficePdfImage', 'Add-OfficePdfList', 'Add-OfficePdfPageBreak', 'Add-OfficePdfPageOverlay', 'Add-OfficePdfPanel', 'Add-OfficePdfParagraph', 'Add-OfficePdfRow', 'Add-OfficePdfSpacer', 'Add-OfficePdfStamp', 'Add-OfficePdfTable', 'Add-OfficePdfText', 'Add-OfficePdfVisual', 'Add-OfficePdfWatermark', 'Add-OfficePowerPointBullets', 'Add-OfficePowerPointChart', 'Add-OfficePowerPointDesignerDeck', 'Add-OfficePowerPointImage', 'Add-OfficePowerPointPlanCapability', 'Add-OfficePowerPointPlanCardGrid', 'Add-OfficePowerPointPlanCaseStudy', 'Add-OfficePowerPointPlanCoverage', 'Add-OfficePowerPointPlanLogoWall', 'Add-OfficePowerPointPlanProcess', 'Add-OfficePowerPointPlanSection', 'Add-OfficePowerPointSection', 'Add-OfficePowerPointShape', 'Add-OfficePowerPointSlide', 'Add-OfficePowerPointTable', 'Add-OfficePowerPointTableRow', 'Add-OfficePowerPointTextBox', 'Add-OfficePowerPointVisual', 'Add-OfficeVisioConnector', 'Add-OfficeVisioContainer', 'Add-OfficeVisioDiamond', 'Add-OfficeVisioEllipse', 'Add-OfficeVisioPage', 'Add-OfficeVisioRectangle', 'Add-OfficeVisioStencilShape', 'Add-OfficeVisioTextBox', 'Add-OfficeWordBookmark', 'Add-OfficeWordBreak', 'Add-OfficeWordChart', 'Add-OfficeWordCheckBox', 'Add-OfficeWordComboBox', 'Add-OfficeWordContentControl', 'Add-OfficeWordCoverPage', 'Add-OfficeWordDatePicker', 'Add-OfficeWordDropDownList', 'Add-OfficeWordEndnote', 'Add-OfficeWordEquation', 'Add-OfficeWordField', 'Add-OfficeWordFooter', 'Add-OfficeWordFootnote', 'Add-OfficeWordHeader', 'Add-OfficeWordHyperlink', 'Add-OfficeWordImage', 'Add-OfficeWordList', 'Add-OfficeWordListItem', 'Add-OfficeWordPageNumber', 'Add-OfficeWordParagraph', 'Add-OfficeWordPictureControl', 'Add-OfficeWordRepeatingSection', 'Add-OfficeWordSection', 'Add-OfficeWordShape', 'Add-OfficeWordTable', 'Add-OfficeWordTableCell', 'Add-OfficeWordTableCondition', 'Add-OfficeWordTableOfContents', 'Add-OfficeWordTableRow', 'Add-OfficeWordTabStop', 'Add-OfficeWordText', 'Add-OfficeWordTextBox', 'Add-OfficeWordVisual', 'Add-OfficeWordWatermark', 'Clear-OfficeExcelAutoFilter', 'Clear-OfficeExcelComment', 'Clear-OfficeExcelConditionalFormatting', 'Clear-OfficeExcelDataValidation', 'Clear-OfficeExcelPageBreak', 'Clear-OfficeExcelRange', 'Clear-OfficeExcelWriteReservation', 'Clear-OfficePdfBackgroundShape', 'Close-OfficeExcel', 'Close-OfficePowerPoint', 'Close-OfficeWord', 'Compare-OfficeExcelRange', 'Compare-OfficeExcelWorkbook', 'Compare-OfficePdfVisual', 'Compare-OfficeWordDocument', 'ConvertFrom-OfficeAsciiDocMarkdown', 'ConvertFrom-OfficeCsv', 'ConvertFrom-OfficeLatexMarkdown', 'ConvertFrom-OfficeMarkdownHtml', 'ConvertFrom-OfficeOpenDocument', 'ConvertFrom-OfficePdfHtml', 'ConvertFrom-OfficeRtf', 'ConvertFrom-OfficeWordHtml', 'ConvertFrom-OfficeWordMarkdown', 'ConvertTo-OfficeAsciiDocMarkdown', 'ConvertTo-OfficeCsv', 'ConvertTo-OfficeExcelHtml', 'ConvertTo-OfficeExcelWorkbook', 'ConvertTo-OfficeLatexMarkdown', 'ConvertTo-OfficeMarkdown', 'ConvertTo-OfficeMarkdownHtml', 'ConvertTo-OfficeOpenDocument', 'ConvertTo-OfficePdfExcel', 'ConvertTo-OfficePdfFlatAnnotation', 'ConvertTo-OfficePdfFlatForm', 'ConvertTo-OfficePdfHtml', 'ConvertTo-OfficePdfMarkdown', 'ConvertTo-OfficePdfOptimized', 'ConvertTo-OfficePdfPowerPoint', 'ConvertTo-OfficePdfRedacted', 'ConvertTo-OfficePdfSanitized', 'ConvertTo-OfficePdfTextRun', 'ConvertTo-OfficePdfWord', 'ConvertTo-OfficePowerPointHtml', 'ConvertTo-OfficeRtf', 'ConvertTo-OfficeVisioPng', 'ConvertTo-OfficeVisioSvg', 'ConvertTo-OfficeVisioVisual', 'ConvertTo-OfficeVisual', 'ConvertTo-OfficeWordDocument', 'ConvertTo-OfficeWordHtml', 'ConvertTo-OfficeWordMarkdown', 'Copy-OfficeExcelSheet', 'Copy-OfficeExcelWorkbook', 'Copy-OfficePdfPage', 'Copy-OfficePowerPointSlide', 'Edit-OfficeExcelRow', 'Export-OfficeCsv', 'Export-OfficeExcel', 'Export-OfficeExcelChartImage', 'Export-OfficeExcelGoogleSpreadsheet', 'Export-OfficeExcelImage', 'Export-OfficeExcelRangeImage', 'Export-OfficeHtmlImage', 'Export-OfficePdfImage', 'Export-OfficePdfLayoutOverlay', 'Export-OfficePdfXfdf', 'Export-OfficePowerPointImage', 'Export-OfficeVisioImage', 'Export-OfficeVisioStencilPreviewGallery', 'Export-OfficeVisioVisual', 'Export-OfficeWordGoogleDocument', 'Export-OfficeWordImage', 'Find-OfficeExcel', 'Find-OfficePowerPointShape', 'Find-OfficeVisioStencil', 'Find-OfficeWord', 'Find-OfficeWordList', 'Find-OfficeWordTable', 'Get-OfficeAsciiDoc', 'Get-OfficeConfluenceAttachment', 'Get-OfficeConfluencePage', 'Get-OfficeCsv', 'Get-OfficeDocument', 'Get-OfficeDocumentAsset', 'Get-OfficeDocumentBatch', 'Get-OfficeDocumentCapability', 'Get-OfficeDocumentChunk', 'Get-OfficeDocumentDetection', 'Get-OfficeDocumentHierarchy', 'Get-OfficeDocumentIngest', 'Get-OfficeDocumentPageMarkdown', 'Get-OfficeDocumentStructured', 'Get-OfficeDocumentTable', 'Get-OfficeDocumentVisual', 'Get-OfficeEmail', 'Get-OfficeEmailMailbox', 'Get-OfficeExcel', 'Get-OfficeExcelComment', 'Get-OfficeExcelCommentAudit', 'Get-OfficeExcelConditionalFormatting', 'Get-OfficeExcelData', 'Get-OfficeExcelDataModel', 'Get-OfficeExcelDataValidation', 'Get-OfficeExcelDocumentProperty', 'Get-OfficeExcelFormulaAnalysis', 'Get-OfficeExcelNamedRange', 'Get-OfficeExcelNumberFormatPreset', 'Get-OfficeExcelPageBreak', 'Get-OfficeExcelPivotTable', 'Get-OfficeExcelPreflight', 'Get-OfficeExcelRange', 'Get-OfficeExcelRichText', 'Get-OfficeExcelRuntimePreflight', 'Get-OfficeExcelStreamingContract', 'Get-OfficeExcelSummary', 'Get-OfficeExcelTable', 'Get-OfficeExcelTableStyle', 'Get-OfficeExcelTemplateMarker', 'Get-OfficeExcelUsedRange', 'Get-OfficeExcelWorksheetView', 'Get-OfficeExcelWriteReservation', 'Get-OfficeLatex', 'Get-OfficeMarkdown', 'Get-OfficeMarkdownFrontMatter', 'Get-OfficeMarkdownHeading', 'Get-OfficeMarkdownNode', 'Get-OfficeMarkdownTable', 'Get-OfficeOpenDocument', 'Get-OfficePdf', 'Get-OfficePdfAnnotation', 'Get-OfficePdfAppendOnlyMutation', 'Get-OfficePdfAttachment', 'Get-OfficePdfCompliance', 'Get-OfficePdfDiagnostic', 'Get-OfficePdfFont', 'Get-OfficePdfFormField', 'Get-OfficePdfImage', 'Get-OfficePdfInfo', 'Get-OfficePdfInteractionMap', 'Get-OfficePdfOptimization', 'Get-OfficePdfPreflight', 'Get-OfficePdfRedactionPlan', 'Get-OfficePdfSignature', 'Get-OfficePdfText', 'Get-OfficePdfTextDiagnostic', 'Get-OfficePowerPoint', 'Get-OfficePowerPointInspection', 'Get-OfficePowerPointLayout', 'Get-OfficePowerPointLayoutBox', 'Get-OfficePowerPointLayoutPlaceholder', 'Get-OfficePowerPointNotes', 'Get-OfficePowerPointPlaceholder', 'Get-OfficePowerPointSection', 'Get-OfficePowerPointShape', 'Get-OfficePowerPointSlide', 'Get-OfficePowerPointSlideSummary', 'Get-OfficePowerPointTheme', 'Get-OfficeProtectionCapability', 'Get-OfficeRtf', 'Get-OfficeVisio', 'Get-OfficeVisioInfo', 'Get-OfficeVisioStencilCatalog', 'Get-OfficeWord', 'Get-OfficeWordBookmark', 'Get-OfficeWordCheckBox', 'Get-OfficeWordComboBox', 'Get-OfficeWordContentControl', 'Get-OfficeWordDatePicker', 'Get-OfficeWordDocumentProperty', 'Get-OfficeWordDropDownList', 'Get-OfficeWordEndnote', 'Get-OfficeWordField', 'Get-OfficeWordFootnote', 'Get-OfficeWordHyperlink', 'Get-OfficeWordImage', 'Get-OfficeWordList', 'Get-OfficeWordParagraph', 'Get-OfficeWordPictureControl', 'Get-OfficeWordRepeatingSection', 'Get-OfficeWordReview', 'Get-OfficeWordSection', 'Get-OfficeWordShape', 'Get-OfficeWordStatistics', 'Get-OfficeWordTable', 'Get-OfficeWordTableCell', 'Get-OfficeWordTableOfContents', 'Get-OfficeWordText', 'Import-OfficeCsv', 'Import-OfficeExcel', 'Import-OfficeExcelDelimitedText', 'Import-OfficePdfXfdf', 'Import-OfficePowerPointSlide', 'Import-OfficeVisioStencil', 'Invoke-OfficeExcelAutoFit', 'Invoke-OfficeExcelSort', 'Invoke-OfficeExcelTemplate', 'Invoke-OfficeExcelTemplateOptionalRow', 'Invoke-OfficeExcelTemplateRow', 'Invoke-OfficeExcelTemplateSheet', 'Invoke-OfficePdfOcrMerge', 'Invoke-OfficeWordMailMerge', 'Join-OfficeExcelSheet', 'Join-OfficeExcelWorkbook', 'Join-OfficePdf', 'Join-OfficeWordDocument', 'Move-OfficeExcelSheet', 'Move-OfficePdfPage', 'New-OfficeConfluenceSession', 'New-OfficeDocumentReader', 'New-OfficeExcel', 'New-OfficeExcelDashboard', 'New-OfficeMarkdown', 'New-OfficeOpenDocument', 'New-OfficePdf', 'New-OfficePdfSignature', 'New-OfficePdfTableCell', 'New-OfficePdfTableCellCheckBox', 'New-OfficePdfTableCellField', 'New-OfficePdfTableCellImage', 'New-OfficePowerPoint', 'New-OfficePowerPointDeckPlan', 'New-OfficeRtf', 'New-OfficeTextRun', 'New-OfficeVisio', 'New-OfficeVisioGallery', 'New-OfficeWord', 'New-OfficeWordTableCell', 'Protect-OfficeExcelSheet', 'Protect-OfficeExcelWorkbook', 'Protect-OfficeWordDocument', 'Publish-OfficeConfluencePage', 'Remove-OfficeConfluencePage', 'Remove-OfficeExcelComment', 'Remove-OfficeExcelNamedRange', 'Remove-OfficePdfAnnotation', 'Remove-OfficePdfPage', 'Remove-OfficePowerPointSlide', 'Remove-OfficeWordTableOfContents', 'Rename-OfficeExcelNamedRange', 'Rename-OfficePowerPointSection', 'Repair-OfficeExcelWorkbook', 'Resolve-OfficeWordRevision', 'Save-OfficeAsciiDoc', 'Save-OfficeEmail', 'Save-OfficeEmailMailbox', 'Save-OfficeExcel', 'Save-OfficeLatex', 'Save-OfficeMarkdown', 'Save-OfficeOpenDocument', 'Save-OfficePdf', 'Save-OfficePowerPoint', 'Save-OfficeVisio', 'Save-OfficeWord', 'Search-OfficeDocument', 'Send-OfficeConfluenceAttachment', 'Set-OfficeConfluenceManagedSection', 'Set-OfficeExcelActiveSheet', 'Set-OfficeExcelAutoFilter', 'Set-OfficeExcelCell', 'Set-OfficeExcelChartAxis', 'Set-OfficeExcelChartDataLabels', 'Set-OfficeExcelChartLegend', 'Set-OfficeExcelChartPoint', 'Set-OfficeExcelChartSeries', 'Set-OfficeExcelChartStyle', 'Set-OfficeExcelChartTrendline', 'Set-OfficeExcelColumn', 'Set-OfficeExcelColumnGroup', 'Set-OfficeExcelColumnStyleByHeader', 'Set-OfficeExcelDataValidationMessage', 'Set-OfficeExcelDateSystem', 'Set-OfficeExcelDocumentProperty', 'Set-OfficeExcelExecutionPolicy', 'Set-OfficeExcelFormula', 'Set-OfficeExcelFreeze', 'Set-OfficeExcelGridlines', 'Set-OfficeExcelHeaderFooter', 'Set-OfficeExcelHostHyperlink', 'Set-OfficeExcelHyperlink', 'Set-OfficeExcelInternalLinks', 'Set-OfficeExcelInternalLinksByHeader', 'Set-OfficeExcelMargins', 'Set-OfficeExcelNamedRange', 'Set-OfficeExcelOrientation', 'Set-OfficeExcelPageSetup', 'Set-OfficeExcelPrintArea', 'Set-OfficeExcelPrintLayout', 'Set-OfficeExcelPrintTitles', 'Set-OfficeExcelRefreshOnOpen', 'Set-OfficeExcelRichText', 'Set-OfficeExcelRow', 'Set-OfficeExcelRowGroup', 'Set-OfficeExcelSheetTabColor', 'Set-OfficeExcelSheetVisibility', 'Set-OfficeExcelSmartHyperlink', 'Set-OfficeExcelTheme', 'Set-OfficeExcelUrlLinks', 'Set-OfficeExcelUrlLinksByHeader', 'Set-OfficeExcelWorksheetView', 'Set-OfficeExcelWriteReservation', 'Set-OfficePdfAnnotation', 'Set-OfficePdfBackground', 'Set-OfficePdfBackgroundImage', 'Set-OfficePdfCompliance', 'Set-OfficePdfElectronicInvoice', 'Set-OfficePdfFooter', 'Set-OfficePdfForm', 'Set-OfficePdfHeader', 'Set-OfficePdfMetadata', 'Set-OfficePdfPage', 'Set-OfficePdfPageBorder', 'Set-OfficePdfPageSetup', 'Set-OfficePdfSignature', 'Set-OfficePdfTheme', 'Set-OfficePowerPointBackground', 'Set-OfficePowerPointLayoutPlaceholderBounds', 'Set-OfficePowerPointLayoutPlaceholderTextMargins', 'Set-OfficePowerPointLayoutPlaceholderTextStyle', 'Set-OfficePowerPointNotes', 'Set-OfficePowerPointPlaceholderText', 'Set-OfficePowerPointShapeLayout', 'Set-OfficePowerPointShapeText', 'Set-OfficePowerPointSlideLayout', 'Set-OfficePowerPointSlideSize', 'Set-OfficePowerPointSlideTitle', 'Set-OfficePowerPointSlideTransition', 'Set-OfficePowerPointTableCell', 'Set-OfficePowerPointThemeColor', 'Set-OfficePowerPointThemeFonts', 'Set-OfficePowerPointThemeName', 'Set-OfficeVisioShapeLayout', 'Set-OfficeWordBackground', 'Set-OfficeWordDocumentProperty', 'Set-OfficeWordImage', 'Set-OfficeWordPageSetup', 'Set-OfficeWordParagraphStyle', 'Set-OfficeWordShape', 'Set-OfficeWordTableCell', 'Set-OfficeWordTableOfContents', 'Set-OfficeWordTextStyle', 'Split-OfficePdf', 'Test-OfficeExcelAccessibility', 'Test-OfficeExcelTemplateBinding', 'Test-OfficeExcelWorkbook', 'Test-OfficePdfRewrite', 'Unprotect-OfficeExcelSheet', 'Unprotect-OfficeExcelWorkbook', 'Update-OfficeExcelComment', 'Update-OfficeExcelText', 'Update-OfficePowerPointText', 'Update-OfficeRtfText', 'Update-OfficeWordFields', 'Update-OfficeWordTableOfContents', 'Update-OfficeWordText') + CmdletsToExport = @('Add-OfficeExcelAutoFilter', 'Add-OfficeExcelChart', 'Add-OfficeExcelComment', 'Add-OfficeExcelConditionalColorScale', 'Add-OfficeExcelConditionalDataBar', 'Add-OfficeExcelConditionalIconSet', 'Add-OfficeExcelConditionalRule', 'Add-OfficeExcelDashboardChart', 'Add-OfficeExcelDataSet', 'Add-OfficeExcelImage', 'Add-OfficeExcelImageFromUrl', 'Add-OfficeExcelPackageMetadata', 'Add-OfficeExcelPageBreak', 'Add-OfficeExcelPivotTable', 'Add-OfficeExcelPowerQueryMetadata', 'Add-OfficeExcelReportCallout', 'Add-OfficeExcelReportKpiRow', 'Add-OfficeExcelReportLegend', 'Add-OfficeExcelReportParagraph', 'Add-OfficeExcelReportSection', 'Add-OfficeExcelReportSheet', 'Add-OfficeExcelReportSpacer', 'Add-OfficeExcelReportTable', 'Add-OfficeExcelReportTitle', 'Add-OfficeExcelSheet', 'Add-OfficeExcelSlicer', 'Add-OfficeExcelSparkline', 'Add-OfficeExcelSubtotalSummary', 'Add-OfficeExcelTable', 'Add-OfficeExcelTableOfContents', 'Add-OfficeExcelTableRow', 'Add-OfficeExcelThreadedComment', 'Add-OfficeExcelTimeline', 'Add-OfficeExcelValidationCustomFormula', 'Add-OfficeExcelValidationDate', 'Add-OfficeExcelValidationDecimal', 'Add-OfficeExcelValidationList', 'Add-OfficeExcelValidationTextLength', 'Add-OfficeExcelValidationTime', 'Add-OfficeExcelValidationWholeNumber', 'Add-OfficeExcelVisual', 'Add-OfficeMarkdownCallout', 'Add-OfficeMarkdownCode', 'Add-OfficeMarkdownDefinitionList', 'Add-OfficeMarkdownDetails', 'Add-OfficeMarkdownFrontMatter', 'Add-OfficeMarkdownHeading', 'Add-OfficeMarkdownHorizontalRule', 'Add-OfficeMarkdownImage', 'Add-OfficeMarkdownList', 'Add-OfficeMarkdownParagraph', 'Add-OfficeMarkdownQuote', 'Add-OfficeMarkdownTable', 'Add-OfficeMarkdownTableOfContents', 'Add-OfficeMarkdownTaskList', 'Add-OfficeOpenDocumentHeading', 'Add-OfficeOpenDocumentParagraph', 'Add-OfficeOpenDocumentSheet', 'Add-OfficeOpenDocumentSlide', 'Add-OfficeOpenDocumentTextBox', 'Add-OfficePdfAttachment', 'Add-OfficePdfBackgroundShape', 'Add-OfficePdfBookmark', 'Add-OfficePdfCanvas', 'Add-OfficePdfCanvasText', 'Add-OfficePdfFormField', 'Add-OfficePdfHeading', 'Add-OfficePdfHorizontalRule', 'Add-OfficePdfImage', 'Add-OfficePdfList', 'Add-OfficePdfPageBreak', 'Add-OfficePdfPageOverlay', 'Add-OfficePdfPanel', 'Add-OfficePdfParagraph', 'Add-OfficePdfRow', 'Add-OfficePdfSpacer', 'Add-OfficePdfStamp', 'Add-OfficePdfTable', 'Add-OfficePdfText', 'Add-OfficePdfVisual', 'Add-OfficePdfWatermark', 'Add-OfficePowerPointBullets', 'Add-OfficePowerPointChart', 'Add-OfficePowerPointDesignerDeck', 'Add-OfficePowerPointImage', 'Add-OfficePowerPointPlanCapability', 'Add-OfficePowerPointPlanCardGrid', 'Add-OfficePowerPointPlanCaseStudy', 'Add-OfficePowerPointPlanCoverage', 'Add-OfficePowerPointPlanLogoWall', 'Add-OfficePowerPointPlanProcess', 'Add-OfficePowerPointPlanSection', 'Add-OfficePowerPointSection', 'Add-OfficePowerPointShape', 'Add-OfficePowerPointSlide', 'Add-OfficePowerPointTable', 'Add-OfficePowerPointTableRow', 'Add-OfficePowerPointTextBox', 'Add-OfficePowerPointVisual', 'Add-OfficeVisioConnector', 'Add-OfficeVisioContainer', 'Add-OfficeVisioDiamond', 'Add-OfficeVisioEllipse', 'Add-OfficeVisioPage', 'Add-OfficeVisioRectangle', 'Add-OfficeVisioStencilShape', 'Add-OfficeVisioTextBox', 'Add-OfficeWordBookmark', 'Add-OfficeWordBreak', 'Add-OfficeWordChart', 'Add-OfficeWordCheckBox', 'Add-OfficeWordComboBox', 'Add-OfficeWordContentControl', 'Add-OfficeWordCoverPage', 'Add-OfficeWordDatePicker', 'Add-OfficeWordDropDownList', 'Add-OfficeWordEndnote', 'Add-OfficeWordEquation', 'Add-OfficeWordField', 'Add-OfficeWordFooter', 'Add-OfficeWordFootnote', 'Add-OfficeWordHeader', 'Add-OfficeWordHyperlink', 'Add-OfficeWordImage', 'Add-OfficeWordList', 'Add-OfficeWordListItem', 'Add-OfficeWordPageNumber', 'Add-OfficeWordParagraph', 'Add-OfficeWordPictureControl', 'Add-OfficeWordRepeatingSection', 'Add-OfficeWordSection', 'Add-OfficeWordShape', 'Add-OfficeWordTable', 'Add-OfficeWordTableCell', 'Add-OfficeWordTableCondition', 'Add-OfficeWordTableOfContents', 'Add-OfficeWordTableRow', 'Add-OfficeWordTabStop', 'Add-OfficeWordText', 'Add-OfficeWordTextBox', 'Add-OfficeWordVisual', 'Add-OfficeWordWatermark', 'Clear-OfficeExcelAutoFilter', 'Clear-OfficeExcelComment', 'Clear-OfficeExcelConditionalFormatting', 'Clear-OfficeExcelDataValidation', 'Clear-OfficeExcelPageBreak', 'Clear-OfficeExcelRange', 'Clear-OfficeExcelWriteReservation', 'Clear-OfficePdfBackgroundShape', 'Close-OfficeExcel', 'Close-OfficePowerPoint', 'Close-OfficeWord', 'Compare-OfficeExcelRange', 'Compare-OfficeExcelWorkbook', 'Compare-OfficePdfVisual', 'Compare-OfficeWordDocument', 'ConvertFrom-OfficeAsciiDocMarkdown', 'ConvertFrom-OfficeCsv', 'ConvertFrom-OfficeLatexMarkdown', 'ConvertFrom-OfficeMarkdownHtml', 'ConvertFrom-OfficeOpenDocument', 'ConvertFrom-OfficePdfHtml', 'ConvertFrom-OfficeRtf', 'ConvertFrom-OfficeWordHtml', 'ConvertFrom-OfficeWordMarkdown', 'ConvertTo-OfficeAsciiDocMarkdown', 'ConvertTo-OfficeCsv', 'ConvertTo-OfficeExcelHtml', 'ConvertTo-OfficeExcelWorkbook', 'ConvertTo-OfficeLatexMarkdown', 'ConvertTo-OfficeMarkdown', 'ConvertTo-OfficeMarkdownHtml', 'ConvertTo-OfficeOpenDocument', 'ConvertTo-OfficePdfExcel', 'ConvertTo-OfficePdfFlatAnnotation', 'ConvertTo-OfficePdfFlatForm', 'ConvertTo-OfficePdfHtml', 'ConvertTo-OfficePdfMarkdown', 'ConvertTo-OfficePdfOptimized', 'ConvertTo-OfficePdfPowerPoint', 'ConvertTo-OfficePdfRedacted', 'ConvertTo-OfficePdfSanitized', 'ConvertTo-OfficePdfTextRun', 'ConvertTo-OfficePdfWord', 'ConvertTo-OfficePowerPointHtml', 'ConvertTo-OfficeRtf', 'ConvertTo-OfficeVisioPng', 'ConvertTo-OfficeVisioSvg', 'ConvertTo-OfficeVisioVisual', 'ConvertTo-OfficeVisual', 'ConvertTo-OfficeWordDocument', 'ConvertTo-OfficeWordHtml', 'ConvertTo-OfficeWordMarkdown', 'Copy-OfficeExcelSheet', 'Copy-OfficeExcelWorkbook', 'Copy-OfficePdfPage', 'Copy-OfficePowerPointSlide', 'Edit-OfficeExcelRow', 'Export-OfficeCsv', 'Export-OfficeDocumentPdf', 'Export-OfficeExcel', 'Export-OfficeExcelChartImage', 'Export-OfficeExcelGoogleSpreadsheet', 'Export-OfficeExcelImage', 'Export-OfficeExcelRangeImage', 'Export-OfficeHtmlImage', 'Export-OfficePdfImage', 'Export-OfficePdfLayoutOverlay', 'Export-OfficePdfXfdf', 'Export-OfficePowerPointImage', 'Export-OfficeVisioImage', 'Export-OfficeVisioStencilPreviewGallery', 'Export-OfficeVisioVisual', 'Export-OfficeWordGoogleDocument', 'Export-OfficeWordImage', 'Find-OfficeExcel', 'Find-OfficePowerPointShape', 'Find-OfficeVisioStencil', 'Find-OfficeWord', 'Find-OfficeWordList', 'Find-OfficeWordTable', 'Get-OfficeAsciiDoc', 'Get-OfficeConfluenceAttachment', 'Get-OfficeConfluencePage', 'Get-OfficeCsv', 'Get-OfficeDocument', 'Get-OfficeDocumentAsset', 'Get-OfficeDocumentBatch', 'Get-OfficeDocumentCapability', 'Get-OfficeDocumentChunk', 'Get-OfficeDocumentDetection', 'Get-OfficeDocumentHierarchy', 'Get-OfficeDocumentIngest', 'Get-OfficeDocumentPageMarkdown', 'Get-OfficeDocumentStructured', 'Get-OfficeDocumentTable', 'Get-OfficeDocumentVisual', 'Get-OfficeEmail', 'Get-OfficeEmailMailbox', 'Get-OfficeExcel', 'Get-OfficeExcelComment', 'Get-OfficeExcelCommentAudit', 'Get-OfficeExcelConditionalFormatting', 'Get-OfficeExcelData', 'Get-OfficeExcelDataModel', 'Get-OfficeExcelDataValidation', 'Get-OfficeExcelDocumentProperty', 'Get-OfficeExcelFormulaAnalysis', 'Get-OfficeExcelNamedRange', 'Get-OfficeExcelNumberFormatPreset', 'Get-OfficeExcelPageBreak', 'Get-OfficeExcelPivotTable', 'Get-OfficeExcelPreflight', 'Get-OfficeExcelRange', 'Get-OfficeExcelRichText', 'Get-OfficeExcelRuntimePreflight', 'Get-OfficeExcelStreamingContract', 'Get-OfficeExcelSummary', 'Get-OfficeExcelTable', 'Get-OfficeExcelTableStyle', 'Get-OfficeExcelTemplateMarker', 'Get-OfficeExcelUsedRange', 'Get-OfficeExcelWorksheetView', 'Get-OfficeExcelWriteReservation', 'Get-OfficeLatex', 'Get-OfficeMarkdown', 'Get-OfficeMarkdownFrontMatter', 'Get-OfficeMarkdownHeading', 'Get-OfficeMarkdownNode', 'Get-OfficeMarkdownTable', 'Get-OfficeOpenDocument', 'Get-OfficePdf', 'Get-OfficePdfAnnotation', 'Get-OfficePdfAppendOnlyMutation', 'Get-OfficePdfAttachment', 'Get-OfficePdfCompliance', 'Get-OfficePdfDiagnostic', 'Get-OfficePdfFont', 'Get-OfficePdfFormField', 'Get-OfficePdfImage', 'Get-OfficePdfInfo', 'Get-OfficePdfInteractionMap', 'Get-OfficePdfOptimization', 'Get-OfficePdfPreflight', 'Get-OfficePdfRedactionPlan', 'Get-OfficePdfSignature', 'Get-OfficePdfText', 'Get-OfficePdfTextDiagnostic', 'Get-OfficePowerPoint', 'Get-OfficePowerPointInspection', 'Get-OfficePowerPointLayout', 'Get-OfficePowerPointLayoutBox', 'Get-OfficePowerPointLayoutPlaceholder', 'Get-OfficePowerPointNotes', 'Get-OfficePowerPointPlaceholder', 'Get-OfficePowerPointSection', 'Get-OfficePowerPointShape', 'Get-OfficePowerPointSlide', 'Get-OfficePowerPointSlideSummary', 'Get-OfficePowerPointTheme', 'Get-OfficeProtectionCapability', 'Get-OfficeRtf', 'Get-OfficeVisio', 'Get-OfficeVisioInfo', 'Get-OfficeVisioStencilCatalog', 'Get-OfficeWord', 'Get-OfficeWordBookmark', 'Get-OfficeWordCheckBox', 'Get-OfficeWordComboBox', 'Get-OfficeWordContentControl', 'Get-OfficeWordDatePicker', 'Get-OfficeWordDocumentProperty', 'Get-OfficeWordDropDownList', 'Get-OfficeWordEndnote', 'Get-OfficeWordField', 'Get-OfficeWordFootnote', 'Get-OfficeWordHyperlink', 'Get-OfficeWordImage', 'Get-OfficeWordList', 'Get-OfficeWordParagraph', 'Get-OfficeWordPictureControl', 'Get-OfficeWordRepeatingSection', 'Get-OfficeWordReview', 'Get-OfficeWordSection', 'Get-OfficeWordShape', 'Get-OfficeWordStatistics', 'Get-OfficeWordTable', 'Get-OfficeWordTableCell', 'Get-OfficeWordTableOfContents', 'Get-OfficeWordText', 'Import-OfficeCsv', 'Import-OfficeExcel', 'Import-OfficeExcelDelimitedText', 'Import-OfficePdfXfdf', 'Import-OfficePowerPointSlide', 'Import-OfficeVisioStencil', 'Invoke-OfficeExcelAutoFit', 'Invoke-OfficeExcelSort', 'Invoke-OfficeExcelTemplate', 'Invoke-OfficeExcelTemplateOptionalRow', 'Invoke-OfficeExcelTemplateRow', 'Invoke-OfficeExcelTemplateSheet', 'Invoke-OfficePdfOcrMerge', 'Invoke-OfficeWordMailMerge', 'Join-OfficeExcelSheet', 'Join-OfficeExcelWorkbook', 'Join-OfficePdf', 'Join-OfficeWordDocument', 'Move-OfficeExcelSheet', 'Move-OfficePdfPage', 'New-OfficeConfluenceSession', 'New-OfficeDocumentReader', 'New-OfficeEmailMailboxReaderOptions', 'New-OfficeEmailMailboxWriterOptions', 'New-OfficeEmailReaderOptions', 'New-OfficeEmailStoreReaderOptions', 'New-OfficeEmailWriterOptions', 'New-OfficeExcel', 'New-OfficeExcelDashboard', 'New-OfficeExcelImageOptions', 'New-OfficeExcelOpenDocumentOptions', 'New-OfficeExcelPdfOptions', 'New-OfficeExcelWorkbookImageOptions', 'New-OfficeHtmlConversionOptions', 'New-OfficeHtmlRenderOptions', 'New-OfficeMarkdown', 'New-OfficeMarkdownPdfOptions', 'New-OfficeOpenDocument', 'New-OfficePdf', 'New-OfficePdfExcelImportOptions', 'New-OfficePdfImageOptions', 'New-OfficePdfPowerPointImportOptions', 'New-OfficePdfSignature', 'New-OfficePdfTableCell', 'New-OfficePdfTableCellCheckBox', 'New-OfficePdfTableCellField', 'New-OfficePdfTableCellImage', 'New-OfficePdfVisualComparisonOptions', 'New-OfficePdfWordImportOptions', 'New-OfficePowerPoint', 'New-OfficePowerPointDeckPlan', 'New-OfficePowerPointImageOptions', 'New-OfficePowerPointOpenDocumentOptions', 'New-OfficePowerPointPdfOptions', 'New-OfficeReaderHierarchyOptions', 'New-OfficeRtf', 'New-OfficeRtfPdfOptions', 'New-OfficeTextRun', 'New-OfficeVisio', 'New-OfficeVisioGallery', 'New-OfficeVisioImageOptions', 'New-OfficeWord', 'New-OfficeWordComparisonOptions', 'New-OfficeWordImageOptions', 'New-OfficeWordOpenDocumentOptions', 'New-OfficeWordPdfOptions', 'New-OfficeWordRevisionFilter', 'New-OfficeWordTableCell', 'Protect-OfficeExcelSheet', 'Protect-OfficeExcelWorkbook', 'Protect-OfficeWordDocument', 'Publish-OfficeConfluencePage', 'Remove-OfficeConfluencePage', 'Remove-OfficeExcelComment', 'Remove-OfficeExcelNamedRange', 'Remove-OfficePdfAnnotation', 'Remove-OfficePdfPage', 'Remove-OfficePowerPointSlide', 'Remove-OfficeWordTableOfContents', 'Rename-OfficeExcelNamedRange', 'Rename-OfficePowerPointSection', 'Repair-OfficeExcelWorkbook', 'Resolve-OfficeWordRevision', 'Save-OfficeAsciiDoc', 'Save-OfficeEmail', 'Save-OfficeEmailMailbox', 'Save-OfficeExcel', 'Save-OfficeLatex', 'Save-OfficeMarkdown', 'Save-OfficeOpenDocument', 'Save-OfficePdf', 'Save-OfficePowerPoint', 'Save-OfficeVisio', 'Save-OfficeWord', 'Search-OfficeDocument', 'Send-OfficeConfluenceAttachment', 'Set-OfficeConfluenceManagedSection', 'Set-OfficeExcelActiveSheet', 'Set-OfficeExcelAutoFilter', 'Set-OfficeExcelCell', 'Set-OfficeExcelChartAxis', 'Set-OfficeExcelChartDataLabels', 'Set-OfficeExcelChartLegend', 'Set-OfficeExcelChartPoint', 'Set-OfficeExcelChartSeries', 'Set-OfficeExcelChartStyle', 'Set-OfficeExcelChartTrendline', 'Set-OfficeExcelColumn', 'Set-OfficeExcelColumnGroup', 'Set-OfficeExcelColumnStyleByHeader', 'Set-OfficeExcelDataValidationMessage', 'Set-OfficeExcelDateSystem', 'Set-OfficeExcelDocumentProperty', 'Set-OfficeExcelExecutionPolicy', 'Set-OfficeExcelFormula', 'Set-OfficeExcelFreeze', 'Set-OfficeExcelGridlines', 'Set-OfficeExcelHeaderFooter', 'Set-OfficeExcelHostHyperlink', 'Set-OfficeExcelHyperlink', 'Set-OfficeExcelInternalLinks', 'Set-OfficeExcelInternalLinksByHeader', 'Set-OfficeExcelMargins', 'Set-OfficeExcelNamedRange', 'Set-OfficeExcelOrientation', 'Set-OfficeExcelPageSetup', 'Set-OfficeExcelPrintArea', 'Set-OfficeExcelPrintLayout', 'Set-OfficeExcelPrintTitles', 'Set-OfficeExcelRefreshOnOpen', 'Set-OfficeExcelRichText', 'Set-OfficeExcelRow', 'Set-OfficeExcelRowGroup', 'Set-OfficeExcelSheetTabColor', 'Set-OfficeExcelSheetVisibility', 'Set-OfficeExcelSmartHyperlink', 'Set-OfficeExcelTheme', 'Set-OfficeExcelUrlLinks', 'Set-OfficeExcelUrlLinksByHeader', 'Set-OfficeExcelWorksheetView', 'Set-OfficeExcelWriteReservation', 'Set-OfficeOpenDocumentCell', 'Set-OfficePdfAnnotation', 'Set-OfficePdfBackground', 'Set-OfficePdfBackgroundImage', 'Set-OfficePdfCompliance', 'Set-OfficePdfElectronicInvoice', 'Set-OfficePdfFooter', 'Set-OfficePdfForm', 'Set-OfficePdfHeader', 'Set-OfficePdfMetadata', 'Set-OfficePdfPage', 'Set-OfficePdfPageBorder', 'Set-OfficePdfPageSetup', 'Set-OfficePdfSignature', 'Set-OfficePdfTheme', 'Set-OfficePowerPointBackground', 'Set-OfficePowerPointLayoutPlaceholderBounds', 'Set-OfficePowerPointLayoutPlaceholderTextMargins', 'Set-OfficePowerPointLayoutPlaceholderTextStyle', 'Set-OfficePowerPointNotes', 'Set-OfficePowerPointPlaceholderText', 'Set-OfficePowerPointShapeLayout', 'Set-OfficePowerPointShapeText', 'Set-OfficePowerPointSlideLayout', 'Set-OfficePowerPointSlideSize', 'Set-OfficePowerPointSlideTitle', 'Set-OfficePowerPointSlideTransition', 'Set-OfficePowerPointTableCell', 'Set-OfficePowerPointThemeColor', 'Set-OfficePowerPointThemeFonts', 'Set-OfficePowerPointThemeName', 'Set-OfficeVisioShapeLayout', 'Set-OfficeWordBackground', 'Set-OfficeWordDocumentProperty', 'Set-OfficeWordImage', 'Set-OfficeWordPageSetup', 'Set-OfficeWordParagraphStyle', 'Set-OfficeWordShape', 'Set-OfficeWordTableCell', 'Set-OfficeWordTableOfContents', 'Set-OfficeWordTextStyle', 'Split-OfficePdf', 'Test-OfficeExcelAccessibility', 'Test-OfficeExcelTemplateBinding', 'Test-OfficeExcelWorkbook', 'Test-OfficePdfRewrite', 'Unprotect-OfficeExcelSheet', 'Unprotect-OfficeExcelWorkbook', 'Update-OfficeExcelComment', 'Update-OfficeExcelText', 'Update-OfficePowerPointText', 'Update-OfficeRtfText', 'Update-OfficeWordFields', 'Update-OfficeWordTableOfContents', 'Update-OfficeWordText') CompanyName = 'Evotec' CompatiblePSEditions = @('Desktop', 'Core') Copyright = '(c) 2011 - 2026 Przemyslaw Klys @ Evotec. All rights reserved.' diff --git a/WebsiteArtifacts/apidocs/powershell/command-metadata.json b/WebsiteArtifacts/apidocs/powershell/command-metadata.json index 90549691..53213611 100644 --- a/WebsiteArtifacts/apidocs/powershell/command-metadata.json +++ b/WebsiteArtifacts/apidocs/powershell/command-metadata.json @@ -555,6 +555,46 @@ "sourceLine": 23, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Markdown/AddOfficeMarkdownTaskListCommand.cs#L23" }, + { + "name": "Add-OfficeOpenDocumentHeading", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentHeadingCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentHeadingCommand.cs#L15" + }, + { + "name": "Add-OfficeOpenDocumentParagraph", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentParagraphCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentParagraphCommand.cs#L15" + }, + { + "name": "Add-OfficeOpenDocumentSheet", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSheetCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSheetCommand.cs#L17" + }, + { + "name": "Add-OfficeOpenDocumentSlide", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSlideCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentSlideCommand.cs#L17" + }, + { + "name": "Add-OfficeOpenDocumentTextBox", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentTextBoxCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/AddOfficeOpenDocumentTextBoxCommand.cs#L15" + }, { "name": "Add-OfficePdfAttachment", "kind": "Cmdlet", @@ -784,8 +824,8 @@ "PptChart" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs", - "sourceLine": 59, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs#L59" + "sourceLine": 58, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointChartCommand.cs#L58" }, { "name": "Add-OfficePowerPointDesignerDeck", @@ -904,8 +944,8 @@ "PptSlide" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs", - "sourceLine": 24, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs#L24" + "sourceLine": 26, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/AddOfficePowerPointSlideCommand.cs#L26" }, { "name": "Add-OfficePowerPointTable", @@ -1505,16 +1545,16 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs", - "sourceLine": 16, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs#L16" + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/CompareOfficePdfVisualCommand.cs#L17" }, { "name": "Compare-OfficeWordDocument", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs", - "sourceLine": 16, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs#L16" + "sourceLine": 22, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/CompareOfficeWordDocumentCommand.cs#L22" }, { "name": "ConvertFrom-OfficeAsciiDocMarkdown", @@ -1555,8 +1595,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs", - "sourceLine": 13, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs#L13" + "sourceLine": 19, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertFromOfficeOpenDocumentCommand.cs#L19" }, { "name": "ConvertFrom-OfficePdfHtml", @@ -1663,8 +1703,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs", - "sourceLine": 20, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs#L20" + "sourceLine": 26, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/ConvertToOfficeOpenDocumentCommand.cs#L26" }, { "name": "ConvertTo-OfficePdfExcel", @@ -1906,6 +1946,14 @@ "sourceLine": 29, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Csv/ExportOfficeCsvCommand.cs#L29" }, + { + "name": "Export-OfficeDocumentPdf", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficeDocumentPdfCommand.cs", + "sourceLine": 44, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficeDocumentPdfCommand.cs#L44" + }, { "name": "Export-OfficeExcel", "kind": "Cmdlet", @@ -1969,8 +2017,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs", - "sourceLine": 12, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs#L12" + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/ExportOfficePdfLayoutOverlayCommand.cs#L17" }, { "name": "Export-OfficePdfXfdf", @@ -2027,8 +2075,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs", - "sourceLine": 18, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs#L18" + "sourceLine": 25, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/ExportOfficeWordImageCommand.cs#L25" }, { "name": "Find-OfficeExcel", @@ -2174,8 +2222,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs", - "sourceLine": 16, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs#L16" + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Reader/GetOfficeDocumentHierarchyCommand.cs#L17" }, { "name": "Get-OfficeDocumentIngest", @@ -2226,16 +2274,16 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs", - "sourceLine": 13, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs#L13" + "sourceLine": 19, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailCommand.cs#L19" }, { "name": "Get-OfficeEmailMailbox", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs", - "sourceLine": 9, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs#L9" + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/GetOfficeEmailMailboxCommand.cs#L15" }, { "name": "Get-OfficeExcel", @@ -2733,8 +2781,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs", - "sourceLine": 21, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs#L21" + "sourceLine": 22, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointSectionCommand.cs#L22" }, { "name": "Get-OfficePowerPointShape", @@ -2767,8 +2815,8 @@ "PptTheme" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs", - "sourceLine": 21, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs#L21" + "sourceLine": 22, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/GetOfficePowerPointThemeCommand.cs#L22" }, { "name": "Get-OfficeProtectionCapability", @@ -3257,6 +3305,46 @@ "sourceLine": 22, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Reader/NewOfficeDocumentReaderCommand.cs#L22" }, + { + "name": "New-OfficeEmailMailboxReaderOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxReaderOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxReaderOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeEmailMailboxWriterOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxWriterOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailMailboxWriterOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeEmailReaderOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailReaderOptionsCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailReaderOptionsCommand.cs#L15" + }, + { + "name": "New-OfficeEmailStoreReaderOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailStoreReaderOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailStoreReaderOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeEmailWriterOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailWriterOptionsCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/NewOfficeEmailWriterOptionsCommand.cs#L15" + }, { "name": "New-OfficeExcel", "kind": "Cmdlet", @@ -3264,8 +3352,8 @@ "ExcelNew" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs", - "sourceLine": 31, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs#L31" + "sourceLine": 30, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelCommand.cs#L30" }, { "name": "New-OfficeExcelDashboard", @@ -3277,6 +3365,54 @@ "sourceLine": 21, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelDashboardCommand.cs#L21" }, + { + "name": "New-OfficeExcelImageOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelImageOptionsCommand.cs", + "sourceLine": 22, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelImageOptionsCommand.cs#L22" + }, + { + "name": "New-OfficeExcelOpenDocumentOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeExcelOpenDocumentOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeExcelOpenDocumentOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeExcelPdfOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelPdfOptionsCommand.cs", + "sourceLine": 18, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelPdfOptionsCommand.cs#L18" + }, + { + "name": "New-OfficeExcelWorkbookImageOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelWorkbookImageOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficeExcelWorkbookImageOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeHtmlConversionOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlConversionOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlConversionOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeHtmlRenderOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlRenderOptionsCommand.cs", + "sourceLine": 18, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Html/NewOfficeHtmlRenderOptionsCommand.cs#L18" + }, { "name": "New-OfficeMarkdown", "kind": "Cmdlet", @@ -3284,16 +3420,24 @@ "MarkdownNew" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs", - "sourceLine": 35, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs#L35" + "sourceLine": 33, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownCommand.cs#L33" + }, + { + "name": "New-OfficeMarkdownPdfOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownPdfOptionsCommand.cs", + "sourceLine": 18, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Markdown/NewOfficeMarkdownPdfOptionsCommand.cs#L18" }, { "name": "New-OfficeOpenDocument", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs", - "sourceLine": 10, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs#L10" + "sourceLine": 31, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeOpenDocumentCommand.cs#L31" }, { "name": "New-OfficePdf", @@ -3305,6 +3449,30 @@ "sourceLine": 47, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfCommand.cs#L47" }, + { + "name": "New-OfficePdfExcelImportOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Excel/NewOfficePdfExcelImportOptionsCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/NewOfficePdfExcelImportOptionsCommand.cs#L17" + }, + { + "name": "New-OfficePdfImageOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfImageOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfImageOptionsCommand.cs#L16" + }, + { + "name": "New-OfficePdfPowerPointImportOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePdfPowerPointImportOptionsCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePdfPowerPointImportOptionsCommand.cs#L17" + }, { "name": "New-OfficePdfSignature", "kind": "Cmdlet", @@ -3353,6 +3521,22 @@ "sourceLine": 19, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfTableCellImageCommand.cs#L19" }, + { + "name": "New-OfficePdfVisualComparisonOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfVisualComparisonOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/NewOfficePdfVisualComparisonOptionsCommand.cs#L16" + }, + { + "name": "New-OfficePdfWordImportOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/NewOfficePdfWordImportOptionsCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficePdfWordImportOptionsCommand.cs#L17" + }, { "name": "New-OfficePowerPoint", "kind": "Cmdlet", @@ -3361,8 +3545,8 @@ "PptNew" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs", - "sourceLine": 28, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs#L28" + "sourceLine": 27, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointCommand.cs#L27" }, { "name": "New-OfficePowerPointDeckPlan", @@ -3374,6 +3558,38 @@ "sourceLine": 27, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointDeckPlanCommand.cs#L27" }, + { + "name": "New-OfficePowerPointImageOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointImageOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointImageOptionsCommand.cs#L16" + }, + { + "name": "New-OfficePowerPointOpenDocumentOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficePowerPointOpenDocumentOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficePowerPointOpenDocumentOptionsCommand.cs#L16" + }, + { + "name": "New-OfficePowerPointPdfOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointPdfOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/NewOfficePowerPointPdfOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeReaderHierarchyOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Reader/NewOfficeReaderHierarchyOptionsCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Reader/NewOfficeReaderHierarchyOptionsCommand.cs#L15" + }, { "name": "New-OfficeRtf", "kind": "Cmdlet", @@ -3384,6 +3600,14 @@ "sourceLine": 21, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfCommand.cs#L21" }, + { + "name": "New-OfficeRtfPdfOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfPdfOptionsCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Rtf/NewOfficeRtfPdfOptionsCommand.cs#L15" + }, { "name": "New-OfficeTextRun", "kind": "Cmdlet", @@ -3419,6 +3643,14 @@ "sourceLine": 18, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioGalleryCommand.cs#L18" }, + { + "name": "New-OfficeVisioImageOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioImageOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Visio/NewOfficeVisioImageOptionsCommand.cs#L16" + }, { "name": "New-OfficeWord", "kind": "Cmdlet", @@ -3426,8 +3658,48 @@ "WordNew" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs", - "sourceLine": 35, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs#L35" + "sourceLine": 34, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordCommand.cs#L34" + }, + { + "name": "New-OfficeWordComparisonOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordComparisonOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordComparisonOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeWordImageOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordImageOptionsCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordImageOptionsCommand.cs#L17" + }, + { + "name": "New-OfficeWordOpenDocumentOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeWordOpenDocumentOptionsCommand.cs", + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/NewOfficeWordOpenDocumentOptionsCommand.cs#L16" + }, + { + "name": "New-OfficeWordPdfOptions", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordPdfOptionsCommand.cs", + "sourceLine": 18, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordPdfOptionsCommand.cs#L18" + }, + { + "name": "New-OfficeWordRevisionFilter", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordRevisionFilterCommand.cs", + "sourceLine": 15, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/NewOfficeWordRevisionFilterCommand.cs#L15" }, { "name": "New-OfficeWordTableCell", @@ -3508,8 +3780,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs", - "sourceLine": 12, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs#L12" + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Pdf/RemoveOfficePdfAnnotationCommand.cs#L17" }, { "name": "Remove-OfficePdfPage", @@ -3550,8 +3822,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs", - "sourceLine": 21, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs#L21" + "sourceLine": 22, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/RenameOfficePowerPointSectionCommand.cs#L22" }, { "name": "Repair-OfficeExcelWorkbook", @@ -3569,56 +3841,56 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs", - "sourceLine": 17, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs#L17" + "sourceLine": 18, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/ResolveOfficeWordRevisionCommand.cs#L18" }, { "name": "Save-OfficeAsciiDoc", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs", - "sourceLine": 10, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs#L10" + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/AsciiDoc/SaveOfficeAsciiDocCommand.cs#L16" }, { "name": "Save-OfficeEmail", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs", - "sourceLine": 11, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs#L11" + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailCommand.cs#L17" }, { "name": "Save-OfficeEmailMailbox", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs", - "sourceLine": 10, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs#L10" + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Email/SaveOfficeEmailMailboxCommand.cs#L16" }, { "name": "Save-OfficeExcel", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs", - "sourceLine": 20, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs#L20" + "sourceLine": 19, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/SaveOfficeExcelCommand.cs#L19" }, { "name": "Save-OfficeLatex", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs", - "sourceLine": 10, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs#L10" + "sourceLine": 16, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Latex/SaveOfficeLatexCommand.cs#L16" }, { "name": "Save-OfficeMarkdown", "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs", - "sourceLine": 21, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs#L21" + "sourceLine": 19, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Markdown/SaveOfficeMarkdownCommand.cs#L19" }, { "name": "Save-OfficeOpenDocument", @@ -3641,8 +3913,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs", - "sourceLine": 23, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs#L23" + "sourceLine": 21, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/SaveOfficePowerPointCommand.cs#L21" }, { "name": "Save-OfficeVisio", @@ -3659,8 +3931,8 @@ "kind": "Cmdlet", "aliases": [], "sourcePath": "Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs", - "sourceLine": 22, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs#L22" + "sourceLine": 21, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Word/SaveOfficeWordCommand.cs#L21" }, { "name": "Search-OfficeDocument", @@ -4119,6 +4391,14 @@ "sourceLine": 17, "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/Excel/SetOfficeExcelWriteReservationCommand.cs#L17" }, + { + "name": "Set-OfficeOpenDocumentCell", + "kind": "Cmdlet", + "aliases": [], + "sourcePath": "Sources/PSWriteOffice/Cmdlets/OpenDocument/SetOfficeOpenDocumentCellCommand.cs", + "sourceLine": 17, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/OpenDocument/SetOfficeOpenDocumentCellCommand.cs#L17" + }, { "name": "Set-OfficePdfAnnotation", "kind": "Cmdlet", @@ -4347,8 +4627,8 @@ "PptSlideSize" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs", - "sourceLine": 30, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs#L30" + "sourceLine": 31, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/SetOfficePowerPointSlideSizeCommand.cs#L31" }, { "name": "Set-OfficePowerPointSlideTitle", @@ -4598,8 +4878,8 @@ "Replace-OfficePowerPointText" ], "sourcePath": "Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs", - "sourceLine": 23, - "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs#L23" + "sourceLine": 24, + "sourceUrl": "https://github.com/EvotecIT/PSWriteOffice/blob/main/Sources/PSWriteOffice/Cmdlets/PowerPoint/UpdateOfficePowerPointTextCommand.cs#L24" }, { "name": "Update-OfficeRtfText", diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Confluence/Example-ConfluenceAzureTableReport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Confluence/Example-ConfluenceAzureTableReport.ps1 new file mode 100644 index 00000000..578217c7 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Confluence/Example-ConfluenceAzureTableReport.ps1 @@ -0,0 +1,93 @@ +param( + [Parameter(Mandatory)] + [string] $AzureTableConnectionString, + + [Parameter(Mandatory)] + [string] $AzureTableName, + + [Parameter(Mandatory)] + [string] $ConfluenceSpaceId, + + [Parameter(Mandatory)] + [string] $ConfluenceTitle, + + [string] $AzureTableFilter, + + [object] $ConfluenceSession, + + [switch] $Publish +) + +Import-Module DbaClientX -ErrorAction Stop +Import-Module PSWriteOffice -ErrorAction Stop + +if ($null -ne $ConfluenceSession -and $ConfluenceSession -isnot [OfficeIMO.Confluence.ConfluenceSession]) { + throw '-ConfluenceSession must be an OfficeIMO.Confluence.ConfluenceSession created by New-OfficeConfluenceSession.' +} + +$entities = @( + Get-DbaXAzureTableEntity ` + -ConnectionString $AzureTableConnectionString ` + -TableName $AzureTableName ` + -Filter $AzureTableFilter +) + +if ($entities.Count -eq 0) { + $markdown = "# $ConfluenceTitle`n`n_No Azure Table entities matched the query._" +} else { + $propertyNames = @( + $entities | + ForEach-Object { $_.Properties.Keys } | + Sort-Object -Unique + ) + $columns = @('PartitionKey', 'RowKey') + $propertyNames + + function ConvertTo-MarkdownCell { + param([AllowNull()] $Value) + + if ($null -eq $Value) { + return '' + } + + return $Value.ToString().Replace('|', '\|').Replace("`r", ' ').Replace("`n", ' ') + } + + $lines = [Collections.Generic.List[string]]::new() + $lines.Add("# $ConfluenceTitle") + $lines.Add('') + $lines.Add('| ' + (($columns | ForEach-Object { ConvertTo-MarkdownCell $_ }) -join ' | ') + ' |') + $lines.Add('| ' + (($columns | ForEach-Object { '---' }) -join ' | ') + ' |') + foreach ($entity in $entities) { + $values = foreach ($column in $columns) { + if ($column -eq 'PartitionKey') { + $entity.PartitionKey + } elseif ($column -eq 'RowKey') { + $entity.RowKey + } else { + $entity.Properties[$column] + } + } + $lines.Add('| ' + (($values | ForEach-Object { ConvertTo-MarkdownCell $_ }) -join ' | ') + ' |') + } + + $markdown = $lines -join [Environment]::NewLine +} + +$publishParameters = @{ + SpaceId = $ConfluenceSpaceId + Title = $ConfluenceTitle + Content = $markdown + FailOnLoss = $true +} + +if ($Publish) { + if ($null -eq $ConfluenceSession) { + throw 'Provide -ConfluenceSession when -Publish is used.' + } + + $publishParameters.Session = $ConfluenceSession +} else { + $publishParameters.PlanOnly = $true +} + +Publish-OfficeConfluencePage @publishParameters diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvAdvanced.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvAdvanced.ps1 index fec653ec..c9830c15 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvAdvanced.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvAdvanced.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Csv-Advanced.csv' $rows = @( [PSCustomObject]@{ Name = 'Alpha'; Score = 92; Active = $true } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvBasic.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvBasic.ps1 index 1256b196..90af1840 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvBasic.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvBasic.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Data.csv' $rows = @( [PSCustomObject]@{ Name = 'Alpha'; Value = 1 } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvDbaClientXRoundTrip.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvDbaClientXRoundTrip.ps1 new file mode 100644 index 00000000..1248caef --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Example-CsvDbaClientXRoundTrip.ps1 @@ -0,0 +1,138 @@ +param( + [string] $Server = $(if ($env:DBACLIENTX_SQLSERVER) { $env:DBACLIENTX_SQLSERVER } else { 'localhost' }), + [string] $Database = $(if ($env:DBACLIENTX_SQLDATABASE) { $env:DBACLIENTX_SQLDATABASE } else { 'tempdb' }), + [string] $SourceTable = 'dbo.PSWriteOfficeCsvSource', + [string] $DestinationTable = 'dbo.PSWriteOfficeCsvRoundTrip', + [string] $Path, + [int] $RowCount = 100, + [switch] $KeepArtifacts +) + +Import-Module PSWriteOffice -ErrorAction Stop +Import-Module DbaClientX -ErrorAction Stop + +if ($RowCount -lt 1) { + throw 'RowCount must be greater than zero.' +} + +if (-not $Path) { + $outputDirectory = Join-Path $PSScriptRoot '..\Documents' + if (-not (Test-Path -LiteralPath $outputDirectory)) { + $null = New-Item -Path $outputDirectory -ItemType Directory -Force + } + + $Path = Join-Path $outputDirectory 'Csv-DbaClientXRoundTrip.csv' +} + +$connectionString = "Server=$Server;Database=$Database;Encrypt=True;TrustServerCertificate=True;Integrated Security=True" + +Invoke-DbaXNonQuery -Server $Server -Database $Database -TrustServerCertificate -Query @" +IF OBJECT_ID(N'$SourceTable', N'U') IS NOT NULL DROP TABLE $SourceTable; +IF OBJECT_ID(N'$DestinationTable', N'U') IS NOT NULL DROP TABLE $DestinationTable; + +CREATE TABLE $SourceTable +( + Id int NOT NULL, + Department nvarchar(100) NOT NULL, + Amount decimal(18,2) NOT NULL, + CreatedUtc datetime2 NOT NULL +); + +WITH numbers AS +( + SELECT TOP ($RowCount) + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Id + FROM sys.all_objects AS a + CROSS JOIN sys.all_objects AS b +) +INSERT INTO $SourceTable (Id, Department, Amount, CreatedUtc) +SELECT + Id, + CONCAT(N'Department ', ((Id - 1) % 5) + 1), + CONVERT(decimal(18,2), Id * 10.25), + SYSUTCDATETIME() +FROM numbers; +"@ -ErrorAction Stop | Out-Null + +try { + $rows = @( + Invoke-DbaXQuery ` + -Server $Server ` + -Database $Database ` + -TrustServerCertificate ` + -Query "SELECT Id, Department, Amount, CreatedUtc FROM $SourceTable ORDER BY Id;" ` + -ReturnType PSObject ` + -ErrorAction Stop + ) + + if (Test-Path -LiteralPath $Path) { + Remove-Item -LiteralPath $Path -Force + } + + $rows | + Export-OfficeCsv ` + -Path $Path ` + -ErrorAction Stop + + $table = Import-OfficeCsv ` + -Path $Path ` + -AsDataTable ` + -ErrorAction Stop + + $writeResult = $table | + Write-DbaXTableData ` + -Provider SqlServer ` + -ConnectionString $connectionString ` + -DestinationTable $DestinationTable ` + -AutoCreateTable ` + -TableLock ` + -BatchSize 5000 ` + -PassThru ` + -ErrorAction Stop + + $verification = Invoke-DbaXQuery ` + -Server $Server ` + -Database $Database ` + -TrustServerCertificate ` + -Query "SELECT COUNT(*) AS SourceRows FROM $SourceTable; SELECT COUNT(*) AS DestinationRows FROM $DestinationTable;" ` + -ReturnType DataSet ` + -ErrorAction Stop + + $sourceRows = [int] $verification.Tables[0].Rows[0]['SourceRows'] + $destinationRows = [int] $verification.Tables[1].Rows[0]['DestinationRows'] + + $hasMismatch = $rows.Count -ne $RowCount -or + $table.Rows.Count -ne $RowCount -or + $writeResult.Rows -ne $RowCount -or + $sourceRows -ne $RowCount -or + $destinationRows -ne $RowCount + + if ($hasMismatch) { + throw "Round-trip row count mismatch. Exported=$($rows.Count), Imported=$($table.Rows.Count), Written=$($writeResult.Rows), Source=$sourceRows, Destination=$destinationRows, Expected=$RowCount." + } + + [pscustomobject]@{ + Server = $Server + Database = $Database + Path = $Path + SourceTable = $SourceTable + DestinationTable = $DestinationTable + ExportedRows = $rows.Count + ImportedRows = $table.Rows.Count + WrittenRows = $writeResult.Rows + SourceRows = $sourceRows + DestinationRows = $destinationRows + } +} +finally { + if (-not $KeepArtifacts) { + Invoke-DbaXNonQuery -Server $Server -Database $Database -TrustServerCertificate -Query @" +IF OBJECT_ID(N'$DestinationTable', N'U') IS NOT NULL DROP TABLE $DestinationTable; +IF OBJECT_ID(N'$SourceTable', N'U') IS NOT NULL DROP TABLE $SourceTable; +"@ -ErrorAction SilentlyContinue | Out-Null + + if (Test-Path -LiteralPath $Path) { + Remove-Item -LiteralPath $Path -Force + } + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Csv/Recipe-Csv-SafeExport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Recipe-Csv-SafeExport.ps1 new file mode 100644 index 00000000..0d94fc13 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Csv/Recipe-Csv-SafeExport.ps1 @@ -0,0 +1,8 @@ +$path = '.\Review-Queue.csv' +$rows = @( + [pscustomobject]@{ Id = 1001; Owner = 'Platform'; Comment = '=HYPERLINK("https://example.org")' } + [pscustomobject]@{ Id = 1002; Owner = 'Security'; Comment = 'Ready for review' } +) + +$rows | Export-OfficeCsv -Path $path -FormulaInjectionPolicy Escape -UseQuotes AsNeeded +Import-OfficeCsv -Path $path -InferSchema | Select-Object Id, Owner, Comment diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/BasicDocument.docx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/BasicDocument.docx new file mode 100644 index 00000000..0dbec08a Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/BasicDocument.docx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/Doc1.docx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Doc1.docx new file mode 100644 index 00000000..6f803809 Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Doc1.docx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/Doc1Updated.docx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Doc1Updated.docx new file mode 100644 index 00000000..ef624420 Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Doc1Updated.docx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/DocList.docx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/DocList.docx new file mode 100644 index 00000000..45ef3418 Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/DocList.docx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/Excel2.xlsx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Excel2.xlsx new file mode 100644 index 00000000..61fde40f Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Excel2.xlsx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/ExportToExcel.xlsx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/ExportToExcel.xlsx new file mode 100644 index 00000000..22ea146a Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/ExportToExcel.xlsx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/Test.html b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Test.html new file mode 100644 index 00000000..8f5ff9f1 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Test.html @@ -0,0 +1,41 @@ + + +
This is a test another test
TestTest2Test3
1TestOk
1TestOk
TestTest2Test3
diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/Test5.docx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Test5.docx new file mode 100644 index 00000000..f9e197e5 Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/Test5.docx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Documents/TestHTML.docx b/WebsiteArtifacts/apidocs/powershell/examples/Documents/TestHTML.docx new file mode 100644 index 00000000..e4672d3a Binary files /dev/null and b/WebsiteArtifacts/apidocs/powershell/examples/Documents/TestHTML.docx differ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint01-AddSlides.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint01-AddSlides.ps1 index 06220d21..4e37d141 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint01-AddSlides.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint01-AddSlides.ps1 @@ -1,18 +1,17 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'ExamplePowerPoint1.pptx' -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave -$slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Status Update' | Out-Null -Add-OfficePowerPointTextBox -Slide $slide1 -Text 'Generated with PSWriteOffice' -X 80 -Y 150 -Width 320 -Height 40 | Out-Null -Add-OfficePowerPointShape -Slide $slide1 -ShapeType Rectangle -X 80 -Y 210 -Width 320 -Height 120 -FillColor '#DDEEFF' -OutlineColor '#4472C4' -OutlineWidth 1 | Out-Null +$slide1 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Status Update' +Add-OfficePowerPointTextBox -Slide $slide1 -Text 'Generated with PSWriteOffice' -X 80 -Y 150 -Width 320 -Height 40 +Add-OfficePowerPointShape -Slide $slide1 -ShapeType Rectangle -X 80 -Y 210 -Width 320 -Height 120 -FillColor '#DDEEFF' -OutlineColor '#4472C4' -OutlineWidth 1 -$slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Next Steps' | Out-Null -Add-OfficePowerPointTextBox -Slide $slide2 -Text '1. Review numbers 2. Plan Q1 3. Ship' -X 80 -Y 150 -Width 360 -Height 80 | Out-Null +$slide2 = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Next Steps' +Add-OfficePowerPointTextBox -Slide $slide2 -Text '1. Review numbers 2. Plan Q1 3. Ship' -X 80 -Y 150 -Width 360 -Height 80 Save-OfficePowerPoint -Presentation $presentation Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint02-Basic.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint02-Basic.ps1 index 1e3e3d6b..48b400e6 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint02-Basic.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint02-Basic.ps1 @@ -1,11 +1,10 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'BasicExample.pptx' -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave -Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null +Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 Save-OfficePowerPoint -Presentation $presentation Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint04-Text.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint04-Text.ps1 index c0596444..335bf2bb 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint04-Text.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint04-Text.ps1 @@ -1,13 +1,12 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'ExamplePowerPoint4.pptx' -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave -$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Quarterly Report' | Out-Null -Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated with PSWriteOffice' -X 90 -Y 160 -Width 320 -Height 50 | Out-Null +$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Quarterly Report' +Add-OfficePowerPointTextBox -Slide $slide -Text 'Generated with PSWriteOffice' -X 90 -Y 160 -Width 320 -Height 50 Save-OfficePowerPoint -Presentation $presentation Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint05-Load.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint05-Load.ps1 index 195a15bb..cce0a1dc 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint05-Load.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint05-Load.ps1 @@ -1,11 +1,10 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'LoadExample.pptx' -$presentation = New-OfficePowerPoint -FilePath $path -Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null +$presentation = New-OfficePowerPoint -Path $path -NoSave +Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 Save-OfficePowerPoint -Presentation $presentation -$loaded = Get-OfficePowerPoint -FilePath $path +$loaded = Get-OfficePowerPoint -Path $path Write-Host "Loaded presentation with $($loaded.Slides.Count) slide(s)." diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint06-RemoveSlide.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint06-RemoveSlide.ps1 index f4c485f6..d27c785b 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint06-RemoveSlide.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint06-RemoveSlide.ps1 @@ -1,11 +1,10 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'ExamplePowerPoint6.pptx' -$presentation = New-OfficePowerPoint -FilePath $path -Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null -Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null +$presentation = New-OfficePowerPoint -Path $path -NoSave +Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 +Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 Remove-OfficePowerPointSlide -Presentation $presentation -Index 0 Save-OfficePowerPoint -Presentation $presentation diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint07-WhatIf.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint07-WhatIf.ps1 index 08fae844..dd100127 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint07-WhatIf.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint07-WhatIf.ps1 @@ -1,10 +1,9 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'WhatIfExample.pptx' -$presentation = New-OfficePowerPoint -FilePath $path -Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 | Out-Null +$presentation = New-OfficePowerPoint -Path $path -NoSave +Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 Save-OfficePowerPoint -Presentation $presentation -WhatIf Write-Host "WhatIf completed for $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint08-TablesAndShapes.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint08-TablesAndShapes.ps1 index 9b81e93c..6873e5da 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint08-TablesAndShapes.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint08-TablesAndShapes.ps1 @@ -1,12 +1,11 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'ExamplePowerPoint8-TablesAndShapes.pptx' -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave -$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Tables & Shapes' | Out-Null +$slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Tables & Shapes' $data = @( [PSCustomObject]@{ Product = 'Alpha'; Qty = 12; Revenue = 1200 } @@ -14,9 +13,9 @@ $data = @( [PSCustomObject]@{ Product = 'Gamma'; Qty = 20; Revenue = 1840 } ) -Add-OfficePowerPointTable -Slide $slide -Data $data -X 60 -Y 140 -Width 420 -Height 200 | Out-Null -Add-OfficePowerPointShape -Slide $slide -ShapeType Ellipse -X 520 -Y 140 -Width 140 -Height 140 -FillColor '#FFE699' -OutlineColor '#C65911' -OutlineWidth 1 | Out-Null -Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlights' -X 530 -Y 300 -Width 120 -Height 40 | Out-Null +Add-OfficePowerPointTable -Slide $slide -Data $data -X 60 -Y 140 -Width 420 -Height 200 +Add-OfficePowerPointShape -Slide $slide -ShapeType Ellipse -X 520 -Y 140 -Width 140 -Height 140 -FillColor '#FFE699' -OutlineColor '#C65911' -OutlineWidth 1 +Add-OfficePowerPointTextBox -Slide $slide -Text 'Highlights' -X 530 -Y 300 -Width 120 -Height 40 Save-OfficePowerPoint -Presentation $presentation Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint09-Placeholders.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint09-Placeholders.ps1 index 8a81a014..e3f74069 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint09-Placeholders.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint09-Placeholders.ps1 @@ -1,9 +1,8 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'ExamplePowerPoint9-Placeholders.pptx' -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave $layouts = Get-OfficePowerPointLayout -Presentation $presentation $layout = $layouts | Where-Object { $_.Type } | Select-Object -First 1 @@ -12,25 +11,25 @@ if (-not $layout) { } $slide = if ($layout.Type) { - Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layout.Type -Master $layout.MasterIndex + Add-OfficePowerPointSlide -Presentation $presentation -LayoutType $layout.Type -Master $layout.MasterIndex -PassThru } elseif ($layout.Name) { - Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layout.Name -Master $layout.MasterIndex + Add-OfficePowerPointSlide -Presentation $presentation -LayoutName $layout.Name -Master $layout.MasterIndex -PassThru } else { - Add-OfficePowerPointSlide -Presentation $presentation -Layout $layout.LayoutIndex -Master $layout.MasterIndex + Add-OfficePowerPointSlide -Presentation $presentation -Layout $layout.LayoutIndex -Master $layout.MasterIndex -PassThru } -Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Status Update' | Out-Null +Set-OfficePowerPointPlaceholderText -Slide $slide -PlaceholderType Title -Text 'Status Update' $layoutPlaceholders = Get-OfficePowerPointLayoutPlaceholder -Slide $slide $placeholder = $layoutPlaceholders | Where-Object { $_.PlaceholderType } | Select-Object -First 1 if ($placeholder) { - $placeholderType = $placeholder.PlaceholderType.Value + $placeholderType = $placeholder.PlaceholderType.ToString() Set-OfficePowerPointLayoutPlaceholderBounds -Presentation $presentation -Master $layout.MasterIndex -Layout $layout.LayoutIndex ` - -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 60 -Top 140 -Width 520 -Height 240 | Out-Null + -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 60 -Top 140 -Width 520 -Height 240 Set-OfficePowerPointLayoutPlaceholderTextMargins -Presentation $presentation -Master $layout.MasterIndex -Layout $layout.LayoutIndex ` - -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 12 -Top 8 -Right 12 -Bottom 8 | Out-Null + -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Left 12 -Top 8 -Right 12 -Bottom 8 Set-OfficePowerPointLayoutPlaceholderTextStyle -Presentation $presentation -Master $layout.MasterIndex -Layout $layout.LayoutIndex ` - -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Style Body -FontSize 18 -Bold $true | Out-Null + -PlaceholderType $placeholderType -Index $placeholder.PlaceholderIndex -Style Body -FontSize 18 -Bold $true } Save-OfficePowerPoint -Presentation $presentation diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint10-Dsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint10-Dsl.ps1 index 39b555ef..83b273c3 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint10-Dsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint10-Dsl.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'DslExample.pptx' $data = @( [pscustomobject]@{ Item = 'Alpha'; Qty = 10 } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint11-InspectionDsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint11-InspectionDsl.ps1 index 25381697..5738608e 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint11-InspectionDsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint11-InspectionDsl.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'DslInspection.pptx' New-OfficePowerPoint -Path $path { diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint12-LayoutDsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint12-LayoutDsl.ps1 index 990f7326..4dcfe94a 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint12-LayoutDsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint12-LayoutDsl.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'LayoutDslExample.pptx' New-OfficePowerPoint -Path $path { diff --git a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1 index ed34d4f7..eab9962b 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/ExamplePowerPoint13-LayoutPlaceholderAliases.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot 'Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'LayoutPlaceholderAliases.pptx' New-OfficePowerPoint -Path $path { diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAdvanced.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAdvanced.ps1 index 1b4c5ec1..5cf9a798 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAdvanced.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAdvanced.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Example-ExcelAdvanced.xlsx' $data = @( [pscustomobject]@{ Region = 'North'; Quarter = 'Q1'; Sales = 1200; Status = 'New' } @@ -29,7 +28,7 @@ New-OfficeExcel -Path $path { ExcelComment -Cell 'C2' -Text 'Review this value' if (Test-Path $imagePath) { - ExcelImage -Path $imagePath -Range 'I8:J12' -Name 'OfficeIMOLogo' -AltText 'OfficeIMO logo' | Out-Null + ExcelImage -Path $imagePath -Range 'I8:J12' -Name 'OfficeIMOLogo' -AltText 'OfficeIMO logo' } } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAliasDsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAliasDsl.ps1 index 2216f650..196e2c8b 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAliasDsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelAliasDsl.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $orders = @( [PSCustomObject]@{ Item = 'Router'; Qty = 15; Status = 'In Stock' } [PSCustomObject]@{ Item = 'Switch'; Qty = 4; Status = 'Low' } @@ -18,6 +17,6 @@ New-OfficeExcel -Path $path { ExcelTable -Data $orders -TableName 'InventoryTable' } -} -PassThru | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelBasic.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelBasic.ps1 index f6a0398b..fed4ca8a 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelBasic.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelBasic.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $data = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; YoY = 0.12 } [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; YoY = 0.22 } @@ -15,6 +14,6 @@ New-OfficeExcel -Path $path { Add-OfficeExcelTable -Data $data -TableName 'Sales' -TableStyle 'TableStyleMedium9' Set-OfficeExcelColumn -Column 1 -AutoFit } -} -PassThru | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelChartFormatting.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelChartFormatting.ps1 index 39c633a2..e18cd28c 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelChartFormatting.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelChartFormatting.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-ChartFormatting.xlsx' $rows = @( [PSCustomObject]@{ Region = 'NA'; Revenue = 100 } @@ -15,10 +14,10 @@ New-OfficeExcel -Path $path { $chart = Add-OfficeExcelChart -TableName 'Sales' -Row 6 -Column 1 -Type Pie -Title 'Revenue Mix' -PassThru $chart | - Set-OfficeExcelChartLegend -Position Right | - Set-OfficeExcelChartDataLabels -ShowValue $true -ShowPercent $true -Position OutsideEnd -NumberFormat '0.0%' -SourceLinked:$false | - Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 | Out-Null + Set-OfficeExcelChartLegend -Position Right -PassThru | + Set-OfficeExcelChartDataLabels -ShowValue $true -ShowPercent $true -Position OutsideEnd -NumberFormat '0.0%' -SourceLinked:$false -PassThru | + Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 } -} | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1 index 77bb9f8e..100f4ef1 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelDbaClientXRoundTrip.ps1 @@ -78,7 +78,7 @@ try { -AutoFit ` -FreezeTopRow ` -BoldTopRow ` - -ErrorAction Stop | Out-Null + -ErrorAction Stop $table = Import-OfficeExcel ` -Path $Path ` diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlReview.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlReview.ps1 index ec255af8..a3aa6144 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlReview.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlReview.ps1 @@ -1,8 +1,7 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $workbookPath = Join-Path $documents 'Excel-HtmlReview.xlsx' $semanticHtmlPath = Join-Path $documents 'Excel-HtmlReview.semantic.html' $visualHtmlPath = Join-Path $documents 'Excel-HtmlReview.visual.html' @@ -21,10 +20,10 @@ New-OfficeExcel -Path $workbookPath { Set-OfficeExcelCell -Cell 'E1' -Value 'Total incidents' Set-OfficeExcelColumn -Column 1, 2, 3, 4, 5 -AutoFit } -} -PassThru | Out-Null +} -ConvertTo-OfficeExcelHtml -Path $workbookPath -OutputPath $semanticHtmlPath -Title 'Service Workbook Review' -PassThru | Out-Null -ConvertTo-OfficeExcelHtml -Path $workbookPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Service Workbook Visual Review' -PassThru | Out-Null +ConvertTo-OfficeExcelHtml -Path $workbookPath -OutputPath $semanticHtmlPath -Title 'Service Workbook Review' +ConvertTo-OfficeExcelHtml -Path $workbookPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Service Workbook Visual Review' Write-Host "Workbook saved to $workbookPath" Write-Host "Semantic HTML saved to $semanticHtmlPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1 index 8ad5d00c..1c59561a 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelHtmlTablesViaPSParseHTML.ps1 @@ -2,8 +2,7 @@ Import-Module PSParseHTML -ErrorAction Stop Import-Module PSWriteOffice -ErrorAction Stop $outputDirectory = Join-Path $PSScriptRoot '..\Documents' -New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null - +$null = New-Item -ItemType Directory -Path $outputDirectory -Force $htmlPath = Join-Path $outputDirectory 'HtmlTables.html' $excelPath = Join-Path $outputDirectory 'HtmlTables.xlsx' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelInternalLinks.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelInternalLinks.ps1 index 943816c0..af630744 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelInternalLinks.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelInternalLinks.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-InternalLinks.xlsx' $rows = @( [PSCustomObject]@{ Sheet = 'Alpha'; Target = 'Alpha' } @@ -24,6 +23,6 @@ New-OfficeExcel -Path $path { Add-OfficeExcelSheet -Name 'Beta' -Content { Set-OfficeExcelCell -Address 'A1' -Value 'Beta Home' } -} | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelLinksAndImages.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelLinksAndImages.ps1 index 55729dee..1c36fe33 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelLinksAndImages.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelLinksAndImages.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-LinksAndImages.xlsx' New-OfficeExcel -Path $path { @@ -13,6 +12,6 @@ New-OfficeExcel -Path $path { Set-OfficeExcelHostHyperlink -Address 'B2' -Url 'https://learn.microsoft.com/office/open-xml/' Add-OfficeExcelImageFromUrl -Address 'D2' -Url 'https://raw.githubusercontent.com/github/explore/main/topics/powershell/powershell.png' -WidthPixels 48 -HeightPixels 48 } -} | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelModifyExistingTables.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelModifyExistingTables.ps1 index 776d317d..c97e787c 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelModifyExistingTables.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelModifyExistingTables.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-ModifyExistingTables.xlsx' $initialRows = @( @@ -16,7 +15,7 @@ New-OfficeExcel -Path $path { ExcelSheet 'Notes' { Set-OfficeExcelCell -Address A1 -Value 'This workbook is modified after it is created.' } -} | Out-Null +} # Second pass: append rows to the named table without rebuilding the workbook through the DSL. $workbook = Get-OfficeExcel -Path $path @@ -26,8 +25,7 @@ try { Service = 'File Services' Status = 'Ready' Owner = 'Storage' - }) -PassThru | - Out-Null + }) -PassThru $moreRows = @( [PSCustomObject]@{ Service = 'Network'; Status = 'Investigating'; Owner = 'Platform' } @@ -35,8 +33,7 @@ try { ) $workbook | - Add-OfficeExcelTableRow -Sheet Readiness -TableName ServiceReadiness -InputObject $moreRows | - Out-Null + Add-OfficeExcelTableRow -Sheet Readiness -TableName ServiceReadiness -InputObject $moreRows } finally { Close-OfficeExcel -Document $workbook -Save } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelNavigationAndRanges.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelNavigationAndRanges.ps1 index e1a51040..3936b71c 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelNavigationAndRanges.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelNavigationAndRanges.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-NavigationAndRanges.xlsx' $rows = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000 } @@ -19,7 +18,7 @@ New-OfficeExcel -Path $path { ExcelRow -Row 2 -Values 'Generated', (Get-Date -Format 'yyyy-MM-dd') } ExcelTableOfContents -IncludeNamedRanges -} | Out-Null +} Write-Host "Workbook saved to $path" Write-Host '' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelPictures.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelPictures.ps1 index 128daeaa..34ba8dca 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelPictures.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelPictures.ps1 @@ -1,8 +1,7 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-Pictures.xlsx' $imagePath = Join-Path $PSScriptRoot '..\Word\Example-WordTableCells.fixture.png' @@ -21,6 +20,6 @@ New-OfficeExcel -Path $path { ExcelColumn -ColumnName C -Width 18 ExcelColumn -ColumnName E -Width 24 } -} | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelReadObjects.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelReadObjects.ps1 index 288969a3..39299927 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelReadObjects.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelReadObjects.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-ReadObjects.xlsx' $rows = @( [PSCustomObject]@{ Region = 'NA'; Revenue = 100 } @@ -17,7 +16,7 @@ New-OfficeExcel -Path $path { Set-OfficeExcelHeaderFooter -HeaderCenter 'Demo' -FooterRight 'Page &P of &N' Invoke-OfficeExcelAutoFit -Columns } -} | Out-Null +} $data = Get-OfficeExcelData -Path $path -Sheet 'Data' $data | Format-Table diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelTablesAndRanges.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelTablesAndRanges.ps1 index 4b951392..81d233b9 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelTablesAndRanges.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelTablesAndRanges.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $data = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; Owner = 'Ada' } [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; Owner = 'Linus' } @@ -18,7 +17,7 @@ New-OfficeExcel -Path $path { ExcelSheet 'Notes' { ExcelCell -Address 'A1' -Value 'Generated by PSWriteOffice' } -} | Out-Null +} Write-Host "Workbook saved to $path" Write-Host 'Tables:' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelUrlLinks.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelUrlLinks.ps1 index ce3cffe3..4f182c2d 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelUrlLinks.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Example-ExcelUrlLinks.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Excel-UrlLinks.xlsx' $rows = @( [PSCustomObject]@{ RFC = 'rfc7208'; Spec = 'rfc5321' } @@ -18,6 +17,6 @@ New-OfficeExcel -Path $path { Set-OfficeExcelUrlLinksByHeader -Header 'RFC' -TableName 'LinksTable' -UrlScript { param($text) "https://datatracker.ietf.org/doc/html/$text" } -TitleScript { param($text) "Open $text" } Set-OfficeExcelUrlLinks -Range 'D2:D3' -UrlScript { param($text) "https://datatracker.ietf.org/doc/html/$text" } } -} | Out-Null +} Write-Host "Workbook saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-AppendAndReplace.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-AppendAndReplace.ps1 new file mode 100644 index 00000000..e6e88654 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-AppendAndReplace.ps1 @@ -0,0 +1,17 @@ +$path = '.\Daily-Orders.xlsx' +$morning = @( + [pscustomobject]@{ Order = 'SO-1001'; Owner = 'Sales'; Status = 'Ready' } + [pscustomobject]@{ Order = 'SO-1002'; Owner = 'Sales'; Status = 'Review' } +) +$afternoon = @( + [pscustomobject]@{ Order = 'SO-1003'; Owner = 'Support'; Status = 'Ready' } +) + +$morning | Export-OfficeExcel -Path $path -WorksheetName 'Orders' -TableName 'Orders' -AutoFit +$afternoon | Export-OfficeExcel -Path $path -WorksheetName 'Orders' -TableName 'Orders' -Append -AppendToTable + +$summary = @( + [pscustomobject]@{ Status = 'Ready'; Count = 2 } + [pscustomobject]@{ Status = 'Review'; Count = 1 } +) +$summary | Export-OfficeExcel -Path $path -WorksheetName 'Summary' -TableName 'Summary' -ClearSheet -AutoFit diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-BudgetDashboard.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-BudgetDashboard.ps1 new file mode 100644 index 00000000..3cb937ba --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-BudgetDashboard.ps1 @@ -0,0 +1,35 @@ +$path = '.\Budget-Dashboard.xlsx' +$budget = @( + [pscustomobject]@{ Department = 'Engineering'; Budget = 240000; Actual = 218500; Forecast = 236000 } + [pscustomobject]@{ Department = 'Operations'; Budget = 160000; Actual = 151200; Forecast = 164000 } + [pscustomobject]@{ Department = 'Sales'; Budget = 190000; Actual = 177800; Forecast = 188500 } + [pscustomobject]@{ Department = 'Support'; Budget = 110000; Actual = 104300; Forecast = 109000 } +) + +ExcelNew -Path $path { + ExcelSheet 'Dashboard' { + ExcelGridlines -Hide + ExcelCell -Address A1 -Value 'Department Budget Dashboard' + ExcelCell -Address A3 -Value 'Total budget' + ExcelCell -Address B3 -Formula 'SUM(Detail!B2:B5)' -NumberFormat '$#,##0' + ExcelCell -Address D3 -Value 'Actual spend' + ExcelCell -Address E3 -Formula 'SUM(Detail!C2:C5)' -NumberFormat '$#,##0' + ExcelCell -Address G3 -Value 'Forecast variance' + ExcelCell -Address H3 -Formula 'SUM(Detail!D2:D5)-SUM(Detail!B2:B5)' -NumberFormat '$#,##0;[Red]-$#,##0' + ExcelOrientation -Orientation Landscape + ExcelPageSetup -FitToWidth 1 -FitToHeight 0 + } + + ExcelSheet 'Detail' { + ExcelTable -Data $budget -TableName 'DepartmentBudget' -StartRow 1 -StartColumn 1 -TableStyle 'TableStyleMedium4' -AutoFit + ExcelFreeze -TopRows 1 + ExcelConditionalDataBar -Range 'C2:C5' -Color '#5B9BD5' + ExcelConditionalIconSet -Range 'D2:D5' -IconSet ThreeTrafficLights1 + foreach ($header in 'Budget', 'Actual', 'Forecast') { + ExcelColumnStyleByHeader -Header $header -NumberFormat '$#,##0' -AutoFit + } + ExcelChart -Range 'A1:D5' -Row 7 -Column 1 -Type ColumnClustered -Title 'Budget, actual, and forecast' -WidthPixels 780 -HeightPixels 340 + } + + ExcelTableOfContents -SheetName 'Index' -AddBackLinks -BackLinkText 'Back to Index' +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-CompareWorkbooks.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-CompareWorkbooks.ps1 new file mode 100644 index 00000000..34fb89ef --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-CompareWorkbooks.ps1 @@ -0,0 +1,18 @@ +$baseline = '.\Excel-Baseline.xlsx' +$candidate = '.\Excel-Candidate.xlsx' + +ExcelNew -Path $baseline { + ExcelSheet 'Data' { + ExcelCell -Address A1 -Value 'Status' + ExcelCell -Address A2 -Value 'Draft' + } +} + +ExcelNew -Path $candidate { + ExcelSheet 'Data' { + ExcelCell -Address A1 -Value 'Status' + ExcelCell -Address A2 -Value 'Ready' + } +} + +Compare-OfficeExcelWorkbook -Path $baseline -DifferencePath $candidate diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ImportDelimited.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ImportDelimited.ps1 new file mode 100644 index 00000000..e8208d10 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ImportDelimited.ps1 @@ -0,0 +1,14 @@ +$csv = '.\Regional-Sales.csv' +$workbook = '.\Regional-Sales.xlsx' + +ExcelNew -Path $workbook { + ExcelSheet 'Readme' { + ExcelCell -Address A1 -Value 'Imported from Regional-Sales.csv' + } +} + +Import-OfficeExcelDelimitedText ` + -Path $workbook ` + -SourcePath $csv ` + -Delimiter ';' ` + -SheetName 'Sales' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-MergeWorkbooks.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-MergeWorkbooks.ps1 new file mode 100644 index 00000000..a02275df --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-MergeWorkbooks.ps1 @@ -0,0 +1,25 @@ +$target = '.\Excel-Consolidated.xlsx' +$source = '.\Excel-Regional-Source.xlsx' + +ExcelNew -Path $target { + ExcelSheet 'Summary' { + ExcelCell -Address A1 -Value 'Consolidated service report' + } +} + +ExcelNew -Path $source { + ExcelSheet 'North' { + ExcelCell -Address A1 -Value 'North region' + ExcelCell -Address B1 -Value 42 + } + ExcelSheet 'South' { + ExcelCell -Address A1 -Value 'South region' + ExcelCell -Address B1 -Value 37 + } +} + +Join-OfficeExcelWorkbook ` + -Path $target ` + -SourcePath $source ` + -SourceSheet 'North', 'South' ` + -SheetNamePrefix 'Region ' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ObjectComposition.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ObjectComposition.ps1 new file mode 100644 index 00000000..ffc167eb --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ObjectComposition.ps1 @@ -0,0 +1,13 @@ +$path = '.\Excel-Object-Composition.xlsx' +$projects = @( + [pscustomobject]@{ Project = 'Atlas'; Owner = 'Operations'; Progress = 0.80 } + [pscustomobject]@{ Project = 'Beacon'; Owner = 'Security'; Progress = 0.55 } +) + +$workbook = New-OfficeExcel -Path $path -NoSave +$sheet = $workbook | Add-OfficeExcelSheet -Name 'Projects' -PassThru +$sheet | Set-OfficeExcelCell -Address A1 -Value 'Delivery portfolio' -BackgroundColor '#D9EAF7' +Add-OfficeExcelTable -Worksheet $sheet -InputObject $projects -StartRow 3 -TableName 'Projects' -AutoFit +Set-OfficeExcelCell -Document $workbook -Sheet 'Projects' -Address C4 -NumberFormat '0%' +$workbook | Save-OfficeExcel +$workbook | Close-OfficeExcel diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-PivotAndSparklines.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-PivotAndSparklines.ps1 new file mode 100644 index 00000000..1114dd75 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-PivotAndSparklines.ps1 @@ -0,0 +1,15 @@ +$path = '.\Sales-Analysis.xlsx' +$sales = @( + [pscustomobject]@{ Region = 'North'; Month = 'Jan'; Revenue = 120; Feb = 128; Mar = 141 } + [pscustomobject]@{ Region = 'North'; Month = 'Feb'; Revenue = 128; Feb = 132; Mar = 145 } + [pscustomobject]@{ Region = 'South'; Month = 'Jan'; Revenue = 95; Feb = 104; Mar = 111 } + [pscustomobject]@{ Region = 'South'; Month = 'Feb'; Revenue = 104; Feb = 109; Mar = 118 } +) + +ExcelNew -Path $path { + ExcelSheet 'Sales' { + ExcelTable -Data $sales -TableName 'Sales' -AutoFit + ExcelPivotTable -SourceRange 'A1:C5' -DestinationCell 'G2' -Name 'RevenueByRegion' -RowField Region -ColumnField Month -DataField Revenue + ExcelSparkline -DataRange 'D2:F5' -LocationRange 'G8:G11' -Type Line -ShowMarkers -ShowHighLow + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ProjectTracker.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ProjectTracker.ps1 new file mode 100644 index 00000000..fddcd401 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ProjectTracker.ps1 @@ -0,0 +1,31 @@ +$path = '.\Project-Tracker.xlsx' +$tasks = @( + [pscustomobject]@{ Task = 'Confirm scope'; Owner = 'Product'; Status = 'Done'; Progress = 100; Due = '2026-08-21' } + [pscustomobject]@{ Task = 'Build API'; Owner = 'Engineering'; Status = 'In progress'; Progress = 70; Due = '2026-08-28' } + [pscustomobject]@{ Task = 'Prepare pilot'; Owner = 'Operations'; Status = 'Blocked'; Progress = 25; Due = '2026-09-04' } + [pscustomobject]@{ Task = 'Publish runbook'; Owner = 'Support'; Status = 'Not started'; Progress = 0; Due = '2026-09-08' } +) + +ExcelNew -Path $path { + ExcelSheet 'Tracker' { + ExcelTable -Data $tasks -TableName 'ProjectTasks' -StartRow 1 -StartColumn 1 -TableStyle 'TableStyleMedium9' -AutoFit + ExcelFreeze -TopRows 1 + ExcelValidationList -TableName 'ProjectTasks' -HeaderName 'Status' ` + -Values 'Not started', 'In progress', 'Blocked', 'Done' + ExcelConditionalColorScale -Range 'D2:D20' -StartColor '#FEE2E2' -EndColor '#DCFCE7' + ExcelConditionalRule -TableName 'ProjectTasks' -HeaderName 'Status' -RuleType ContainsText -Text 'Blocked' + ExcelChart -Range 'A1:D5' -Row 7 -Column 1 -Type BarClustered -Title 'Task progress' -WidthPixels 720 -HeightPixels 320 + ExcelHeaderFooter -HeaderCenter 'Project tracker' -FooterRight 'Page &P of &N' + ExcelOrientation -Orientation Landscape + ExcelPageSetup -FitToWidth 1 -FitToHeight 0 + } + + ExcelSheet 'Instructions' { + ExcelCell -Address A1 -Value 'How to use this tracker' + ExcelCell -Address A3 -Value '1. Add tasks to the ProjectTasks table.' + ExcelCell -Address A4 -Value '2. Choose a status from the validation list.' + ExcelCell -Address A5 -Value '3. Update progress; the color scale and chart follow the data.' + } + + ExcelTableOfContents -SheetName 'Index' -AddBackLinks -BackLinkText 'Back to Index' +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-QuickExport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-QuickExport.ps1 new file mode 100644 index 00000000..5ee214e3 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-QuickExport.ps1 @@ -0,0 +1,13 @@ +$orders = @( + [pscustomobject]@{ Order = 'SO-1001'; Customer = 'Northwind'; Total = 1250.50; Due = [datetime]'2026-09-05' } + [pscustomobject]@{ Order = 'SO-1002'; Customer = 'Contoso'; Total = 840.00; Due = [datetime]'2026-09-08' } +) + +$orders | Export-OfficeExcel ` + -Path '.\Orders.xlsx' ` + -WorksheetName 'Orders' ` + -TableName 'Orders' ` + -CurrencyColumn Total ` + -DateColumn Due ` + -AutoFit ` + -FreezeTopRow diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ReadAndFilter.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ReadAndFilter.ps1 new file mode 100644 index 00000000..4015b15d --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-ReadAndFilter.ps1 @@ -0,0 +1,16 @@ +$path = '.\Excel-Read-And-Filter.xlsx' +$rows = @( + [pscustomobject]@{ Service = 'Identity'; Owner = 'IAM'; Incidents = 1; Status = 'Ready' } + [pscustomobject]@{ Service = 'Messaging'; Owner = 'Collaboration'; Incidents = 5; Status = 'Review' } + [pscustomobject]@{ Service = 'Files'; Owner = 'Storage'; Incidents = 0; Status = 'Ready' } +) + +ExcelNew -Path $path { + ExcelSheet 'Services' { + ExcelTable -Data $rows -TableName 'ServiceHealth' -AutoFit + } +} + +Import-OfficeExcel -Path $path -WorksheetName 'Services' | + Where-Object { $_.Status -eq 'Review' -or $_.Incidents -ge 3 } | + Select-Object Service, Owner, Incidents, Status diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-TemplateInvoice.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-TemplateInvoice.ps1 new file mode 100644 index 00000000..115f6fda --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-TemplateInvoice.ps1 @@ -0,0 +1,19 @@ +$template = '.\Invoice-Template.xlsx' +$invoice = '.\Invoice-1042.xlsx' + +ExcelNew -Path $template { + ExcelSheet 'Invoice' { + ExcelCell -Address A1 -Value 'Invoice {{Number}}' + ExcelCell -Address A3 -Value 'Customer: {{Customer}}' + ExcelCell -Address A5 -Value 'Amount: {{Amount:currency}}' + ExcelCell -Address A7 -Value 'Due: {{Due:date}}' + } +} + +Copy-Item -Path $template -Destination $invoice +Invoke-OfficeExcelTemplate -Path $invoice -Value @{ + Number = '1042' + Customer = 'Northwind Traders' + Amount = 1840.50 + Due = [datetime]'2026-09-15' +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-UpdateExisting.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-UpdateExisting.ps1 new file mode 100644 index 00000000..63b33581 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Excel/Recipe-Excel-UpdateExisting.ps1 @@ -0,0 +1,21 @@ +$path = '.\Excel-Updated-Existing.xlsx' +$rows = @( + [pscustomobject]@{ Service = 'Identity'; Status = 'Draft'; Owner = 'IAM' } + [pscustomobject]@{ Service = 'Messaging'; Status = 'Draft'; Owner = 'Collaboration' } +) + +ExcelNew -Path $path { + ExcelSheet 'Readiness' { + ExcelTable -Data $rows -TableName 'Readiness' -AutoFit + } +} + +Update-OfficeExcelText -Path $path -Sheet 'Readiness' -OldValue 'Draft' -NewValue 'Ready' + +Edit-OfficeExcelRow -Path $path -Sheet 'Readiness' -ScriptBlock { + param($row) + + if ($row.CellByHeader('Service').Value -eq 'Messaging') { + $row.Set('Owner', 'Productivity') + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1 new file mode 100644 index 00000000..50661f8f --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Integrations/Recipe-Mailozaurr-PdfDelivery.ps1 @@ -0,0 +1,34 @@ +param( + [string] $SmtpServer = 'smtp.example.com', + [string] $From = 'reports@example.com', + [string] $To = 'operations@example.com', + [string] $OutputPath = '.\Daily-Service-Report.pdf', + [switch] $Send +) + +Import-Module PSWriteOffice -ErrorAction Stop +Import-Module Mailozaurr -ErrorAction Stop + +$services = @( + [pscustomobject]@{ Service = 'Directory'; Status = 'Healthy'; Incidents = 0 } + [pscustomobject]@{ Service = 'Messaging'; Status = 'Attention'; Incidents = 2 } + [pscustomobject]@{ Service = 'Database'; Status = 'Healthy'; Incidents = 0 } +) + +New-OfficePdf -Path $OutputPath -Content { + Add-OfficePdfHeading -Text 'Daily service report' + Add-OfficePdfParagraph -Text "Generated $((Get-Date).ToString('u'))" + Add-OfficePdfTable -InputObject $services +} + +$mail = @{ + From = $From + To = $To + Subject = 'Daily service report' + Body = 'The report generated by PSWriteOffice is attached.' + SmtpServer = $SmtpServer + Attachment = $OutputPath + WhatIf = -not $Send +} + +Send-EmailMessage @mail diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1 new file mode 100644 index 00000000..eb9b335f --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Integrations/Recipe-PSEventViewer-OfficeReport.ps1 @@ -0,0 +1,48 @@ +param( + [string] $OutputDirectory = '.', + [string] $LogName = 'System', + [int] $MaxEvents = 200 +) + +Import-Module PSEventViewer -ErrorAction Stop +Import-Module PSWriteOffice -ErrorAction Stop + +$events = @(Get-EVXEvent ` + -LogName $LogName ` + -Level 1, 2, 3 ` + -TimePeriod Last24Hours ` + -ReadMode Message ` + -MaxEvents $MaxEvents) + +$rows = @($events | Select-Object TimeCreated, Id, ProviderName, LevelDisplayName, MachineName, Message) +if ($rows.Count -eq 0) { + $rows = @([pscustomobject]@{ + TimeCreated = Get-Date + Id = $null + ProviderName = $null + LevelDisplayName = 'Information' + MachineName = $env:COMPUTERNAME + Message = "No warning or error events were returned from $LogName in the last 24 hours." + }) +} + +$excelPath = Join-Path $OutputDirectory 'Event-Report.xlsx' +$wordPath = Join-Path $OutputDirectory 'Event-Report.docx' + +$rows | Export-OfficeExcel ` + -Path $excelPath ` + -WorksheetName 'Events' ` + -TableName 'EventReport' ` + -AutoFit ` + -FreezeTopRow + +New-OfficeWord -Path $wordPath -Content { + Add-OfficeWordParagraph -Text "Event report: $LogName" -Style Heading1 + Add-OfficeWordParagraph -Text "Warnings and errors returned: $($events.Count)" + Add-OfficeWordTable -InputObject $rows -Style GridTable4Accent1 -Layout AutoFitToWindow +} + +[pscustomobject]@{ + ExcelReport = Get-Item -LiteralPath $excelPath + WordReport = Get-Item -LiteralPath $wordPath +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownAdvanced.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownAdvanced.ps1 index f0d9a6a4..c595ca92 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownAdvanced.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownAdvanced.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Example-MarkdownAdvanced.md' $data = @( [pscustomobject]@{ Metric = 'Latency'; Value = '120ms' } @@ -33,6 +32,6 @@ New-OfficeMarkdown -Path $path { MarkdownCode -Language 'powershell' -Content 'Get-Service | Select-Object -First 5' MarkdownHorizontalRule MarkdownQuote -Text 'Availability is a feature.' -} -PassThru | Out-Null +} Write-Host "Markdown saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownDsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownDsl.ps1 index 3c95a28d..d3de7f2f 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownDsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Example-MarkdownDsl.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Example-MarkdownDsl.md' $data = @( [pscustomobject]@{ Name = 'Alpha'; Value = 1 } @@ -16,6 +15,6 @@ New-OfficeMarkdown -Path $path { MarkdownCode -Language 'powershell' -Content 'Get-Date' MarkdownHorizontalRule MarkdownQuote -Text 'Ship fast, learn faster.' -} -PassThru | Out-Null +} Write-Host "Markdown saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-DefinitionGuide.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-DefinitionGuide.ps1 new file mode 100644 index 00000000..5ff643e3 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-DefinitionGuide.ps1 @@ -0,0 +1,13 @@ +$path = '.\Operations-Glossary.md' + +MarkdownNew -Path $path { + MarkdownHeading -Level 1 -Text 'Operations glossary' + MarkdownDefinitionList -Definition @{ + SLO = 'The service level objective agreed with the owner.' + RTO = 'The target time to restore the service after an incident.' + RPO = 'The acceptable amount of data loss measured in time.' + } + MarkdownDetails -Summary 'How to use these terms' { + MarkdownParagraph -Text 'Record SLO, RTO, and RPO in the service review before approval.' + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-InspectContent.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-InspectContent.ps1 new file mode 100644 index 00000000..443e7042 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-InspectContent.ps1 @@ -0,0 +1,12 @@ +$path = '.\Markdown-Inspection.md' +MarkdownNew -Path $path { + MarkdownFrontMatter -Data @{ title = 'Service review'; owner = 'Operations' } + MarkdownHeading -Level 1 -Text 'Service review' + MarkdownParagraph -Text 'This document is inspected without regex parsing.' + MarkdownHeading -Level 2 -Text 'Controls' + MarkdownTable -InputObject @([pscustomobject]@{ Control = 'Backups'; Status = 'Ready' }) +} + +Get-OfficeMarkdownFrontMatter -Path $path +Get-OfficeMarkdownHeading -Path $path +Get-OfficeMarkdownTable -Path $path -AsObject diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-ObjectComposition.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-ObjectComposition.ps1 new file mode 100644 index 00000000..64f47ceb --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-ObjectComposition.ps1 @@ -0,0 +1,11 @@ +$path = '.\Markdown-Object-Composition.md' +$services = @( + [pscustomobject]@{ Service = 'Identity'; Status = 'Healthy' } + [pscustomobject]@{ Service = 'Messaging'; Status = 'Watch' } +) + +$document = New-OfficeMarkdown -Path $path -NoSave +Add-OfficeMarkdownHeading -Document $document -Level 1 -Text 'Service status' +Add-OfficeMarkdownParagraph -Document $document -Text 'This file was composed through an explicit Markdown document object.' +$document | Add-OfficeMarkdownTable -InputObject $services +$document | Save-OfficeMarkdown -Path $path diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-OperationsRunbook.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-OperationsRunbook.ps1 new file mode 100644 index 00000000..36d93898 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-OperationsRunbook.ps1 @@ -0,0 +1,28 @@ +$path = '.\Service-Restart-Runbook.md' +$checks = @( + [pscustomobject]@{ Check = 'Health endpoint'; Expected = 'HTTP 200'; Owner = 'Operations' } + [pscustomobject]@{ Check = 'Queue depth'; Expected = 'Below 100'; Owner = 'Application' } + [pscustomobject]@{ Check = 'Error rate'; Expected = 'Below 1%'; Owner = 'Monitoring' } +) + +MarkdownNew -Path $path { + MarkdownFrontMatter -Data @{ title = 'Service restart runbook'; owner = 'Operations'; reviewed = '2026-08-18' } + MarkdownTableOfContents -Title 'On this page' -PlaceAtTop -MinLevel 2 -MaxLevel 3 + MarkdownHeading -Level 1 -Text 'Service Restart Runbook' + MarkdownCallout -Kind warning -Title 'Production change' -Body 'Confirm the approved change window before running any restart command.' + + MarkdownHeading -Level 2 -Text 'Before the restart' + MarkdownTaskList -Items 'Confirm incident or change record', 'Notify the service owner', 'Capture current health metrics', 'Verify a rollback path' + + MarkdownHeading -Level 2 -Text 'Restart' + MarkdownCode -Language powershell -Content "Restart-Service -Name 'ExampleService' -PassThru`nGet-Service -Name 'ExampleService'" + + MarkdownHeading -Level 2 -Text 'Validate' + MarkdownTable -InputObject $checks + MarkdownCallout -Kind note -Title 'Evidence' -Body 'Attach command output and health screenshots to the change record.' + + MarkdownHeading -Level 2 -Text 'Rollback' + MarkdownDetails -Summary 'Show rollback steps' { + MarkdownList -Items 'Stop the new service version', 'Restore the previous configuration', 'Start the previous version', 'Repeat validation checks' + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-PublishHtml.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-PublishHtml.ps1 new file mode 100644 index 00000000..c373924f --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-PublishHtml.ps1 @@ -0,0 +1,15 @@ +$markdownPath = '.\Markdown-Publish-Source.md' +$htmlPath = '.\Markdown-Published.html' +MarkdownNew -Path $markdownPath { + MarkdownHeading -Level 1 -Text 'Operations handbook' + MarkdownCallout -Kind warning -Title 'Before deployment' -Body 'Confirm the maintenance window.' + MarkdownTaskList -Items 'Back up configuration', 'Notify users', 'Run health checks' +} + +ConvertTo-OfficeMarkdownHtml ` + -Path $markdownPath ` + -OutputPath $htmlPath ` + -DocumentMode ` + -Title 'Operations handbook' ` + -IncludeAnchorLinks ` + -ExternalLinksTargetBlank diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-ReleaseNotes.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-ReleaseNotes.ps1 new file mode 100644 index 00000000..3da57cd7 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-ReleaseNotes.ps1 @@ -0,0 +1,25 @@ +$path = '.\Release-Notes-4.2.0.md' +$changes = @( + [pscustomobject]@{ Area = 'Reports'; Change = 'Added weekly PDF summary'; Audience = 'Operators' } + [pscustomobject]@{ Area = 'Excel'; Change = 'Improved workbook validation'; Audience = 'Automation owners' } + [pscustomobject]@{ Area = 'PowerPoint'; Change = 'Added speaker-note templates'; Audience = 'Presenters' } +) + +MarkdownNew -Path $path { + MarkdownFrontMatter -Data @{ title = 'Release 4.2.0'; date = '2026-08-18'; tags = @('release', 'automation') } + MarkdownHeading -Level 1 -Text 'Release 4.2.0' + MarkdownParagraph -Text 'This release adds report delivery options and tighter validation for generated files.' + MarkdownCallout -Kind tip -Title 'Upgrade' -Body 'Test the release against one representative report before changing the production pin.' + + MarkdownHeading -Level 2 -Text 'What changed' + MarkdownTable -InputObject $changes + + MarkdownHeading -Level 2 -Text 'Upgrade checklist' + MarkdownTaskList -Items 'Update the module pin', 'Run the representative report', 'Inspect the generated files', 'Publish the approved version' + + MarkdownHeading -Level 2 -Text 'Install' + MarkdownCode -Language powershell -Content "Install-Module ExampleModule -RequiredVersion 4.2.0 -Scope CurrentUser" + + MarkdownHeading -Level 2 -Text 'Known limits' + MarkdownList -Items 'Existing templates are not modified automatically.', 'PDF signatures must be applied after content generation.' +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1 new file mode 100644 index 00000000..8332c346 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Markdown/Recipe-Markdown-WordRoundTrip.ps1 @@ -0,0 +1,11 @@ +$markdownPath = '.\Markdown-Word-Source.md' +$wordPath = '.\Markdown-Converted.docx' +$roundTripPath = '.\Markdown-Word-RoundTrip.md' +MarkdownNew -Path $markdownPath { + MarkdownHeading -Level 1 -Text 'Change plan' + MarkdownParagraph -Text 'The same source can be reviewed in Word and returned to Markdown.' + MarkdownList -Items 'Prepare', 'Approve', 'Deploy' +} + +ConvertFrom-OfficeWordMarkdown -Path $markdownPath -OutputPath $wordPath +ConvertTo-OfficeWordMarkdown -Path $wordPath -OutputPath $roundTripPath diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-OfficePdfExports.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-OfficePdfExports.ps1 new file mode 100644 index 00000000..f4befcbe --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-OfficePdfExports.ps1 @@ -0,0 +1,62 @@ +$ErrorActionPreference = 'Stop' + +Import-Module PSWriteOffice -ErrorAction Stop + +$documents = Join-Path $PSScriptRoot '..\Documents' +$null = New-Item -Path $documents -ItemType Directory -Force +$wordPath = Join-Path $documents 'Example-OfficePdfExport.docx' +$wordPdf = Join-Path $documents 'Example-OfficePdfExport-Word.pdf' +$excelPath = Join-Path $documents 'Example-OfficePdfExport.xlsx' +$excelPdf = Join-Path $documents 'Example-OfficePdfExport-Excel.pdf' +$markdownPath = Join-Path $documents 'Example-OfficePdfExport.md' +$markdownPdf = Join-Path $documents 'Example-OfficePdfExport-Markdown.pdf' +$powerPointPath = Join-Path $documents 'Example-OfficePdfExport.pptx' +$powerPointPdf = Join-Path $documents 'Example-OfficePdfExport-PowerPoint.pdf' + +$rows = @( + [pscustomobject]@{ Name = 'Alpha'; Status = 'Ready'; Count = 12 } + [pscustomobject]@{ Name = 'Beta'; Status = 'Review'; Count = 7 } +) + +New-OfficeWord -Path $wordPath { + WordParagraph -Text 'Word PDF export' -Style Heading1 + WordParagraph 'Create the source document, then choose the output format explicitly.' + WordTable -InputObject $rows -Layout AutoFitToWindow +} +Export-OfficeDocumentPdf -InputPath $wordPath -Path $wordPdf + +New-OfficeExcel -Path $excelPath { + ExcelSheet -Name 'Summary' { + ExcelTable -Data $rows + ExcelAutoFit + } +} +Export-OfficeDocumentPdf -InputPath $excelPath -Path $excelPdf + +New-OfficeMarkdown -Path $markdownPath { + MarkdownHeading -Level 1 -Text 'Markdown PDF export' + MarkdownParagraph 'Markdown keeps the same authoring mindset with format-appropriate simplification.' + MarkdownTable -InputObject $rows +} +$markdownOptions = New-OfficeMarkdownPdfOptions ` + -Title 'Markdown PDF export' ` + -Author 'PSWriteOffice' ` + -CreateOutlineFromHeadings +Export-OfficeDocumentPdf ` + -InputPath $markdownPath ` + -Path $markdownPdf ` + -MarkdownOptions $markdownOptions ` + -PdfWarningVariable markdownWarnings ` + -PdfConversionReportVariable markdownReport + +New-OfficePowerPoint -Path $powerPointPath { + PptSlide { + PptTitle -Title 'PowerPoint PDF export' + PptBullets -Bullets 'Create the deck', 'Export the PDF', 'Inspect generated output' + } +} +Export-OfficeDocumentPdf -InputPath $powerPointPath -Path $powerPointPdf + +Get-Item -LiteralPath $wordPdf, $excelPdf, $markdownPdf, $powerPointPdf | + Select-Object FullName, Length | + Format-Table -AutoSize diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-OfficePdfSidecars.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-OfficePdfSidecars.ps1 deleted file mode 100644 index 3cc8a7b5..00000000 --- a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-OfficePdfSidecars.ps1 +++ /dev/null @@ -1,50 +0,0 @@ -$ErrorActionPreference = 'Stop' - -Import-Module PSWriteOffice -ErrorAction Stop - -$documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - -$wordPath = Join-Path $documents 'Example-OfficePdfSidecar.docx' -$wordPdf = Join-Path $documents 'Example-OfficePdfSidecar-Word.pdf' -$excelPath = Join-Path $documents 'Example-OfficePdfSidecar.xlsx' -$excelPdf = Join-Path $documents 'Example-OfficePdfSidecar-Excel.pdf' -$markdownPath = Join-Path $documents 'Example-OfficePdfSidecar.md' -$markdownPdf = Join-Path $documents 'Example-OfficePdfSidecar-Markdown.pdf' -$powerPointPath = Join-Path $documents 'Example-OfficePdfSidecar.pptx' -$powerPointPdf = Join-Path $documents 'Example-OfficePdfSidecar-PowerPoint.pdf' - -$rows = @( - [pscustomobject]@{ Name = 'Alpha'; Status = 'Ready'; Count = 12 } - [pscustomobject]@{ Name = 'Beta'; Status = 'Review'; Count = 7 } -) - -New-OfficeWord -Path $wordPath -PdfPath $wordPdf { - WordParagraph -Text 'Word PDF sidecar' -Style Heading1 - WordParagraph 'The Word document and PDF sidecar are saved in one command.' - WordTable -InputObject $rows -Layout AutoFitToWindow -} | Out-Null - -New-OfficeExcel -Path $excelPath -PdfPath $excelPdf { - ExcelSheet -Name 'Summary' { - ExcelTable -Data $rows - ExcelAutoFit - } -} | Out-Null - -New-OfficeMarkdown -Path $markdownPath -PdfPath $markdownPdf { - MarkdownHeading -Level 1 -Text 'Markdown PDF sidecar' - MarkdownParagraph 'Markdown keeps the same authoring mindset with format-appropriate simplification.' - MarkdownTable -InputObject $rows -} | Out-Null - -New-OfficePowerPoint -Path $powerPointPath -PdfPath $powerPointPdf { - PptSlide { - PptTitle -Title 'PowerPoint PDF sidecar' - PptBullets -Bullets 'Create the deck', 'Save the PDF sidecar', 'Inspect generated output' - } -} | Out-Null - -Get-Item -LiteralPath $wordPdf, $excelPdf, $markdownPdf, $powerPointPdf | - Select-Object FullName, Length | - Format-Table -AutoSize diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfOperations.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfOperations.ps1 index 21e8f54d..0e072bad 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfOperations.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfOperations.ps1 @@ -4,7 +4,7 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' $splitDirectory = Join-Path $documents 'Example-PdfOperations-Split' -New-Item -Path $documents -ItemType Directory -Force | Out-Null +$null = New-Item -Path $documents -ItemType Directory -Force Remove-Item -Path $splitDirectory -Recurse -Force -ErrorAction SilentlyContinue $first = Join-Path $documents 'Example-PdfOperations-A.pdf' @@ -17,18 +17,18 @@ $stamped = Join-Path $documents 'Example-PdfOperations-Stamped.pdf' New-OfficePdf -Path $first { PdfHeading 'Operations Part A' PdfParagraph 'This source PDF is generated by PSWriteOffice.' -} | Out-Null +} New-OfficePdf -Path $second { PdfHeading 'Operations Part B' PdfParagraph 'This second PDF will be joined, split, rotated, stamped, and inspected.' -} | Out-Null +} -Join-OfficePdf -Path $first, $second -OutputPath $joined -PassThru | Out-Null -Split-OfficePdf -Path $joined -OutputDirectory $splitDirectory -Prefix 'part' | Out-Null -Set-OfficePdfPage -Path $joined -Rotation 90 -PageRange '2' -OutputPath $rotated | Out-Null -Set-OfficePdfMetadata -Path $rotated -OutputPath $metadata -Title 'PDF Operations Example' -Author 'PSWriteOffice' -Subject 'Existing PDF operations' | Out-Null -Add-OfficePdfStamp -Path $metadata -OutputPath $stamped -Text 'REVIEWED' -Color '#0F766E' -FontSize 22 -Rotation 12 -PageRange '1' | Out-Null +Join-OfficePdf -Path $first, $second -OutputPath $joined +Split-OfficePdf -Path $joined -OutputDirectory $splitDirectory -Prefix 'part' +Set-OfficePdfPage -Path $joined -Rotation 90 -PageRange '2' -OutputPath $rotated +Set-OfficePdfMetadata -Path $rotated -OutputPath $metadata -Title 'PDF Operations Example' -Author 'PSWriteOffice' -Subject 'Existing PDF operations' +Add-OfficePdfStamp -Path $metadata -OutputPath $stamped -Text 'REVIEWED' -Color '#0F766E' -FontSize 22 -Rotation 12 -PageRange '1' $markdown = ConvertTo-OfficePdfMarkdown -Path $stamped $info = Get-OfficePdfInfo -Path $stamped diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfReportDsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfReportDsl.ps1 index d0875f1e..8f29f755 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfReportDsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Example-PdfReportDsl.ps1 @@ -3,8 +3,7 @@ $ErrorActionPreference = 'Stop' Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Example-PdfReportDsl.pdf' $attachmentPath = Join-Path $documents 'Example-PdfReportDsl-notes.txt' Set-Content -LiteralPath $attachmentPath -Value 'Synthetic report notes embedded by PSWriteOffice.' -Encoding UTF8 @@ -66,7 +65,7 @@ New-OfficePdf -Path $path { PdfSpacer 10 PdfAttachment -Path $attachmentPath -Description 'Generated example notes' -} -PassThru | Out-Null +} $info = Get-OfficePdfInfo -Path $path [pscustomobject]@{ diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-AttachEvidence.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-AttachEvidence.ps1 new file mode 100644 index 00000000..387baf4a --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-AttachEvidence.ps1 @@ -0,0 +1,14 @@ +$evidence = '.\Evidence-Summary.pdf' +$report = '.\Report-With-Evidence.pdf' + +PdfNew -Path $evidence { + PdfHeading 'Evidence summary' + PdfParagraph 'The review completed successfully.' +} + +PdfNew -Path $report { + PdfTheme Report + PdfHeading 'Audit report' + PdfParagraph 'The supporting evidence is embedded in this PDF.' + PdfAttachment -Path $evidence -Name 'evidence-summary.pdf' -MimeType 'application/pdf' -Relationship Data -Description 'Supporting review evidence' +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-AuditReport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-AuditReport.ps1 new file mode 100644 index 00000000..3580cb8b --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-AuditReport.ps1 @@ -0,0 +1,41 @@ +$path = '.\Access-Audit-Report.pdf' +$findings = @( + [pscustomobject]@{ Id = 'A-01'; Severity = 'High'; Finding = 'Dormant privileged accounts'; Owner = 'Identity'; Due = '2026-08-28' } + [pscustomobject]@{ Id = 'A-02'; Severity = 'Medium'; Finding = 'Missing quarterly owner review'; Owner = 'Governance'; Due = '2026-09-04' } + [pscustomobject]@{ Id = 'A-03'; Severity = 'Low'; Finding = 'Inconsistent evidence naming'; Owner = 'Operations'; Due = '2026-09-11' } +) + +PdfNew -Path $path { + PdfTheme Report + PdfMetadata -Title 'Quarterly access audit' -Author 'Internal Audit' -Subject 'Synthetic access review example' + PdfPageSetup -PageSize A4 -Margin 40 + PdfHeader 'Quarterly Access Audit' + PdfFooter 'Internal | Page {page}/{pages}' + PdfPageBorder -Color '#334155' -Width 0.8 -Inset 20 + + PdfBookmark 'summary' + PdfHeading 'Quarterly Access Audit' -Level 1 + PdfPanel 'Overall result: remediation required. One high-severity finding must close before the next review.' + + PdfHeading 'Scope and method' -Level 2 + PdfList -Items 'Privileged directory roles', 'Dormant accounts', 'Quarterly owner attestations', 'Evidence retention' + + PdfHeading 'Findings' -Level 2 + PdfTable -InputObject $findings -Property Id,Severity,Finding,Owner,Due -HeaderFill '#334155' -HeaderTextColor '#FFFFFF' -RowStripeFill '#F8FAFC' -AutoFitColumns -KeepWithNext + + PdfPageBreak + PdfBookmark 'actions' + PdfHeading 'Remediation plan' -Level 1 + foreach ($finding in $findings) { + PdfHeading "$($finding.Id): $($finding.Finding)" -Level 2 + PdfText -Run @{ + Text = 'Owner: ', $finding.Owner, ' Due: ', $finding.Due, ' Severity: ', $finding.Severity + Bold = $true, $false, $true, $false, $true, $false + } + PdfFormField -Name "response-$($finding.Id)" -Type Text -Value 'Record the agreed action and evidence location.' -Width 480 -Height 42 + } + + PdfHeading 'Approval' -Level 2 + PdfFormField -Name 'audit-owner' -Type Text -Value 'Audit owner' -Width 230 + PdfFormField -Name 'review-status' -Type Choice -Options 'Draft', 'Ready for review', 'Approved' -Value 'Draft' -Width 230 +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ExtractText.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ExtractText.ps1 new file mode 100644 index 00000000..bd3b70f2 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ExtractText.ps1 @@ -0,0 +1,10 @@ +$path = '.\Searchable-Policy.pdf' + +PdfNew -Path $path { + PdfHeading 'Remote access policy' + PdfParagraph 'Privileged access is reviewed every 30 days.' + PdfParagraph 'Service owners record approval evidence.' +} + +$pages = Get-OfficePdfText -Path $path -ByPage +$pages | Select-Object PageNumber, Text diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-FormDataExchange.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-FormDataExchange.ps1 new file mode 100644 index 00000000..ac92e408 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-FormDataExchange.ps1 @@ -0,0 +1,14 @@ +$form = '.\Change-Request-Form.pdf' +$xfdf = '.\Change-Request-Form.xfdf' +$roundTrip = '.\Change-Request-RoundTrip.pdf' + +PdfNew -Path $form { + PdfHeading 'Change request' + PdfText 'Owner' + PdfFormField -Name Owner -Type Text -Value 'Platform' -Width 280 + PdfText 'Decision' + PdfFormField -Name Decision -Type Choice -Options Approve,Reject,Defer -Value Defer -Width 220 +} + +Export-OfficePdfXfdf -Path $form -OutputPath $xfdf +Import-OfficePdfXfdf -Path $form -XfdfPath $xfdf -OutputPath $roundTrip diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-Forms.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-Forms.ps1 new file mode 100644 index 00000000..8b530cda --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-Forms.ps1 @@ -0,0 +1,11 @@ +$path = '.\Pdf-Approval-Form.pdf' +PdfNew -Path $path { + PdfHeading 'Change approval' + PdfParagraph 'Complete the fields before submitting the document.' + PdfText 'Reviewer name' + PdfFormField -Name Reviewer -Type Text -Value 'Unassigned' -Width 320 -Height 24 + PdfText 'Decision' + PdfFormField -Name Decision -Type Choice -Options Approve,Reject,Defer -Value Defer -Width 220 -Height 24 + PdfText 'Evidence attached' + PdfFormField -Name EvidenceAttached -Type CheckBox -Checked -Width 18 -Height 18 +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-InspectAndPreflight.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-InspectAndPreflight.ps1 new file mode 100644 index 00000000..42e583bf --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-InspectAndPreflight.ps1 @@ -0,0 +1,13 @@ +$path = '.\Pdf-Inspection-Source.pdf' +PdfNew -Path $path -CreateOutlineFromHeadings { + PdfMetadata -Title 'Inspection source' -Author 'PSWriteOffice' + PdfHeading 'Summary' + PdfParagraph 'The service is ready for review.' + PdfPageBreak + PdfHeading 'Evidence' + PdfParagraph 'Evidence is retained for 90 days.' +} + +Get-OfficePdfInfo -Path $path +Get-OfficePdfPreflight -Path $path +Get-OfficePdfText -Path $path -ByPage diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-MergeAndSplit.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-MergeAndSplit.ps1 new file mode 100644 index 00000000..3e163c0b --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-MergeAndSplit.ps1 @@ -0,0 +1,17 @@ +$first = '.\Pdf-Pack-Part-A.pdf' +$second = '.\Pdf-Pack-Part-B.pdf' +$merged = '.\Pdf-Combined-Pack.pdf' +$splitDirectory = '.\Pdf-Combined-Pack-Pages' + +PdfNew -Path $first { + PdfHeading 'Part A' + PdfParagraph 'Operations summary.' +} + +PdfNew -Path $second { + PdfHeading 'Part B' + PdfParagraph 'Detailed evidence.' +} + +Join-OfficePdf -Path $first,$second -OutputPath $merged -PageSize A4 -ResizeMode Fit -ResizeMargin 18 +Split-OfficePdf -Path $merged -OutputDirectory $splitDirectory -Prefix 'page' -PagesPerDocument 1 diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-PositionedCanvas.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-PositionedCanvas.ps1 new file mode 100644 index 00000000..1a4cde49 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-PositionedCanvas.ps1 @@ -0,0 +1,18 @@ +$source = '.\Pdf-Canvas-Source.pdf' +$positioned = '.\Pdf-Positioned-Canvas.pdf' +PdfNew -Path $source { + PdfHeading 'Fixed-position review copy' + PdfParagraph 'Normal PdfText and PdfParagraph content remains in document flow.' + PdfPageBreak + PdfParagraph 'The canvas callback can place content differently on every page.' +} + +Add-OfficePdfCanvas -Path $source -OutputPath $positioned -Content { + PdfCanvasText -Run @( + TextRun 'Owner: ' -Bold + TextRun 'Platform' -Color '#0F766E' + TextRun ' | REVIEW COPY' -Italic + ) -X 36 -Y 24 -FontSize 10 + + PdfCanvasText 'Fixed at 36 × 780 points' -X 36 -Y 780 -FontSize 9 +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-RedactDetectedText.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-RedactDetectedText.ps1 new file mode 100644 index 00000000..59aec2ce --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-RedactDetectedText.ps1 @@ -0,0 +1,14 @@ +$source = '.\Pdf-Redaction-Source.pdf' +$redacted = '.\Pdf-Redacted.pdf' +PdfNew -Path $source { + PdfHeading 'Incident record' + PdfParagraph 'Visible owner: Operations' + PdfParagraph 'Secret account: 123-45-6789' + PdfParagraph 'Visible status: Closed' +} + +ConvertTo-OfficePdfRedacted ` + -Path $source ` + -OutputPath $redacted ` + -Text 'Secret account' ` + -FillColor '#111111' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ReorderPages.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ReorderPages.ps1 new file mode 100644 index 00000000..4e1f8b4e --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ReorderPages.ps1 @@ -0,0 +1,15 @@ +$source = '.\Review-Pack-Original.pdf' +$reordered = '.\Review-Pack-Reordered.pdf' + +PdfNew -Path $source { + PdfHeading 'Executive summary' + PdfParagraph 'The review requires one decision.' + PdfPageBreak + PdfHeading 'Evidence' + PdfParagraph 'Supporting measurements and observations.' + PdfPageBreak + PdfHeading 'Approval' + PdfParagraph 'Owner sign-off page.' +} + +Move-OfficePdfPage -Path $source -PageRange '3' -BeforePage 1 -OutputPath $reordered diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-SanitizeAndOptimize.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-SanitizeAndOptimize.ps1 new file mode 100644 index 00000000..0c1ea20a --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-SanitizeAndOptimize.ps1 @@ -0,0 +1,11 @@ +$source = '.\Pdf-Delivery-Source.pdf' +$sanitized = '.\Pdf-Delivery-Sanitized.pdf' +$optimized = '.\Pdf-Delivery-Optimized.pdf' +PdfNew -Path $source { + PdfMetadata -Title 'Delivery copy' -Author 'PSWriteOffice' + PdfHeading 'Delivery copy' + PdfParagraph ('Repeated delivery evidence. ' * 60) +} + +ConvertTo-OfficePdfSanitized -Path $source -OutputPath $sanitized +ConvertTo-OfficePdfOptimized -Path $sanitized -OutputPath $optimized -AllowLarger -PassThruReport diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ServiceInvoice.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ServiceInvoice.ps1 new file mode 100644 index 00000000..499c7f3f --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Pdf/Recipe-Pdf-ServiceInvoice.ps1 @@ -0,0 +1,44 @@ +$path = '.\Service-Invoice.pdf' +$lines = @( + [pscustomobject]@{ Description = 'Automation assessment'; Quantity = 1; UnitPrice = '$1,200.00'; Amount = '$1,200.00' } + [pscustomobject]@{ Description = 'Report implementation'; Quantity = 3; UnitPrice = '$850.00'; Amount = '$2,550.00' } + [pscustomobject]@{ Description = 'Handover workshop'; Quantity = 1; UnitPrice = '$600.00'; Amount = '$600.00' } +) + +PdfNew -Path $path { + PdfTheme Report + PdfMetadata -Title 'Service invoice INV-2026-0818' -Author 'Northwind Automation' + PdfPageSetup -PageSize A4 -Margin 42 + PdfHeader 'NORTHWIND AUTOMATION' + PdfFooter 'Invoice INV-2026-0818 | Page {page}/{pages}' + + PdfHeading 'SERVICE INVOICE' -Level 1 -Color '#0F766E' + PdfText -Run @( + @{ Text = 'Invoice: '; Bold = $true } + @{ Text = 'INV-2026-0818' } + @{ Text = ' Issue date: '; Bold = $true } + @{ Text = '2026-08-18' } + ) + PdfText -Run @( + @{ Text = 'Bill to: '; Bold = $true } + @{ Text = 'Contoso Ltd., 1 Example Street, London' } + ) + PdfHr -Color '#0F766E' -SpacingBefore 12 -SpacingAfter 14 + + PdfTable -InputObject $lines -Property Description, Quantity, UnitPrice, Amount ` + -Header 'Description', 'Qty', 'Unit price', 'Amount' ` + -HeaderFill '#0F766E' -HeaderTextColor '#FFFFFF' ` + -RightAlignNumeric -AutoFitColumns + + PdfText -Text 'Subtotal: $4,350.00' -Align Right -Bold + PdfText -Text 'Tax (20%): $870.00' -Align Right + PdfText -Text 'Total due: $5,220.00' -Align Right -Bold -FontSize 14 -Color '#0F766E' + + PdfPanel 'Payment terms: 14 days. Include the invoice number with the transfer.' + PdfHeading 'Questions' -Level 2 + PdfText -Run @( + @{ Text = 'Contact ' } + @{ Text = 'billing@example.com'; LinkUri = 'mailto:billing@example.com'; Color = '#2563EB' } + @{ Text = ' before the due date if any line needs correction.' } + ) +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1 index a48b1f3e..2401d668 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointBackgroundsAndLayout.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'PowerPoint-BackgroundsAndLayout.pptx' $imagePath = Join-Path $documents 'PowerPoint-Background.bmp' @@ -15,24 +14,24 @@ $imagePath = Join-Path $documents 'PowerPoint-Background.bmp' 0xFF, 0x00 [System.IO.File]::WriteAllBytes($imagePath, $bytes) -$ppt = New-OfficePowerPoint -FilePath $path -Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 30 -HeightCm 20 | Out-Null +$ppt = New-OfficePowerPoint -Path $path -NoSave +Set-OfficePowerPointSlideSize -Presentation $ppt -WidthCm 30 -HeightCm 20 -$slide1 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Content Grid' | Out-Null -Set-OfficePowerPointBackground -Slide $slide1 -Color '#F4F7FB' | Out-Null +$slide1 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'Content Grid' +Set-OfficePowerPointBackground -Slide $slide1 -Color '#F4F7FB' $columns = @(Get-OfficePowerPointLayoutBox -Presentation $ppt -ColumnCount 2 -MarginCm 1.5 -GutterCm 1.0) foreach ($index in 0..($columns.Count - 1)) { $box = $columns[$index] - Add-OfficePowerPointTextBox -Slide $slide1 -Text "Column $($index + 1)" -X $box.LeftPoints -Y $box.TopPoints -Width $box.WidthPoints -Height 48 | Out-Null + Add-OfficePowerPointTextBox -Slide $slide1 -Text "Column $($index + 1)" -X $box.LeftPoints -Y $box.TopPoints -Width $box.WidthPoints -Height 48 } -$slide2 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Image Background' | Out-Null -Set-OfficePowerPointBackground -Slide $slide2 -ImagePath $imagePath | Out-Null +$slide2 = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'Image Background' +Set-OfficePowerPointBackground -Slide $slide2 -ImagePath $imagePath Save-OfficePowerPoint -Presentation $ppt -$ppt.Dispose() +$ppt | Close-OfficePowerPoint Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCharts.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCharts.ps1 index d8a09e93..fb43bd28 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCharts.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCharts.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'PowerPoint-Charts.pptx' $rows = @( [PSCustomObject]@{ Month = 'Jan'; MonthNumber = 1; Sales = 10; Profit = 4 } @@ -9,21 +8,21 @@ $rows = @( [PSCustomObject]@{ Month = 'Mar'; MonthNumber = 3; Sales = 18; Profit = 8 } ) -$ppt = New-OfficePowerPoint -FilePath $path +$ppt = New-OfficePowerPoint -Path $path -NoSave -$columnSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $columnSlide -Title 'Column Chart' | Out-Null -Add-OfficePowerPointChart -Slide $columnSlide -Data $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Title 'Sales vs Profit' | Out-Null +$columnSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $columnSlide -Title 'Column Chart' +Add-OfficePowerPointChart -Slide $columnSlide -Data $rows -CategoryProperty Month -SeriesProperty Sales, Profit -Title 'Sales vs Profit' -$pieSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $pieSlide -Title 'Pie Chart' | Out-Null -Add-OfficePowerPointChart -Slide $pieSlide -Type Pie -Data $rows -CategoryProperty Month -SeriesProperty Sales -Title 'Sales Mix' | Out-Null +$pieSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $pieSlide -Title 'Pie Chart' +Add-OfficePowerPointChart -Slide $pieSlide -Type Pie -Data $rows -CategoryProperty Month -SeriesProperty Sales -Title 'Sales Mix' -$scatterSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $scatterSlide -Title 'Scatter Chart' | Out-Null -Add-OfficePowerPointChart -Slide $scatterSlide -Type Scatter -Data $rows -XProperty MonthNumber -YProperty Sales, Profit -Title 'Trend Scatter' | Out-Null +$scatterSlide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $scatterSlide -Title 'Scatter Chart' +Add-OfficePowerPointChart -Slide $scatterSlide -Type Scatter -Data $rows -XProperty MonthNumber -YProperty Sales, Profit -Title 'Trend Scatter' Save-OfficePowerPoint -Presentation $ppt -$ppt.Dispose() +$ppt | Close-OfficePowerPoint Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCopySlides.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCopySlides.ps1 index 94d73a67..e2800767 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCopySlides.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointCopySlides.ps1 @@ -1,19 +1,18 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'PowerPoint-CopySlides.pptx' -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave -$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 +$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $intro -Title 'Executive Summary' -Add-OfficePowerPointTextBox -Slide $intro -Text 'Quarterly revenue and margin summary' -X 80 -Y 150 -Width 360 -Height 60 | Out-Null +Add-OfficePowerPointTextBox -Slide $intro -Text 'Quarterly revenue and margin summary' -X 80 -Y 150 -Width 360 -Height 60 Set-OfficePowerPointNotes -Slide $intro -Text 'Use this for board prep.' -$closing = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 +$closing = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $closing -Title 'Appendix' -Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1 | Out-Null +Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1 Save-OfficePowerPoint -Presentation $presentation diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointHtmlReview.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointHtmlReview.ps1 index fdf92399..81074d81 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointHtmlReview.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointHtmlReview.ps1 @@ -1,31 +1,30 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $presentationPath = Join-Path $documents 'PowerPoint-HtmlReview.pptx' $semanticHtmlPath = Join-Path $documents 'PowerPoint-HtmlReview.semantic.html' $visualHtmlPath = Join-Path $documents 'PowerPoint-HtmlReview.visual.html' -$presentation = New-OfficePowerPoint -FilePath $presentationPath +$presentation = New-OfficePowerPoint -Path $presentationPath -NoSave -$statusSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $statusSlide -Title 'Monthly Service Review' | Out-Null -Add-OfficePowerPointTextBox -Slide $statusSlide -Text 'Identity, Messaging, and Reporting are ready for leadership review.' -X 80 -Y 140 -Width 560 -Height 80 | Out-Null -Set-OfficePowerPointNotes -Slide $statusSlide -Text 'Use this slide to introduce the operational status summary.' | Out-Null +$statusSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $statusSlide -Title 'Monthly Service Review' +Add-OfficePowerPointTextBox -Slide $statusSlide -Text 'Identity, Messaging, and Reporting are ready for leadership review.' -X 80 -Y 140 -Width 560 -Height 80 +Set-OfficePowerPointNotes -Slide $statusSlide -Text 'Use this slide to introduce the operational status summary.' -$tableSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $tableSlide -Title 'Open Items' | Out-Null +$tableSlide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $tableSlide -Title 'Open Items' Add-OfficePowerPointTable -Slide $tableSlide -Headers 'Area', 'Owner', 'Next Step' -Rows @( @('Messaging', 'Collaboration', 'Review retry spikes') @('Reporting', 'Analytics', 'Publish refreshed dashboard') -) -X 70 -Y 130 -Width 600 -Height 160 | Out-Null +) -X 70 -Y 130 -Width 600 -Height 160 Save-OfficePowerPoint -Presentation $presentation -$presentation.Dispose() +$presentation | Close-OfficePowerPoint -ConvertTo-OfficePowerPointHtml -Path $presentationPath -OutputPath $semanticHtmlPath -Title 'Deck Review' -PassThru | Out-Null -ConvertTo-OfficePowerPointHtml -Path $presentationPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Deck Visual Review' -PassThru | Out-Null +ConvertTo-OfficePowerPointHtml -Path $presentationPath -OutputPath $semanticHtmlPath -Title 'Deck Review' +ConvertTo-OfficePowerPointHtml -Path $presentationPath -Profile VisualReview -OutputPath $visualHtmlPath -Title 'Deck Visual Review' Write-Host "Presentation saved to $presentationPath" Write-Host "Semantic HTML saved to $semanticHtmlPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1 index fd2a8c45..efea2183 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointModifyExistingShapes.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'PowerPoint-ModifyExistingShapes.pptx' $initialRows = @( @@ -9,46 +8,42 @@ $initialRows = @( [PSCustomObject]@{ Metric = 'Quality'; State = 'Watching' } ) -$presentation = New-OfficePowerPoint -FilePath $path +$presentation = New-OfficePowerPoint -Path $path -NoSave try { - $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 - Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Release readiness' | Out-Null - Add-OfficePowerPointTextBox -Slide $slide -Text 'Status marker: Draft release' -X 70 -Y 110 -Width 420 -Height 45 | Out-Null - Add-OfficePowerPointTable -Slide $slide -InputObject $initialRows -X 70 -Y 180 -Width 500 -Height 170 | Out-Null + $slide = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru + Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Release readiness' + Add-OfficePowerPointTextBox -Slide $slide -Text 'Status marker: Draft release' -X 70 -Y 110 -Width 420 -Height 45 + Add-OfficePowerPointTable -Slide $slide -InputObject $initialRows -X 70 -Y 180 -Width 500 -Height 170 } finally { Close-OfficePowerPoint -Presentation $presentation -Save } # Second pass: find existing shapes, then modify their content directly. -$deck = Get-OfficePowerPoint -FilePath $path +$deck = Get-OfficePowerPoint -Path $path try { Find-OfficePowerPointShape -Presentation $deck -Text 'Status marker' -Kind TextBox | - Set-OfficePowerPointShapeText -Text 'Status marker: Ready for launch' | - Out-Null + Set-OfficePowerPointShapeText -Text 'Status marker: Ready for launch' $readinessTable = Find-OfficePowerPointShape -Presentation $deck -Text 'Risk' -Kind Table | Select-Object -First 1 $readinessTable | - Add-OfficePowerPointTableRow -Values 'Latency', 'Investigating' | - Out-Null + Add-OfficePowerPointTableRow -Values 'Latency', 'Investigating' $readinessTable | Add-OfficePowerPointTableRow -Values ([ordered]@{ Metric = 'Documentation' State = 'Ready' - }) | - Out-Null + }) $readinessTable | - Set-OfficePowerPointTableCell -Row 1 -Column 1 -Text 'Mitigating' | - Out-Null + Set-OfficePowerPointTableCell -Row 1 -Column 1 -Text 'Mitigating' } finally { Close-OfficePowerPoint -Presentation $deck -Save } Write-Host "Updated PowerPoint deck saved to $path" Write-Host 'Matching shapes:' -$reloaded = Get-OfficePowerPoint -FilePath $path +$reloaded = Get-OfficePowerPoint -Path $path try { Find-OfficePowerPointShape -Presentation $reloaded -Text 'Ready' | Select-Object SlideIndex, ShapeIndex, Kind, Text | diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1 index 0acd518a..314c0bb2 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointSectionsAndImport.ps1 @@ -1,41 +1,40 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $sourcePath = Join-Path $documents 'PowerPoint-Source.pptx' $targetPath = Join-Path $documents 'PowerPoint-SectionsAndImport.pptx' -$source = New-OfficePowerPoint -FilePath $sourcePath -$sourceSlide = Add-OfficePowerPointSlide -Presentation $source -Layout 1 +$source = New-OfficePowerPoint -Path $sourcePath -NoSave +$sourceSlide = Add-OfficePowerPointSlide -Presentation $source -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $sourceSlide -Title 'FY24 Imported' -Add-OfficePowerPointTextBox -Slide $sourceSlide -Text 'FY24 details from source deck' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null +Add-OfficePowerPointTextBox -Slide $sourceSlide -Text 'FY24 details from source deck' -X 80 -Y 150 -Width 320 -Height 60 Set-OfficePowerPointNotes -Slide $sourceSlide -Text 'FY24 source notes' Save-OfficePowerPoint -Presentation $source -$target = New-OfficePowerPoint -FilePath $targetPath -$slide1 = Add-OfficePowerPointSlide -Presentation $target -Layout 1 +$target = New-OfficePowerPoint -Path $targetPath -NoSave +$slide1 = Add-OfficePowerPointSlide -Presentation $target -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide1 -Title 'FY24 Overview' -Add-OfficePowerPointTextBox -Slide $slide1 -Text 'FY24 summary for leadership' -X 80 -Y 150 -Width 320 -Height 60 | Out-Null +Add-OfficePowerPointTextBox -Slide $slide1 -Text 'FY24 summary for leadership' -X 80 -Y 150 -Width 320 -Height 60 -$slide2 = Add-OfficePowerPointSlide -Presentation $target -Layout 1 +$slide2 = Add-OfficePowerPointSlide -Presentation $target -Layout 1 -PassThru Set-OfficePowerPointSlideTitle -Slide $slide2 -Title 'FY24 Results' -Add-OfficePowerPointSection -Presentation $target -Name 'Intro' -StartSlideIndex 0 | Out-Null -Add-OfficePowerPointSection -Presentation $target -Name 'Results' -StartSlideIndex 1 | Out-Null +Add-OfficePowerPointSection -Presentation $target -Name 'Intro' -StartSlideIndex 0 +Add-OfficePowerPointSection -Presentation $target -Name 'Results' -StartSlideIndex 1 Rename-OfficePowerPointSection -Presentation $target -Name 'Results' -NewName 'Deep Dive' -Update-OfficePowerPointText -Presentation $target -OldValue 'FY24' -NewValue 'FY25' | Out-Null -Copy-OfficePowerPointSlide -Presentation $target -Index 0 -InsertAt 1 | Out-Null -Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1 | Out-Null +Update-OfficePowerPointText -Presentation $target -OldValue 'FY24' -NewValue 'FY25' +Copy-OfficePowerPointSlide -Presentation $target -Index 0 -InsertAt 1 +Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1 Save-OfficePowerPoint -Presentation $target Write-Host "Target deck saved to $targetPath" Write-Host '' Write-Host 'Sections:' -$reloaded = Get-OfficePowerPoint -FilePath $targetPath +$reloaded = Get-OfficePowerPoint -Path $targetPath try { Get-OfficePowerPointSection -Presentation $reloaded | Format-Table } finally { - $reloaded.Dispose() + $reloaded | Close-OfficePowerPoint } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1 index 101b9c80..56ef011d 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointThemeAndLayout.ps1 @@ -1,12 +1,11 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'PowerPoint-ThemeAndLayout.pptx' -$ppt = New-OfficePowerPoint -FilePath $path +$ppt = New-OfficePowerPoint -Path $path -NoSave -$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Theme Demo' | Out-Null +$slide = Add-OfficePowerPointSlide -Presentation $ppt -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $slide -Title 'Theme Demo' $layouts = Get-OfficePowerPointLayout -Presentation $ppt $targetLayout = $layouts | Where-Object LayoutIndex -ne $slide.LayoutIndex | Select-Object -First 1 @@ -19,17 +18,17 @@ Set-OfficePowerPointThemeFonts -Presentation $ppt -MajorLatin 'Aptos' -MinorLati Set-OfficePowerPointThemeName -Presentation $ppt -Name 'Contoso Theme' -AllMasters if ($targetLayout.Type) { - $slide | Set-OfficePowerPointSlideLayout -LayoutType $targetLayout.Type -Master $targetLayout.MasterIndex | Out-Null + $slide | Set-OfficePowerPointSlideLayout -LayoutType $targetLayout.Type -Master $targetLayout.MasterIndex } elseif ($targetLayout.Name) { - $slide | Set-OfficePowerPointSlideLayout -LayoutName $targetLayout.Name -Master $targetLayout.MasterIndex | Out-Null + $slide | Set-OfficePowerPointSlideLayout -LayoutName $targetLayout.Name -Master $targetLayout.MasterIndex } else { - $slide | Set-OfficePowerPointSlideLayout -Layout $targetLayout.LayoutIndex -Master $targetLayout.MasterIndex | Out-Null + $slide | Set-OfficePowerPointSlideLayout -Layout $targetLayout.LayoutIndex -Master $targetLayout.MasterIndex } $theme = Get-OfficePowerPointTheme -Presentation $ppt $theme | Format-List Save-OfficePowerPoint -Presentation $ppt -$ppt.Dispose() +$ppt | Close-OfficePowerPoint Write-Host "Presentation saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1 index 17d63308..f8cec9d1 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Example-PowerPointTransitionsAndSizing.ps1 @@ -1,19 +1,18 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'PowerPoint-TransitionsAndSizing.pptx' -$presentation = New-OfficePowerPoint -FilePath $path -Set-OfficePowerPointSlideSize -Presentation $presentation -Preset Screen16x9 | Out-Null +$presentation = New-OfficePowerPoint -Path $path -NoSave +Set-OfficePowerPointSlideSize -Presentation $presentation -Preset Screen16x9 -$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $intro -Title 'Executive Summary' | Out-Null -Set-OfficePowerPointSlideTransition -Slide $intro -Transition Fade | Out-Null +$intro = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $intro -Title 'Executive Summary' +Set-OfficePowerPointSlideTransition -Slide $intro -Transition Fade -$details = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -Set-OfficePowerPointSlideTitle -Slide $details -Title 'Details' | Out-Null -Set-OfficePowerPointSlideTransition -Slide $details -Transition Morph | Out-Null +$details = Add-OfficePowerPointSlide -Presentation $presentation -Layout 1 -PassThru +Set-OfficePowerPointSlideTitle -Slide $details -Title 'Details' +Set-OfficePowerPointSlideTransition -Slide $details -Transition Morph Save-OfficePowerPoint -Presentation $presentation diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1 new file mode 100644 index 00000000..2bc8571a --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1 @@ -0,0 +1,17 @@ +$path = '.\PowerPoint-Copy-And-Remove.pptx' + +$presentation = New-OfficePowerPoint -Path $path -NoSave +$overview = Add-OfficePowerPointSlide -Presentation $presentation -PassThru +Set-OfficePowerPointSlideTitle -Slide $overview -Title 'Reusable overview' +Add-OfficePowerPointTextBox -Slide $overview -Text 'Shared service story' -X 80 -Y 150 -Width 560 -Height 70 + +Copy-OfficePowerPointSlide -Presentation $presentation -Index 0 -InsertAt 1 +$copied = Get-OfficePowerPointSlide -Presentation $presentation -Index 1 +Set-OfficePowerPointSlideTitle -Slide $copied -Title 'Customer-specific overview' + +$draft = Add-OfficePowerPointSlide -Presentation $presentation -PassThru +Set-OfficePowerPointSlideTitle -Slide $draft -Title 'Draft slide to remove' +Remove-OfficePowerPointSlide -Presentation $presentation -Index 2 + +$presentation | Save-OfficePowerPoint +$presentation | Close-OfficePowerPoint diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1 new file mode 100644 index 00000000..c27022bb --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-InspectDeck.ps1 @@ -0,0 +1,26 @@ +$path = '.\PowerPoint-Inspection-Source.pptx' +PptNew -Path $path { + PptSlide { + PptTitle -Title 'Service Review' + PptTextBox -Text 'Executive summary' -X 80 -Y 150 -Width 420 -Height 60 + PptNotes -Text 'Lead with the decision.' + } + PptSlide { + PptTitle -Title 'Next Steps' + PptBullets -Bullets 'Assign owner', 'Confirm date' -X 80 -Y 150 -Width 420 -Height 160 + } +} + +$presentation = Get-OfficePowerPoint -Path $path +foreach ($index in 0..($presentation.Slides.Count - 1)) { + $slide = Get-OfficePowerPointSlide -Presentation $presentation -Index $index + $summary = Get-OfficePowerPointSlideSummary -Slide $slide + + [pscustomobject]@{ + Slide = $index + 1 + Title = $summary.Title + Shapes = @(Get-OfficePowerPointShape -Slide $slide).Count + Notes = @(Get-OfficePowerPointNotes -Slide $slide).Count + } +} +Close-OfficePowerPoint -Presentation $presentation diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1 new file mode 100644 index 00000000..03fe5cf1 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1 @@ -0,0 +1,17 @@ +$path = '.\PowerPoint-Object-Composition.pptx' +$presentation = New-OfficePowerPoint -Path $path -NoSave + +$titleSlide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Title -PassThru +Set-OfficePowerPointSlideTitle -Slide $titleSlide -Title 'Customer onboarding review' +Add-OfficePowerPointTextBox -Slide $titleSlide -Text 'Decisions, owners, and the next milestone' -X 90 -Y 190 -Width 700 -Height 70 +Set-OfficePowerPointNotes -Slide $titleSlide -Text 'Open with the customer outcome, then confirm the two decisions.' + +$actionSlide = Add-OfficePowerPointSlide -Presentation $presentation -LayoutType Text -PassThru +Set-OfficePowerPointSlideTitle -Slide $actionSlide -Title 'Actions' +Add-OfficePowerPointTextBox -Slide $actionSlide -Run @{ + Text = 'Owner: ', 'Delivery', ' Due: ', 'Friday' + Bold = $true, $false, $true, $true +} -X 90 -Y 170 -Width 700 -Height 60 + +$presentation | Save-OfficePowerPoint +$presentation | Close-OfficePowerPoint diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-QuarterlyReview.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-QuarterlyReview.ps1 new file mode 100644 index 00000000..5ec53d25 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-QuarterlyReview.ps1 @@ -0,0 +1,36 @@ +$path = '.\Quarterly-Business-Review.pptx' +$trend = @( + [pscustomobject]@{ Quarter = 'Q1'; Revenue = 4.2; Margin = 31 } + [pscustomobject]@{ Quarter = 'Q2'; Revenue = 4.8; Margin = 33 } + [pscustomobject]@{ Quarter = 'Q3'; Revenue = 5.1; Margin = 35 } + [pscustomobject]@{ Quarter = 'Q4'; Revenue = 5.7; Margin = 36 } +) +$priorities = @( + [pscustomobject]@{ Priority = 'Customer onboarding'; Owner = 'Product'; Target = 'Reduce setup time by 25%' } + [pscustomobject]@{ Priority = 'Renewal risk'; Owner = 'Sales'; Target = 'Review top 20 accounts' } + [pscustomobject]@{ Priority = 'Delivery capacity'; Owner = 'Operations'; Target = 'Add two automation lanes' } +) + +PptNew -Path $path { + PptSlideSize -Preset Screen16x9 + + PptSlide { + PptBackground -Color '#0F172A' + PptTitle -Title 'Quarterly Business Review' + PptTextBox -Text 'Performance, decisions, and next-quarter priorities' -X 95 -Y 185 -Width 700 -Height 70 + PptNotes -Text 'Open with the outcome: growth continued and the team needs three decisions.' + } + + PptSlide { + PptTitle -Title 'Performance trend' + PptChart -Data $trend -CategoryProperty Quarter -SeriesProperty Revenue,Margin -Type ClusteredColumn -Title 'Revenue and margin' -X 60 -Y 120 -Width 700 -Height 300 + PptNotes -Text 'Explain the margin improvement before discussing revenue.' + } + + PptSlide { + PptTitle -Title 'Next-quarter priorities' + PptTable -Data $priorities -X 55 -Y 130 -Width 720 -Height 220 + PptBullets -Bullets 'Approve owners', 'Confirm targets', 'Review progress monthly' -X 80 -Y 390 -Width 650 -Height 120 + PptNotes -Text 'Close by assigning each decision to a named owner.' + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1 new file mode 100644 index 00000000..f5701558 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1 @@ -0,0 +1,22 @@ +$sourcePath = '.\PowerPoint-Reusable-Slides.pptx' +$targetPath = '.\PowerPoint-Combined-Deck.pptx' + +PptNew -Path $sourcePath { + PptSlide { + PptTitle -Title 'Reusable Architecture' + PptTextBox -Text 'Shared platform diagram' -X 80 -Y 150 -Width 500 -Height 80 + } +} + +PptNew -Path $targetPath { + PptSlide { + PptTitle -Title 'Customer Briefing' + PptTextBox -Text 'Prepared for review' -X 80 -Y 150 -Width 500 -Height 80 + } +} + +$target = Get-OfficePowerPoint -Path $targetPath +Import-OfficePowerPointSlide -Presentation $target -SourcePath $sourcePath -SourceIndex 0 -InsertAt 1 +Copy-OfficePowerPointSlide -Presentation $target -Index 0 -InsertAt 2 +Add-OfficePowerPointSection -Presentation $target -Name 'Shared material' -StartSlideIndex 1 +Close-OfficePowerPoint -Presentation $target -Save diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1 new file mode 100644 index 00000000..26cf77e1 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1 @@ -0,0 +1,16 @@ +$path = '.\PowerPoint-Sections-And-Notes.pptx' + +$presentation = New-OfficePowerPoint -Path $path -NoSave +$cover = Add-OfficePowerPointSlide -Presentation $presentation -PassThru +Set-OfficePowerPointSlideTitle -Slide $cover -Title 'Service review' +Set-OfficePowerPointNotes -Slide $cover -Text 'Introduce the reporting period and desired decision.' + +$evidence = Add-OfficePowerPointSlide -Presentation $presentation -PassThru +Set-OfficePowerPointSlideTitle -Slide $evidence -Title 'Evidence' +Add-OfficePowerPointTextBox -Slide $evidence -Text 'Availability remained above 99.9%.' -X 80 -Y 150 -Width 650 -Height 70 +Set-OfficePowerPointNotes -Slide $evidence -Text 'Pause for questions before moving to actions.' + +Add-OfficePowerPointSection -Presentation $presentation -Name 'Briefing' -StartSlideIndex 0 +Add-OfficePowerPointSection -Presentation $presentation -Name 'Evidence' -StartSlideIndex 1 +$presentation | Save-OfficePowerPoint +$presentation | Close-OfficePowerPoint diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-TrainingWorkshop.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-TrainingWorkshop.ps1 new file mode 100644 index 00000000..fcdb2497 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-TrainingWorkshop.ps1 @@ -0,0 +1,35 @@ +$path = '.\Training-Workshop.pptx' +$agenda = @( + [pscustomobject]@{ Module = 'Understand'; Duration = '15 min'; Outcome = 'Explain the operating model' } + [pscustomobject]@{ Module = 'Practice'; Duration = '30 min'; Outcome = 'Complete the guided exercise' } + [pscustomobject]@{ Module = 'Apply'; Duration = '20 min'; Outcome = 'Plan the first production use' } +) + +PptNew -Path $path { + PptSlideSize -Preset Screen16x9 + + PptSlide { + PptTitle -Title 'Automation Workshop' + PptTextBox -Text 'From repeatable data to reviewable documents' -X 90 -Y 190 -Width 720 -Height 70 + PptNotes -Text 'Ask participants to name one document they rebuild manually every week.' + } + + PptSlide { + PptTitle -Title 'Learning objectives' + PptBullets -Bullets 'Choose the right document format', 'Compose content with a PowerShell DSL', 'Validate the generated artifact', 'Keep data and presentation concerns separate' -X 90 -Y 135 -Width 700 -Height 260 + PptNotes -Text 'Connect every objective to the participant examples collected at the start.' + } + + PptSlide { + PptTitle -Title 'Workshop agenda' + PptTable -Data $agenda -X 70 -Y 135 -Width 680 -Height 230 + PptNotes -Text 'Take questions after each module rather than saving them for the end.' + } + + PptSlide { + PptTitle -Title 'Your next step' + PptShape -ShapeType RoundRectangle -X 95 -Y 160 -Width 650 -Height 180 -FillColor '#DBEAFE' -OutlineColor '#2563EB' + PptTextBox -Text 'Pick one real report, replace the sample data, and review the generated file with its owner.' -X 135 -Y 215 -Width 570 -Height 90 + PptNotes -Text 'End with a concrete commitment from each participant.' + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1 new file mode 100644 index 00000000..38ac80c8 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1 @@ -0,0 +1,16 @@ +$path = '.\PowerPoint-Updated-Existing.pptx' +PptNew -Path $path { + PptSlide { + PptTitle -Title 'FY24 Results' + PptTextBox -Text 'FY24 revenue is ready.' -X 80 -Y 150 -Width 500 -Height 60 + PptNotes -Text 'Explain the FY24 result.' + } + PptSlide { + PptTitle -Title 'FY24 Priorities' + PptBullets -Bullets 'Retain customers', 'Improve margin' -X 80 -Y 150 -Width 500 -Height 140 + } +} + +$presentation = Get-OfficePowerPoint -Path $path +Update-OfficePowerPointText -Presentation $presentation -OldValue 'FY24' -NewValue 'FY25' -IncludeNotes +Close-OfficePowerPoint -Presentation $presentation -Save diff --git a/WebsiteArtifacts/apidocs/powershell/examples/README.md b/WebsiteArtifacts/apidocs/powershell/examples/README.md new file mode 100644 index 00000000..750db1b9 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/README.md @@ -0,0 +1,61 @@ +# PSWriteOffice example library + +These 60 recipes are complete PowerShell scripts that create, read, update, combine, or convert real files. Start with the workflow you need, then move to the larger showcase scripts when you want to see several features working together. + +```powershell +Install-Module PSWriteOffice -Scope CurrentUser +``` + +Each `Recipe-*` script uses simple paths such as `.\Project-Status.docx`. Run a recipe from the folder where you want its documents, or copy the composition block into your own script and change only the file names. + +Creation blocks in the `Recipe-*` scripts use the short DSL aliases consistently, including `WordNew`, `ExcelNew`, `PptNew`, `PdfNew`, and `MarkdownNew`. Recipes that read, update, merge, split, or convert existing files use canonical cmdlet names so those operations are easy to discover in command help. The [DSL cookbook](https://officeimo.com/docs/pswriteoffice/dsl-cookbook/) shows composition in alias and canonical forms so you can choose one style for your own script. + +Saved DSL constructors are quiet by default. Add `-PassThru` only when the next command needs the saved file. + +## Choose a script shape + +| When you need to | Use | Start here | +| --- | --- | --- | +| Export rows or query results | Pipeline | [Excel quick export](Excel/Recipe-Excel-QuickExport.ps1) | +| Add content from loops and conditions | Document objects | [Word](Word/Recipe-Word-ObjectComposition.ps1), [Excel](Excel/Recipe-Excel-ObjectComposition.ps1), [PowerPoint](PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1), [Markdown](Markdown/Recipe-Markdown-ObjectComposition.ps1) | +| Author the complete artifact in one block | DSL | [Project status report](Word/Recipe-Word-ProjectStatus.ps1), [service invoice](Pdf/Recipe-Pdf-ServiceInvoice.ps1) | +| Change a supplied file | Open, target, save, close | [Word update](Word/Recipe-Word-UpdateExisting.ps1), [Excel update](Excel/Recipe-Excel-UpdateExisting.ps1), [PowerPoint update](PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1) | + +The [workflow guide](https://officeimo.com/docs/pswriteoffice/object-workflows/) explains when these surfaces fit. They use the same document engines and can coexist in a larger automation job. + +## Create documents with the DSL + +| Format | Practical recipes | Larger examples | +| --- | --- | --- | +| Word | [Project status](Word/Recipe-Word-ProjectStatus.ps1), [approval checklist](Word/Recipe-Word-ApprovalChecklist.ps1), [object composition](Word/Recipe-Word-ObjectComposition.ps1) | [Executive report](Showcase/Showcase-Word-ExecutiveReport.ps1), [advanced Word DSL](Word/Example-WordAdvanced.ps1) | +| Excel | [Quick export](Excel/Recipe-Excel-QuickExport.ps1), [project tracker](Excel/Recipe-Excel-ProjectTracker.ps1), [budget dashboard](Excel/Recipe-Excel-BudgetDashboard.ps1), [object composition](Excel/Recipe-Excel-ObjectComposition.ps1) | [Operational dashboard](Showcase/Showcase-Excel-OperationalDashboard.ps1), [advanced workbook](Excel/Example-ExcelAdvanced.ps1) | +| PowerPoint | [Quarterly review](PowerPoint/Recipe-PowerPoint-QuarterlyReview.ps1), [training workshop](PowerPoint/Recipe-PowerPoint-TrainingWorkshop.ps1), [object composition](PowerPoint/Recipe-PowerPoint-ObjectComposition.ps1), [sections and notes](PowerPoint/Recipe-PowerPoint-SectionsAndNotes.ps1) | [Service brief](Showcase/Showcase-PowerPoint-ServiceBrief.ps1), [themes and layouts](PowerPoint/Example-PowerPointThemeAndLayout.ps1) | +| PDF | [Service invoice](Pdf/Recipe-Pdf-ServiceInvoice.ps1), [audit report](Pdf/Recipe-Pdf-AuditReport.ps1), [attach evidence](Pdf/Recipe-Pdf-AttachEvidence.ps1), [form data exchange](Pdf/Recipe-Pdf-FormDataExchange.ps1) | [Composed PDF report](Pdf/Example-PdfReportDsl.ps1), [PDF operations](Pdf/Example-PdfOperations.ps1) | +| Markdown | [Operations runbook](Markdown/Recipe-Markdown-OperationsRunbook.ps1), [release notes](Markdown/Recipe-Markdown-ReleaseNotes.ps1), [object composition](Markdown/Recipe-Markdown-ObjectComposition.ps1), [definition guide](Markdown/Recipe-Markdown-DefinitionGuide.ps1) | [Advanced Markdown](Markdown/Example-MarkdownAdvanced.ps1), [Markdown DSL](Markdown/Example-MarkdownDsl.ps1) | +| Several formats | [Status pack from shared data](Workflows/Recipe-MultiFormat-StatusPack.ps1), [Markdown to Word and PDF](Workflows/Recipe-Markdown-Word-PdfDelivery.ps1) | [Shared rich-text runs](Showcase/Showcase-RichTextRuns.ps1) | + +## Read, modify, combine, and convert + +| Format | Read and inspect | Modify or combine | Convert or deliver | +| --- | --- | --- | --- | +| Word | [Inspect an existing document](Word/Recipe-Word-InspectExisting.ps1) | [Update content](Word/Recipe-Word-UpdateExisting.ps1), [merge documents](Word/Recipe-Word-MergeDocuments.ps1), [compare versions](Word/Recipe-Word-CompareDocuments.ps1), [mail-merge letters](Word/Recipe-Word-MailMergeLetters.ps1) | [HTML to Word](Word/Recipe-Word-HtmlToDocument.ps1), [Word and Markdown conversion](Word/Example-WordMarkdownConvert.ps1), [HTML review](Word/Example-WordHtmlConvert.ps1) | +| Excel | [Read and filter rows](Excel/Recipe-Excel-ReadAndFilter.ps1) | [Update a workbook](Excel/Recipe-Excel-UpdateExisting.ps1), [append or replace rows](Excel/Recipe-Excel-AppendAndReplace.ps1), [merge](Excel/Recipe-Excel-MergeWorkbooks.ps1), [compare](Excel/Recipe-Excel-CompareWorkbooks.ps1) | [Template invoice](Excel/Recipe-Excel-TemplateInvoice.ps1), [pivots and sparklines](Excel/Recipe-Excel-PivotAndSparklines.ps1), [import delimited data](Excel/Recipe-Excel-ImportDelimited.ps1) | +| PowerPoint | [Inspect a deck](PowerPoint/Recipe-PowerPoint-InspectDeck.ps1) | [Update content](PowerPoint/Recipe-PowerPoint-UpdateExisting.ps1), [reuse slides](PowerPoint/Recipe-PowerPoint-ReuseSlides.ps1), [copy and remove slides](PowerPoint/Recipe-PowerPoint-CopyAndRemoveSlides.ps1) | [HTML review](PowerPoint/Example-PowerPointHtmlReview.ps1) | +| PDF | [Inspect and preflight](Pdf/Recipe-Pdf-InspectAndPreflight.ps1), [extract text](Pdf/Recipe-Pdf-ExtractText.ps1) | [Merge and split](Pdf/Recipe-Pdf-MergeAndSplit.ps1), [reorder pages](Pdf/Recipe-Pdf-ReorderPages.ps1), [position content](Pdf/Recipe-Pdf-PositionedCanvas.ps1), [redact text](Pdf/Recipe-Pdf-RedactDetectedText.ps1) | [Forms](Pdf/Recipe-Pdf-Forms.ps1), [form data exchange](Pdf/Recipe-Pdf-FormDataExchange.ps1), [sanitize and optimize](Pdf/Recipe-Pdf-SanitizeAndOptimize.ps1) | +| Markdown | [Inspect structured content](Markdown/Recipe-Markdown-InspectContent.ps1) | [Convert to and from Word](Markdown/Recipe-Markdown-WordRoundTrip.ps1) | [Publish HTML](Markdown/Recipe-Markdown-PublishHtml.ps1) | +| Reader | [Search a mixed folder](Reader/Recipe-Reader-SearchFolder.ps1) | [Extract chunks and tables](Reader/Recipe-Reader-ExtractTables.ps1) | [Ingest a bounded folder](Reader/Recipe-Reader-IngestFolder.ps1) | + +## Inspect, convert, and integrate + +- [Visio service flow](Visio/Recipe-Visio-ServiceFlow.ps1), [architecture map](Visio/Example-Visio-ArchitectureMap.ps1), and [network topology](Visio/Example-Visio-NetworkTopology.ps1) +- [Mixed-document search](Reader/Example-MixedDocumentSearch.ps1), [bounded chunks](Reader/Recipe-Reader-BoundedChunks.ps1), and [table export](Reader/Recipe-Reader-ExportTables.ps1) +- [Update and convert RTF](Rtf/Recipe-Rtf-UpdateAndConvert.ps1) and [RTF/Markdown round trip](Rtf/Example-RtfMarkdownRoundTrip.ps1) +- [Safe CSV export](Csv/Recipe-Csv-SafeExport.ps1), [CSV basics](Csv/Example-CsvBasic.ps1), [advanced CSV options](Csv/Example-CsvAdvanced.ps1), and [DbaClientX round trip](Csv/Example-CsvDbaClientXRoundTrip.ps1) +- [Excel and DbaClientX round trip](Excel/Example-ExcelDbaClientXRoundTrip.ps1) +- [Generate a PDF and deliver it with Mailozaurr](Integrations/Recipe-Mailozaurr-PdfDelivery.ps1) +- [Turn PSEventViewer results into Word and Excel reports](Integrations/Recipe-PSEventViewer-OfficeReport.ps1) +- [HTML review for Word](Word/Example-WordHtmlConvert.ps1), [Excel](Excel/Example-ExcelHtmlReview.ps1), and [PowerPoint](PowerPoint/Example-PowerPointHtmlReview.ps1) +- [ChartForgeX visuals](Visuals/Example-ChartForgeXVisuals.ps1) +- [Confluence report publishing](Confluence/Example-ConfluenceAzureTableReport.ps1) + +The [OfficeIMO website](https://officeimo.com/docs/pswriteoffice/) ingests these scripts for the PowerShell reference and publishes the authored PSWriteOffice guides from this repository. Command pages remain the source of truth for exact parameters; the recipes show how those commands fit into complete jobs. diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Reader/Example-MixedDocumentSearch.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Example-MixedDocumentSearch.ps1 new file mode 100644 index 00000000..08e15655 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Example-MixedDocumentSearch.ps1 @@ -0,0 +1,48 @@ +param( + [Parameter(Position = 0)] + [string[]] $Path = @('.\Evidence'), + + [Parameter(Position = 1)] + [string] $Query = 'retention period' +) + +# Search-OfficeDocument discovers every registered format when -Extension is omitted. +# The same run can therefore cover Word, Excel, PowerPoint, PDF, PST, OST, EML, +# Markdown, OpenDocument, RTF, Visio, archives, and the other Reader adapters. +$readErrors = @() +$matches = @(Search-OfficeDocument ` + -Path $Path ` + -Recurse ` + -Query $Query ` + -MaxDocuments 5000 ` + -MaxStoreItems 25000 ` + -MaximumResults 100 ` + -MaxDegreeOfParallelism 4 ` + -IncludePageLocations ` + -ErrorVariable +readErrors ` + -ErrorAction SilentlyContinue) + +$matches | + Sort-Object Path, Location, StartIndex | + Select-Object Path, DocumentType, Match, Location, Pages, + DocumentLimitReached, SourceLimitReached, SearchLimitReached | + Format-Table -AutoSize + +$matches | + Group-Object DocumentType | + Sort-Object Name | + Select-Object Name, Count | + Format-Table -AutoSize + +if ($readErrors.Count -gt 0) { + Write-Warning "$($readErrors.Count) input file(s) could not be read. Other files were still searched." + $readErrors | ForEach-Object { + [pscustomobject]@{ + Path = $_.TargetObject + Message = $_.Exception.Message + } + } | Format-Table -AutoSize +} + +# For an intentionally unbounded run, replace the three numeric limits above with: +# -NoDocumentLimit -AllStoreItems -AllResults diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-BoundedChunks.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-BoundedChunks.ps1 new file mode 100644 index 00000000..b512bd2f --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-BoundedChunks.ps1 @@ -0,0 +1,11 @@ +$source = '.\Reader-Chunk-Source.md' + +MarkdownNew -Path $source { + MarkdownHeading -Level 1 -Text 'Operations' + MarkdownParagraph -Text 'Identity is healthy and the weekly review is complete.' + MarkdownHeading -Level 2 -Text 'Actions' + MarkdownList -Items 'Archive the evidence', 'Notify the service owner' +} + +Get-OfficeDocumentChunk -Path $source -MaxChars 300 -MaxInputBytes 1048576 -MaxTableRows 50 | + Select-Object SourcePath, Kind, HeadingPath, Text diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-ExportTables.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-ExportTables.ps1 new file mode 100644 index 00000000..687f19f4 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-ExportTables.ps1 @@ -0,0 +1,13 @@ +$source = '.\Reader-Table-Source.docx' +$output = '.\Reader-Table-Exports' +$rows = @( + [pscustomobject]@{ Service = 'Identity'; Owner = 'Platform' } + [pscustomobject]@{ Service = 'Messaging'; Owner = 'Collaboration' } +) + +WordNew -Path $source { + WordParagraph -Text 'Service ownership' -Style Heading1 + WordTable -InputObject $rows -Style TableGrid +} + +Get-OfficeDocumentTable -Path $source -AsExport -OutputDirectory $output diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-ExtractTables.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-ExtractTables.ps1 new file mode 100644 index 00000000..27020a8a --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-ExtractTables.ps1 @@ -0,0 +1,15 @@ +$path = '.\Reader-Table-Source.md' +$sidecars = '.\Reader-Table-Sidecars' +$scores = @( + [pscustomobject]@{ Service = 'Identity'; Score = 98 } + [pscustomobject]@{ Service = 'Messaging'; Score = 94 } +) + +MarkdownNew -Path $path { + MarkdownHeading -Level 1 -Text 'Service scores' + MarkdownTable -InputObject $scores +} + +Get-OfficeDocumentTable -Path $path +Get-OfficeDocumentTable -Path $path -OutputDirectory $sidecars +Get-OfficeDocumentChunk -Path $path diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-IngestFolder.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-IngestFolder.ps1 new file mode 100644 index 00000000..c4a7b220 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-IngestFolder.ps1 @@ -0,0 +1,3 @@ +Get-OfficeDocumentIngest ` + -FolderPath '.\Documents' ` + -Extension docx,xlsx,pptx,pdf,md,html,json,yaml diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-SearchFolder.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-SearchFolder.ps1 new file mode 100644 index 00000000..1c691fe3 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Reader/Recipe-Reader-SearchFolder.ps1 @@ -0,0 +1,6 @@ +Search-OfficeDocument ` + -Path '.\Documents' ` + -Query 'Retention' ` + -Recurse ` + -AllResults | + Select-Object DocumentType, Path, Match diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Example-RtfMarkdownRoundTrip.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Example-RtfMarkdownRoundTrip.ps1 index 37872f28..93852406 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Example-RtfMarkdownRoundTrip.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Example-RtfMarkdownRoundTrip.ps1 @@ -1,8 +1,7 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $markdownPath = Join-Path $documents 'Rtf-MarkdownRoundTrip.md' $rtfPath = Join-Path $documents 'Rtf-MarkdownRoundTrip.rtf' $roundTripMarkdownPath = Join-Path $documents 'Rtf-MarkdownRoundTrip.from-rtf.md' @@ -22,8 +21,8 @@ The weekly service review is ready. | Reporting | Analytics | '@ | Set-Content -Path $markdownPath -Encoding UTF8 -ConvertTo-OfficeRtf -MarkdownPath $markdownPath -OutputPath $rtfPath -PassThru | Out-Null -ConvertFrom-OfficeRtf -Path $rtfPath -As Markdown -OutputPath $roundTripMarkdownPath -PassThru | Out-Null +ConvertTo-OfficeRtf -MarkdownPath $markdownPath -OutputPath $rtfPath +ConvertFrom-OfficeRtf -Path $rtfPath -As Markdown -OutputPath $roundTripMarkdownPath Write-Host "Markdown saved to $markdownPath" Write-Host "RTF saved to $rtfPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Recipe-Rtf-UpdateAndConvert.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Recipe-Rtf-UpdateAndConvert.ps1 new file mode 100644 index 00000000..1aeda0d8 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Rtf/Recipe-Rtf-UpdateAndConvert.ps1 @@ -0,0 +1,7 @@ +$source = '.\Service-Note.rtf' +$updated = '.\Service-Note-Updated.rtf' +$markdown = '.\Service-Note.md' + +New-OfficeRtf -Path $source -Text 'Service: Identity', 'Status: Draft' +Update-OfficeRtfText -Path $source -OutputPath $updated -OldText 'Draft' -NewText 'Approved' -AppendParagraph 'Reviewed by Platform' +ConvertFrom-OfficeRtf -Path $updated -As Markdown -OutputPath $markdown diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Excel-OperationalDashboard.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Excel-OperationalDashboard.ps1 index 7bdaf6fd..887418dd 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Excel-OperationalDashboard.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Excel-OperationalDashboard.ps1 @@ -5,8 +5,7 @@ param( Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Showcase-Excel-OperationalDashboard.xlsx' $logoPath = Join-Path $PSScriptRoot '..\Word\Example-WordTableCells.fixture.png' @@ -74,13 +73,13 @@ New-OfficeExcel -Path $path { ExcelTable -Data $legend -TableName 'StatusLegend' -StartRow 7 -StartColumn 1 -TableStyle 'TableStyleMedium4' -AutoFit ExcelTable -Data $statusMix -TableName 'StatusMix' -StartRow 7 -StartColumn 6 -TableStyle 'TableStyleMedium4' -AutoFit - ExcelChart -Range 'F7:G10' -Row 7 -Column 9 -Type Doughnut -Title 'Status Mix' -WidthPixels 440 -HeightPixels 260 | - Set-OfficeExcelChartLegend -Position Right | - Set-OfficeExcelChartDataLabels -ShowValue $true -ShowCategoryName $true -Position OutsideEnd | + ExcelChart -Range 'F7:G10' -Row 7 -Column 9 -Type Doughnut -Title 'Status Mix' -WidthPixels 440 -HeightPixels 260 -PassThru | + Set-OfficeExcelChartLegend -Position Right -PassThru | + Set-OfficeExcelChartDataLabels -ShowValue $true -ShowCategoryName $true -Position OutsideEnd -PassThru | Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 if (Test-Path $logoPath) { - ExcelImage -Path $logoPath -Address 'J1' -WidthPixels 140 -HeightPixels 52 -AltText 'PSWriteOffice operational dashboard logo' | Out-Null + ExcelImage -Path $logoPath -Address 'J1' -WidthPixels 140 -HeightPixels 52 -AltText 'PSWriteOffice operational dashboard logo' } ExcelHeaderFooter -HeaderCenter 'PSWriteOffice operational dashboard' -FooterRight 'Page &P of &N' @@ -95,12 +94,12 @@ New-OfficeExcel -Path $path { ExcelValidationList -Range 'F2:F50' -Values 'Healthy','Watch','Risk' ExcelConditionalColorScale -Range 'B2:B9' -StartColor '#F8696B' -EndColor '#63BE7B' ExcelConditionalDataBar -Range 'C2:C9' -Color '#5B9BD5' - ExcelConditionalIconSet -Range 'B2:B9' -IconSet ThreeTrafficLights1 -Reverse $true + ExcelConditionalIconSet -Range 'B2:B9' -IconSet ThreeTrafficLights1 ExcelUrlLinksByHeader -Header 'Evidence' -TableName 'ServiceHealth' -UrlScript { param($text) "https://evotec.xyz/docs/$text" } -TitleScript { param($text) "Open $text" } ExcelPivotTable -SourceRange 'A1:F9' -DestinationCell 'J1' -Name 'ServiceStatusPivot' -RowField Status -DataField Incidents -DataDisplayName 'Total Incidents' -PivotStyle PivotStyleMedium9 -RefreshOnOpen - ExcelChart -Range 'A1:C9' -Row 12 -Column 1 -Type BarClustered -Title 'Health Score and Incidents' -WidthPixels 760 -HeightPixels 340 | - Set-OfficeExcelChartLegend -Position Bottom | - Set-OfficeExcelChartDataLabels -ShowValue $true -Position OutsideEnd | + ExcelChart -Range 'A1:C9' -Row 12 -Column 1 -Type BarClustered -Title 'Health Score and Incidents' -WidthPixels 760 -HeightPixels 340 -PassThru | + Set-OfficeExcelChartLegend -Position Bottom -PassThru | + Set-OfficeExcelChartDataLabels -ShowValue $true -Position OutsideEnd -PassThru | Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 ExcelHeaderFooter -HeaderCenter 'Service details' -FooterRight 'Page &P of &N' } @@ -114,9 +113,9 @@ New-OfficeExcel -Path $path { ExcelSparkline -DataRange 'B5:D5' -LocationRange 'E5' ExcelSparkline -DataRange 'B6:D6' -LocationRange 'E6' ExcelSparkline -DataRange 'B7:D7' -LocationRange 'E7' - ExcelChart -TableName 'TrendData' -Row 10 -Column 1 -Type Line -Title 'Availability, Incidents, and Automation' -WidthPixels 780 -HeightPixels 340 | - Set-OfficeExcelChartLegend -Position Bottom | - Set-OfficeExcelChartDataLabels -ShowValue $true -Position Top | + ExcelChart -TableName 'TrendData' -Row 10 -Column 1 -Type Line -Title 'Availability, Incidents, and Automation' -WidthPixels 780 -HeightPixels 340 -PassThru | + Set-OfficeExcelChartLegend -Position Bottom -PassThru | + Set-OfficeExcelChartDataLabels -ShowValue $true -Position Top -PassThru | Set-OfficeExcelChartStyle -StyleId 251 -ColorStyleId 10 ExcelHeaderFooter -HeaderCenter 'Trend and automation' -FooterRight 'Page &P of &N' } @@ -124,7 +123,7 @@ New-OfficeExcel -Path $path { ExcelSheet 'Owner Summary' { ExcelTable -Data $ownerSummary -TableName 'OwnerSummary' -StartRow 1 -StartColumn 1 -TableStyle 'TableStyleMedium5' -AutoFit ExcelConditionalDataBar -Range 'D2:D20' -Color '#ED7D31' - ExcelConditionalIconSet -Range 'C2:C20' -IconSet ThreeTrafficLights1 -Reverse $true + ExcelConditionalIconSet -Range 'C2:C20' -IconSet ThreeTrafficLights1 ExcelHeaderFooter -HeaderCenter 'Owner summary' -FooterRight 'Page &P of &N' } @@ -142,7 +141,7 @@ New-OfficeExcel -Path $path { } -Open:$Open $threaded = Add-OfficeExcelThreadedComment -Path $path -Sheet Summary -Address A2 -Text 'Review dashboard posture before sending to service owners.' -Author 'Automation Reviewer' -PassThru -Add-OfficeExcelThreadedComment -Path $path -Sheet Summary -Address A2 -Text 'Ready for owner review.' -Author 'Report Owner' -ParentId $threaded.Id -Done | Out-Null +Add-OfficeExcelThreadedComment -Path $path -Sheet Summary -Address A2 -Text 'Ready for owner review.' -Author 'Report Owner' -ParentId $threaded.Id -Done Add-OfficeExcelPowerQueryMetadata -Path $path ` -Name 'OperationalDashboardQuery' ` @@ -151,7 +150,7 @@ Add-OfficeExcelPowerQueryMetadata -Path $path ` -CommandText 'let Source = Excel.CurrentWorkbook(){[Name="ServiceHealth"]}[Content] in Source' ` -Description 'Refresh metadata for Excel-compatible applications; PSWriteOffice does not execute Power Query.' ` -RefreshOnOpen ` - -PassThru | Out-Null + $doctor = Test-OfficeExcelWorkbook -Path $path -SkipOpenXmlValidation $accessibility = Test-OfficeExcelAccessibility -Path $path diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1 index 63d610e1..967fcc49 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-PowerPoint-ServiceBrief.ps1 @@ -5,8 +5,7 @@ param( Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Showcase-PowerPoint-ServiceBrief.pptx' $process = @( @@ -70,35 +69,27 @@ $plan = PptDeckPlan { } New-OfficePowerPoint -Path $path { - PptSlideSize -Preset Screen16x9 | Out-Null - PptDesignerDeck -Plan $plan -AccentColor '#008C95' -Seed 'pswriteoffice-showcase' -Purpose 'technical service brief' -Name 'PSWriteOffice Showcase' -FooterLeft 'PSWriteOffice' -FooterRight 'OfficeIMO designer' -CreativeDirectionPack TechnicalMap -LayoutStrategy ContentFirst | Out-Null - - PptSlide { - PptTitle -Title 'Coverage and polish scorecard' | Out-Null - PptChart -Type ClusteredColumn -Data $chartRows -CategoryProperty Product -SeriesProperty Coverage, Polish -Title 'Current Surface vs Polish Target' -X 58 -Y 118 -Width 610 -Height 265 | Out-Null - PptNotes -Text 'Use this slide as the bridge between the designer slides and the concrete backlog.' - } | Out-Null - - PptSlide { - PptTitle -Title 'Immediate implementation path' | Out-Null - PptTable -Data $tableRows -X 64 -Y 132 -Width 590 -Height 210 | Out-Null - PptNotes -Text 'Close with the next concrete pull request slices: visual screenshots, blog drafts, and richer wrappers.' - } | Out-Null + PptSlideSize -Preset Screen16x9 + PptDesignerDeck -Plan $plan -AccentColor '#008C95' -Seed 'pswriteoffice-showcase' -Purpose 'technical service brief' -Name 'PSWriteOffice Showcase' -FooterLeft 'PSWriteOffice' -FooterRight 'OfficeIMO designer' -CreativeDirectionPack TechnicalMap -LayoutStrategy ContentFirst + + $chartSlide = PptSlide -PassThru + PptTitle -Slide $chartSlide -Title 'Coverage and polish scorecard' + PptChart -Slide $chartSlide -Type ClusteredColumn -Data $chartRows -CategoryProperty Product -SeriesProperty Coverage, Polish -Title 'Current Surface vs Polish Target' -X 58 -Y 118 -Width 610 -Height 265 + PptNotes -Slide $chartSlide -Text 'Use this slide as the bridge between the designer slides and the concrete backlog.' + + $tableSlide = PptSlide -PassThru + PptTitle -Slide $tableSlide -Title 'Immediate implementation path' + PptTable -Slide $tableSlide -Data $tableRows -X 64 -Y 132 -Width 590 -Height 210 + PptNotes -Slide $tableSlide -Text 'Close with the next concrete pull request slices: visual screenshots, blog drafts, and richer wrappers.' + + PptSection -Name 'Designer story' -StartSlideIndex 0 + PptSection -Name 'Evidence appendix' -StartSlideIndex 6 + PptTransition -Slide $chartSlide -Transition PushLeft + Get-OfficePowerPointSlide -Index 0 | PptTransition -Transition Fade } -Open:$Open -$ppt = Get-OfficePowerPoint -FilePath $path -try { - Add-OfficePowerPointSection -Presentation $ppt -Name 'Designer story' -StartSlideIndex 0 | Out-Null - Add-OfficePowerPointSection -Presentation $ppt -Name 'Evidence appendix' -StartSlideIndex 6 | Out-Null - Get-OfficePowerPointSlide -Presentation $ppt -Index 0 | Set-OfficePowerPointSlideTransition -Transition Fade | Out-Null - Get-OfficePowerPointSlide -Presentation $ppt -Index 6 | Set-OfficePowerPointSlideTransition -Transition PushLeft | Out-Null - Save-OfficePowerPoint -Presentation $ppt -} -finally { - $ppt.Dispose() -} - -$summary = Get-OfficePowerPoint -FilePath $path | Get-OfficePowerPointSlideSummary -$summary | Format-Table Index, Title, ShapeCount, TextBoxCount, ChartCount, TableCount, HasNotes +$presentation = Get-OfficePowerPoint -Path $path +$summary = Get-OfficePowerPointSlideSummary -Presentation $presentation +$presentation | Close-OfficePowerPoint -Write-Host "Presentation saved to $path" +$summary | Select-Object SlideIndex, Title, ShapeCount, TextBoxCount, ChartCount, TableCount, HasNotes diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-RichTextRuns.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-RichTextRuns.ps1 new file mode 100644 index 00000000..c224d2b9 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-RichTextRuns.ps1 @@ -0,0 +1,121 @@ +$ErrorActionPreference = 'Stop' + +$moduleManifest = Join-Path $PSScriptRoot '..\..\PSWriteOffice.psd1' +if (Test-Path -LiteralPath $moduleManifest) { + Import-Module $moduleManifest -Force -ErrorAction Stop +} else { + Import-Module PSWriteOffice -ErrorAction Stop +} + +$documents = Join-Path $PSScriptRoot '..\Documents' +$null = New-Item -Path $documents -ItemType Directory -Force +$wordPath = Join-Path $documents 'Showcase-RichTextRuns.docx' +$excelPath = Join-Path $documents 'Showcase-RichTextRuns.xlsx' +$pdfPath = Join-Path $documents 'Showcase-RichTextRuns.pdf' +$pptPath = Join-Path $documents 'Showcase-RichTextRuns.pptx' + +$runs = @( + TextRun 'Status: ' + TextRun 'Ready' -Color SeaGreen -Bold + TextRun ' with ' + TextRun 'named colors' -Color Navy -Italic + TextRun ' and ' + TextRun 'underline' -UnderlineStyle Dotted -Color DarkSlateBlue +) + +$serviceRows = @( + [pscustomobject]@{ Service = 'Identity Sync'; Status = 'Ready'; Owner = 'Platform' } + [pscustomobject]@{ Service = 'Backup'; Status = 'Watch'; Owner = 'Operations' } + [pscustomobject]@{ Service = 'Remote Access'; Status = 'Needs action'; Owner = 'Security' } +) + +WordNew -Path $wordPath { + WordSection { + WordParagraph -Text 'Rich text runs' -Style Heading1 + WordParagraph -Run $runs + WordTable -Style TableGrid -InputObject @( + , @( + WordTableCellSpec -Run @( + WordTextRun 'Service ' + WordTextRun 'readiness' -Color SeaGreen -Bold + ) -ColumnSpan 3 -FillColor AliceBlue -Align Center + ) + , @('Service', 'Status', 'Owner') + , @((WordTableCellSpec -Run @(WordTextRun 'Identity Sync' -Bold; WordTextRun ' 99.98%' -Color SeaGreen)), 'Ready', 'Platform') + , @('Backup', (WordTableCellSpec -Run @(WordTextRun 'Watch' -Color DarkOrange -Bold)), 'Operations') + ) + } +} + +ExcelNew -Path $excelPath { + ExcelSheet -Name 'Summary' -Content { + ExcelRichText -Address A1 -Run @( + ExcelTextRun 'Status: ' + ExcelTextRun 'Ready' -Color SeaGreen -Bold + ExcelTextRun ' for review' -Italic + ) + ExcelRichText -Address A3 -Run @( + ExcelTextRun 'Owner: ' + ExcelTextRun 'Platform' -Color Navy -Bold + ) + ExcelTable -Data $serviceRows -TableName 'ServiceReadiness' + ExcelAutoFit + } +} + +PdfNew -Path $pdfPath { + PdfHeading 'Rich text runs' + PdfText -Run @( + PdfTextRun 'Status: ' + PdfTextRun 'Ready' -Color SeaGreen -Bold + PdfTextRun ' with named colors and ' + PdfTextRun 'inline emphasis' -Color Navy -Italic + ) + PdfTable -HeaderRowCount 1 -InputObject @( + , @( + PdfTableCell -Run @( + PdfTextRun 'Service ' + PdfTextRun 'readiness' -Color SeaGreen -Bold + ) -ColumnSpan 3 -FillColor AliceBlue -Align Center + ) + , @('Service', 'Status', 'Owner') + , @((PdfTableCell -Run @(PdfTextRun 'Identity Sync' -Bold; PdfTextRun ' 99.98%' -Color SeaGreen)), 'Ready', 'Platform') + , @('Backup', (PdfTableCell -Run @(PdfTextRun 'Watch' -Color DarkOrange -Bold)), 'Operations') + ) +} + +PptNew -Path $pptPath { + PptSlide { + PptTitle -Title 'Rich text runs' + PptTextBox -Run @( + PptTextRun 'Status: ' + PptTextRun 'Ready' -Color SeaGreen -Bold + PptTextRun ' with named colors' -Color Navy -Italic + ) -X 70 -Y 115 -Width 560 -Height 54 + PptTable -InputObject @( + , @( + @{ + Run = @( + PptTextRun 'Service ' + PptTextRun 'readiness' -Color SeaGreen -Bold + ) + ColumnSpan = 3 + FillColor = 'AliceBlue' + Align = 'Center' + } + ) + , @('Service', 'Status', 'Owner') + , @( + @{ Run = @(PptTextRun 'Identity Sync' -Bold; PptTextRun ' 99.98%' -Color SeaGreen) }, + 'Ready', + 'Platform' + ) + , @('Backup', @{ Run = @(PptTextRun 'Watch' -Color DarkOrange -Bold) }, 'Operations') + ) -X 70 -Y 190 -Width 560 -Height 220 + } +} + +Write-Host "Word document saved to $wordPath" +Write-Host "Excel workbook saved to $excelPath" +Write-Host "PDF saved to $pdfPath" +Write-Host "PowerPoint deck saved to $pptPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Word-ExecutiveReport.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Word-ExecutiveReport.ps1 index 4fe356ad..a80dcc58 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Word-ExecutiveReport.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Showcase/Showcase-Word-ExecutiveReport.ps1 @@ -3,8 +3,7 @@ $ErrorActionPreference = 'Stop' Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Showcase-Word-ExecutiveReport.docx' Remove-Item -Path $path -Force -ErrorAction SilentlyContinue @@ -120,7 +119,7 @@ New-OfficeWord -Path $path { Update-OfficeWordFields Update-OfficeWordTableOfContents } -} | Out-Null +} $document = Get-OfficeWord -Path $path -ReadOnly try { @@ -134,5 +133,5 @@ try { Endnotes = @(Get-OfficeWordEndnote -Document $document).Count } | Format-List } finally { - $document.Dispose() + $document | Close-OfficeWord } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-ArchitectureMap.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-ArchitectureMap.ps1 index fa49809b..705e5535 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-ArchitectureMap.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-ArchitectureMap.ps1 @@ -7,17 +7,16 @@ $ErrorActionPreference = 'Stop' Import-Module PSWriteOffice -ErrorAction Stop -New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $OutputDirectory -ItemType Directory -Force $path = Join-Path $OutputDirectory 'Example-Visio-ArchitectureMap.vsdx' $svgPath = Join-Path $OutputDirectory 'Example-Visio-ArchitectureMap.svg' $pngPath = Join-Path $OutputDirectory 'Example-Visio-ArchitectureMap.png' New-OfficeVisio -Path $path -Title 'Service architecture map' -Author 'PSWriteOffice' -Width 12 -Height 7.5 -UseMastersByDefault -RequestRecalcOnOpen { - Import-OfficeVisioStencil -BuiltIn Architecture -Name Arch -Default | Out-Null - Import-OfficeVisioStencil -BuiltIn Cloud -Name Cloud | Out-Null - Import-OfficeVisioStencil -BuiltIn SecurityIdentity -Name Security | Out-Null - Import-OfficeVisioStencil -BuiltIn DataPlatform -Name Data | Out-Null + Import-OfficeVisioStencil -BuiltIn Architecture -Name Arch -Default + Import-OfficeVisioStencil -BuiltIn Cloud -Name Cloud + Import-OfficeVisioStencil -BuiltIn SecurityIdentity -Name Security + Import-OfficeVisioStencil -BuiltIn DataPlatform -Name Data VisioTextBox 'SaaS control plane' -X 6 -Y 6.85 -Width 4.2 -Height 0.42 -FillColor '#FFFFFF' -LineColor '#FFFFFF' VisioTextBox 'Boundaries, trust points, and platform services are editable Visio shapes.' -X 6 -Y 6.43 -Width 6.8 -Height 0.28 -FillColor '#FFFFFF' -LineColor '#FFFFFF' @@ -47,10 +46,10 @@ New-OfficeVisio -Path $path -Title 'Service architecture map' -Author 'PSWriteOf VisioConnector -From worker -To queue -Kind Straight -FromSide Bottom -ToSide Top -EndArrow Triangle -Label 'async' -LineColor '#0D9488' VisioConnector -From queue -To archive -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -LineColor '#C026D3' VisioConnector -From sql -To monitor -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -LineColor '#E11D48' -} | Out-Null +} -ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null -ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null +ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath +ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath if ($Open) { Invoke-Item $svgPath diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-NetworkTopology.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-NetworkTopology.ps1 index 602c4232..fea928c7 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-NetworkTopology.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-NetworkTopology.ps1 @@ -7,15 +7,14 @@ $ErrorActionPreference = 'Stop' Import-Module PSWriteOffice -ErrorAction Stop -New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $OutputDirectory -ItemType Directory -Force $path = Join-Path $OutputDirectory 'Example-Visio-NetworkTopology.vsdx' $svgPath = Join-Path $OutputDirectory 'Example-Visio-NetworkTopology.svg' $pngPath = Join-Path $OutputDirectory 'Example-Visio-NetworkTopology.png' New-OfficeVisio -Path $path -Title 'Branch office topology' -Author 'PSWriteOffice' -Width 11 -Height 7 -UseMastersByDefault -RequestRecalcOnOpen { - Import-OfficeVisioStencil -BuiltIn Network -Name Net -Default | Out-Null - Import-OfficeVisioStencil -BuiltIn Infrastructure -Name Infra | Out-Null + Import-OfficeVisioStencil -BuiltIn Network -Name Net -Default + Import-OfficeVisioStencil -BuiltIn Infrastructure -Name Infra VisioTextBox 'Branch office network' -X 5.5 -Y 6.35 -Width 4.5 -Height 0.42 -FillColor '#FFFFFF' -LineColor '#FFFFFF' VisioTextBox 'Zones, devices, and traffic paths from the OfficeIMO network stencil catalog.' -X 5.5 -Y 5.98 -Width 6.4 -Height 0.28 -FillColor '#FFFFFF' -LineColor '#FFFFFF' @@ -43,10 +42,10 @@ New-OfficeVisio -Path $path -Title 'Branch office topology' -Author 'PSWriteOffi VisioConnector -From core -To printer -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -LineColor '#64748B' VisioConnector -From core -To app -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'VLAN 20' -LineColor '#7C3AED' VisioConnector -From app -To nas -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'backup' -LineColor '#C026D3' -} | Out-Null +} -ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null -ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null +ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath +ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath if ($Open) { Invoke-Item $svgPath diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-PackageStencil.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-PackageStencil.ps1 index 683bd80a..90079ab4 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-PackageStencil.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-PackageStencil.ps1 @@ -24,8 +24,7 @@ if (-not (Test-Path -LiteralPath $StencilPackagePath)) { throw "Stencil package was not found. Provide -StencilPackagePath with a .vssx, .vstx, or .vsdx file." } -New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $OutputDirectory -ItemType Directory -Force $path = Join-Path $OutputDirectory 'Example-Visio-PackageStencil.vsdx' $svgPath = Join-Path $OutputDirectory 'Example-Visio-PackageStencil.svg' $pngPath = Join-Path $OutputDirectory 'Example-Visio-PackageStencil.png' @@ -37,7 +36,7 @@ if ($sampleStencils.Count -eq 0) { } New-OfficeVisio -Path $path -Title 'Package-backed stencils' -Author 'PSWriteOffice' -Width 10 -Height 6.5 -UseMastersByDefault -RequestRecalcOnOpen { - Import-OfficeVisioStencil -Catalog $catalog -Name Package -Default | Out-Null + Import-OfficeVisioStencil -Catalog $catalog -Name Package -Default VisioTextBox 'Package-backed stencil import' -X 5 -Y 5.8 -Width 4.6 -Height 0.38 -FillColor '#FFFFFF' -LineColor '#FFFFFF' VisioTextBox "Loaded from $([System.IO.Path]::GetFileName($StencilPackagePath))" -X 5 -Y 5.42 -Width 5.2 -Height 0.26 -FillColor '#FFFFFF' -LineColor '#FFFFFF' @@ -50,10 +49,10 @@ New-OfficeVisio -Path $path -Title 'Package-backed stencils' -Author 'PSWriteOff VisioStencil -Stencil $third -Key importedC -Text 'Package master C' -X 8 -Y 3.4 -FillColor '#DCFCE7' -LineColor '#16A34A' VisioConnector -From importedA -To importedB -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'loaded' -LineColor '#0284C7' VisioConnector -From importedB -To importedC -Kind Straight -FromSide Right -ToSide Left -EndArrow Triangle -Label 'reused' -LineColor '#16A34A' -} | Out-Null +} -ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null -ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null +ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath +ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath if ($Open) { Invoke-Item $svgPath diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-StencilFlow.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-StencilFlow.ps1 index 30937851..82be0756 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-StencilFlow.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Example-Visio-StencilFlow.ps1 @@ -7,14 +7,13 @@ $ErrorActionPreference = 'Stop' Import-Module PSWriteOffice -ErrorAction Stop -New-Item -Path $OutputDirectory -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $OutputDirectory -ItemType Directory -Force $path = Join-Path $OutputDirectory 'Example-Visio-StencilFlow.vsdx' $svgPath = Join-Path $OutputDirectory 'Example-Visio-StencilFlow.svg' $pngPath = Join-Path $OutputDirectory 'Example-Visio-StencilFlow.png' New-OfficeVisio -Path $path -Title 'Customer onboarding flow' -Author 'PSWriteOffice' -Width 11 -Height 8.5 -UseMastersByDefault -RequestRecalcOnOpen { - Import-OfficeVisioStencil -BuiltIn Flowchart -Name Flow -Default | Out-Null + Import-OfficeVisioStencil -BuiltIn Flowchart -Name Flow -Default VisioTextBox 'Customer onboarding' -X 5.5 -Y 7.55 -Width 5.2 -Height 0.42 -FillColor '#FFFFFF' -LineColor '#FFFFFF' VisioTextBox 'A compact, editable flowchart generated from PowerShell and OfficeIMO stencils.' -X 5.5 -Y 7.08 -Width 6.4 -Height 0.32 -FillColor '#FFFFFF' -LineColor '#FFFFFF' @@ -39,10 +38,10 @@ New-OfficeVisio -Path $path -Title 'Customer onboarding flow' -Author 'PSWriteOf VisioConnector -From packet -To done -Kind Straight -FromSide Bottom -ToSide Top -EndArrow Triangle -LineColor '#0F766E' VisioConnector -From decision -To rework -Kind Straight -FromSide Bottom -ToSide Top -EndArrow Triangle -Label 'no' -LineColor '#E11D48' VisioConnector -From rework -To validate -Kind Straight -FromSide Left -ToSide Bottom -EndArrow Triangle -LineColor '#E11D48' -} | Out-Null +} -ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath | Out-Null -ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath | Out-Null +ConvertTo-OfficeVisioSvg -Path $path -OutputPath $svgPath +ConvertTo-OfficeVisioPng -Path $path -OutputPath $pngPath if ($Open) { Invoke-Item $svgPath diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Visio/Recipe-Visio-ServiceFlow.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Recipe-Visio-ServiceFlow.ps1 new file mode 100644 index 00000000..23d4ab76 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Visio/Recipe-Visio-ServiceFlow.ps1 @@ -0,0 +1,10 @@ +$path = '.\Service-Flow.vsdx' + +New-OfficeVisio -Path $path -Width 10 -Height 6 -Title 'Service request flow' { + VisioTextBox 'Service request flow' -X 5 -Y 5.4 -Width 4 -Height 0.4 -FillColor '#FFFFFF' -LineColor '#FFFFFF' + VisioRectangle -Key request -Text 'Request' -X 2 -Y 3 -Width 1.8 -Height 0.9 -FillColor '#DBEAFE' + VisioRectangle -Key approve -Text 'Approval' -X 5 -Y 3 -Width 1.8 -Height 0.9 -FillColor '#FEF3C7' + VisioRectangle -Key deliver -Text 'Delivery' -X 8 -Y 3 -Width 1.8 -Height 0.9 -FillColor '#DCFCE7' + VisioConnector -From request -To approve -FromSide Right -ToSide Left -EndArrow Triangle + VisioConnector -From approve -To deliver -FromSide Right -ToSide Left -EndArrow Triangle +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Visuals/Example-ChartForgeXVisuals.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Visuals/Example-ChartForgeXVisuals.ps1 new file mode 100644 index 00000000..560b16f7 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Visuals/Example-ChartForgeXVisuals.ps1 @@ -0,0 +1,40 @@ +$ErrorActionPreference = 'Stop' + +Import-Module ImagePlayground -ErrorAction Stop +Import-Module PSWriteOffice -ErrorAction Stop + +$documents = Join-Path $PSScriptRoot '..\Documents' +$null = New-Item -Path $documents -ItemType Directory -Force +$chart = New-ImageTopology -Node @( + New-ImageTopologyNode -Id api -Label API -Detail (New-ImageTopologyNodeDetail -Label Runtime -Value '.NET 10') + New-ImageTopologyNode -Id db -Label Database +) -Edge ( + New-ImageTopologyEdge -SourceNodeId api -TargetNodeId db -Label SQL -PreferredLength 180 -TargetMarker Arrow +) -LayoutPreset Presentation -FilePath (Join-Path $documents 'service-map.svg') -PassThru + +$artifact = $chart | + ConvertTo-ImageVisualArtifact -Id service-map -Title 'Service Map' ` + -AccessibleDescription 'API service connects to the database.' +$svgPath = Join-Path $documents 'service-map-office.svg' +$artifact | Export-ImageVisualArtifact -FilePath $svgPath +$officeVisual = $artifact | ConvertTo-OfficeVisual -Width 420 -SvgPolicy RasterizeWhenNeeded + +New-OfficeWord -Path (Join-Path $documents 'service-map.docx') { + WordSection { WordParagraph { $officeVisual | Add-OfficeWordVisual } } +} + +New-OfficeExcel -Path (Join-Path $documents 'service-map.xlsx') { + Add-OfficeExcelSheet -Name Dashboard -Content { + $officeVisual | Add-OfficeExcelVisual -Address B2 + } +} + +New-OfficePowerPoint -Path (Join-Path $documents 'service-map.pptx') { + PptSlide { $officeVisual | Add-OfficePowerPointVisual -X 48 -Y 72 } +} + +New-OfficePdf -Path (Join-Path $documents 'service-map.pdf') { + $officeVisual | Add-OfficePdfVisual -Align Center +} + +$officeVisual.Report diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAdvanced.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAdvanced.ps1 index 25f9df90..633bd323 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAdvanced.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAdvanced.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Example-WordAdvanced.docx' $data = @( [pscustomobject]@{ Item = 'Alpha'; Total = 1200 } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAliasDsl.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAliasDsl.ps1 index af8a5326..b9a5ec55 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAliasDsl.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordAliasDsl.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $orders = @( [PSCustomObject]@{ Customer = 'Contoso'; Total = 1850; Status = 'Open' } [PSCustomObject]@{ Customer = 'Fabrikam'; Total = 640; Status = 'Closed' } @@ -40,6 +39,6 @@ New-OfficeWord -Path $docPath { WordBold (Get-Date -Format 'yyyy-MM-dd HH:mm') } } -} -PassThru | Out-Null +} Write-Host "Document saved to $docPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBackgroundMailMerge.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBackgroundMailMerge.ps1 index 1224980c..6aaa662f 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBackgroundMailMerge.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBackgroundMailMerge.ps1 @@ -21,7 +21,7 @@ New-OfficeWord -Path $Path { FirstName = 'Ada' OrderId = 4242 } -} | Out-Null +} Get-OfficeWord -Path $Path -ReadOnly | ForEach-Object { try { @@ -30,6 +30,6 @@ Get-OfficeWord -Path $Path -ReadOnly | ForEach-Object { (Find-OfficeWord -Path $Path -Text 'Ada').Count (Find-OfficeWord -Path $Path -Text '4242').Count } finally { - $_.Dispose() + $_ | Close-OfficeWord } } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBasic.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBasic.ps1 index 9bc3d79e..18b37448 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBasic.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordBasic.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $data = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000; YoY = '12%' } [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000; YoY = '22%' } @@ -30,6 +29,6 @@ New-OfficeWord -Path $docPath { Add-OfficeWordTableCondition -FilterScript { $_.Revenue -gt 100000 } -BackgroundColor '#e6fffb' } } -} -PassThru | Out-Null +} Write-Host "Document saved to $docPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordCharts.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordCharts.ps1 index d5dbea60..b360fca5 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordCharts.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordCharts.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $rows = @( [PSCustomObject]@{ Region = 'North America'; Revenue = 125000 } [PSCustomObject]@{ Region = 'EMEA'; Revenue = 98000 } @@ -28,9 +27,13 @@ New-OfficeWord -Path $docPath { Add-OfficeWordChart -Type Line -Data $trend -CategoryProperty Month -SeriesProperty Sales, Profit -Legend -XAxisTitle 'Month' -YAxisTitle 'Value' -SeriesColor '#1f77b4', '#ff7f0e' Add-OfficeWordParagraph -Text 'Pie chart anchored inside a table cell' - $table = Add-OfficeWordTable -InputObject $tableRows -Style 'GridTable1LightAccent1' -PassThru - $cellParagraph = $table.Rows[1].Cells[1].AddParagraph() - Add-OfficeWordChart -Paragraph $cellParagraph -Type Pie -Data $rows -CategoryProperty Region -SeriesProperty Revenue -Title 'Cell Revenue Mix' -WidthPixels 420 -HeightPixels 280 -} | Out-Null + Add-OfficeWordTable -InputObject $tableRows -Style 'GridTable1LightAccent1' { + WordTableCell -Row 1 -Column 1 { + WordParagraph { + WordChart -Type Pie -Data $rows -CategoryProperty Region -SeriesProperty Revenue -Title 'Cell Revenue Mix' -WidthPixels 420 -HeightPixels 280 + } + } + } +} Write-Host "Document saved to $docPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordFind.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordFind.ps1 index 5b045ca9..d7a41076 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordFind.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordFind.ps1 @@ -1,18 +1,17 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Word-Find.docx' New-OfficeWord -Path $path { Add-OfficeWordParagraph -Text 'Hello from PSWriteOffice' -} | Out-Null +} $doc = Get-OfficeWord -Path $path try { - $null = $doc.AddBookmark('Bookmark1') - $paragraph = $doc.AddParagraph('Page') - $null = $paragraph.AddField([OfficeIMO.Word.WordFieldType]::Page) + $paragraph = Add-OfficeWordParagraph -Target $doc -Text 'Page' -PassThru + Add-OfficeWordBookmark -Paragraph $paragraph -Name 'Bookmark1' + Add-OfficeWordField -Paragraph $paragraph -Type Page } finally { Close-OfficeWord -Document $doc -Save } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordHtmlConvert.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordHtmlConvert.ps1 index aa4b6491..0579379d 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordHtmlConvert.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordHtmlConvert.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $docPath = Join-Path $documents 'Word-HtmlSource.docx' $htmlPath = Join-Path $documents 'Word-HtmlSource.html' $roundtripPath = Join-Path $documents 'Word-HtmlRoundtrip.docx' @@ -11,10 +10,10 @@ New-OfficeWord -Path $docPath { Add-OfficeWordParagraph -Text 'Hello from HTML conversion.' -Style Heading2 Add-OfficeWordParagraph -Text 'This document will round-trip to HTML.' } -} | Out-Null +} -ConvertTo-OfficeWordHtml -Path $docPath -OutputPath $htmlPath -PassThru | Out-Null -ConvertFrom-OfficeWordHtml -Path $htmlPath -OutputPath $roundtripPath -PassThru | Out-Null +ConvertTo-OfficeWordHtml -Path $docPath -OutputPath $htmlPath +ConvertFrom-OfficeWordHtml -Path $htmlPath -OutputPath $roundtripPath Write-Host "HTML saved to $htmlPath" Write-Host "Round-trip document saved to $roundtripPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLineBreaks.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLineBreaks.ps1 index 415284d8..885352ab 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLineBreaks.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLineBreaks.ps1 @@ -1,20 +1,19 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Example-WordLineBreaks.docx' -$document = New-OfficeWord -Path $path +$document = New-OfficeWord -Path $path -NoSave -# AddBreak() creates a same-paragraph line break similar to Shift+Enter in Word. -$paragraph = $document.AddParagraph('Line 1 in the same paragraph') -$null = $paragraph.AddBreak() -$null = $paragraph.AddText('Line 2 after AddBreak()') -$null = $paragraph.AddBreak() -$null = $paragraph.AddText('Line 3 still in the same paragraph') +# Add-OfficeWordBreak creates a same-paragraph line break similar to Shift+Enter in Word. +$paragraph = Add-OfficeWordParagraph -Target $document -Text 'Line 1 in the same paragraph' -PassThru +Add-OfficeWordBreak -Paragraph $paragraph +Add-OfficeWordText -Paragraph $paragraph -Text 'Line 2 after the line break' +Add-OfficeWordBreak -Paragraph $paragraph +Add-OfficeWordText -Paragraph $paragraph -Text 'Line 3 still in the same paragraph' -# AddParagraph() creates a new paragraph, so an empty paragraph gives a visible blank line. -$null = $document.AddParagraph() -$null = $document.AddParagraph('This text comes after an empty paragraph break.') +# An empty paragraph creates a visible blank line. +Add-OfficeWordParagraph -Target $document +Add-OfficeWordParagraph -Target $document -Text 'This text comes after an empty paragraph break.' Close-OfficeWord -Document $document -Save diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLinksAndProperties.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLinksAndProperties.ps1 index 204fc63d..d8e23bff 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLinksAndProperties.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordLinksAndProperties.ps1 @@ -19,7 +19,7 @@ New-OfficeWord -Path $Path { WordText 'Summary section' WordBookmark -Name 'Summary' } -} | Out-Null +} $links = Get-OfficeWordHyperlink -Path $Path $properties = Get-OfficeWordDocumentProperty -Path $Path diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordMarkdownConvert.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordMarkdownConvert.ps1 index e6897b60..984f5536 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordMarkdownConvert.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordMarkdownConvert.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $docPath = Join-Path $documents 'Word-MarkdownSource.docx' $markdownPath = Join-Path $documents 'Word-MarkdownSource.md' $roundtripPath = Join-Path $documents 'Word-MarkdownRoundtrip.docx' @@ -13,10 +12,10 @@ New-OfficeWord -Path $docPath { Add-OfficeWordListItem -Text 'Alpha' Add-OfficeWordListItem -Text 'Beta' } -} | Out-Null +} -ConvertTo-OfficeWordMarkdown -Path $docPath -OutputPath $markdownPath -PassThru | Out-Null -ConvertFrom-OfficeWordMarkdown -Path $markdownPath -OutputPath $roundtripPath -PassThru | Out-Null +ConvertTo-OfficeWordMarkdown -Path $docPath -OutputPath $markdownPath +ConvertFrom-OfficeWordMarkdown -Path $markdownPath -OutputPath $roundtripPath Write-Host "Markdown saved to $markdownPath" Write-Host "Round-trip document saved to $roundtripPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordModifyExistingObjects.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordModifyExistingObjects.ps1 index 3ba4e014..e2027fe3 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordModifyExistingObjects.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordModifyExistingObjects.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Word-ModifyExistingObjects.docx' $initialRisks = @( @@ -19,7 +18,7 @@ New-OfficeWord -Path $path { WordListItem -Text 'Initial review' WordListItem -Text 'Security approval' } -} | Out-Null +} # Second pass: treat the file as an existing document that came from a user or template. $document = Get-OfficeWord -Path $path @@ -31,26 +30,21 @@ try { Item = 'Mitigation plan' Owner = 'Service Desk' State = 'Ready' - }) -PassThru | - Out-Null + }) -PassThru $riskTable | - Add-OfficeWordTableRow -Values 'Release communication', 'Operations', 'Draft' | - Out-Null + Add-OfficeWordTableRow -Values 'Release communication', 'Operations', 'Draft' $riskTable | Get-OfficeWordTableCell -Row 2 -Column 2 | - Set-OfficeWordTableCell -Text 'Investigating' -ShadingFillColor '#fff2cc' -ShadingPattern Clear | - Out-Null + Set-OfficeWordTableCell -Text 'Investigating' -ShadingFillColor '#fff2cc' -ShadingPattern Clear Find-OfficeWordList -Document $document -Text 'Initial review' | - Add-OfficeWordListItem -Text 'Business sign-off' | - Out-Null + Add-OfficeWordListItem -Text 'Business sign-off' Get-OfficeWordList -Document $document | Where-Object { $_.ListItems.Text -contains 'Initial review' } | - Add-OfficeWordListItem -Text 'Go-live approval' | - Out-Null + Add-OfficeWordListItem -Text 'Go-live approval' } finally { Close-OfficeWord -Document $document -Save } diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordProtectionWatermark.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordProtectionWatermark.ps1 index f6aa6e3e..5ffa2db4 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordProtectionWatermark.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordProtectionWatermark.ps1 @@ -1,13 +1,12 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $path = Join-Path $documents 'Word-ProtectedWatermark.docx' New-OfficeWord -Path $path { Add-OfficeWordParagraph -Text 'Confidential report' Add-OfficeWordWatermark -Text 'CONFIDENTIAL' Protect-OfficeWordDocument -Password 'secret' -} | Out-Null +} Write-Host "Document saved to $path" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordReplaceText.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordReplaceText.ps1 index e81d8879..59609867 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordReplaceText.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordReplaceText.ps1 @@ -15,7 +15,7 @@ New-OfficeWord -Path $Path { WordText 'Summary' WordBookmark -Name 'FY24Summary' } -} | Out-Null +} Update-OfficeWordText -Path $Path -OldValue 'FY24' -NewValue 'FY25' -IncludeHyperlinkText -IncludeHyperlinkUri -IncludeHyperlinkAnchor -IncludeHyperlinkTooltip diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCalculatedColumns.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCalculatedColumns.ps1 index 4cfe26fe..cdf114d1 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCalculatedColumns.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCalculatedColumns.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $services = @( [PSCustomObject]@{ Name = 'Directory API' @@ -43,6 +42,6 @@ New-OfficeWord -Path $docPath { Add-OfficeWordParagraph -Text 'Calculated and projected columns' Add-OfficeWordParagraph -Text 'Shape your objects before Add-OfficeWordTable when you want extra columns or friendlier labels.' Add-OfficeWordTable -InputObject $tableData -Style 'GridTable1LightAccent1' -} | Out-Null +} Write-Host "Document saved to $docPath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCells.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCells.ps1 index f4e7e4d1..d11a27c3 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCells.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableCells.ps1 @@ -35,7 +35,7 @@ New-OfficeWord -Path $path { WordTable -Data $nestedRows -Style TableGrid } } -} | Out-Null +} Write-Host "Document saved to $path" Write-Host "Image fixture saved to $imagePath" diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableConditions.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableConditions.ps1 index dbb3dcae..59452f41 100644 --- a/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableConditions.ps1 +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Example-WordTableConditions.ps1 @@ -1,7 +1,6 @@ Import-Module PSWriteOffice -ErrorAction Stop $documents = Join-Path $PSScriptRoot '..\Documents' -New-Item -Path $documents -ItemType Directory -Force | Out-Null - +$null = New-Item -Path $documents -ItemType Directory -Force $data = @( [PSCustomObject]@{ Name = 'Alpha'; Score = 92; Owner = 'Ada' } [PSCustomObject]@{ Name = 'Beta'; Score = 76; Owner = 'Linus' } @@ -18,6 +17,6 @@ New-OfficeWord -Path $docPath { WordTableCondition -FilterScript { $_.Score -lt 70 } -BackgroundColor '#ffe6e6' } } -} | Out-Null +} Write-Host "Document saved to $docPath" \ No newline at end of file diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ApprovalChecklist.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ApprovalChecklist.ps1 new file mode 100644 index 00000000..52753d96 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ApprovalChecklist.ps1 @@ -0,0 +1,44 @@ +$path = '.\Change-Approval-Checklist.docx' +$checks = @( + [pscustomobject]@{ Check = 'Rollback plan attached'; Owner = 'Engineering'; Required = 'Yes' } + [pscustomobject]@{ Check = 'Monitoring updated'; Owner = 'Operations'; Required = 'Yes' } + [pscustomobject]@{ Check = 'Customer notice reviewed'; Owner = 'Support'; Required = 'No' } +) + +WordNew -Path $path { + WordSection { + WordHeader { WordParagraph -Text 'Production change control' -Style Heading2 } + WordFooter { WordPageNumber -IncludeTotalPages } + + WordParagraph -Text 'Change Approval Checklist' -Style Heading1 + WordParagraph -Text 'Complete this document before the production window opens.' + WordTableOfContents -Style Template1 + + WordParagraph -Text 'Change details' -Style Heading1 + WordParagraph { + WordText 'Risk level: ' + WordDropDownList -Items 'Low', 'Medium', 'High' -Alias 'RiskLevel' -Tag 'risk-level' + } + WordParagraph { + WordText 'Planned date: ' + WordDatePicker -Date '2026-09-15' -Alias 'PlannedDate' -Tag 'planned-date' + } + + WordParagraph -Text 'Required evidence' -Style Heading1 + WordTable -InputObject $checks -Style GridTable1LightAccent1 -Layout AutoFitToWindow { + WordTableCondition -FilterScript { $_.Required -eq 'Yes' } -BackgroundColor '#FEF3C7' + } + + WordParagraph -Text 'Approvals' -Style Heading1 + foreach ($role in 'Technical owner', 'Operations', 'Change manager') { + WordParagraph { + WordText "$role approved: " + WordCheckBox -Alias ($role -replace ' ', '') -Tag (($role -replace ' ', '-').ToLowerInvariant()) + } + } + + WordParagraph -Text 'Implementation notes' -Style Heading1 + WordParagraph -Text 'Record the actual start time, validation result, and rollback decision here.' + WordWatermark -Text 'CHANGE CONTROL' + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-CompareDocuments.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-CompareDocuments.ps1 new file mode 100644 index 00000000..26f9cdbc --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-CompareDocuments.ps1 @@ -0,0 +1,16 @@ +$approved = '.\Policy-Approved.docx' +$proposed = '.\Policy-Proposed.docx' +$redline = '.\Policy-Changes.docx' + +WordNew -Path $approved { + WordParagraph -Text 'Remote Access Policy' -Style Heading1 + WordParagraph -Text 'Access reviews run every 90 days.' +} + +WordNew -Path $proposed { + WordParagraph -Text 'Remote Access Policy' -Style Heading1 + WordParagraph -Text 'Access reviews run every 30 days.' + WordParagraph -Text 'Service owners must record evidence.' +} + +Compare-OfficeWordDocument -ReferencePath $approved -DifferencePath $proposed -RedlinePath $redline diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-HtmlToDocument.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-HtmlToDocument.ps1 new file mode 100644 index 00000000..0cfd915b --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-HtmlToDocument.ps1 @@ -0,0 +1,9 @@ +$html = @' +

Service review

+

The weekly review is ready.

+
  • Identity is healthy.
  • Messaging needs follow-up.
+
AreaOwner
IdentityPlatform
+'@ + +ConvertFrom-OfficeWordHtml -Html $html -OutputPath '.\Service-Review.docx' +ConvertTo-OfficeWordMarkdown -Path '.\Service-Review.docx' -OutputPath '.\Service-Review.md' diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-InspectExisting.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-InspectExisting.ps1 new file mode 100644 index 00000000..7b446e83 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-InspectExisting.ps1 @@ -0,0 +1,20 @@ +$path = '.\Word-Inspection-Source.docx' +$services = @( + [pscustomobject]@{ Service = 'Identity'; Owner = 'IAM'; Status = 'Ready' } + [pscustomobject]@{ Service = 'Messaging'; Owner = 'Collaboration'; Status = 'Review' } +) + +WordNew -Path $path { + WordSection { + WordParagraph -Text 'Service Readiness' -Style Heading1 + WordParagraph -Text 'Review the Messaging service before publication.' + WordTable -InputObject $services -Style TableGrid + } +} + +$document = Get-OfficeWord -Path $path -ReadOnly +Get-OfficeWordStatistics -Document $document +$document | Get-OfficeWordParagraph | Select-Object Index, Text +$document | Get-OfficeWordTable | Select-Object Index, RowCount, ColumnCount +Find-OfficeWord -Document $document -Text 'Messaging' +Close-OfficeWord -Document $document diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-MailMergeLetters.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-MailMergeLetters.ps1 new file mode 100644 index 00000000..3992bbc5 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-MailMergeLetters.ps1 @@ -0,0 +1,27 @@ +$recipients = @( + @{ FirstName = 'Ada'; OrderId = 'SO-1042'; DeliveryDate = '2026-09-01' } + @{ FirstName = 'Grace'; OrderId = 'SO-1043'; DeliveryDate = '2026-09-03' } +) + +foreach ($recipient in $recipients) { + $path = ".\Order-$($recipient.OrderId).docx" + + WordNew -Path $path { + WordSection { + WordParagraph -Text 'Order confirmation' -Style Heading1 + WordParagraph { + WordText 'Hello ' + WordField -Type MergeField -Parameters '"FirstName"' + WordText ',' + } + WordParagraph { + WordText 'Order ' + WordField -Type MergeField -Parameters '"OrderId"' + WordText ' is scheduled for ' + WordField -Type MergeField -Parameters '"DeliveryDate"' + WordText '.' + } + Invoke-OfficeWordMailMerge -Values $recipient + } + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-MergeDocuments.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-MergeDocuments.ps1 new file mode 100644 index 00000000..ec5ae2a6 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-MergeDocuments.ps1 @@ -0,0 +1,26 @@ +$cover = '.\Word-Pack-Cover.docx' +$detail = '.\Word-Pack-Detail.docx' +$appendix = '.\Word-Pack-Appendix.docx' +$merged = '.\Word-Combined-Pack.docx' + +WordNew -Path $cover { + WordSection { + WordParagraph -Text 'Operations Pack' -Style Heading1 + } +} + +WordNew -Path $detail { + WordSection { + WordParagraph -Text 'Current Status' -Style Heading1 + WordParagraph -Text 'All core services are available.' + } +} + +WordNew -Path $appendix { + WordSection { + WordParagraph -Text 'Appendix' -Style Heading1 + WordParagraph -Text 'Evidence retained for 90 days.' + } +} + +Join-OfficeWordDocument -Path $cover -AppendPath $detail,$appendix -OutputPath $merged diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ObjectComposition.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ObjectComposition.ps1 new file mode 100644 index 00000000..d0a10c74 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ObjectComposition.ps1 @@ -0,0 +1,20 @@ +$path = '.\Word-Object-Composition.docx' +$findings = @( + [pscustomobject]@{ Finding = 'Dormant administrator account'; Owner = 'Identity'; Status = 'Open' } + [pscustomobject]@{ Finding = 'Missing evidence link'; Owner = 'Operations'; Status = 'Resolved' } +) + +$document = New-OfficeWord -Path $path -NoSave +$heading = $document | Add-OfficeWordParagraph -Text 'Access review' -Style Heading1 -PassThru +$heading | Add-OfficeWordText -Text ' — weekly summary' -Color '#475569' + +$summary = $document | Add-OfficeWordParagraph -PassThru +$summary | Add-OfficeWordText -Run @{ + Text = 'Owner: ', 'Security', ' Status: ', 'Review required' + Bold = $true, $false, $true, $true + Color = $null, $null, $null, 'Crimson' +} + +Add-OfficeWordTable -Document $document -InputObject $findings -Style GridTable4Accent1 -Layout AutoFitToWindow +$document | Save-OfficeWord +$document | Close-OfficeWord diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ProjectStatus.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ProjectStatus.ps1 new file mode 100644 index 00000000..cb2c8b06 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-ProjectStatus.ps1 @@ -0,0 +1,56 @@ +$path = '.\Project-Status.docx' +$milestones = @( + [pscustomobject]@{ Milestone = 'Discovery'; Owner = 'Product'; Progress = 100; Status = 'Done' } + [pscustomobject]@{ Milestone = 'Implementation'; Owner = 'Engineering'; Progress = 72; Status = 'On track' } + [pscustomobject]@{ Milestone = 'Pilot'; Owner = 'Operations'; Progress = 35; Status = 'At risk' } +) +$trend = @( + [pscustomobject]@{ Week = 'W1'; Complete = 18 } + [pscustomobject]@{ Week = 'W2'; Complete = 37 } + [pscustomobject]@{ Week = 'W3'; Complete = 55 } + [pscustomobject]@{ Week = 'W4'; Complete = 72 } +) + +WordNew -Path $path { + WordSection { + WordHeader { WordParagraph -Text 'Northwind migration | Weekly status' -Style Heading2 } + WordFooter { + WordText 'Internal | Page ' + WordPageNumber -IncludeTotalPages + } + + WordParagraph -Text 'Northwind Migration' -Style Heading1 + WordParagraph -Text 'Weekly project status' -Style Heading2 + WordParagraph -Run @{ + Text = 'Overall status: ', 'On track', '. The pilot needs an owner decision on the final rollout window.' + Bold = $true, $true, $false + Color = $null, 'SeaGreen', $null + } + + WordParagraph -Text 'Executive summary' -Style Heading1 + WordList -Style Bulleted { + WordListItem -Text 'Core implementation is 72% complete.' + WordListItem -Text 'No critical defects are open.' + WordListItem -Text 'The pilot date is the only decision needed this week.' + } + + WordParagraph -Text 'Milestones' -Style Heading1 + WordTable -InputObject $milestones -Style GridTable4Accent1 -Layout AutoFitToWindow { + WordTableCondition -FilterScript { $_.Status -eq 'At risk' } -BackgroundColor '#FEE2E2' + WordTableCondition -FilterScript { $_.Status -eq 'Done' } -BackgroundColor '#DCFCE7' + } + + WordParagraph -Text 'Delivery trend' -Style Heading1 + WordChart -Type Line -Data $trend -CategoryProperty Week -SeriesProperty Complete -Title 'Completion by week' -Legend -FitToPageWidth + + WordParagraph -Text 'Decision' -Style Heading1 + WordParagraph { + WordBold 'Approve the pilot window: ' + WordCheckBox -Alias 'PilotApproved' -Tag 'pilot-approved' + } + WordParagraph { + WordText 'Target review date: ' + WordDatePicker -Date '2026-09-01' -Alias 'PilotReviewDate' -Tag 'pilot-review-date' + } + } +} diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-UpdateExisting.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-UpdateExisting.ps1 new file mode 100644 index 00000000..4fb97ce6 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Word/Recipe-Word-UpdateExisting.ps1 @@ -0,0 +1,18 @@ +$path = '.\Word-Updated-In-Place.docx' +WordNew -Path $path { + WordSection { + WordParagraph -Text 'FY24 Service Review' -Style Heading1 + WordParagraph { + WordText 'Open the ' + WordHyperlink -Text 'FY24 portal' -Url 'https://reports.example.test/FY24' -Tooltip 'FY24 reports' + WordText ' for supporting evidence.' + } + WordParagraph { + WordText 'Summary' + WordBookmark -Name 'FY24Summary' + } + } +} + +Update-OfficeWordText -Path $path -OldValue 'FY24' -NewValue 'FY25' ` + -IncludeHyperlinkText -IncludeHyperlinkUri -IncludeHyperlinkTooltip -IncludeHyperlinkAnchor diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1 new file mode 100644 index 00000000..3bc16ea0 --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Workflows/Recipe-Markdown-Word-PdfDelivery.ps1 @@ -0,0 +1,14 @@ +$markdownPath = '.\Customer-Handoff.md' +$wordPath = '.\Customer-Handoff.docx' +$pdfPath = '.\Customer-Handoff.pdf' + +$document = New-OfficeMarkdown -Path $markdownPath -NoSave +Add-OfficeMarkdownHeading -Document $document -Level 1 -Text 'Customer handoff' +Add-OfficeMarkdownParagraph -Document $document -Text 'The service is ready for acceptance.' +Add-OfficeMarkdownTaskList -Document $document -Items 'Review the evidence', 'Confirm the owner', 'Approve the handoff' +$document | Save-OfficeMarkdown -Path $markdownPath + +ConvertFrom-OfficeWordMarkdown -Document $document -OutputPath $wordPath +$word = Get-OfficeWord -Path $wordPath +$word | Export-OfficeDocumentPdf -Path $pdfPath +$word | Close-OfficeWord diff --git a/WebsiteArtifacts/apidocs/powershell/examples/Workflows/Recipe-MultiFormat-StatusPack.ps1 b/WebsiteArtifacts/apidocs/powershell/examples/Workflows/Recipe-MultiFormat-StatusPack.ps1 new file mode 100644 index 00000000..798d571f --- /dev/null +++ b/WebsiteArtifacts/apidocs/powershell/examples/Workflows/Recipe-MultiFormat-StatusPack.ps1 @@ -0,0 +1,66 @@ +$services = @( + [pscustomobject]@{ Service = 'Identity'; Owner = 'Platform'; Availability = 99.98; Incidents = 1; Status = 'Healthy' } + [pscustomobject]@{ Service = 'Messaging'; Owner = 'Collaboration'; Availability = 99.72; Incidents = 4; Status = 'Watch' } + [pscustomobject]@{ Service = 'Remote access'; Owner = 'Security'; Availability = 98.84; Incidents = 7; Status = 'Action' } +) + +MarkdownNew -Path '.\Service-Status.md' { + MarkdownHeading -Level 1 -Text 'Service Status' + MarkdownParagraph -Text 'The same PowerShell objects also feed the Word, Excel, PowerPoint, and PDF outputs in this recipe.' + MarkdownTable -InputObject $services + MarkdownHeading -Level 2 -Text 'Next steps' + MarkdownTaskList -Items 'Review Remote access', 'Assign the incident action', 'Publish the approved status pack' +} + +WordNew -Path '.\Service-Status.docx' { + WordSection { + WordHeader { WordParagraph -Text 'Weekly service status' -Style Heading2 } + WordFooter { WordPageNumber -IncludeTotalPages } + WordParagraph -Text 'Service Status' -Style Heading1 + WordParagraph -Text 'A document for owners who need narrative, tables, and an approval-ready file.' + WordTable -InputObject $services -Style GridTable4Accent1 -Layout AutoFitToWindow { + WordTableCondition -FilterScript { $_.Status -eq 'Action' } -BackgroundColor '#FEE2E2' + WordTableCondition -FilterScript { $_.Status -eq 'Watch' } -BackgroundColor '#FEF3C7' + } + WordChart -Type Bar -Data $services -CategoryProperty Service -SeriesProperty Incidents -Title 'Incidents by service' -FitToPageWidth + } +} + +ExcelNew -Path '.\Service-Status.xlsx' { + ExcelSheet 'Services' { + ExcelTable -Data $services -TableName 'ServiceStatus' -StartRow 1 -StartColumn 1 -TableStyle 'TableStyleMedium9' -AutoFit + ExcelFreeze -TopRows 1 + ExcelValidationList -TableName 'ServiceStatus' -HeaderName Status -Values Healthy,Watch,Action + ExcelConditionalColorScale -Range 'C2:C4' -StartColor '#FEE2E2' -EndColor '#DCFCE7' + ExcelChart -Range 'A1:D4' -Row 7 -Column 1 -Type ColumnClustered -Title 'Availability and incidents' -WidthPixels 700 -HeightPixels 320 + } + ExcelTableOfContents -SheetName 'Index' -AddBackLinks -BackLinkText 'Back to Index' +} + +PptNew -Path '.\Service-Status.pptx' { + PptSlideSize -Preset Screen16x9 + PptSlide { + PptTitle -Title 'Weekly Service Status' + PptTextBox -Text 'Three services, one owner conversation' -X 90 -Y 190 -Width 700 -Height 70 + PptNotes -Text 'Lead with the Remote access action and confirm its owner.' + } + PptSlide { + PptTitle -Title 'Current status' + PptTable -Data $services -X 55 -Y 130 -Width 720 -Height 210 + PptChart -Data $services -CategoryProperty Service -SeriesProperty Incidents -Type ClusteredColumn -Title 'Incidents' -X 120 -Y 370 -Width 600 -Height 230 + PptNotes -Text 'Use the table for exact values and the chart for the discussion.' + } +} + +PdfNew -Path '.\Service-Status.pdf' { + PdfTheme Report + PdfMetadata -Title 'Weekly service status' -Author 'Operations' + PdfPageSetup -PageSize A4 -Margin 42 + PdfHeader 'Weekly service status' + PdfFooter 'Page {page}/{pages}' + PdfHeading 'Service Status' -Level 1 + PdfPanel 'Remote access requires an owner action before the next review.' + PdfTable -InputObject $services -Property Service,Owner,Availability,Incidents,Status -HeaderFill '#334155' -HeaderTextColor '#FFFFFF' -AutoFitColumns -RightAlignNumeric + PdfHeading 'Next steps' -Level 2 + PdfList -Items 'Review Remote access', 'Assign the incident action', 'Publish the approved status pack' -Numbered +} diff --git a/WebsiteArtifacts/documentation/command-catalog.json b/WebsiteArtifacts/documentation/command-catalog.json index 04472bb1..539d7c51 100644 --- a/WebsiteArtifacts/documentation/command-catalog.json +++ b/WebsiteArtifacts/documentation/command-catalog.json @@ -1 +1 @@ -{"schemaVersion":1,"format":"pswriteoffice.documentation-catalog","module":{"name":"PSWriteOffice","version":"3.0.6","commandCount":492,"aliasCount":371,"familyCount":18,"sourceManifest":"PSWriteOffice.psd1"},"families":[{"id":"word","title":"Word","description":"Create, inspect, update, review, merge, protect, and convert DOC and DOCX documents.","commandCount":92,"docsUrl":"/docs/pswriteoffice/word/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Word","featuredCommands":["New-OfficeWord","Add-OfficeWordTable","Get-OfficeWordReview","Invoke-OfficeWordMailMerge","ConvertTo-OfficeWordDocument"]},{"id":"excel","title":"Excel","description":"Build, read, convert, validate, repair, compare, and publish XLS and XLSX workbook workflows.","commandCount":158,"docsUrl":"/docs/pswriteoffice/excel/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Excel","featuredCommands":["New-OfficeExcel","Add-OfficeExcelTable","Add-OfficeExcelPivotTable","Test-OfficeExcelWorkbook","ConvertTo-OfficeExcelWorkbook"]},{"id":"powerpoint","title":"PowerPoint","description":"Compose, inspect, update, import, theme, and render repeatable presentation decks.","commandCount":58,"docsUrl":"/docs/pswriteoffice/powerpoint/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/PowerPoint","featuredCommands":["New-OfficePowerPoint","Add-OfficePowerPointSlide","Add-OfficePowerPointChart","Get-OfficePowerPointInspection"]},{"id":"pdf","title":"PDF","description":"Author, inspect, transform, sign, annotate, extract, preflight, and combine PDF files.","commandCount":85,"docsUrl":"/docs/pswriteoffice/pdf/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Pdf","featuredCommands":["New-OfficePdf","Join-OfficePdf","Get-OfficePdfPreflight","Set-OfficePdfSignature"]},{"id":"reader","title":"Reader and extraction","description":"Detect formats and extract normalized documents, chunks, tables, visuals, assets, and ingest results.","commandCount":13,"docsUrl":"/docs/pswriteoffice/reader/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Reader","featuredCommands":["New-OfficeDocumentReader","Get-OfficeDocumentChunk","Get-OfficeDocumentTable","Search-OfficeDocument"]},{"id":"confluence","title":"Confluence Cloud","description":"Plan and publish pages, preserve managed sections, and transfer attachments through OfficeIMO.Confluence.","commandCount":7,"docsUrl":"/docs/pswriteoffice/confluence/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Confluence","featuredCommands":["New-OfficeConfluenceSession","Publish-OfficeConfluencePage","Set-OfficeConfluenceManagedSection","Send-OfficeConfluenceAttachment"]},{"id":"visio","title":"Visio","description":"Create, inspect, arrange, and export VSDX diagrams with built-in and imported stencils.","commandCount":23,"docsUrl":"/docs/pswriteoffice/visio/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Visio","featuredCommands":["New-OfficeVisio","Add-OfficeVisioStencilShape","Get-OfficeVisioInfo","ConvertTo-OfficeVisioSvg"]},{"id":"markdown","title":"Markdown","description":"Compose typed Markdown, parse documents, and convert between Markdown and HTML or Word.","commandCount":25,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Markdown","featuredCommands":["New-OfficeMarkdown","Add-OfficeMarkdownTable","ConvertTo-OfficeMarkdownHtml","ConvertFrom-OfficeWordMarkdown"]},{"id":"rtf","title":"RTF","description":"Create, open, edit, inspect, and bridge Rich Text Format documents.","commandCount":5,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Rtf","featuredCommands":["New-OfficeRtf","Get-OfficeRtf","Update-OfficeRtfText","ConvertTo-OfficeRtf"]},{"id":"csv","title":"CSV","description":"Create, import, inspect, and export delimited data with typed options.","commandCount":5,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Csv","featuredCommands":["ConvertTo-OfficeCsv","Import-OfficeCsv","Export-OfficeCsv","Get-OfficeCsv"]},{"id":"open-document","title":"OpenDocument","description":"Create, read, and save ODT, ODS, and ODP workflows.","commandCount":5,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["New-OfficeOpenDocument","Get-OfficeOpenDocument","Save-OfficeOpenDocument"]},{"id":"email","title":"Email","description":"Read and write messages and mailbox artifacts through the managed OfficeIMO.Email engine.","commandCount":4,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeEmail","Get-OfficeEmailMailbox","Save-OfficeEmail","Save-OfficeEmailMailbox"]},{"id":"asciidoc","title":"AsciiDoc","description":"Read, create, update, and save bounded AsciiDoc workflows.","commandCount":4,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeAsciiDoc","ConvertFrom-OfficeAsciiDocMarkdown","ConvertTo-OfficeAsciiDocMarkdown","Save-OfficeAsciiDoc"]},{"id":"latex","title":"LaTeX","description":"Read, create, update, and save bounded LaTeX interoperability workflows.","commandCount":4,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeLatex","ConvertFrom-OfficeLatexMarkdown","ConvertTo-OfficeLatexMarkdown","Save-OfficeLatex"]},{"id":"html","title":"HTML assets","description":"Export images and review surfaces used by document-to-HTML workflows.","commandCount":1,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Export-OfficeHtmlImage"]},{"id":"visuals","title":"Cross-format visuals","description":"Convert reusable visual artifacts for Word, Excel, PowerPoint, and PDF placement.","commandCount":1,"docsUrl":"/docs/pswriteoffice/automation-patterns/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["ConvertTo-OfficeVisual"]},{"id":"protection","title":"Protection capabilities","description":"Discover the machine-readable protected-content support contract shared across OfficeIMO formats.","commandCount":1,"docsUrl":"/docs/pswriteoffice/automation-patterns/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeProtectionCapability"]},{"id":"shared","title":"Shared authoring primitives","description":"Create reusable text runs shared by document DSLs.","commandCount":1,"docsUrl":"/docs/pswriteoffice/automation-patterns/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["New-OfficeTextRun"]}]} +{"schemaVersion":1,"format":"pswriteoffice.documentation-catalog","module":{"name":"PSWriteOffice","version":"3.0.6","commandCount":527,"aliasCount":371,"familyCount":18,"sourceManifest":"PSWriteOffice.psd1"},"families":[{"id":"word","title":"Word","description":"Create, inspect, update, review, merge, protect, and convert DOC and DOCX documents.","commandCount":97,"docsUrl":"/docs/pswriteoffice/word/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Word","featuredCommands":["New-OfficeWord","Add-OfficeWordTable","Get-OfficeWordReview","Invoke-OfficeWordMailMerge","ConvertTo-OfficeWordDocument"]},{"id":"excel","title":"Excel","description":"Build, read, convert, validate, repair, compare, and publish XLS and XLSX workbook workflows.","commandCount":162,"docsUrl":"/docs/pswriteoffice/excel/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Excel","featuredCommands":["New-OfficeExcel","Add-OfficeExcelTable","Add-OfficeExcelPivotTable","Test-OfficeExcelWorkbook","ConvertTo-OfficeExcelWorkbook"]},{"id":"powerpoint","title":"PowerPoint","description":"Compose, inspect, update, import, theme, and render repeatable presentation decks.","commandCount":61,"docsUrl":"/docs/pswriteoffice/powerpoint/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/PowerPoint","featuredCommands":["New-OfficePowerPoint","Add-OfficePowerPointSlide","Add-OfficePowerPointChart","Get-OfficePowerPointInspection"]},{"id":"pdf","title":"PDF","description":"Author, inspect, transform, sign, annotate, extract, preflight, and combine PDF files.","commandCount":91,"docsUrl":"/docs/pswriteoffice/pdf/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Pdf","featuredCommands":["New-OfficePdf","Join-OfficePdf","Get-OfficePdfPreflight","Set-OfficePdfSignature"]},{"id":"reader","title":"Reader and extraction","description":"Detect formats and extract normalized documents, chunks, tables, visuals, assets, and ingest results.","commandCount":14,"docsUrl":"/docs/pswriteoffice/reader/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Reader","featuredCommands":["New-OfficeDocumentReader","Get-OfficeDocumentChunk","Get-OfficeDocumentTable","Search-OfficeDocument"]},{"id":"confluence","title":"Confluence Cloud","description":"Plan and publish pages, preserve managed sections, and transfer attachments through OfficeIMO.Confluence.","commandCount":7,"docsUrl":"/docs/pswriteoffice/confluence/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Confluence","featuredCommands":["New-OfficeConfluenceSession","Publish-OfficeConfluencePage","Set-OfficeConfluenceManagedSection","Send-OfficeConfluenceAttachment"]},{"id":"visio","title":"Visio","description":"Create, inspect, arrange, and export VSDX diagrams with built-in and imported stencils.","commandCount":24,"docsUrl":"/docs/pswriteoffice/visio/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Visio","featuredCommands":["New-OfficeVisio","Add-OfficeVisioStencilShape","Get-OfficeVisioInfo","ConvertTo-OfficeVisioSvg"]},{"id":"markdown","title":"Markdown","description":"Compose typed Markdown, parse documents, and convert between Markdown and HTML or Word.","commandCount":26,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Markdown","featuredCommands":["New-OfficeMarkdown","Add-OfficeMarkdownTable","ConvertTo-OfficeMarkdownHtml","ConvertFrom-OfficeWordMarkdown"]},{"id":"rtf","title":"RTF","description":"Create, open, edit, inspect, and bridge Rich Text Format documents.","commandCount":6,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Rtf","featuredCommands":["New-OfficeRtf","Get-OfficeRtf","Update-OfficeRtfText","ConvertTo-OfficeRtf"]},{"id":"csv","title":"CSV","description":"Create, import, inspect, and export delimited data with typed options.","commandCount":5,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples/Csv","featuredCommands":["ConvertTo-OfficeCsv","Import-OfficeCsv","Export-OfficeCsv","Get-OfficeCsv"]},{"id":"open-document","title":"OpenDocument","description":"Compose, read, convert, and save ODT, ODS, and ODP workflows.","commandCount":11,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["New-OfficeOpenDocument","Add-OfficeOpenDocumentParagraph","Set-OfficeOpenDocumentCell","Save-OfficeOpenDocument"]},{"id":"email","title":"Email","description":"Read and write messages and mailbox artifacts through the managed OfficeIMO.Email engine.","commandCount":9,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeEmail","Get-OfficeEmailMailbox","Save-OfficeEmail","Save-OfficeEmailMailbox"]},{"id":"asciidoc","title":"AsciiDoc","description":"Read, create, update, and save bounded AsciiDoc workflows.","commandCount":4,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeAsciiDoc","ConvertFrom-OfficeAsciiDocMarkdown","ConvertTo-OfficeAsciiDocMarkdown","Save-OfficeAsciiDoc"]},{"id":"latex","title":"LaTeX","description":"Read, create, update, and save bounded LaTeX interoperability workflows.","commandCount":4,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeLatex","ConvertFrom-OfficeLatexMarkdown","ConvertTo-OfficeLatexMarkdown","Save-OfficeLatex"]},{"id":"html","title":"HTML assets","description":"Export images and review surfaces used by document-to-HTML workflows.","commandCount":3,"docsUrl":"/docs/pswriteoffice/open-text-formats/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Export-OfficeHtmlImage"]},{"id":"visuals","title":"Cross-format visuals","description":"Convert reusable visual artifacts for Word, Excel, PowerPoint, and PDF placement.","commandCount":1,"docsUrl":"/docs/pswriteoffice/automation-patterns/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["ConvertTo-OfficeVisual"]},{"id":"protection","title":"Protection capabilities","description":"Discover the machine-readable protected-content support contract shared across OfficeIMO formats.","commandCount":1,"docsUrl":"/docs/pswriteoffice/automation-patterns/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["Get-OfficeProtectionCapability"]},{"id":"shared","title":"Shared authoring primitives","description":"Create reusable text runs shared by document DSLs.","commandCount":1,"docsUrl":"/docs/pswriteoffice/automation-patterns/","apiUrl":"/api/powershell/","examplesUrl":"https://github.com/EvotecIT/PSWriteOffice/tree/main/Examples","featuredCommands":["New-OfficeTextRun"]}]}