Scripting-Fragen

Bereich für allgemeine Beiträge.
Antworten
HeikoR
Beiträge: 45
Registriert: Di 26. Mai 2020, 11:47

Scripting-Fragen

Beitrag von HeikoR »

Aber generell zu den Scripten hätte ich dann doch noch eine Frage:

Kann ich - auch wenn ich keinen Scan der WindowsPCs durchführe (mache ich über rxScan)- dennoch Scripte auf denen ausführen? Z.B. wäre es praktisch um nur kopierte - aber nicht "installierte" Programme / Scripte vor Ort zu finden und ggf (wie auch immer) zu inventarisieren.

Und noch eine Frage: ich habe im Test (wir sind noch in der Evaluierung) den erkannten Geräten die benutzerdefinierte Eigenschaft "Standort" zugewiesen. Das brauchen wir nicht gänzlich undringend. Den Standort wiederum erkenne ich anhand des IP-Subnetzes. Also Filter auf Subnetz - alles markieren - per Hand "Standort = Musterstadt" zugewiesen ... so weit so unschön.

Gibt es eine Möglichkeit z.B. über die Scripte anhand des Subnetzes XXX (168.192.XXX.YYY) die benutzerdefinierte Eigenschaft "Standort" zuzuweisen?
WernerB
Beiträge: 112
Registriert: Mo 20. Jul 2009, 07:41

Re: Scripting-Fragen

Beitrag von WernerB »

Skripte funktionieren auch mit der rxScan.exe. Wichtig ist, dass die rxScan.ini im selben Verzeichnis liegt. Die rxScan.ini wird im Sammelverzeichnis beim jeweils nächsten Scan automatisch aktualisiert und sollte wie die rxScan.exe aktuell gehalten werden, falls sie an eine andere Stelle kopiert wurde.

Hier ein Beispielskript zum Setzen der geskripteten Eigenschaft Standort:

Code: Alles auswählen

CheckIp GetScannedIp

Function AfterScan()
  Dim psNet, ip, ip_temp, ip_list, ip_string

  Set psNet = GetPropertySet("NETWORKADAPTER", 1)
  If psNet Is Nothing Then
    Exit Function
  End If

  ip_list = psNet("IPADDRESS")
  If Len(ip_list) = 0 Then
    Exit Function
  End If

  For Each ip_string In Split(ip_list, " ")
    ip_temp = Split(ip_string, ".")
    ' Nur IPv4
    If UBound(ip_temp) = 3 Then
      ip = ip_temp
      Exit For
    End If
  Next

  If IsEmpty(ip) Then
    Exit Function
  End If
 
  ip = CLng(ip(0)) & "." & CLng(ip(1)) & "." & CLng(ip(2)) & "." & CLng(ip(3))
  CheckIp ip
End Function

Function CheckIp(ip)
  If ip like "192.168.5.*" Then
    SetProperty "Standort", "Musterstadt"
  ElseIf ip like "192.168.178.*"  Then
    SetProperty "Standort", "Demodorf"
  Else
    SetProperty "Standort", "<unbekannt>"
  End If
End Function
Das CheckIp GetScannedIp außerhalb derAfterScan-Funktion läuft immer. Auch z.B. bei unbekannten Geräten. Da GetScannedIp nicht bei einem lokalen Scan mit rxScan.exe funktioniert, gibt es die AfterScan-Funktion. Diese sucht sich aus den erfassten Netzwerkadressen der primären Netzwerkkarte eine (hoffentlich) passende heraus.
HeikoR
Beiträge: 45
Registriert: Di 26. Mai 2020, 11:47

Re: Scripting-Fragen

Beitrag von HeikoR »

Danke erst einmal für die Mühe ;)

Allerdings habe ich da so meine Probleme damit - SetProperty möchte die Benutzerdefinierte Eigenschaft "Filiale" (so heißt die eben bei uns) nicht setzen - ziemlich egal wie ich es mache.

Ich habe das ganze mal recht schlank zum Testen ohne Schnickschnack bei SNMP-Geräten versucht - ziemlich vergeblich.

