Eigentlich hatte ich ja ein Weihnachtsgewinnspiel geplant aber aufgrund von Stress ist das nichts geworden. Also, „Neujahr-Gewinnspiel“ taufe ich das Event, dass ich jetzt starte! 🙂

Als Dank an alle meine Blogleser und ein weiteres Jahr Bestehen gibt es folgende Dinge zu gewinnen:


3x Avira Antivir Premium – 1 PC 1 Jahr Lizenz
In meinem Testbericht könnt ihr euch von dem Virenschutzprogramm überzeugen lassen. Avira Antivir überzeugt durch Übersichtlichkeit, gutes Handling und Geschwindigkeit.
Insagesamt leistet Antivir einen soliden Schutz für den privaten PC und ist mit einem Preis von nicht ganz 20€ etwas günstiger als bei die Konkurrenz. Das soll jetzt bei dem Gewinnspiel aber egal sein.
Ihr könnt 3 Lizenzen für 1 PC für je 1 Jahr erhalten. Der Key wird per E-Mail verschickt, der Download ebenfalls.


3x ESET NOD32 Smart Security 4
Das Bundle „Smart Security“ ist eine Kombination aus verschiedenen Modulen. Es enthält alles aus dem ESET NOD32 Antivirus 4, welches ich getestet habe. Zusätzlich dazu bietet Smart Security 4 eine Firewall mit Intrusion Detection (IPv6 Support) und einen Spam Schutz mit Mail Scoring System. In diesem Paket steckt also eine Menge Power und ihr könnt gleich 3 dieser Softwarepakete gewinnen. Jedes dieser Pakete ist 40€ wert und enthält die Smart Security Suite mit einer Lizenz von 1 Jahr.


1x Kaspersky Anti-Virus 2011 Paket – 3 PC 1 Jahr Lizenz
Auch dieses Paket von Kaspersky enthält den Rundumshutz für den privaten PC. Oder genau genommen, für 3 PCs sogar. Denn mit der Lizenz in diesem Paket lassen sich 3 Computer für 1 Jahr schützen, 50€ ist das Paket damit wert. In meinem Produktreview habe ich die Software auf Herz und Nieren geprüft und eine solide Leistung festgestellt. So könnt ihr einen ausführlichen Eindruck erhalten. Das komplette Viren- und Webschutzset wird ergänzt durch kleine Extras wie die Systemschwachstellenanalyse oder Desktop Gadgets.
Das reicht erstmal an Computer Security.

Last but not least, die coole multifunktionale USB Tastatur im Wüsten-Design mit Handballenablage. Sie hat kleine Tasten für Power, Sleep, Mail, Suche, Fotos, Home, Play/Pause, Stop, Mute, Prev/Next, Lauter/Leiser (v.l.n.r.), was will man mehr?


Teilnahme

Ein Kommentar genügt um teilzunehmen.
Was hat euch das Jahr 2010 gebracht, was hat euch bewegt? Was erwartet ihr in 2011? Und was wollt ihr gewinnen, „Alles“ ist nicht drin? 😉
Wer die doppelte Gewinnchance absahnen möchte muss nur ein Link dieses Gewinnspiels bei Facebook oder Twitter veröffentlichen und den Nachweis in seinem Kommentar erbringen (Link zum Beitrag, Bild, etc).
Das Gewinnspiel endet am Sonntag, 23.01.2011.
Ausgelost wird wie immer mit random.org, die Bekanntgabe dann so schnell wie möglich. Von den Gewinnern brauch ich wie üblich die Anschrift, nur 1 Teilnahme pro Person erlaubt, ich überprüf das wie immer. Ich behalte mir das Recht vor Kommentare vom Gewinnspiel auszuschließen wenn ich einen Verdacht auf Betrug festgestellt habe. Ebenfalls entscheide ich bei jedem Kommentar einzeln ob das Kriterium der doppelten Gewinnchance korrekt erfüllt wurde.

Na dann, viel Glück, auf ein frohes neues Jahr 2011!!!

