Public/Find-Know.ps1
<#
# Find-Know Wissen in dieser PowerShell-Datenbank finden - **Hashtags** Wissen PowerShell - **Version** 2020.05.22 #> using namespace 'System' using namespace 'System.IO' using namespace 'System.Text.RegularExpressions' using namespace 'System.Management.Automation' [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '')] param() $BackupErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = [ActionPreference]::Stop Set-StrictMode -Version Latest function Find-Know { <# .SYNOPSIS PowerShell-Wissen im AKPT-Module finden .PARAMETER Keyword Ein oder mehrere Keywords die im Titel, der Beschreibung, der Tags und im Inhalt (s. -IncludeContent) gesucht wird. .PARAMETER IncludeContent Bei der Suche wird der Inhalt einbezogen. .EXAMPLE Find-Know .EXAMPLE Find-Know -Keyword 'Analyzer' -Detailed .EXAMPLE Find-Know -Keyword 'Analyzer' -IncludeContent .EXAMPLE Find-Know -AsMarkdownContent | ConvertFrom-Markdown -AsVT100EncodedString | Show-Markdown .EXAMPLE Find-Know -AsMarkdownContent | ConvertFrom-Markdown | Show-Markdown -UseBrowser .EXAMPLE Find-Know -Keyword 'Analyzer' -Verbose .EXAMPLE Get-Help -Name 'Find-Know' -ShowWindow #> [Alias("fk")] [CmdletBinding(DefaultParameterSetName='Default')] param ( [Parameter(ParameterSetName='Default', Position=1)] [Parameter(ParameterSetName='Markdown', Position=1)] [string[]]$Keyword, [Parameter(ParameterSetName='Default')] [switch]$Detailed, [Parameter(ParameterSetName='Default')] [Parameter(ParameterSetName='Markdown')] [switch]$IncludeContent, [Parameter(ParameterSetName='Markdown')] [switch]$AsMarkdownContent ) begin{ $SumMarkdownContent = "# Übersicht AKPT$([Environment]::NewLine)$([Environment]::NewLine)" Get-ChildItem -Path $AkptModulePath -File -Recurse -PipelineVariable 'file' | Where-Object -Property 'Extension' -INE -Value ([String]::Empty) | Where-Object -FilterScript { $file.FullName -INotLike "$AkptModulePath\.Private\*" -and $file.FullName -INotLike "$AkptModulePath\.vscode\*" -and $file.Extension -INotIn '.ps1xml', '.pfx', '.zip', '.png' -and $file.FullName -INotLike '*.help.txt' } | ForEach-Object -Process { $Script:AnalyseStart = Get-Date $fileContent = [File]::ReadAllText($file.FullName) $isMatch = $fileContent -iMatch '^(?:<#\r\n\r\n)?(?<MarkdownContent>#\s(?<Title>.+)\r\n\r\n(?<Description>(?:.+)(?:\r\n\r\n.+)*)\r\n\r\n-\s\*\*Hashtags\*\*\s(?<Hashtags>.+)(?:\r\n)?\r\n-\s\*\*Version\*\*\s(?<Version>[0-9\.]{8,13})\r\n\r\n)(?:#>)?' if(!$isMatch) { "Die Datei enthält nicht den benötigten Markdown-Prolog (# 1. Überschrift, Beschreibung, - **Hashtags** und - **Version**, Datei: $($file.FullName)." | Write-Warning return } return [PSCustomObject]@{ Title = $Matches['Title'] FileName = $file.Name Description = $Matches['Description'] Hashtags = $Matches['Hashtags'] -split ' ' Version = $Matches['Version'] FileFullName = $file.FullName MarkdownContent = $Matches['MarkdownContent'] } } | Where-Object -FilterScript { $pattern = "($($Keyword -join "|"))" $_.MarkdownContent -IMatch $pattern -or ($IncludeContent -and ($file | Select-String -Pattern $pattern -Quiet)) $AnalyseDauer = (Get-Date) - $Script:AnalyseStart "In $($AnalyseDauer.TotalMilliseconds.ToString('0')) Sek. Datei-Inhalt von $($file.Name) analysiert." | Write-Verbose } | ForEach-Object -Process { if ($AsMarkdownContent) { $SumMarkdownContent += $_.MarkdownContent -replace '# ', '## ' }else { $result = $_ if (!$Detailed) { $result = $_ | Select-Object -Property 'Title', 'FileName', 'Description' } return $result } } if ($AsMarkdownContent) { return $SumMarkdownContent } } } New-Alias -Name fk -Value 'Find-Know' -Force $ErrorActionPreference = $BackupErrorActionPreference |