davidson
Goto Top

Script für BG info

Script für BG info

Hallo

Ich habe ein kleines Problem. Ich benutze Bg info, jetzt will ich Inhalt einer Text datei auf meinem Desktop haben. Die Text Datei liegt auf einem Freigegeben Ordner. Zb \\meineserver\odner\textdatei. Der Name des Servers ist immer unterschidlich, der richtige Name liegt in der Registry. Das heißt gibt einen Eintrag in registry mit dem aktuelen Namen des Servers.

Nach meiner rechechen kann man mit VBS script machen aber mit vbs habe ich nicht viel Ahnung.

Können sie mir bitte helfen.


Danke!

Content-ID: 159195

Url: https://administrator.de/contentid/159195

Ausgedruckt am: 13.11.2024 um 01:11 Uhr

pieh-ejdsch
pieh-ejdsch 22.01.2011 um 12:20:01 Uhr
Goto Top
moin davidson,

Willkommen im Forum

in einer Batch könntest Du das ganze so machen:
RegKey, Eintagsname und BgInfo sowie Ordner\Text.txt etc.... sind noch anzupassen.

beim in der CMD starten - zeigt es aber nur an was es täte wenn es funktioniert
wenn dem so ist entfernst Du in Zeile 05 das @echo

@echo off & setlocal
set "RegKey=hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion"  
set "Eintragsname=RegisteredOwner"  
set "BgInfo=D:\bginfo.exe"  
for /f "tokens=2,*" %%i in ('reg query "%RegKey%" /v %Eintragsname% ^| more +2') do @echo "%BgInfo%" /iq\\%%j\Odner\Text.txt /timer:0  

PS. vllt verschiebst Du den Beitrag nach "Batch und Shell"
Gruß Phil
Schwinni79
Schwinni79 22.01.2011 um 12:42:06 Uhr
Goto Top
Hallo davidson,

ich habe eine Verständnisfrage zu deinem Vorhaben... Deine User oder du melden sich auf einem Server an. Der Name des aktuellen Servers soll bei jedem Anmeldevorgang neu abgefragt werden und dann auf dem Desktop angezeigt werden?

Michael
60730
60730 22.01.2011 um 13:37:53 Uhr
Goto Top
moin mädelz,

die Frage ist so "komplex" und trotzdem kurz gefasst, dass Pietsch @ Schwinni das Vorhaben falsch interpretiert haben.

  • AFAIK will er aus der Reg (welcher genau?) eine Info ziehen, wo der Server zu finden ist und dann als Zeile mit einem Pfad erweitern, wo die textdatei zu finden ist (nicht als Pfad für die .bgi) im Bginfo verwenden.

  • Kann klappen, aber würde ich wohl eher so auch nicht veranstalten.

  • evtl. mit einer (der logon) Batch den Pfad "zusammenbraten" die Datei auslesen und den Inhalt der Datei als Regkey hinterlegen
  • und den dann mit einem vbs im Bginfo auslesen.

Aber heute hab ich frei, muß keine Server warten, nur mit dem Kind spielen...

Gruß
pieh-ejdsch
pieh-ejdsch 22.01.2011 um 15:04:55 Uhr
Goto Top
moin Timo,

da ich nicht die genaue Syntax von Bginfo weis, hatte ich es Versuchsweise so geschrieben.

Bruß Phil
Friemler
Friemler 22.01.2011 um 19:54:24 Uhr
Goto Top
Hallo davidson,

das folgende Skript könnte Dein Problem lösen:
const ForReading = 1

strServerNameRegKeyPath = "HKLM\SOFTWARE\Microsoft\servername\meinservername"  
strTextFilePath = "\Freigabe\Ordner\Textdatei"  

set WshShell = CreateObject("WScript.Shell")  
strServerName = WshShell.RegRead(strServerNameRegKeyPath)

set FSO = CreateObject("Scripting.FileSystemObject")  
set F = FSO.OpenTextFile("\\" & strServerName & strTextFilePath, ForReading)  
Echo F.ReadAll()
F.Close

set F = Nothing
set FSO = Nothing
set WshShell = Nothing
Die Variablen strServerNameRegKeyPath und strTextFilePath müssen angepasst werden. Schau Dir auch nochmal den Servernamen, so wie er in der Registry steht, und Zeile 10 an. Wenn in der Registry vor dem Servernamen bereits die beiden Backslashs eingetragen sind, musst Du sie in Zeile 10 entfernen.