Ziel ist es, mit einem unbeaufsichtigten Script (also ohne Benutzereingaben etc) alle installierten Netzwerkdrucker (lokal installiert, nicht vom Druckerserver), von denen die IPs bekannt sind, zu löschen. Dieser Vorgang soll unabhängig vom vergebenen Druckernamen auf jedem beliebigen PC funktionieren.

Szenario

Wir haben zum Beispiel 14 verschiedenen Drucker installiert. Nun wollen wir 8 von denen deinstallieren und danach neu installieren. Von den 8 Druckern ist der Name nicht bekannt, da diese bei der Installation beliebig benannt wurden. Da dieser Vorgang auf dutzenden oder hunderten PCs funktionieren soll, ist der Name ein schlechter Anlaufpunkt. Stattdessen wissen wir aber die IP jedes Druckers, der deinstalliert werden soll.
Lokale Drucker wie PDF Drucker oder Microsoft-interne Drucker sollen unberührt bleiben.

Wie löschen wir am besten Drucker scriptbasiert? Mit printui.dll via CMD.
Zum Löschen nutzen wir den Befehl:

rundll32 printui.dll,PrintUIEntry /dl /n "Name des Druckers"

Wie gesagt kennen wir die Druckernamen nicht. Aufgabe ist also, den Namen der gewünschten Drucker zu bekommen und mit diesem dann den Löschbefehl zu starten.

Den Namen bekommen wir (indirekt) von der WSH Funktion EnumPrinterConnections.

Also Schritt 1, Druckernamen herausfinden:

show-printers.vbs

