N
Nichael-E
Gast
Tag zusammen
dachte, dass ich mich mal wieder melde und Euch etwas ärgere
Neh, alles gut. Zum Titlel "ManagementObjectSearcher" (MOS) gibt es vermutlich tonnenweise Lektüre zu. Hab darüber so einiges gelesen, aber verstehn? Ganz ehrlich: Näh! Genauer gesagt: "Etwas", aber das reicht bei weitem nicht.
Vorab gesagt: Es geht hier nicht um die Einbindung der "System.Management.dll" Datei über die Verweise im Projektmappen-Explorer innerhalb Visual Studio, sondern ich möchte gerne etwas über die Windows Management Instrumentation (WMI) von Euch wissen!
Nehmen wir mal das Beispiel "IP-Adressen!
Manchmal ist es für eine Anwendung erforderlich, spezielle Informationen des Rechners zu kennen, auf dem sie ausgeführt wird. In einer Windows-Umgebung gibt es mehrere Möglichkeiten, diese Informationen zu ermitteln.
1. Beispiel per 'dns.GetHostEntry()
Da gibts noch andere Beispiele "ip.AddressFamily" oder "Socket.LocalEndPoint" oder "Linq " etc. , aber das ist nicht das, worauch ich eingehen will. Vielmehr ist es der Weg über den WMI, also per Klasse "ManagementObjectSearcher".
2. Beispiel per 'ManagementObjectSearcher Jetzt wirds kompliziert!
Hier funktioniert die Ausgabe der Variable "gateway" gut.
Anders ist es bei folgendem Beispiel, wo mir das Auslesen einiger Variablen nicht verständlich ist...
3. Beispiel per 'ManagementObjectSearcher
Hier sind diese Ausgabe ein "System.String[]"...
Das gleiche gilt für...
Aber warum??? Ich könnte ja zum Beispiel die Deklaration von...
einfach ändern auf
...und komme zum gleichen Ergebnis! Da es sich ja hier im Arrays handelt, verstehe ich nicht, warum ".ToString();" hier funktioniert und zum Beispiel "string[] Adressen;" nicht!
4. Beispiel per 'ManagementObjectSearcher Noch ein etwas anderes Beispiel
Könnte mir bitte jemand sagen, was da nicht funktioniert?
Schönen Abend Euch allen und Danke für eure Mühe...
dachte, dass ich mich mal wieder melde und Euch etwas ärgere
Neh, alles gut. Zum Titlel "ManagementObjectSearcher" (MOS) gibt es vermutlich tonnenweise Lektüre zu. Hab darüber so einiges gelesen, aber verstehn? Ganz ehrlich: Näh! Genauer gesagt: "Etwas", aber das reicht bei weitem nicht.
Vorab gesagt: Es geht hier nicht um die Einbindung der "System.Management.dll" Datei über die Verweise im Projektmappen-Explorer innerhalb Visual Studio, sondern ich möchte gerne etwas über die Windows Management Instrumentation (WMI) von Euch wissen!
Nehmen wir mal das Beispiel "IP-Adressen!
Manchmal ist es für eine Anwendung erforderlich, spezielle Informationen des Rechners zu kennen, auf dem sie ausgeführt wird. In einer Windows-Umgebung gibt es mehrere Möglichkeiten, diese Informationen zu ermitteln.
1. Beispiel per 'dns.GetHostEntry()
C#:
namespace Console_Get_IP_Address_1
{
class Program
{
static void Main()
{
// ===========================================
// IP-Adresse per "Dns.GetHostEntry()" Abrufen
// ===========================================
string hostName = Dns.GetHostName(); // Hostnamen des lokalen PC's abrufen
string my_IP = Dns.GetHostEntry(hostName).AddressList[0].ToString(); // IP-Adresse des lokalen PC's abrufen
Console.WriteLine(new string('─', 61));
Console.WriteLine("IP-Adresse per 'Dns.GetHostEntry()' ABRUFEN / 1. Möglichkeit");
Console.WriteLine(new string('─', 61));
Console.WriteLine("\nDie IP-Adresse ist.....: " + my_IP);
IPHostEntry host;
string local_IP = "?";
host = Dns.GetHostEntry(Dns.GetHostName()); //
foreach (IPAddress ip in host.AddressList) //
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
local_IP = ip.ToString().ToString();
Console.WriteLine("Die IPv4-Adresse ist...: " + local_IP);
}
}
}
}
}
// Ausgabe...
// Die IP-Adresse ist.....: fe80::b22a:8095:de11:1eb7%15
// Die IPv4-Adresse ist...: 192.168.2.105
Da gibts noch andere Beispiele "ip.AddressFamily" oder "Socket.LocalEndPoint" oder "Linq " etc. , aber das ist nicht das, worauch ich eingehen will. Vielmehr ist es der Weg über den WMI, also per Klasse "ManagementObjectSearcher".
2. Beispiel per 'ManagementObjectSearcher Jetzt wirds kompliziert!
C#:
namespace Console_Get_IP_Address_3_MMO
{
class Program
{
static void Main(string[] args)
{
// Abfrage definieren (WQL Abfrage über WMI)
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
// Abfrage ausführen
ManagementObjectCollection results = searcher.Get();
// Ergebnisse ausgeben
foreach (ManagementObject obj in results)
{
string[] gateways = (string[])obj["DefaultIPGateway"];
if (gateways != null && gateways.Length > 0)
{
foreach (string gateway in gateways)
{
Console.WriteLine("Gateway-IP-Adresse: " + gateway);
}
}
}
Console.ReadKey();
}
}
}
// Ausgabe für Variable 'gateway':
// Gateway-IP-Adresse: 192.168.2.1
// Gateway-IP-Adresse: fe80::1
Anders ist es bei folgendem Beispiel, wo mir das Auslesen einiger Variablen nicht verständlich ist...
3. Beispiel per 'ManagementObjectSearcher
C#:
class Program
{
static void Main() //(string[] _1)
{
string[] Adressen;
string[] SubnetMasken;
string[] DefaultGateways;
string NetworkCard;
string MACAddress;
// WQL Abfrage
ManagementObjectSearcher moSearch = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
ManagementObjectCollection moCollection = moSearch.Get();
// Abfrage ausführen
// foreach (ManagementObject mo in moCollection) // Statt "moCollection" geht auch "moSearch.Get()"
foreach (ManagementObject mo in moSearch.Get())
{
Adressen = (string[])mo["IPAddress"];
SubnetMasken = (string[])mo["IPSubnet"];
DefaultGateways = (string[])mo["DefaultIPGateway"];
NetworkCard = mo["Description"].ToString();
MACAddress = mo["MACAddress"].ToString();
// Ausgabe
Console.WriteLine("IP-Adresse..........: " + mo["IPAddress"].ToString());
Console.WriteLine("Netzwerkkarte.......: " + mo["Description"].ToString());
Console.WriteLine("MAC Adresse....... : " + mo["MACAddress"].ToString());
}
Hier sind diese Ausgabe ein "System.String[]"...
C#:
Console.WriteLine("IP-Adresse..........: " + mo["IPAddress"].ToString());
Das gleiche gilt für...
C#:
SubnetMasken = (string[])mo["IPSubnet"];
DefaultGateways = (string[])mo["DefaultIPGateway"];
Aber warum??? Ich könnte ja zum Beispiel die Deklaration von...
C#:
Adressen = (string[])mo["IPAddress"]
C#:
string[] addresses = (string[])mo["IPAddress"];
...und komme zum gleichen Ergebnis! Da es sich ja hier im Arrays handelt, verstehe ich nicht, warum ".ToString();" hier funktioniert und zum Beispiel "string[] Adressen;" nicht!
4. Beispiel per 'ManagementObjectSearcher Noch ein etwas anderes Beispiel
C#:
ManagementObjectSearcher mos = new ManagementObjectSearcher("select IPAddress,IPEnabled from win32_NetworkAdapterConfiguration where IPEnabled=true");
ManagementObjectCollection moc = mos.Get();
foreach (ManagementObject mo in moc)
{
Console.WriteLine("\nVariable = {0} / IP Aktiv: {1} ", mo["IPAddress"], mo["IPEnabled"]);
Console.WriteLine("IP-Adresse " + (string[])mo["IPAddress"],mo["IPEnabled"]);;
}
Console.WriteLine("\n[Enter] zum Beenden drücken...");
Console.ReadKey(); // Auf Tastendruck warten
Könnte mir bitte jemand sagen, was da nicht funktioniert?
Schönen Abend Euch allen und Danke für eure Mühe...
Zuletzt bearbeitet von einem Moderator: