Umgebungsvariable über die CMD erstellen

Unter Windows 7 (und vermutlich auch XP, aber nicht getestet) kann man in der CMS recht simpel Umgebungsvariabeln definieren.
Die Variabeln die man mit set definiert bleiben ja nur, solange man die Session offen hat, wenn man Aber Variabel definieren will die zum einen Länger halten und auch für das komplette System Benutzbar sind, kann man das mit dem Befehl setx machen.
Um eine Umgebungsvariable nur für den aktuellen Benutzer zu erstellen benötigt man keine speziellen Benutzerrechte und kann mit dem folgenden Befehl die Variable erstellen:
setx NAME WERT

Um aber eine Variable für die ganze Maschine zu erstellen muss man Admin-Rechte haben und die CMD auch als Elevated-Process ausführen. Dann kann man ganze einfach mit dem Parameter /M die Variable global erstellen:
setx /M NAME WERT

Problem: Netzlaufwerke werden unter Windows 7 nicht verbunden

Im Geschäft haben wir inzwischen einige Maschinen mit Windows 7. Dabei hatte ich bei allen das Problem, dass die Netzlaufwerke nicht verbunden wurden. Dasselbe Startscript ist als Gruppenrichtlinie eingebunden und läuft unter Windows XP ohne Probleme. Wenn ich das Startscript unter Windows 7 manuell aufrufe funktioniert es auch Problemlos und die Netzlaufwerke werden verbunden. Zudem sehe ich auch, dass das Startscript beim Aufstarten durchläuft und Fehler werden keine ausgegeben. Was ist also das Problem?
Nach einigem Nachforschen habe ich herausgefunden, dass Windows 7 die Netzlaufwerke sehr wohl verbindet, scheinbar aber mit anderen Benutzerrechten und dementsprechend werden die Laufwerke einfach nicht angezeigt. Das ganze kann man folgendermassen umgehen:

Man öffnet die Registry:
Start -> Ausführen -> regedit.exe

Nun öffnet man dort den folgenden Tree:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System

Dort erstellt man einen neuen DWORD eintrag mit dem Namen EnableLinkedConnections und setzt den Wert darin auf 1.
http://images.t-error.ch/blog/1457/linked_connections.jpg


Und beim nächsten Start der Maschine werden die Netzlaufwerke brav verbunden und auch angezeigt.

PDF-Icon in Sharepoint Foundation einbinden

Im Geschäft bin ich gerade ein SharePoint Foundation am installieren bzw. konfigurieren. Eines (der vielen) Probleme ist, dass bei PDF-Dokumenten kein Icon angezeigt wird, was das ganze etwas unübersichtlich macht. Das ganze kann aber recht schnell lösen. Dazu muss man das Icon für auf den Server kopieren und eine XML-Datei anpassen.
http://images.t-error.ch/blog/1379/sharepoint_vorher.jpg

Als erstes kopiert man dazu das PDF-Icon in einer Grösse von 16x16 Pixel auf den Server. Bei meinem Windows 2008 R2 Server, war das der folgende Ordner:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\TEMPLATE\IMAGES

Dazu kann man das Icon benutzen: http://images.t-error.ch/blog/1379/icpdf.gif

Jetzt muss man noch die Datei DOCICON.XML anpassen, welche in diesem Ordner liegt:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\TEMPLATE\XML

Der macht fügt man im Abschnitt ByExtension die folgende Zeile hinzu.
<Mapping Key="pdf" Value="icpdf.gif" OpenControl=""/>
Wichtig ist, dass der Dateiname gleich ist, wie der vom Bild.

Nun muss man auf dem Server mit dem Befehl iisreset noch den Webserver neustarten und dann werden die Icons schon angezeigt.
http://images.t-error.ch/blog/1379/sharepoint_nachher.jpg

Das ganze funktioniert natürlich auch mit den Icons von anderen Dateiendungen.

Access-based Enumeration und Windows 2008 R2

Vor bald drei Jahren habe ich mal einen Artikel über Access-based Enumeration bei eine Windows 2003 Server geschrieben.
Letzthin habe ich im Geschäft einen Windows 2008 R2 Fileserver in Betrieb genommen und wollte dort auch wieder ABE einschalten. Das ganze geht nun recht einfach und ohne die Installation von zusätzlicher Software.
Dazu öffnet man eine Management Console (Start -> Ausführen -> MMC) und fügt dort das Snap-in "Share and Storage Management" hinzu. In der Liste wählt man nun den Share, auf dem man die ABE einschalten will und klickt dann auf Advanced. In diesem Fenster kann man nun die ABE einschalten.
http://images.t-error.ch/blog/1325/abe.jpg

Dateien mit zu langem Namen löschen

Letzhin hatte ich wieder das Problem, dass ich eine Datei im Windows nicht löschen konnte, weil der Name zu lang ist. Dann kann man die Datei weder löschen noch umbenennen. Auch in der CMD kommt der folgende Fehler:
Der Dateiname oder die Erweiterung ist zu lang.

