Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen | VB-Versionen: VB2022 | 21.10.25 |
![]() Es wird eine Funktion gezeigt, die den Computertyp des aktuellen Geräts mit Hilfe von PowerShell ermittelt. | ||
Autor: ![]() | Bewertung: ![]() ![]() ![]() ![]() ![]() | Views: 31 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Als Grundlage für die Ermittlung von Computertypen dient eine Enumeration von Microsoft. Ich übermittle die deutsche Version:
Public Enum ChassisTypesGER Sonstiges Unbekannt Desktop Low_Profile_Desktop Pizza_Box Mini_Tower Turm Tragbar Laptop Notebook Hand_gehalten Docking_Station All_in_One Sub_Notebook Platzsparend Lunchbox Hauptsystemgehäuse Erweiterungsgehäuse SubChassis Buserweiterungsgehäuse Peripheriegehäuse Speichergehäuse Rackmontagechassis PC_mit_versiegeltem_Gehäuse Tablette Cabriolet Abtrennbar End Enum
Hier die Funktion:
''' <summary> ''' Ermitteln des Computertyps via Powershell ''' </summary> Public Function getComputerTyp() As String Dim Names() As String = [Enum].GetNames(GetType(ChassisTypesGER)) Dim psi As New ProcessStartInfo(), ctStr As String With psi .FileName = "powershell.exe" .Arguments = "Get-CimInstance -ClassName Win32_SystemEnclosure | Select-Object ChassisTypes" .UseShellExecute = False .RedirectStandardOutput = True .RedirectStandardError = True .CreateNoWindow = True ' Fenster unsichtbar halten End With Dim output As New StringBuilder() Dim p As New Process() p.StartInfo = psi p.Start() ' Ausgabe lesen output.AppendLine(p.StandardOutput.ReadToEnd()) ctStr = output.ToString ctStr = getStringBetweenStrings(ctStr, "{", "}", True) ctStr = Names(CInt(ctStr - 1)) p.WaitForExit() Return ctStr End Function
und Hilfsfunktion:
Public theLastIdx As Integer = 0, thelastIdxL As Integer = 0, thenextIdx As Integer = 0 ''' <summary> ''' String zwischen zwei Strings ''' </summary> ''' <param name="str">der Quell-String</param> ''' <param name="str1">der 1. Begrenzungs-String</param> ''' <param name="str2">der 2. Begrenzungs-String</param> ''' <param name="aFlag">True.. Rückgabe des gesuchten Strings, ''' False.. dito, plus Begrenzungen</param> ''' <param name="fromPos">die Anfangsposition des Suchens</param> ''' <returns></returns> Public Function getStringBetweenStrings(str As String, str1 As String, str2 As String, Optional aFlag As Boolean = False, Optional fromPos As Short = 0) As String Dim st As String, thelastIdx As Short If aFlag Then ' einkürzen um str1 und str2 If str.IndexOf(str1) < 0 Then Return "" st = str.Substring(str.IndexOf(str1) + str1.Length, str.IndexOf(str2) - str.IndexOf(str1) - str1.Length) Return st Else If thelastIdx = 0 Then thelastIdx = str.IndexOf(str1) If thelastIdx < 0 Then Return "" If str.IndexOf(str1, thelastIdx) < 0 Then Return "" st = str.Substring(thelastIdx, str.IndexOf(str2, thelastIdx) - thelastIdx + str2.Length) thelastIdx = str.IndexOf(str2, thelastIdx) + str2.Length Return st End If End Function
Und der einfache Aufruf:
Dim nameTyp As String = getComputertyp()