docusnap-dude
Goto Top

VBS-Logoutscript IP-bezogen aber wie?

face-big-smile

Hallo,

ich möchte gern das innerhalb eines bestimmten IP-Netzes (beginnend mit 172.16.beim Logout des Users verbundene UNC-Printer eines bestimmten Servers ( \\211PRT01\ ) gelöscht werden (also cleane alles was mit \\211PRT02\ beginnt wenn du im netz 172.16. bist). Leider bin ich voll am Anfang mit VBS (bisher hab ich alles über Jahre mit BAT gemacht). Das ganze soll schnell gehen (damit der logout nicht ewig leiert). Wer kann mir helfen (aber bitte: es geht nur VBS aus betrieblichen Gründen; keine Ideen a la "bleib doch bei BAT-Files")....

Hier mein Ansatz (der aber nicht funktioniert); wie gesagt nur ein Ansatz:

Dim WshNetwork, WshShell
Dim oDrives, fUser, fOS, fDomain, fUserName, oGroupDict
Dim objNetwork
Dim objFSO, objFileCopy
Dim strFilePath, strDestination

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objNetwork = CreateObject("WScript.Network")  
Set WshNetwork = WScript.CreateObject("WScript.Network")  
Set WshShell = WScript.CreateObject("WScript.Shell")  
Set oDrives = WshNetwork.EnumNetworkDrives

UserName = (WshShell.ExpandEnvironmentStrings("%UserName%"))  
fUser = (WshNetwork.UserName)
Set WshShell = CreateObject("WScript.Shell")  

'Check if you are connected in LAN 172.16.****************************************  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" & "!\\" & strComputer & "\root\cimv2" )  
Set colAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True" )  
For Each objAdapter in colAdapters
    IPdebut = LBound(objAdapter.IPAddress)
    IPfin = UBound(objAdapter.IPAddress)
    If (objAdapter.IPAddress(IPdebut) => "172.16" ) then   

'Anmerkung: hier weiss ich nicht weiter; wenn IP ungleich 172.16 beginnt soll er abbrechen; ansonsten zur näcjhsten Sprungmarke (war das nur einfach unter BAT)  


	'## Sequence remove Network Printers"  
		Dim UncPrinters
		UncPrinters	= Array("Drucker1","Drucker2","Drucker3",Drucker4")  
'Anmerkung: ich möchte eigentlich nicht jeden Drucker einzeln auffüren müssen sondern eben alles was \\211PRT02\ beginnt --> Wie setze ich Wildcards?  

		Set objNetwork = WScript.CreateObject("WScript.Network")  
			For i = 0 To Ubound(UncPrinters) 
			on error resume next
			 objNetwork.RemovePrinterConnection("\\211PRT02\" & UncPrinters(i))  
			Next
			
	'##Sequence remove Network Drives##  
		Dim DelNetDrive
			Set WshNet = CreateObject("WScript.Network")  
				For DriveAsc = 102 To 122
				On Error Resume Next
				DelNetDrive = Chr(DriveAsc) & ":"  
				WshNet.RemoveNetworkDrive DelNetDrive, True, True
			Next

Thank's a lot!

Frank

Content-Key: 139808

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

Printed on: April 19, 2024 at 19:04 o'clock

Member: AndreasBrecht
AndreasBrecht Apr 03, 2010 at 17:16:56 (UTC)
Goto Top
Moin,

zu 1. wscript.quit bricht die Ausführung des sripts ab

zu 2. Falls es Dir gelingen sollte die verbundenen Drucker aufzulisten (da gibt es wohl eine wmi query aber das müsste ich jetzt auch googeln), kannst Du mit Instr() oder Left() prüfen, ob der Name die gesuchte Zeichenkette enthält / mit ihr anfängt
Member: bastla
bastla Apr 03, 2010 at 17:56:39 (UTC)
Goto Top
@AndreasBrecht
Falls es Dir gelingen sollte die verbundenen Drucker aufzulisten
Würde Dir als Stichwort "EnumPrinterConnections" helfen?

Grüße
bastla
Member: DocuSnap-Dude
DocuSnap-Dude Apr 03, 2010 at 18:02:27 (UTC)
Goto Top
Hm; ehrlich gesagt steh ich bei der Frage auf dem Schlauch. Hab das hier gefunden:

         var WshNetwork = WScript.CreateObject("WScript.Network");  
         var oPrinters = WshNetwork.EnumPrinterConnections();
        WScript.Echo();
         WScript.Echo("Network printer mappings:");  
         for(i = 0; i < oPrinters.length; i += 2) {
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));  
         }

Aber wie binde ich das ein?
Member: DocuSnap-Dude
DocuSnap-Dude Apr 03, 2010 at 18:03:30 (UTC)
Goto Top
zu AndreasBrecht's Command:

zu 1) also so in etwa oder?

.
.
    If not (objAdapter.IPAddress(IPdebut) => "172.16." ) then wscript.qui  
.
.
 

Danke Dir!
Member: AndreasBrecht
AndreasBrecht Apr 03, 2010 at 19:38:53 (UTC)
Goto Top
Hört sich gut an. Das könnte dan wohl singemäß so aussehen:

set colPrinters = WshNetwork.EnumPrinterConnections

For Each P in ColPrinters
  If Instr(P.Name, "11PRT02") > 0 Then Do Something  
Next
Member: AndreasBrecht
AndreasBrecht Apr 03, 2010 at 19:41:43 (UTC)
Goto Top
Eher so:

If Instr(objAdapter.IPAddress(IPdebut), "172.16." ) > 0 Then wscript.quit

Oder so:

If Left(objAdapter.IPAddress(IPdebut), 7) = "172.16." Then wscript.quit
Member: bastla
bastla Apr 03, 2010 at 20:07:01 (UTC)
Goto Top
@AndreasBrecht
Eher so:
set oPrinters = WshNetwork.EnumPrinterConnections
For i = 1 To oPrinters.Count -1 Step 2
    If InStr(oPrinters(i), "\\211PRT02\") > 0 Then WshNetwork.RemovePrinterConnection(oPrinters(i))  
Next
Grüße
bastla
Member: bastla
bastla Apr 03, 2010 at 20:19:15 (UTC)
Goto Top
... oder doch so:
If InStr("#" & Join(objAdapter.IPAddress, "#"), "#172.16.") > 0 Then ...
Da eine Netzwerkkarte mehrere Adressen haben kann, stellt "objAdapter.IPAddress" ein Text-Array dar - mit dem "#" vorweg und als Verknüpfungszeichen beim "Join()" kann der Beginn jeder Adresse gekennzeichnet werden, sodass nicht auch zB "10.172.16.5" gefunden wird.

Grüße
bastla
Member: DocuSnap-Dude
DocuSnap-Dude Apr 04, 2010 at 09:08:09 (UTC)
Goto Top
Hi,

Super; danke euch beiden. Werd ich dienstag gleich testen! Ich geb dann noch Feedback! cool! Danke!