Erst mit (weil's mir logisch erschien - und immer Test-Button gedrückt um Tippfehler zu vermeiden)

Function AfterSnmpScan()
SetProperty "Filiale","Test"
End Function

Den Aufruf konnte ich noch im Protokoll sehen - aber in den gefundenen Snmp-Geräten tauchte nichs auf

Dann noch mit BeforeSnmpScan() - dann einfach so in das Scriptfeld hinein - recht egal. Das Ergebnis war immer das gleiche, "Test" tauchte nicht unter "Filialen" auf. Ich habe im Script dann alle 3 Methoden drin gelassen - also nicht im Log wundern.

Ich hänge das Log einfach mal an
Dateianhänge
10.97.2.23@20200527100442.zip
(1.85 KiB) 909-mal heruntergeladen
WernerB
Beiträge: 112
Registriert: Mo 20. Jul 2009, 07:41

Re: Scripting-Fragen

Beitrag von WernerB »

Also ich konnte die angehängte Datei einlesen und auch das geskriptete Property Filiale erscheint mit dem Wert "Test" unter dem Gerät.

Es gibt übrigens einen Unterschied zwischen geskripteten und benutzerdefinierten Eigenschaften. Nur erstere lassen sich über ein Skript setzen. Im Gegensatz dazu kann man benutzerdefinierte Eigenschaften nur manuell in der Oberfläche (oder über die Kommandzeile mit invcmd.exe) setzen.
HeikoR
Beiträge: 45
Registriert: Di 26. Mai 2020, 11:47

Re: Scripting-Fragen

Beitrag von HeikoR »

Na sieh mal einer an :D das muss man in der Tat wissen. Damit tut sich nun auch etwas und ich kann weiterexperementieren.
HeikoR
Beiträge: 45
Registriert: Di 26. Mai 2020, 11:47

Re: Scripting-Fragen

Beitrag von HeikoR »

Puha - das ganze ist dann doch etwas sperrig ...

Ich hatte die Standort-Zuordnung anhand der IP-Nummer noch etwas erweitern müssen - wir haben auch Teilnetze in denen eben im letzten IP-Bereich noch unterteilt wird.

Bei den SNMP-Geräten kein Ding: ip-Nummer ermittelt, mit Split zuerteilt und dann jeweils Abfragen nach ip3 und ip4 gemacht. Klappt gut.

Code: Alles auswählen

ip = GetScannedIP(ip)
  ipA = Split(ip,".")
  ip3 = ipA(2)
  ip4 = ipA(3)

  If ip3 = 2 Or ip3 = 3 Then 	
  	Filiale ="110"
  ElseIf ip3 = 17 And ip4 > 128 And ip4 < 160 Then 
	Filiale ="550"
  ....
  SetProperty "Filiale", Filiale
End Function
Nun wollte ich das ganze noch für die offline gescannten Windows-Maschinen machen. Der Script kam ja aus diesem Thread. Das ganze noch etwas angepasst (damit ich den unteren Scriptteil für SNMP und Windows gleich halten kann).

... (wie oben 2 Postings höher erwähnt)

Code: Alles auswählen

ip = CLng(ip(0)) & "." & CLng(ip(1)) & "." & CLng(ip(2)) & "." & CLng(ip(3))
  ip3 = CLng(ip(2))  
  ip4 = CLng(ip(3))

  If ip3 = 2 Or ip3 = 3 Then 	
  	Filiale ="110"
  ElseIf ip3 = 17 And ip4 > 128 And ip4 < 160 Then 
	Filiale ="550"
  ....
  SetProperty "Filiale", Filiale
End Function
im Endeffekt habe ich also nur noch zusätzlich die 2 (weiter oben deklarierten) Variablen ip3 und ip4 noch einmal mit dem 3. und 4. Abschnitt von ip zugewiesen. Die function hatte ich aufgelöst und alles in einen Scriptteil geschrieben.

Allerdings kommt hier der Fehler "Error in "Windows Standort Neu" at line 28: Not an array or object. (ScriptError)" bei der Ausführung.

Vorher hatte ich schon versucht die function CheckIP weiter zu übernehmen und die übergebene Variable ip mit Split zu zerlegen - hier habe ich auch nur Fehlermeldungen gekommen dass ip3/ip4 out of bounds sind ...

Herrje - VB ist hier wohl echt nicht mein Freund
Dateianhänge
Standort.zip
(703 Bytes) 905-mal heruntergeladen
WernerB
Beiträge: 112
Registriert: Mo 20. Jul 2009, 07:41

Re: Scripting-Fragen

Beitrag von WernerB »

Die Zeile 27

Code: Alles auswählen

ip = CLng(ip(0)) & "." & CLng(ip(1)) & "." & CLng(ip(2)) & "." & CLng(ip(3))
überschreibt das Array ip mit der textuellen IP. In ip steht danach also kein Array mehr, in dem man Elemente abfragen könnte. Daher der Fehler.

Nachdem ip in der Textform später nicht verwendet wird, würde ich vorschlagen die Zeile einfach zu löschen.
HeikoR
Beiträge: 45
Registriert: Di 26. Mai 2020, 11:47

Re: Scripting-Fragen

Beitrag von HeikoR »

Ok ... für heute sollte ich Schluss machen ... ich sehe den Wald vor Bäumen nicht mehr :? Danke für die Antwort :)
Antworten