Eine Lösung ist den Pfad als separates Laufwerk einzubinden und schon kann man die Datei löschen. Dies geht mit dem Befehl subst.
Zu beachten ist, dass der Pfad am besten in Anführungszeichen geschrieben wird, dann gibt es auch keine Probleme mit Abständen im Pfad. In diesem Beispiel wird der Pfad als Laufwerk s: eingebunden, man kann natürlich jedes nicht benutzte Laufwerk verwenden.
subst s: "pfad"
s:
del "datei"

Die Dateien kann man nun natürlich auch über den Datei-Explorer löschen.
Zum Schluss kann man das Laufwerk wieder aushängen:
subst s: /d

Grub 2 nach Windowsinstallation wiederherstellen

Ich nutze auf dem Computer zuhause schon seit längerem Untuntu und bin sehr zufrieden damit. Einige Dinge (GPS, Spiele) laufen unter Ubuntu aber nicht darum habe ich paralell noch ein Windows XP installiert. Mit dem Grub Bootloader ist das ja kein Problem. Neulich musste ich aber mein Windows neu installieren, was ja ansich auch kein Problem ist. Bei der Installation überschreibt Windows aber den Bootloader und so kann man Linux nicht mehr booten. Hier darum eine kleine Anleitung wie man den Grub wieder installiert, so dass man Linux und Windows booten kann. Dazu benötigt man einfach eine Ubuntu Installations CD. Ich habe das ganze mit Ubuntu 9.10 durchgespielt.