Die Freigabe müsste auf jedem Server gleich heißen. Zugriffsrechte auf die Freigabe und das Verzeichnis mit der Textdatei müssen natürlich eingerichtet sein.

Um das ganze mit Timo's Vorschlag zu kombinieren, schau Dir den Quelltext an. Wie man die Textdatei mit dem Pfad zur anzuzeigenden Textdatei öffnet und ausließt kannst Du daraus ableiten. Statt ReadAll dafür aber ReadLine verwenden.

Falls Du nicht weißt, wie man das VBS-Skript in BGInfo einbindet:
Auf den Button Custom klicken, dann New.... In dem dann erscheinenden Dialog im oberen Eingabefeld einen Titel für den neuen Eintrag eingeben (z.B. "Meine Textdatei"), dann Radiobutton VB Script file. Über den Durchsuchen-Button des unteren Eingabefeldes die Datei mit obigem Code auswählen, dann beide Dialoge mit OK schließen. Im Hauptdialog in der Liste mit den verfügbaren Feldern das eben erstellte Feld auswählen (würde z.B. unter dem Namen "Meine Textdatei" dort auftauchen) und neben dem Button Custom auf den Button <- Add klicken, um das neu erstellte Feld in die Liste der anzuzeigenden Felder zu übernehmen. Im Menü File->Save As... auswählen und die aktuelle Konfiguration speichern.

Aufruf zum testen:
bginfo "[[Laufwerk:\]Pfad\]<Konfigurationsdatei>.bgi" /popup
Wenn alles stimmt, in der Verknüpfung zum Aufruf aus dem Autostart-Verzeichnis den Parameter /popup weglassen.

Gruß
Friemler
davidson
davidson 23.01.2011 um 08:42:37 Uhr
Goto Top
Danke an allen, @pieh-ejdsch; @Friemler ich werde das probieren.

ich kann nochmal genau erklären wie das ist. Clients werden gegen verschiedene Server installiert. Auf Desktop des clients müssen mittels Bg info daten ( Server Daten und Cleint daten) eingezeigt werden. Die clients sind nicht immer gegen den gleichen Server installiert. Wie man rausfindet gegen welchen Server der cleint installiert ist muss man in registry gucken.
Auf Desktop des client muss inhalt einer Datei (text datei) angezeigt werden. Die text Datei liegt auf einem Server gegen dem der client installiert ist.

Der bg info datei muss für alle clients gelten ( nur eine bg info datei soll benutz sein) und die clients sind nicht gegen der gleichen Server installiert. Um zu finden gegen welchen Server der Client installiert ist muss man in regisrty.

Ich hoffe habe das gut erklärt, wenn nicht bitte einfach fragen. Nachmal danke
Friemler
Friemler 23.01.2011 um 14:53:06 Uhr
Goto Top
Hallo davidson,

wie sieht denn nun der Inhalt des Registry-Eintrags aus? Haben die Freigaben auf den Servern immer den gleichen Namen? Ist der Pfad zu den anzuzeigenden Textdateien auf den Servern immer gleich?

Gruß
Friemler
davidson
davidson 23.01.2011 um 17:25:37 Uhr
Goto Top
Hallo @ Friemler
Registry inhalt ist ungefähr so HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\servername\meinservername. ( das ist bur ein beispiel)

Die Freigabe auf den Servern haben gleichen Namen nur die Server Namen sind anders.. Der pfad zu dem Server ist immer gleich nur die Server Name sind anders.

Danke voraus.
Friemler
Friemler 23.01.2011 um 20:50:57 Uhr
Goto Top
Hallo davidson,

habe das Skript oben nach Deinen Angaben angepasst.

Gruß
Friemler
davidson
davidson 25.01.2011 um 09:04:47 Uhr
Goto Top
hallo

Ich habe den Script benutzt, hat leider nicht funktioniert, ich habe gegoogel und einen gebastelt, der lauft einwandfrei aber wenn ich in BG Info den Script einfüg kommt eine Fehlermeldung. Der Script läuft ganz gut aber in BG Info nicht. kannst du mir bitte helfen

msgboxJN = TRUE
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\meineserver\servername"
strValueName = "blabla_Config_Databaseserver"
strTextFilePath = "\datei\datei.txt"

oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,swValue

