Toon posts:

[VB] Raid array uitlezen, programma starten ipv WriteLine

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mijn excuus voor mij wellicht wat verwarrende TT, maar ik heb een naar mijn idee redelijk mooi script gevonden om raidarrays mee uit te lezen in Windows.

Ik ben in deze taal niet bekent, maar heb vast wat vragen vooraf omdat ik er dus niet 100% bekend mee ben ik dit wel graag worden wil.

Het gaat om het script dat hier staat: http://www.shipyard.com.a...ws-software-raid-check.py

En ik hier even zal posten mocht het ooit verdwijnen:

code:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
' Software RAID status check script
' Oliver Hookins
' Anchor Systems

Dim WshShell, oExec
Dim Line, RE1, RE2, RE3
Dim Failure

Failure = 0
' Simple variable to display status of all volumes:
' 0 = Healthy
' 1 = Rebuilding
' 2 = Failed

Set WshShell = CreateObject("WScript.Shell")

' Execute the DISKPART program and grab the output
Set oExec = WshShell.Exec("%comspec% /c echo list volume | diskpart")

' Set up some regular expression objects
Set RE1 = New RegExp
Set RE2 = New RegExp
Set RE3 = New RegExp
RE1.Pattern = "Mirror|RAID-5"
RE2.Pattern = "Failed|(At Risk)"
' At Risk indicates errors have been reported for a disk
' and it may need to be reactivated.
RE3.Pattern = "Rebuild"

While Not oExec.StdOut.AtEndOfStream
    Line = oExec.StdOut.ReadLine

    ' Tests for Mirrored or RAID-5 volumes
    If RE1.Test(Line) Then

      ' Tests for Failed RAID volumes
      If RE2.Test(Line) Then
        If Failed < 2 Then Failed = 2

      ' Tests for Rebuilding volumes
      ElseIf RE3.Test(Line) Then
        If Failed = 0 Then Failed = 1

      End If
    End If
WEnd

' Print out the appropriate test result
Select Case Failed
    Case 0
      WScript.StdOut.WriteLine("RAID OK: All volumes Healthy")
    Case 1
      WScript.StdOut.WriteLine("RAID WARNING: Volume(s) Rebuilding")
    Case 2
      WScript.StdOut.WriteLine("RAID CRITICAL: Volume(s) have Failed")
End Select

WScript.Quit(Failed)



Dit script werkt, en ik was van plan dit met een cronjob iedere 5 minuten te draaien.

Er is ook een variant voor Zabbix, deze is iets anders en werkt dacht ik met SNMP, maar dat wil ik niet gebruiken op dit moment.

Om de status van een array te printen zijn de volgende regels ingegeven:

code:
1
2
3
4
5
6
7
8
9
' Print out the appropriate test result
Select Case Failed
    Case 0
      WScript.StdOut.WriteLine("RAID OK: All volumes Healthy")
    Case 1
      WScript.StdOut.WriteLine("RAID WARNING: Volume(s) Rebuilding")
    Case 2
      WScript.StdOut.WriteLine("RAID CRITICAL: Volume(s) have Failed")
End Select



Ik zou graag vanaf de commandline een mail versturen wanneer er een raidwarning is in plaats van de regel te printen. Ik dacht hierbij aan smtpsend.exe maar durf niet met zekerheid te zeggen of het verstandig is dit met een extern programmaatje te doen en ik dit misschien beter vanuit het script kan doen ?

Begrijp me niet verkeert, dit is geen script request maar ik probeer wat info te achterhalen en hopelijk wat andere mensen hier ook mee te kunnen helpen. Ik zie hier nogal wat vragen over windows raid monitoring, dus als iemand wat uitbreiding wil posten omdat hij/zij hierbij betrokken wil zijn is dat prima lijkt me.

Terug komend op mijn vraag, zal ik extern smtpsend.exe gebruiken of het in het script verwerken ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
We verlenen hier geen ondersteuning op scripts die door anderen geschreven zijn; misschien kan je je vragen beter stellen aan de maker van het script.

