Beste mede-tweakers,
Tijdens mijn stage als systeembeheerder kom ik natuurlijk in aanraking met automatisering. Hier is mij gevraagd om van alle werkstation's in het netwerk(+/- 250 st.) bepaalde informatie op te halen en weer te geven in een Tabel/Chart.
Zelf heb ik al wel wat ervaring met Visual basic and het .Net Framework. Dit omdat ik eerst een gemengde studie volgde, zowel Systeembeheer & Applicatie ontwikkelaar.
De informatie die dient opgehaald te worden is het PC Model nummer & de bios versie. Het 'crawlen' van deze informatie wordt op de volgende manier gedraait. Tijdens het inloggen op elke werkplek wordt er een login script gedraaid. Hier een entry toegevoegd zodat mij applicatie, die op een netwerkshare staat waar iedereen toegang tot heeft & automatisch gemapt wordt tijdens het inloggen, gestart wordt.
Relevante code van de Client zijde.
Zoals je kunt zien/lezen/begrijpen wordt er op de Share een tekst file aangemaakt met als naam de pc naam: "PC1042". In dit tekst bestand wordt zowel het modelnummer(bijv: DC7900) als de bios versie(786G1 v01.16) weggeschreven met als scheidingsteken "|".
Deze informatie wordt dan weer door een (server)applicatie ingelezen & hier wordt een Tabel/Chart van gemaakt, althans dat ben ik aan het proberen.
Relevante code van de Server zijde
De applicatie geeft de volgende output:

Van de pc's met versie 1.17 wordt zowel een DC7900 als een DC7700 weergeven, alleen heeft maar 1 van deze 2 pc's de versie 1.17.
De logica fout zit hem volgens mij hier:
Omdat voor elke entry een point wordt toegekent ondanks het model.
Wat is uiteindelijk als resultaat wil is het volgende.

De vraag:
Is hier mijn hele opzet verkeerd of zie ik de logica niet.
Tijdens mijn stage als systeembeheerder kom ik natuurlijk in aanraking met automatisering. Hier is mij gevraagd om van alle werkstation's in het netwerk(+/- 250 st.) bepaalde informatie op te halen en weer te geven in een Tabel/Chart.
Zelf heb ik al wel wat ervaring met Visual basic and het .Net Framework. Dit omdat ik eerst een gemengde studie volgde, zowel Systeembeheer & Applicatie ontwikkelaar.
De informatie die dient opgehaald te worden is het PC Model nummer & de bios versie. Het 'crawlen' van deze informatie wordt op de volgende manier gedraait. Tijdens het inloggen op elke werkplek wordt er een login script gedraaid. Hier een entry toegevoegd zodat mij applicatie, die op een netwerkshare staat waar iedereen toegang tot heeft & automatisch gemapt wordt tijdens het inloggen, gestart wordt.
Relevante code van de Client zijde.
Visual Basic .NET: Client zijde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| Sub RetrieveInfo() Dim _PCName As String = My.Computer.Name Dim _Info As String = vbNullString Dim _FileName As String = "G:\BiosVersion\" & _PCName & ".txt" Dim _ManagmentC As New ManagementClass("Win32_ComputerSystem") Dim _Moc As ManagementObjectCollection = _ManagmentC.GetInstances For Each _Mo As ManagementObject In _Moc Dim Model() As String = Split(_Mo.Properties("Model").Value.ToString, " ") For i = 0 To Model.Length - 1 If Model(i).ToLower.Contains("dc") Then _Info &= Model(i) Next Next _ManagmentC = New ManagementClass("win32_bios") _Moc = _ManagmentC.GetInstances For Each _Mo As ManagementObject In _Moc _Info &= "|" & _Mo.Properties("SMBIOSBIOSVersion").Value.ToString Next Try If IO.File.Exists(_FileName) Then IO.File.Delete(_FileName) End If Catch ex As IO.IOException _FileName = _FileName.Replace(_PCName, _PCName & "-" & New Random().Next(10, 10000)) End Try IO.File.WriteAllText(_FileName, _Info) End Sub |
Zoals je kunt zien/lezen/begrijpen wordt er op de Share een tekst file aangemaakt met als naam de pc naam: "PC1042". In dit tekst bestand wordt zowel het modelnummer(bijv: DC7900) als de bios versie(786G1 v01.16) weggeschreven met als scheidingsteken "|".
code: Inhoud tekstbestand
1
| dc7900|786G1 v01.16 |
Deze informatie wordt dan weer door een (server)applicatie ingelezen & hier wordt een Tabel/Chart van gemaakt, althans dat ben ik aan het proberen.
Relevante code van de Server zijde
Visual Basic .NET: Server zijde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| Sub CreateChart() Dim PCModels As New List(Of String) Dim BiosVersions As New List(Of String) Dim Files As IO.FileInfo() = New IO.DirectoryInfo(Path).GetFiles For Each File As IO.FileInfo In Files If File.Extension = ".txt" Then PCModels.Add(IO.File.ReadAllText(File.FullName).Split("|")(0)) BiosVersions.Add(IO.File.ReadAllText(File.FullName).Split("|")(1)) End If Next PCModels = RemoveDuplicates(PCModels) BiosVersions = RemoveDuplicates(BiosVersions) For i = 0 To chartBios.Series.Count - 1 chartBios.Series.Remove(chartBios.Series.Item(i)) Next Dim Dictionary As New Dictionary(Of String, Integer) For Each Version As String In BiosVersions Dim Count As Integer = 0 For Each File As IO.FileInfo In Files If IO.File.ReadAllText(File.FullName).Split("|")(1).ToLower.Trim = Version.ToLower.Trim Then Count += 1 End If Next Dictionary.Add(Version, Count) Next For Each Model As String In PCModels chartBios.Series.Add(Model).ChartType = DataVisualization.Charting.SeriesChartType.Bar Dim c As Integer = 0 For Each Entry As KeyValuePair(Of String, Integer) In Dictionary chartBios.Series(Model).Points.AddY(Entry.Value) chartBios.Series(Model).Points.Item(c).AxisLabel = Entry.Key c += 1 Next Next End Sub |
De applicatie geeft de volgende output:

Van de pc's met versie 1.17 wordt zowel een DC7900 als een DC7700 weergeven, alleen heeft maar 1 van deze 2 pc's de versie 1.17.
De logica fout zit hem volgens mij hier:
code:
1
2
3
4
5
6
7
8
9
| For Each Model As String In PCModels chartBios.Series.Add(Model).ChartType = DataVisualization.Charting.SeriesChartType.Bar Dim c As Integer = 0 For Each Entry As KeyValuePair(Of String, Integer) In Dictionary chartBios.Series(Model).Points.AddY(Entry.Value) chartBios.Series(Model).Points.Item(c).AxisLabel = Entry.Key c += 1 Next Next |
Omdat voor elke entry een point wordt toegekent ondanks het model.
Wat is uiteindelijk als resultaat wil is het volgende.

De vraag:
Is hier mijn hele opzet verkeerd of zie ik de logica niet.