if msgboxJN then MsgBox "swValue: "&swValue, vbInformation & vbOKOnly, Title

unc_path = "\\" &swValue &strTextFilePath

set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(unc_path, ForReading)


if msgboxJN then MsgBox "UNC Path : \\" & swValue & strTextFilePath, vbInformation & vbOKOnly, Title

Const ForReading = 1

Dim arrFileLines()
i = 0
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close

'Then you can iterate it like this

For Each strLine in arrFileLines
WScript.Echo strLine
Next


Fehlermeldung:
Error evaluating scripted field "SvrLevel"
Microsoft VBScript rutine error
Line 4, position 0
Object required: "WScript"
60730
60730 25.01.2011, aktualisiert am 18.10.2012 um 18:45:36 Uhr
Goto Top
Moin,

zwei Sachen:

  • Benutze bitte <code> </code> Tags für Scripte
  • Dann lese dir u.a mal durch.
  • Und dann siehst du auch, warum in Zeile 4 das Object Wscript angemeckert wurde.
  • if msgboxJN then MsgBox
please do not use a messagebox into a silent runner face-sad


btw: Ich habe das Script nicht mit dem Rechner, nur mit den Augen grob durchgeparst.
(Und eigentlich hatte ich mir auch was mit dem "Umweg" nicht alles per VBS abzukaspern gedacht)

Gruß
davidson
davidson 25.01.2011 um 11:33:26 Uhr
Goto Top
Ich schaffe das nicht, kommt immer Fehlermeldung. Warum ist so schwierig?
Friemler
Friemler 25.01.2011 um 12:05:54 Uhr
Goto Top
Hallo davidson,

Zitat von @davidson:
Ich habe den Script benutzt, hat leider nicht funktioniert

mein Script läuft nicht außerhalb von BGInfo. Du musst es schon einbinden. Und weil Dein Script ausserhalb von BGInfo läuft, läuft es NICHT, wenn Du es einbindest. Statt WScript.Echo muss z.B. einfach nur Echo zum ausgeben von Text verwendet werden. Mit StdOut kannst Du auch nichts machen. => Hilfe von BGInfo lesen.

Gruß
Friemler
davidson
davidson 25.01.2011 um 15:07:24 Uhr
Goto Top
hallo
habe das hingekriegt, danke für die Hilfe.

Noch eine Frage, hoffentlich stelle ich nicht so viel Frage.

Wie kann man SQL Statements in VBA ausführen. Ich muss werte von Datenbank lesen via BG info wieder.

Danke bitte sorry wenn ich so viele Frage stelle
60730
60730 25.01.2011 um 18:24:43 Uhr
Goto Top
Moin,

Zitat von @davidson:
Danke bitte sorry wenn ich so viele Frage stelle

Bitte - gerne - aber nur unter einer Bedingung...

script BGinfo ist mir eine zu banale Umschreibung für das Thema.
  • In BGinfo variable Textdatei anzeigen
oder irgendwas anderes sinniges - wäre doch eine Alternative für deine Überschrift. Script für BG info ist doch etwas dünn face-wink


Dann würde das auch jemand anderes finden.

Und weil VBA SQL BGinfo nun garnix mit der ursprungsfrage gemeinsam hat - bitte hier nen Grünen Haken dran, evtl das geänderte Skript der Nachwelt präsentieren und frei nach dem Motto:

Neue Frage, neuer Fred und anderen die Chance geben zu helften oder später gehilftet zu bekommen.

Schankedöhn
Gruß
davidson
davidson 26.01.2011 um 11:01:48 Uhr
Goto Top
Sofort !!

So sieht das aus. EINE WOCHE ARBEIT. Frag mich bitte nicht was jede Line bedeutet. Hauptsache tut.


msgboxJN = TRUE
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set oReg=GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\blablabla\blablabla\blablabla"
strValueName = "ServerHostname"
strTextFilePath = "\Datei\Datei.txt"

oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,swValue


unc_path = "\\" &swValue &strTextFilePath


set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(unc_path, ForReading)


Const ForReading = 1

Dim arrFileLines()
i = 0
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close

'Then you can iterate it like this

For Each strLine in arrFileLines
Echo strLine
Next


face-smile
davidson
davidson 26.01.2011 um 11:04:16 Uhr
Goto Top
Nochmal DANKE DANKE DANKE DANKE DANKEface-smile