Set WshShell = CreateObject("Wscript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set objPrinters = WshNetwork.EnumPrinterConnections
For i = 0 to objPrinters.Count - 1 Step 2
   WScript.Echo "Port: " & objPrinters.Item(i) & " | Name: " & objPrinters.Item(i+1)
Next

.vbs Download (Rechtsklick -> Ziel speichern) | Codegrundlage

Probiert es mal aus, beim Ausführen der .vbs werden alle installierten Drucker nacheinander mit Port und Name angezeigt. objPrinters.Item ist also unser Freund. Die einzelnen Codezeilen erkläre ich nachher im Gesamtbild.

Wir können also die Druckernamen herausfinden und für den printui.dll Löschbefehl weiterverwenden.
Nun wollen wir aber nicht alle installierten Drucker löschen sondern nur die gewünschten Drucker, dessen IPs wir nennen. Zudem sollen Systemdrucker (Microsoft-interne, PDF Drucker etc) erhalten bleiben, genauso wie durch Druckserver hinzugefügte Drucker.

Also schauen wir uns das Konstrukt mal an:

delete-printers.vbs:

Set WshShell = CreateObject("Wscript.Shell")
printer = Array("111.40.162.60", "111.40.162.90", "111.40.162.100", "111.40.162.105", "111.40.162.120", "111.40.162.129", "111.40.162.140")
Set WshNetwork = CreateObject("WScript.Network")
Set objPrinters = WshNetwork.EnumPrinterConnections
For i = 0 to objPrinters.Count - 1 Step 2
  If Left(objPrinters.Item(i+1),2) <> "\\" Then
    For Each item In printer
      If Len(item) >= 2 Then
        If InStr(objPrinters.Item(i), item) > 0 Then
          WshShell.Run "cmd /c rundll32 printui.dll,PrintUIEntry /dl /n " & Chr(34) & objPrinters.Item(i+1) & Chr(34)
        End If
      End If
    Next
  End If
Next

.vbs Download (Rechtsklick -> Ziel speichern)

Nun im Detail:
Zeile 2 enthält, mit Kommata getrennt, die IPs aller Drucker, die gelöscht werden sollen.
Zeile 4 speichert in der Variable objPrinters alle Druckerobjekte.
Zeile 5 startet die Schleife, die so oft durchläuft, wie es Druckerobjekte (objPrinters.Count – 1) gibt. Die Schleife in 2er Schritten (Step 2) durchzugehen muss sein. Denn:
Nachdem EnumPrinterConnections in objPrinters geschrieben hat, sieht objPrinters etwa so aus, um es mal bildlich zu haben und die folgenden Codezeilen einfacher zu verstehen:

Step 2i=AbfrageTypWert
0x0objPrinters.Item(i)Portname[IP_111.40.162.60]
0x1objPrinters.Item(i+1)Druckername .60[Drucker-1]
1x2objPrinters.Item(i)Portname[IP_111.40.162.90_2]
1x3objPrinters.Item(i+1)Druckername .90[Kopierer_EG]
2x4objPrinters.Item(i)Portname[111.40.162.105_1]
2x5objPrinters.Item(i+1)Druckername .105[EG – Netzdrucker]

… usw.
Wir überprüfen den Portnamen, der die IP enthält, aber durch „IP_“ am Anfang oder „_X“ am Ende doch stark variieren kann. Dazu später mehr.
Ab Zeile 6 Nun wird für jeden Port durchgegangen (da jeder 2. Step den Druckernamen überspringt und zum nächsten Port springt):
Zeile 6 prüft mit Left(XXXXXX,2) die ersten 2 Stellen des Druckernamens. Sind diese nicht „\\“ so handelt es sich nicht um einen Druckerserver-Drucker und die Schleife wird fortgeführt.
Zeile 7 startet eine Schleife, die jeden Eintrag des Arrays printer durchgeht. In diesem Array stehen alle Drucker-IPs, die wir löschen wollen.
Zeile 8 prüft, ob der Eintrag des Arrays, der überprüft wird, 2 oder mehr Zeichen lang ist. Ehrlich gesagt, keine Ahnung warum ich damals diese Abfrage eingebaut habe…. 😀 wenn ich drauf kommt packe ich es als edit dazu. Mit Kommentaren wäre das nicht passiert, ich weiß.
Zeile 9 vergleicht den Druckerport (objPrinters.Item(i)) und die eingelesene IP, also: „IP_111.40.162.90_2 <> 111.40.162.90″ und prüft, ob der eingelesene Arraywert im Portnamen vorkommt. Ist der Rückgabewert > 0, so wurde der String 2 (IP aus dem Array) in String 1 (Portname) gefunden. Ist wie Regular Expressions, nur simpler. Wer gut regexen kann, hier könnte es Sinn machen.
Zeile 10 ist nun der Löschbefehl. objPrinters.Item(i+1) steht hier also für einen Druckernamen, der weder Druckserverdrucker noch lokaler Drucker noch ungewollter Drucker ist.
Da wir den Löschbefehl

printui.dll,PrintUIEntry /dl /n "Name"

über

WshShell.Run "Befehl"

laufen lassen müssen, dessen Befehl in Anführungszeichen stehen muss, kriegen wir ein kleines Problem. So würde es nämlich aussehen:

WshShell.Run "cmd /c rundll32 printui.dll,PrintUIEntry /dl /n "Druckername"

Der schlaue Leser weiß längst, dass hier der vbs Befehl nach dem /n als beendet angesehen wird und das Script damit fehlschlägt. Um den Namen des Druckers für printui.dll in Anführungszeichen zu kriegen, nutzen wir das Chr(34), das in ein “ umgewandelt wird. Der vbs Befehl läuft damit weiter und dem CMD Befehl wird ein “ vorgegeben.

Fertsch, Drucker wird gelöscht.

Voraussetzung für das Löschen ist natürlich das Recht dazu, Adminrechte also. CPAU kann helfen, doch wie immer Vorsicht, CPAU ist nicht sicher. Dank Kenny… 😛

Das Programm ist funktionsfähig, getestet und im Produktiveinsatz. Bei Fragen, Wünschen, Verbesserungen oder Kritik etc, Kommentarfeld ist unten oder per Mail/Kontakt.

delete-printer.vbs mit Parametern

Danke an Kenny für die Parameter Idee, macht das Script viel flexibler als zuvor!

Set WshShell = CreateObject("Wscript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set objPrinters = WshNetwork.EnumPrinterConnections
If WScript.Arguments.Count = 0 Then
   WScript.Echo "Usage: delete-printer.vbs "&Chr(34)&"Portname1"&Chr(34)&" "&Chr(34)&"Portname2"&Chr(34)&" ..."
Else
   Dim first
   first = WScript.Arguments(0)
   Select Case first
      Case "help" WScript.Echo "Usage: delete-printer.vbs "&Chr(34)&"Portname1"&Chr(34)&" "&Chr(34)&"Portname2"&Chr(34)&" ..."
      Case "/?" WScript.Echo "Usage: delete-printer.vbs "&Chr(34)&"Portname1"&Chr(34)&" "&Chr(34)&"Portname2"&Chr(34)&" ..."
      Case "-?" WScript.Echo "Usage: delete-printer.vbs "&Chr(34)&"Portname1"&Chr(34)&" "&Chr(34)&"Portname2"&Chr(34)&" ..."
      Case "?" WScript.Echo "Usage: delete-printer.vbs "&Chr(34)&"Portname1"&Chr(34)&" "&Chr(34)&"Portname2"&Chr(34)&" ..."
      Case Else 
   End Select
End If
For i = 0 to objPrinters.Count - 1 Step 2
   If Left(objPrinters.Item(i+1),2) <> "\\" Then
      For Each item In WScript.Arguments
         If Len(item) >= 2 Then
            If InStr(objPrinters.Item(i), item) > 0 Then
               WshShell.Run "cmd /c rundll32 printui.dll,PrintUIEntry /dl /n " & Chr(34) & objPrinters.Item(i+1) & Chr(34)
            End If
         End If
      Next
   End If
Next

.vbs Download (Rechtsklick -> Ziel speichern)

Okay, was hat sich geändert? Das Array ist weg und wird durch Parameter ersetzt. Diese werden beim Aufruf einfach hinten angehängt. Mehrere Parameter werden mit Leerzeichen getrennt angegeben. Ein Parameter mit Leerzeichen drin wird einfach in Anführungzeichen angegeben. Das lässt sich also beliebig kombinieren.
Wird kein Parameter angegeben (Doppelklick z.B.) bzw. ist der erste Parameter „help“ o.Ä. so wird eine Usage Hilfe angezeigt.

Beispiel:

delete-printer.vbs 111.40.162.90 111.40.162.105 "Farbe EG" "Farbe 1.OG"

Dieser Aufruf hätte 4 Parameter und würde alle Drucker löschen, die diese 2 Zeichenketten im Portnamen enthalten.

BTW: für VBS Neulinge, hier hab ich etwas Codehilfe her.

Weitergabe oder Verwendung der Anleitung nur mit voller Quellen- und Autorangabe! Ich bitte euch, seid fair.

Sitze ja gerade im Seminar und fasse mich kurz, nur das Gelernt schnell niederschreiben.

In Windows 7 sind alle verfügbaren Treiber, die auch mit Windows schon mitgebracht werden, in einem großen Repository zusammengefercht. Das sogenannte Treiberrepository nimmt neue Treiber auf und beinhaltet bestehende Treiber.

Pfad:

C:\Windows\System32\DriverStore\FileRepository

Hier liegen alle vorhandenen Treiber in je einem Unterordner. In der Windows 7 Rohinstallation dürften zwischen 500 und 550 Treiber zur Verfügung stehen. Dadurch werden z.B. USB Geräte erkannt, obwohl man noch nie einen USB Treiber installiert hatte.

Wenn man über den Hardwaremanager neue Treiber für ein Gerät installiert dann werden die nötigen Dateien für die Geräteverwaltung dort abgelegt.
Wie macht das der Treiberinstallations-Assistent? Man gibt den Pfad zu der Treiber .inf Datei an und im Hintergrund startet der Assistent das Tool pnputil.exe mit dem Pfad zu der Treiberdatei.

pnputil.exe Usage:

C:\Users\Hannes>pnputil /?
Microsoft-PnP-Dienstprogramm
Syntax:
------
pnputil.exe [-f | -i] [ -? | -a | -d | -e ] 
Beispiele:
pnputil.exe -a a:\usbcam\USBCAM.INF      -> Durch USBCAM.INF angegebenes Paket hinzufügen
pnputil.exe -a c:\drivers\*.inf          -> Alle Pakete aus "c:\drivers\" hinzufügen
pnputil.exe -i -a a:\usbcam\USBCAM.INF   -> Treiberpaket hinzufügen und installieren
pnputil.exe -e                           -> Alle Drittanbieterpakete auflisten
pnputil.exe -d oem0.inf                  -> Paket "oem0.inf" löschen
pnputil.exe -f -d oem0.inf               -> Löschen von Paket "oem0.inf" erzwingen
pnputil.exe -?                           -> Dieser Syntaxbildschirm

Es können also neue Treiber installiert werden mit:

pnputil.exe -a \\server\pfad\driver\Kamera.inf

Bei komplexeren Geräten, die ganze Treiberstrukturen benötigen:

pnputil.exe -a \\server\pfad\canon\ir3035dn\*.inf

So werden mehrere .inf Treiber eines Ordners installiert.

Der Assistent der Geräteverwaltung gibt also den durch „Durchsuchen“ ausgewählten Pfad des Benutzers einfach an dieses Tool weiter. Ihn zu verwenden ist aber wahrscheinlich sicherer, da der Assistent weitere Gegebenheiten prüft, wie z.B. 32bit/64bit Treiber, kompatibel, signiert oder nicht etc.

Digitale Archivierung wird mit dem exponentiellen Anstieg von digitalen Daten immer schwieriger.
Der ebenso starke Anstieg an immer günstigeren Speichermedien hilft da leider nicht. Denn man neigt mit mehr Speicherplatz auch nur dazu, weniger Ordnung zu halten. Man mistet sich total ein.
Zumal es sogar bei neuesten Datenträgern zu Ausfällen und Fehlern kommen kann; je mehr Speichermedien man hat desto anfälliger wird man also.
Ein gutes Archivierungssystem muss also Daten performant entgegennehmen, sie gut organisieren und gut auffindbar halten und für eine zuverlässige Sicherung der Datenbestände sorgen.

An dieser Stelle möchte ich euch den Archiv Server BvLArchivio vorstellen.
Dieses Komplettsystem überzeugt nicht nur durch einfache Handhabbarkeit, sondern bietet zudem immense Kostenvorteile und ein Höchstmaß an Datensicherheit.

Wie funktioniert es?
BvLArchivServer_FrontBvLArchivio ist das erste Fertigbox-System für die digitale Archivierung. Nach dem Prinzip „Plug and play“ wird die 30 x 40 x 30 Zentimeter große Box an Netzwerk und Stromnetz angeschlossen und ist sofort einsatzbereit – lediglich ein Browser für den Zugriff ist erforderlich. Der enorme Schulungs-, Zeit- und Kostenaufwand, der sich normalerweise ergeben würde, entfällt also komplett.

Im Umfang sind 3 Festplatten enthalten. Eine 500GB Datenplatte und 2 Sicherungsplatten für die nötige Sicherheit.
Die Daten werden in einem eigens für das System entwickelten Datenbanksystem gespeichert, das bis zu 1 Milliarde Datensätze fassen kann.
Eine Volltext-Verschlagwortung in Kombination mit einer Barcode-Kennung zur Archivzuweisung (Stempel oder Aufkleber) erübrigt dabei jegliche Nachbearbeitung.
Während jeder Mitarbeiter das Archiv zu Recherchezwecken über die Google-ähnliche BvLArchivio-Suchmaschine nutzen kann, lässt sich die Archivierungsbefugnis über die Vergabe von Schlüsseln regeln. Schnittstellen ermöglichen zudem das automatisierte Archivieren beispielsweise aus Buchhaltungsprogrammen.

Die Archivierung der Dateien erfolgt direkt vom PC in jeglichem Format, bei Papierdokumenten durch einfachen Scan.

Mehr Informationen gibt in der digitalen Broschüre.
Das alles klingt robust und ihr sucht nach einer vernünftigen Lösung für ein platzsparendes Archiv?
Dann werft einen Blick auf die Preisliste und durchforstet die Produktseite.

Habt ihr euch schonmal gefragt, wann die Zeit einer Tastatur und einer Maus, wie wir sie derzeit benutzen, vorbei ist?
Durch Sprachsteuerung, was immermal kurz aufpoppt und dann wieder verschwindet, könnte die Tastatur wegfallen. Vielleicht sogar die Maus? Nein, unwahrscheinlich. Für die gibt es aber einige andere Ideen, ein paar davon jetzt hier:

10/GUI, komplettes Maus-Redesign, looks awesome

Wenn das rauskommt, ich bin definitiv einer der Ersten, die das kaufen 😀

Multi Touch Mouses

z6krcU6mZW0

https://www.youtube.com/watch?v=SLw1MXTDlAE[/embed]

Erstes Video und Thema von Powerflasher, die 2 anderen Videos von Tobbi.

[Trigami-Review]

Zum Gewinnspiel, nur noch bis zum 11.09. möglich.

Ich möchte euch hier kurz ein paar echt geile Taschenlampen vorstellen. Um genau zu sein hochleistungs LED Taschenlampen der Firma Zweibrüder Optoelctronics.
Per Post erreichte mich Ende letzter Woche ein Paket mit den LED Taschenlampen LED LENSER M5, M1 und K3. Die M5 habe ich mir näher angeschaut und ein 8 minütiges Video gedreht, in dem ich auch kurz die K3 zeige.


Der Sound ist ziemlich mies, sorry.

Technische Details:

LED LENSER M5:
led-lenser-m5

  • 1 LED
  • 104 mm lang und 74g leicht
  • 88 Lumen dank einer normalen AA-Batterie und einer Leuchtdauer von etwa 6,5 Stunden
  • 3 verschiedene Leuchtmodi dank eines Mikro Controller Chips
  • 2 verschiedene Fokuszustände (Spot und Flood)

LED LENSER M1:
led-lenser-m1

  • 1 LED
  • 97 mm lang und 78g leicht
  • 155 Lumen dank einer CR123 Batterie und einer Leuchtdauer von etwa 8 Stunden
  • 3 verschiedene Leuchtmodi dank eines Mikro Controller Chips
  • 2 verschiedene Fokuszustände (Spot und Flood)

Die LED LENSER M5 und M1 unterscheiden sich tatsächlich kaum. Die M1 ist etwas breiter um die Taille, die M5 dafür schmaler und etwas länger. Ansonsten ist die Leuchtkraft leicht unterschiedlich. Die M1 läuchtet etwas stärker und wäre daher meine 1. Wahl.

LED LENSER K3:
led-lenser-k3

  • 1 LED
  • 68 mm lang und 34g leicht
  • 14 Lumen dank 4 AG 13 Knopfzellen und einer Leuchtdauer von etwa 50 Stunden
  • 3 verschiedene Leuchtmodi dank eines Mikro Controller Chips
  • 2 verschiedene Fokuszustände (Spot und Flood)

Ein Vergleich der 3 Taschenlampen seht ihr hier:
led-lenser-vergleich

Über diese geilen Taschenlampen könnt ihr euch z.B. in der Community unterhalten.


>> Zum Gewinnspiel< <

Die Gewinner des Gewinnspiels erhalten das Produkt so verpackt, wie ihr es am Anfang des Videos seht. Zu den Taschenlampen M1 und M5 gibt es zusätzlich noch 2 große Hefte (insgesamt etwa 150 Seiten) mit vielen Bildern, Informationen, Technikdetails und Mehr. Diese Hefte seht ihr im Video nicht, gehören aber mit zum Lieferumfang.