Private/Scripts/TipOfTheDay.ps1

<#
 
# Tip of the day
 
Beim laden des Modules AKPT wird immer ein Tipp angezeigt.
 
- **Hashtags** TOTD
- **Version** 2020.01.29
 
#>


#region Prolog
using namespace System.Management.Automation
$ErrorActionPreference = [ActionPreference]::Stop
Set-StrictMode -Version Latest
#endregion

class TipOfTheDay {
    [int]$Id
    [ValidateSet("Beginner", "Professional", "Expert", "Humor")]
    [string]$Professionalism
    [string]$Tip
    [String]$Resource
}

$totdDb = @()
$totdDb += [TipOfTheDay]@{Id =  1 ; Professionalism = "Beginner"     ; Tip="Auf dem laufenden bleiben, z.B. über meinen RSS-Feed." ; Resource="https://www.attilakrick.com/rss/blog/"} 
$totdDb += [TipOfTheDay]@{Id =  2 ; Professionalism = "Beginner"     ; Tip="Auf dem laufenden bleiben. Folgenden Sie mir auf Twitter." ; Resource="https://twitter.com/AttilaKrick"} 
$totdDb += [TipOfTheDay]@{Id =  3 ; Professionalism = "Beginner"     ; Tip="Auf dem laufenden bleiben. Verbinden Sie sich mit mir auf LinkedIn." ; Resource="https://www.linkedin.com/in/attilakrick/"} 
$totdDb += [TipOfTheDay]@{Id =  4 ; Professionalism = "Professional" ; Tip="Artikel: Für Objekte ein PropertyGrid-Fenster anzeigen lassen." ; Resource="https://www.attilakrick.com/blog-pspropertygrid"}
$totdDb += [TipOfTheDay]@{Id =  5 ; Professionalism = "Professional" ; Tip="Artikel: PowerShell-Objekte-Doku einfach aufrufen" ; Resource="https://www.attilakrick.com/blog-psobjektdoku"} 
$totdDb += [TipOfTheDay]@{Id =  6 ; Professionalism = "Beginner"     ; Tip="Artikel: Wie kann ich ein mir unbekanntes Cmdlet finden?" ; Resource="https://www.attilakrick.com/blog-pscmdletfinding"} 
$totdDb += [TipOfTheDay]@{Id =  7 ; Professionalism = "Beginner"     ; Tip="Artikel: PowerShell-Objekte in 3 Schritten erfolgreich analysieren" ; Resource="https://www.attilakrick.com/blog-psobjektanalyse/"} 
$totdDb += [TipOfTheDay]@{Id =  8 ; Professionalism = "Expert"       ; Tip="Artikel: Was Hacker mit der PowerShell erreichen können" ; Resource="https://www.attilakrick.com/blog-pshacking/"}
$totdDb += [TipOfTheDay]@{Id =  9 ; Professionalism = "Beginner"     ; Tip="Artikel: PowerShell Hintergrundwissen" ; Resource="https://www.attilakrick.com/blog-pshintergrundwissen/"} 
$totdDb += [TipOfTheDay]@{Id = 10 ; Professionalism = "Professional" ; Tip="Artikel: PowerShell-Objekte für die eigenen Zwecke erweitern und einspannen." ; Resource="https://www.attilakrick.com/blog-pstypeextension/"} 
$totdDb += [TipOfTheDay]@{Id = 11 ; Professionalism = "Professional" ; Tip="Artikel: Der ideale Aufbau einer PowerShell-Script-Datei (.PS1, .PSM1)" ; Resource="https://www.attilakrick.com/blog-psoptps1file/"} 
$totdDb += [TipOfTheDay]@{Id = 12 ; Professionalism = "Beginner"     ; Tip="Artikel: PowerShell 7 Neuerungen und Gründe für den Umstieg" ; Resource="https://www.attilakrick.com/blog-ps7/"} 
$totdDb += [TipOfTheDay]@{Id = 13 ; Professionalism = "Professional" ; Tip="Cmdlet: Find-Know => Um in der AKPT-Wissensdatenbank zu suchen." ; Resource="Find-Know -Keyword Pester"} 
$totdDb += [TipOfTheDay]@{Id = 14 ; Professionalism = "Beginner"     ; Tip="Cmdlet: Get-Hotkeys => Zeigt die wichtigsten Tastatur-Befehle rund um PowerShell an." ; Resource="Get-Hotkeys"}
$totdDb += [TipOfTheDay]@{Id = 15 ; Professionalism = "Beginner"     ; Tip="Die Syntax für ein Cmdlet erhalten." ; Resource="Get-Command -Name Get-Process -Syntax"}
$totdDb += [TipOfTheDay]@{Id = 16 ; Professionalism = "Professional" ; Tip="Detaillierte und vollständige Informationen zu Parametern und ParameterSets eines Cmdlets erhalten." ; Resource="Get-Command -Name Get-Process -ShowCommandInfo"}
$totdDb += [TipOfTheDay]@{Id = 17 ; Professionalism = "Beginner"     ; Tip="Du kannst Visual Studio Code über die 'settings.json' an Deine Bedürfnis anpassen." ; Resource=".\AKPT\Private\Wissen\A2_Visual_Studio_Code.md"}
$totdDb += [TipOfTheDay]@{Id = 18 ; Professionalism = "Beginner"     ; Tip="Mittels Pipeline '|' kann der Output eines Cmdlets an das nächste Cmdlet übergeben werden." ; Resource='Get-ChildItem "C:\Windows" | Where-Object "Extension" -EQ ".log"'}
$totdDb += [TipOfTheDay]@{Id = 19 ; Professionalism = "Beginner"     ; Tip="Alle PowerShell Cmdlets in einem Fenster anzeigen, nach Spalte sortiert und individuell filtern." ; Resource="Get-Command -Name *-* -CommandType Cmdlet, Function | Select-Object -Property Name, ModuleName, Verb, Noun | Out-GridView -OutputMode Multiple"}
$totdDb += [TipOfTheDay]@{Id = 20 ; Professionalism = "Beginner"     ; Tip="<STRG> + <SPACE> öffnet die Autovervollständigung in Visual Studio Code und in der Console für Cmdlets und Parameter" ; Resource="<STRG> + <SPACE>"}
$totdDb += [TipOfTheDay]@{Id = 21 ; Professionalism = "Humor"        ; Tip="Mann lernt nicht richtig zu fluchen bis mann Auto fahren lernt." ; Resource="Get-Process | Select-Object -Property *"}
$totdDb += [TipOfTheDay]@{Id = 22 ; Professionalism = "Humor"        ; Tip="Die PowerShell-Standard-Ausgabe zeigt nie das was man wissen will." ; Resource=""}
$totdDb += [TipOfTheDay]@{Id = 23 ; Professionalism = "Beginner"     ; Tip="'Get-Alias' ist für kryptische Befehle der erste Schritt zur Auslösung." ; Resource="Get-Alias"}
$totdDb += [TipOfTheDay]@{Id = 24 ; Professionalism = "Beginner"     ; Tip="'Get-Member' ist immer gut für eine aufschlussreiche Analyse von Variablen und Cmdlet-Rückgabeobjekte." ; Resource="Get-Process | Get-Member"}
$totdDb += [TipOfTheDay]@{Id = 25 ; Professionalism = "Beginner"     ; Tip="Vergegenwärtigen Sie Ihre Ausgangssituation, Ihr Ziel und lösen Sie Probleme auf atomarer Ebene. => 1. Zielführendes Cmdlet finden. 2. Hilfe zu diesem Cmdlet lesen. 3. Rückgabeobjekte mit Get-Member und Select-Object analysieren. 4. Cmdlet testen. 5. Rückschlüsse ziehen und Zwischenschritt-Lösung einbauen. " ; Resource=""} 

$nowTotd = $totdDb | Get-Random -Count 1

$esc=$([char]27)
@"
 
$esc[90m- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$esc[0m
Tipp des Tages - Nummer: $esc[91m$($nowTotd.Id)$esc[0m
Professionalität: $esc[93m$($nowTotd.Professionalism)$esc[0m
$esc[36m$($nowTotd.Tip)$esc[0m
Ressource: $esc[91m$($nowTotd.Resource)$esc[0m
$esc[90m- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$esc[0m
 
"@
 | Out-Host