Private/Wissen/B_Basic/B20_Konvertierung.ps1
<#
# Konvertierung Aus einer Objekt-Welt in eine andere Objekt-Welt zu konvertieren. - **Hashtags** Konvertierung convert string hex csv xml json markdown md datetime int SecureString data sddl html decimal secure - **Version** 2020.05.29 #> # READ Weiterführende und Nachschlage-Informationen: Get-Command -Verb 'ConvertFrom' -Module 'Microsoft.PowerShell.*' #region String (Text) nach DateTime, Int32, Decimal, etc. [datetime]'2020-05-29' [int]'123' # usw... # ! oder: $OSCulture = Get-Culture $OSCulture = New-Object 'System.Globalization.CultureInfo' -ArgumentList 'en-us' $OSCulture.DisplayName $OSCulture.DateTimeFormat $OSCulture.NumberFormat $Benutzereingabe = Read-Host -Prompt "Bitte Text eingeben (Kultur: $($OSCulture.DisplayName) z.B. Datum $($OSCulture.DateTimeFormat.ShortDatePattern))" $benutzereingabe.ToInt32($OSCulture) $benutzereingabe.ToDecimal($OSCulture) $benutzereingabe.ToDateTime($OSCulture) # ... usw. # ! oder: $Benutzereingabe = '20201011' [DateTime]::ParseExact($Benutzereingabe, 'yyyyMMdd', $null) [Int64]::Parse('13456677') # usw... # ! oder: [Convert]::ToDateTime('29.5.2020') [Convert]::ToDateTime('29.5.2020', (Get-Culture)) # usw... #endregion #region Hexedezimal 0xFF # oder: '{0:X}' -f 255 # oder: [Convert]::ToByte(0xFF) # oder: 255 | Format-Hex "Hallo Welt" | Format-Hex # ! POWERSHELL 7 - Für die hexadezimale Darstellung von unterschiedlichen Pipeline-Objekten wurde Format-Hex verbessert: 123, "Hallo Würzburg!", (Get-Item "C:\Windows\win.ini") | Format-Hex -Encoding unicode #endregion #region ConvertTo-Csv - PowerShell Objekte zu CSV konvertieren Get-Process | Select-Object 'Name', 'Company', 'WorkingSet64' | ConvertTo-Csv -Delimiter ';' -NoTypeInformation | Set-Content 'C:\temp\Processes.csv' Start-Process -FilePath 'C:\temp\Processes.csv' -Wait #endregion #region ConvertTo-Html - PowerShell Objekte zu HTML konvertieren @' html * { font-size: 11; font-family: Consolas; } th { color: #0033cc; } '@ | Out-File -FilePath 'C:\temp\core.css' Get-Service | Select-Object -Property 'DisplayName', 'Status', 'StartType', 'Name' | Sort-Object -Property 'Status', 'StartType', 'DisplayName' | ConvertTo-Html -Body '<p>Sortierte Übersicht aller registrierten Dienste.</p>' -Head "<h1>Service-Übersicht von $env:COMPUTERNAME</h1>" -As 'Table' -PreContent "<p>Sortiert nach: Status, StartType, DisplayName</p>" -PostContent "<p><strong>Stand:</strong> $(Get-Date -Format 'dddd, d. MMMM yyyy')</p>" -CssUri 'C:\temp\core.css' | Out-File -FilePath 'C:\Temp\ServiceOverview.html' Start-Process -FilePath 'C:\Temp\ServiceOverview.html' #-Wait #endregion #region ConvertTo-Xml - PowerShell-Objekte von/nach XML konvertieren # ! Einen String in XML konvertieren: $exchange = [xml]@" <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"> <gesmes:subject>Reference rates</gesmes:subject> <gesmes:Sender> <gesmes:name>European Central Bank</gesmes:name> </gesmes:Sender> <Cube> <Cube time="2020-05-22"> <Cube currency="USD" rate="1.0904"/> <Cube currency="JPY" rate="117.26"/> <Cube currency="BGN" rate="1.9558"/> </Cube> <Cube time="2020-05-21"> <Cube currency="USD" rate="1.1"/> <Cube currency="JPY" rate="118.42"/> <Cube currency="BGN" rate="1.9558"/> </Cube> </Cube> </gesmes:Envelope> "@ $exchange.Envelope.Cube.Cube $exchange.Envelope.Cube.Cube | Where-Object -Property 'time' -eq -Value '2020-05-21' | Select-Object -ExpandProperty 'Cube' | Where-Object -Property 'currency' -eq -Value 'USD' | Select-Object -ExpandProperty 'rate' # ! PowerShell-Objekte nach XML konvertieren: Get-Service -Name 'Win*' | ConvertTo-Xml -Depth 1 -As 'String' #endregion #region Convert*-SecureString - Text ver-/entschlüsseln Read-Host -Prompt 'Passwort eingeben' -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath 'C:\temp\SecureString.txt' -Force Get-Content -Path 'C:\Temp\SecureString.txt' | ConvertTo-SecureString #endregion #region *-Json - Von und nach json konvertieren # ! String nach Json-Objekt konvertieren: $json = Join-Path -Path $env:APPDATA -ChildPath '\Code\User\settings.json' | Get-Item | Get-Content | ConvertFrom-Json $json.'files.autoSave' # ! PowerShell-Objekte nach json konvertieren: Get-Service -Name 'Win*' | ConvertTo-Json -Depth 1 # ! Test-Json - Schema-Validierung (Seit PowerShell 7): $schema = @' { "definitions": {}, "$schema": "http://json-schema.org/draft-07/schema#", "$id": "http://example.com/root.json", "type": "object", "title": "The Root Schema", "required": [ "name", "age" ], "properties": { "name": { "$id": "#/properties/name", "type": "string", "title": "The Name Schema", "default": "", "examples": [ "Ashley" ], "pattern": "^(.*)$" }, "age": { "$id": "#/properties/age", "type": "integer", "title": "The Age Schema", "default": 0, "examples": [ 25 ] } } } '@ "{'name': 'Ashley', 'age': '25'}" | Test-Json -Schema $schema #endregion #region ConvertFrom-SddlString - Berechtigungen (ACL) auswerten Get-Acl -Path $env:USERPROFILE | Select-Object -ExpandProperty 'Sddl' | ConvertFrom-SddlString #endregion #region ConvertFrom-Csv - CSV-Daten zu PowerShell Objekte konvertieren # ? Beispiel: @' Benutzername;Passwort;Beschreibung p.lustig;P@ssw0rd;Peter Lustig (IT) e.gruen;Geh1imAbc;Eva Grün (HR) '@ | ConvertFrom-Csv -Delimiter ';' -Header 'Name', 'Password', 'Description' | Select-Object -Skip 1 # ? Beispiel: $ports = @" 20,FTP 21,FTP 22,SSH 23,TelNet 25,Smtp 135,RPC 137,NetBIOS-Namensauflösung 138,NetBIOS-Namensauflösung 139,NetBIOS-Namensauflösung 161,SNMP 162,SNMP 445,SMB Freigabe+ADS+CIM/WMI 464,Kerberos Change/SetPassword 5985,PowerShellRemoting (HTTP) 5986,PowerShellRemoting (HTTPS) "@ | ConvertFrom-Csv -Header 'Port', 'Function' $ports #endregion #region ConvertFrom-String - Texte zu String-Daten konvertieren 'Hallo Welt' | ConvertFrom-String 'Hallo Welt' | ConvertFrom-String -Delimiter 'll' 'Hallo Welt' | ConvertFrom-String -PropertyNames 'FirstWord', 'SecondWord' 'Lee Holmes', 'Steve Lee', 'Jeffrey Schmitt' | Convert-String -Example 'Bill Gates=Gates, B.', 'John Smith=Smith, J.' # Komplexe Variante: $template = @' {[string]ProtocolName*:ip} {[int]AssignedNumber:0} {[string]Aliase:IP} # {[string]Comment:Internet protocol} {[string]ProtocolName*:xns-idp} {[int]AssignedNumber:22} {[string]Aliase:XNS-IDP} # {[string]Comment:Xerox NS IDP} {[string]ProtocolName*:rdp} {[int]AssignedNumber:27} {[string]Aliase:RDP} # {[string]Comment:'reliable datagram' protocol} {[string]ProtocolName*:ipv6} {[int]AssignedNumber:41} {[string]Aliase:IPv6} # {[string]Comment:Internet protocol IPv6} '@ $result = Get-Content 'C:\Windows\System32\drivers\etc\protocol' | Select-String -Pattern '^[^#]' | ConvertFrom-String -TemplateContent $template $result | Get-Member $result.AssignedNumber $result.Aliase #endregion #region ConvertFrom-StringData - Text-Datenobjekte u.a. für Mehrsprachigkeit # ? 'Mehrsprachige' Texte ausgeben: Data LocalizedData { ConvertFrom-StringData @' AllesOkMeldung = Alles ist OK! NichtsOkMeldung = Nichts ist OK! '@ } $LocalizedData.AllesOkMeldung $LocalizedData.NichtsOkMeldung #endregion #region ConvertFrom-Markdown - Mit Markdown (.MD) Daten umgehen # ! Erst ab PowerShell 7 $md = @' # Überschrift 1 ## Überschrift 1.2 Markdown ist eine vereinfachte **Auszeichnungssprache**. Ein Ziel von Markdown ist, dass schon die *Ausgangsform* ohne weitere Konvertierung **leicht lesbar** ist. - [ ] Aufgabe 1 - [X] Aufgabe 2 - [ ] Aufgabe 3 ```powershell Get-Command -Noun 'markdown' -Module 'Microsoft.PowerShell.Utility' ``` '@ $md | ConvertFrom-Markdown -AsVT100EncodedString | Select-Object -ExpandProperty 'VT100EncodedString' $md | ConvertFrom-Markdown | Select-Object -ExpandProperty 'Html' $md | ConvertFrom-Markdown | Show-Markdown -UseBrowser $md | ConvertFrom-Markdown -AsVT100EncodedString | Show-Markdown Import-Module '.\AKPT' Find-Know -AsMarkdownContent | Show-Markdown -UseBrowser #endregion # TODO QUIZ - https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAa__Yp1xwFUN09INTY1RzRWMDlHVk0xQjMxSzBQTTlLNS4u |