Om op je uiteindelijke vraag te antwoorden: probeer beide opties eens uit ? Waarom zou je voor a kiezen, of voor b ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op dinsdag 17 april 2007 @ 13:55:
We verlenen hier geen ondersteuning op scripts die door anderen geschreven zijn; misschien kan je je vragen beter stellen aan de maker van het script.
Dat snap ik, maar dat wil niet zeggend at anderen hier niet in interesseerd zijn. Zoals ik aangaf omdat hier veel vraag naar is leek me het handig om dit toe te voegen aan het forum, ik vraag geen ondersteuning ana het script, dit werk prima, maar de manier van de regel printen wordt vaker zo gebruikt, ik wil het alleen vervangen door een actie, de vraag is inscript of extern.
Om op je uiteindelijke vraag te antwoorden: probeer beide opties eens uit ? Waarom zou je voor a kiezen, of voor b ?
Inscript lijkt me beter als je zeker wil weten dat het werkt, er is geen extra laag die kan haperen.

Extern... tja, het kan een aantal regels coden schelen, wellicht een heleboel, maar dat zoek ik nu even uit.

Verwijderd

Topicstarter
Opgelost, je kan gewoon een Exec van een programma doen in het script, zoals ook met diskpart gedaan wordt.

Verwijderd

Topicstarter
Ik heb nog een vraag naar aanleiding van de check die gedaan wordt.

De check werkt goed, te goed zelfs want omdat iedere 5 minuten de Cron draait krijg ik ook iedere 5 minuten een mail wanneer de array defect is geraakt, reken uit... teveel in een uur.

Nu had ik de gedachte om het resultaat van de check naar een bestand te schrijven, dit lijkt me doenlijk, dit is Cron 1.

Ik zal moeten controleren, en ik denk met een andere cron, wat er in de file geschreven staat. 1,2 of 3 bijvoorbeeld. Als er een bepaald getal staat kan ik daar op controleren en een actie uit laten voeren.

HIer komt het probleem, ik kom zelf op teveel crons uit omdat ik even njiet weet hoe ik het in VB-scripting zal regelen. In PHP kom ik er altijd wel uit met if() statements, maar dit is andere koek.

Zoals ik het me losse crons zou zien:

1. Cron runt een script dat de array checkt en schrijft naar bestand
2. Andere cron checkt dit bestand, voert een actie uit en schrijft naar een ander bestand 1 of nul bij een foute check.

Waarom nog een bestand ? Ik zal ergens moeten controleren of er al een actie is uitgevoerd. 0 is geen actie, 1 is actie uitgevoerd.

Ik zou punt 2 nog aan kunnen vullen met een punt 3, door punt 2 op te splitsen maar ik zal dan 2 of 3 crons draaien wat mij zwaar overdreven lijkt.

Zal ik 2 crons moeten draaien of complexe code bouwen zodat 1 cron voldoende moet zijn ?

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
Je kunt toch ook gewoon in de cronjob vergelijken met het resultaat wat de vorige keer is opgeslagen? Is dat niet veranderd dan hoef je niet te mailen ljikt me...

Verwijderd

Topicstarter
rrrandy schreef op woensdag 09 mei 2007 @ 14:24:
Je kunt toch ook gewoon in de cronjob vergelijken met het resultaat wat de vorige keer is opgeslagen? Is dat niet veranderd dan hoef je niet te mailen ljikt me...
Dit is eigenlijk waar je nadat, ik, het gemaakt heb vaak op uit komt ja.

Je zou dus 2 files hebben, een voor de status en een voor de mail-status denk ik. Je zou dan een check-in-check moeten maken volgens jou ?

Lijkt me zeker het meest logische.

Verwijderd

Topicstarter
Ik kom er helaas niet helemaal uit hoe ik naar een bestand ga schrijven en dit ga checken.

De check staat opzich al in het script, deze lijkt me wel her te gebruiken als je de file in kan lezen.

Als iemand een goede tut of docs heeft kom ik vast ook wel verder, ik vind heel weinig op schijven naar een file en alleen op regel 1 een woord vervangen.

Verwijderd

Topicstarter
Het schijven naar een bestand ben ik uit, ik moet dit alleen nog even zo bakken dat hij altijd de eerste lijn overschrijft.

Het enige dat nog rest is per case een if statement te maken dat eerst het bestand controleert op wat erin staat, staat er niet hetzelfde in als de case (0,1,2) dan zal hij dit erin moeten schrijven en een Exec moeten doen.

Dit laatste is nog een bunch denk ik, is vast wel uit te komen.
Pagina: 1