vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen   |   VB-Versionen: VB202221.10.25
Ermitteln des Computertyps in VB mittels PowerShell

Es wird eine Funktion gezeigt, die den Computertyp des aktuellen Geräts mit Hilfe von PowerShell ermittelt.

Autor:   Dietrich HerrmannBewertung:  Views:  31 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein 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()



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2025 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.