Als erstes legt man die Ubuntu CD ins Laufwerk und bootet davon im Live Modus. So hat man ein Linux zur Verfügung, ohne dass man etwas ander Festplatte verändert. Das Problem ist aber, dass die Live CD den Grub 1 verwendet, die Installation aber Grub 2, aber das ist ein lösbares Problem.
Darum schreibt man nun als erstes den (alten) Grub in den MBR (Master Boot Record) der Festplatte. Da zu muss man die UUID der Bootpartition sowie der Name der Festplatte wissen. Am besten hängt man die Boot Partition über das GUI ein und gibt danach in der Shell den Befehl mount ein. Dort sieht man, wie die Partition eingebunden ist und auch die UUID der Partition. Wir brauchen wie gesagt die UUID der Partition und der Name der Festplatte. Ist die Parition die /dev/sda6 ist die Platte die /dev/sda. Im Normalfall ist eine IDE Platte die /dev/hda und eine SATA/SCSI die /dev/sda. Den Bootloader schreiben wir nun mit dem folgenden Befehl ({UUID} durch die entsprechende UUID ersetzen.
sudo grub-install --root-directory=/media/{UUID} /dev/sda

Bevor wir den Computer nun neustarten, müssen wir noch wissen, welche Parition die Root Partition ist. Also die Partition, die schlussendlich als / genutz werden soll. Gleiches vorgehen wie vorhin. Schnell einhängen und mit mount die Partition auslesen.
Jetzt können wir den Computer neustarten und die CD aus dem Laufwerk auslesen.

Beim neustart kommt nun der Grub im Konsolen Modus. Also keine Auswahl sondern nur eine Aufforderung etwas einzugeben. Nun müssen wir das System ein erstes mal "von Hand" booten. Zum Glück gibt es eine Autovervollständigung, die das ganze etwas einfacher macht. Als erstes gibt man die folgende Zeile ein:
linux /vmlinuz-2.6.31-20-generic root=/dev/sda6 ro quiet splash

Am einfachsten ist es nur linux /vmlinuz einzutippen und sich dann mit dem Tabulator die verschiedenen Kernel anzeigen zu lassen, so erwischt man auch immer den aktuellsten. /dev/sda6/ ist hier die Root Partition, dessen Name wir vorhin ausgelesen haben. (Das Tastaturlayout ist Englisch. Die Bindestriche und Slashes nimmt man am besten vom Numlock, das Gleichzeichen ist gleich links vom Backspace)
boot linux /vmlinuz-2.6.31-20-generic root=/dev/sda6 ro quiet splash

Nun ist der Kernel geladen und wir müssen nur noch Booten. Das geht mit demselben Befehl, nur noch mit einem boot davor.
boot linux /vmlinuz-2.6.31-20-generic root=/dev/sda6 ro quiet splash

Jetzt sollte das System wieder booten wie vor der Windows installation. Damit man das aber nicht bei jedem Start machen muss, muss man nun noch die neuste Version vom Grub installieren. Das geht recht simpel mit dem folgenden Befehl:
sudo gub-install --root-directory=/ /dev/sda

Wenn man das Windows nachträglich installiert, oder bei der Neuinstallation die Windows Partition komplett gelöscht und neu erstellt hat, muss man das Configfile vom Grub anpassen, damit auch Windows wieder gebootet werden kann. Das geht mit dem folgenden Befehl schnell und vollautomatisch:
sudo grub-mkconfig -o /boot/grub/grub.cfg

Beim nächsten Neustart sollte man nun wieder den Grub 2 mit der Auswahl Linux und Windows haben.

Energieoptionen über die Shell verwalten

Die Energieoptionen in Windows kann man zum einen über Gruppenrichtlinien verwalten, oder auch über die Shell. Das ganze funktioniert mit dem Befehl powercfg. Um zum Beispiel zu konfigurieren nach welcher Zeit der Bildschirm ausgeschaltet wird, gibt man den folgenden Befehl ein:
powercfg -CHANGE Desktop -monitor-timeout-ac 20
Desktop steht hier für das Schema das geändert werden soll. In Windows XP muss dieser Wert angegeben werden, in Windows 7 wird das aktuelle Schema verwendet, wenn dieser Parameter fehlt. -monitor-timeout-ac definiert die Zeit nach der der Bildschirm im Netzbetrieb ausgeschaltet werden soll. Für den Akkubetrieb muss man -monitor-timeout-dc verwenden. Wenn der Bildschirm nicht ausgeschaltet werden soll, kann man 0 als wert angeben. Wenn man will, dass der Bildschirm nach 20 Minuten ausschaltet, die Festplatte und der ganze Computer im weiter läuft, kann man das folgendermassen konfigurieren:
powercfg -CHANGE Desktop -monitor-timeout-ac 20
powercfg -CHANGE Desktop -disk-timeout-ac 0
powercfg -CHANGE Desktop -standby-timeout-ac 0
powercfg -CHANGE Desktop -hibernate-timeout-ac 0

Energieoptionen über Gruppenrichtlinie verwalten

In gewissen Fällen kann es sinnvoll sein, wenn man die Energieoptionen von Windowscomputern zentral über Gruppenrichtlinien verwalten kann. Mit den Bordmitteln von Windows ist das nicht möglich, also muss man auf andere Hilfsmittel zurückgreifen.
Eine Möglichkeit ist der Import eines ADM-Templates in die Gruppenrichtlinie. Dadurch kann man die Energieoptionen dann über die Gruppenrichtlinien verwalten.

http://images.t-error.ch/news/1181/import.jpgDas ADM-template kann man bei Terra Novum herunterladen. Um das Template zu importieren öffnet man den Gruppenrichtlinieneditor, klickt mit der rechten Maustaste auf die Administrativen Vorlagen und dort auf Vorlagen hinzufügen / entfernen. Nun kann man die .adm Datei auswählen und hat die neuen Konfigurationsmöglichgkeiten schon importiert.

Jetzt hat man vier Einstellungen zur Verfügung.
  • Base Options: Die Verwaltung der Enegieoptionen (de)aktivieren
  • Options: Einige Einstellungen
  • AC Profile Scheme: Einstellungen für den Netzbetrieb
  • DC Profile Scheme: Einstellungen für den Batteriebetrieb
Bei den Base Options muss man fast nichts einstellen. Wenn man die Verwaltung der Energieoptionen verwenden will, muss die Einstellung nur Aktivieren, die restlichen Optionen sollte man so belassen wie sie sind.
http://images.t-error.ch/news/1181/base_options.jpg


Bei den Options kann man zum Bsp. konfigurieren, ob die per GPO konfigurierte Richtlinie die Benutzereinstellungen überschreiben soll.
http://images.t-error.ch/news/1181/options.jpg


Schlussendlich gibt es noch die Einstellungen AC- und DC Profile Scheme. Hier konfiguriert man, wie lange es dauert bis der Bildschirm in den Standby geht, die Festplatten ausschalten, oder der ganze Computer in den Standby geht. Die Einstellungen im AC Profile sind für den Netz- und die im DC Profile für den Batteriebetrieb.
http://images.t-error.ch/news/1181/ac.jpg

Ordner mit einem Batch-File leeren

Wer unter Windows XP und aufwärts einen Ordner leeren möchte, wird sicher auf die Befehle del und rd stolpern, dann aber merken, dass keiner der Befehle in der Lage ist einen Ordner nur zu leeren.
Während del nur Dateien und keine Unterordner löscht, löscht rd gleich den ganzen Ordner und nicht nur die Files und Unterordner. So muss man zu einem kleinen Trick und einer Kombination von del und rd greifen.
Das sieht dann so aus:
For /F "Tokens=*" %%i IN ('Dir /AD /B "C:\ordner\"') DO RD /Q /S "c:\ordner\%%~i"
Del /Q /F "c:\ordner\*.*"

Tasks mit "at" planen

Bei Windows kann man Tasks ja bekanntlich über die Geplanten Tasks verwalten. Daneben kann man die Tasks aber auch über die CMD mit dem Befehl "at" verwalten. Ein Aufruf von at /? gibt eine kleine Hilfe aus.
Der grosse Vorteil von at ist in meiner Meinung, dass man so auch Tasks auf andern Computern erstellen kann. Dazu gibt man als ersten Parameter den fremden Computer an und wenn die Berechtigungen stimmen, wird der Task erstellt.
at \\computer 23:30 /every:MO "c:\script.bat"


Wenn man nur den fremden Computer als Parameter angibt, erhält man eine Übersicht mit den Tasks, die über at erstellt wurden.
at \\computer
Status-ID   Tag           Zeit          Befehlszeile
-----------------------------------------------------
        1   Jeden Mo      23:30         c:\script.bat