Archiv der Kategorie: Active Directory

Besitzer von Ordnern per Skript ändern

Wer zum jährlichen Anlegen neuer Schüleraccounts das Porgramm EUser von Koll. Steingruber verwendet, arbeitet vermutlich mit den dadurch angelegten UserOrdnern, die üblicherweise mit dem Laufwerksbuchstaben H: beim Login gemappt werden. (bekannt als das „Homeverzeichnis“)

Probleme können nun auftreten, wenn diese Ordner verschoben werden (da der Server getauscht wird o. ä.)….

Probleme können vor allem auftreten, wenn vergessen wird, die NTFS-Berechtigungen mitzuübertragen (hier sollte xcopy QuelleZiel /O /X /E /H /K  — oder wer eine GUI möchte — Total Commander mit den entsprechenden Einstellungen verwendet werden).

Ich hatte nun bei einem Kunden den Fall, dass zwar die NTFS-Berechtigungen, jedoch NICHT der jeweilige Besitzer mitübertragen wurde. Dies wirkt sich äußerst nachteilig auf die Verwendung von Kontingenten aus.

Weiters wurden bei ihm nun unter Windows 7 die Ordnernamen nicht mehr richtig angezeigt, sondern alle Ordner erschienen als „Eigene Dateien“, wenn er als Administrator eingeloggt war (was sich dadurch erklärt, dass der Administrator gleich der Besitzer dieser Ordner ist). Dieses Verhalten der falsch angezeigten Ordnernamen tritt im übrigen nur dann auf, wenn der jeweilige Ordner die Datei desktop.ini enthält…

Ich habe nun ein Script geschrieben, dass dieses Problem  behebt.

Funktionsweise:
Es wird für jeden Ordner (und alle Unterordner) geprüft, ob es einen zugehörigen User im Active Directory gibt, bei dem der Username und der Ordnername ident sind.
Wird ein gleichlautender User gefunden, so übernimmt dieser User den Besitz des Ordners (und alle Unterordner sowie Dateien).

Benutzung:
Beim erstmaligen Ausführen der Datei aus einem beliebigen Ordner wird die Datei „Berechtigungsänderungen.txt“ angelegt, in der alle nötigen Informationen enthalten sind.

Tipp: das Skript verändert den Besitzer nur, wenn es aus einer Command-Shell wie folgt aufgerufen wird:

BerechtigungenReparieren.exe /scharf:YES /Userordner:Q:\meineHomeshares\Schueler

[wobei Q:\meineHomeshares\Schueler natürlich für den zu verändernden Ordner steht!!!]

Durch blosses Doppelklicken des Scripts wird lediglich die Ordnerstruktur + eventuellem Active Directory User in der Berechtigungsänderungen.txt angezeigt, aber NICHTS veärndert.

Voraussetzungen:
Das Script funktioniert NUR mit Windows 7 bzw. Windows Server 2008
(Sollte jemand noch Windows Server 2003 verwenden, sollte er das Tool von einem Windows 7 – Client aus starten, und als Userordner einfach den UNC-Pfad angeben [z.B: \\meinServer\home$])

Download:
BerechtigungenReparieren.exe [[downloadcounter(BerechtigungenReparieren.exe)] x heruntergeladen]

Ich übernehme KEINE HAFTUNG für irgendwelche Schäden (eh klar)… 😉
Sollte sich jemand unsicher sein mit dem Tool, kann er es einfach durch Doppelklick in einem beliebigen Ordner mit den Homeshares starten und die jeweiligen Zeilen, die in der .txt-Datei angeführt werden, in einer Commandshell ausprobieren, ob sie das tun, was er möchte.
[Alternative: aus einer Commandshell BerechtigungenReparieren.exe /scharf:NO /Userordner:Q:\meineHomeshares\Schueler
]
Wenn dann anschließend die gesamte Ordnerstruktur in der .txt kontrolliert wurde, kann das Script SCHARF gestartet werden.

Feedback – welches auch immer – ist very warm welcome…
(wobei „Edi, Du bist mein Held“ oder „Edi, Du kommst in jedem meiner Abendgebete vor“ wohlwollender entgegengenommen wird  🙄

Quelltext:

warntext = warntext & "Dieses Tool verändert den Besitzer von Ordnern und Dateien!" & vbcrlf
warntext = warntext & "Funktionsweise: Es wird für jeden Ordner und Unterordner im Active Directory ""nachgesehen"", ob es einen User" & vbcrlf
warntext = warntext & "mit dem selben Namen gibt!" & vbcrlf
warntext = warntext & "Wenn es eine Übereinstimmung gibt, so wird bei alle Dateien sowie Ordnern in diesem Verzeichnis der Besitzer geändert" & vbcrlf
warntext = warntext & "" & vbcrlf
warntext = warntext & "ACHTUNG! Es werden aktuell hier nur die Ordner aufgelistet." & vbcrlf
warntext = warntext & "Um in den Ordnern die Besitzer tatsächlich zu ändern (nachdem alles kontrolliert wurde), MUSS dieses Script " & vbcrlf
warntext = warntext & "aus einer Commandshell heraus mit wie folgt gestartet werden:" & vbcrlf & vbcrlf  & vbcrlf
warntext = warntext & "BerechtigungenReparieren.exe /scharf:YES /Userordner:H:\meineHomeverzeichnisse\Schueler" & vbcrlf & vbcrlf  & vbcrlf
warntext = warntext & "[wobei H:\meineHomeverzeichnisse\Schueler natürlich für den zu verändernden Ordner steht!!!]" & vbcrlf
warntext = warntext & "[Tipp: wenn Ordner Leerzeichen haben, dann den Ordnername zwischen zwei "" sezten]" & vbcrlf
warntext = warntext & "[Tipp2: das Tool funktioniert auch mit Freigaben, also zB \\meinServer\home$\schueler]" & vbcrlf & vbcrlf & vbcrlf
warntext = warntext & "Chefmodus: (Experts only)" & vbcrlf
warntext = warntext & "unten abgebildeten Quellcode mit dem Notepad als BerechtigungenReparieren.vbs speichern und folgendes ändern:" &vbcrlf
warntext = warntext & "in der Zeile mit dem Quelltext //   ' Modus = ""yes""  // muss lediglich das Hochkomma am Beginn gelöscht werden" & vbcrlf
warntext = warntext & "dann kann das Script auch per Doppelklick SCHARF gestartet werden!" & vbcrlf
warntext = warntext & "jetzt wird durch jeden DOPPELKLICK auf diese Datei BerechtigungenReparieren.vbs im jeweiligen Ordner und Unterordner die Berechtigungen geändert!" & vbcrlf & vbcrlf
warntext = warntext & "ACHTUNG: Es wird keine Haftung für etwaige Schäden übernommen!!! Also VORSICHT bei der Verwendung" & vbcrlf & vbcrlf
warntext = warntext & "[Feedback an Edi Pfisterer --> edi@schulnetz.info --> www.schulnetz.info]" & vbcrlf & vbCrLf  & vbcrlf & vbCrLf

Set objFSO = CreateObject("Scripting.FileSystemObject")

dateiname = "Berechtigungsänderungen.txt"

ueberordner = WScript.Arguments.Named.Item("Userordner")
         if len(ueberordner)= 0 then
                  scriptname = Wscript.ScriptFullName
                  ueberordner = objFSO.getparentfoldername(scriptname)
         end if
warntext = warntext & "Aktuelles Verzeichnis: " & ueberordner & vbcrlf & vbcrlf
Modus = WScript.Arguments.Named.Item("scharf")

' Modus = "yes"

 call InDateiSchreiben(warntext)

                        Set objShell = CreateObject("WScript.Shell")
					    objShell.Popup "Es werden nun alle eventuell zu verändernden Ordner einzeln aufpoppen! " & vbcrlf & "Lesen Sie in der Datei Benutzerberechtigungen.txt, die soeben angelegt wurde nach, wie Sie dieses Tool ""scharfstellen""!" & vbcrlf & "Um diese Tool zu stoppen, müssen Sie im Taskmanager die Datei wscript.exe beenden!", 20, "Info"
					    Set objShell = Nothing

call Ordnerliste(ueberordner)

function Ordnerliste(pfad)

        Set objFolder = objFSO.GetFolder(pfad)
        Set colSubfolders = objFolder.Subfolders

        For Each objSubfolder in colSubfolders
              on Error resume next

                 vollername = objFSO.GetAbsolutePathName(objSubfolder)

                NT_Benutzer = UserNameIsolieren(vollername)
                if Benutzerabfrage(NT_Benutzer) = 1 THEN
                   if instr(1,modus,"yes",1) = 0 Then  'es wird lediglich eine txt erzeugt, Dateien bleiben unverändert
                        call InDateiSchreiben(vollername)
                        call InDateiSchreiben("USER GIBTS")
                        befehl = "icacls " & vollername & " /setowner " & NT_Benutzer & " /t /c /l /q"
                        call InDateiSchreiben(befehl)
                        call InDateiSchreiben(vbcrlf)

                        Set objShell = CreateObject("WScript.Shell")
					    objShell.Popup vollername & " würde auf den neuen Besitzer " & NT_Benutzer & " geändert werden, wenn Sie das Tool ""scharf"" stellen würden....", 5, "Info"
					    Set objShell = Nothing
                   Else           

                      befehl = "icacls " & vollername & " /setowner " & NT_Benutzer & " /t /c /l /q "

                      Set objShell = CreateObject("WScript.Shell")
                      objShell.Run "%comspec% /c echo j|" & befehl, 0, 1
                      'WshShell.Run "cmd /q echo j|" & befehl , 0, 1

                      Call InDateiSchreiben (befehl)
                      call InDateiSchreiben(vollername & " wurde auf den neuen Besitzer " & NT_Benutzer & " geändert!" & vbcrlf)

					    Set objShell = CreateObject("WScript.Shell")
					    objShell.Popup vollername & " wurde auf den neuen Besitzer " & NT_Benutzer & " geändert!", 5, "Info"
					    Set objShell = Nothing

						objFSO.DeleteFile(vollername & "\desktop.ini")

                end If
                end if

         call Ordnerliste(vollername)
        Next

end function

function InDateiSchreiben(inhalt)
  set logbuch1 =objFSO.opentextfile(dateiname, 8, true,0)  ' 8 zum anfügen
                logbuch1.write inhalt & vbcrlf
                logbuch1.close
end function

function UserNameIsolieren(strUsername)
  letzterBackslash = instrRev(strUsername,"\")
  laenge = len(strUsername)
  eigentlicherUsername = right(strUsername, laenge-letzterBackslash)
 ' call InDateiSchreiben(eigentlicherUsername)
  UserNameIsolieren = eigentlicherUsername
end function

Function Benutzerabfrage(strUserName)
BenutzerVorhanden = 0
Set rootDSE = GetObject("LDAP://RootDSE")
DomainName = rootDSE.Get("defaultnamingcontext")
DomainString = Replace(DomainName, "DC=", "")
DomainString = Replace(DomainString, ",", ".")

    Set objDomain = GetObject("WinNT://" & DomainString)
    objDomain.Filter = Array("user")
    For Each User In objDomain
        If lcase(User.Name) = lcase(strUserName) Then
           BenutzerVorhanden = 1
        End If
    Next
        if BenutzerVorhanden THEN Benutzerabfrage = 1
End Function

msgBox "Ich bin fertig!"



praktische Software: „ADMINOMAT“, um Remote ganze Schulungsräume aufzusetzen

Adminomat_2.0


Ziel der Software „Adminomat“:

Main Feature:
Ganze Schulungsräume remote über WDS aufzusetzen, in dem alle gewünschten Clients remote per WOL gestartet werden.

Dies ist möglich durch die Kombination von Windows Active Directory (AD), Wake on Lan (WOL) und Windows Deployment Service (WDS) in einem einzigen Tool!

Dadurch können Rollouts von Images für ganze Organisationseinheiten eines Active Directory erfolgen, ohne dass der Administrator physikalisch zum Client gehen muss!

Zusatzfeatures:
ganze Organisationseinheiten (zb. Schulungsräume, Abteilungen, etc) können remote gestartet werden, neu gebootet werden, oder heruntergefahren werden.
Weiters kann eine Auswahl getroffen werden, nach folgenden Kriterien:

  • angemeldete User
  • OU des angemeldeten Users
  • x86/x64
  • Datum der letzten Installation
  • Gerätehersteller bzw. -typ
  • RAM
  • etc etc

Voraussetzungen (für die volle Funktionalität):

Server:
Betriebssystem: ab Windows Server 2003 R2 / 2008 / 2008 R2
WDS sollte installiert sein (optional, damit der WDS bedient werden kann)
Verwendung von Microsoft – DHCP – Server ist vorteilhaft

Clients:
Im BIOS muss Wake On Lan einmalig aktiviert werden (inkl. bei Remotesitzung von Remoteserver booten);
Unter Windows muss in der Energieverwaltung der Netzwerkkarte folgendes aktiviert werden:
„Gerät kann Computer aus dem Ruhezustand aktivieren“

Download / Installation:

Das Tool wird NICHT installiert, sondern wird lediglich von einem beliebigen Ordner (auch USB-Stick o. ä.) am Server gestartet.
Am System wird NICHTS verändert!!!
Das Tool läuft auf jedem Windows Client ab XP!!!
Um den WDS zu bedienen und so ein Zero-Touch-Rollout zu starten, muss das Tool allerdings auf einem WDS-Server gestartet werden

Download unter:

www.adminomat.at

Handhabung und Funktion:
WICHTIG: das Tool sollte mit erhöhten Rechten ausgeführt werden –>
Rechte Maustaste auf das Tool –> „als Administrator ausführen“

Bedienung:

Clients remote per WDS neu aufsetzen:

a) kontrolliere deine „UnattendedPE.xml“ auf das gewünschte INSTALLATIONSabbild im Abschnitt

<InstallImage>
<ImageName>schulungsraum</ImageName>
<ImageGroup>windows7</ImageGroup>
<Filename>schulungsraum.wim</Filename>
</InstallImage>

btw: meine 100%ig funktionierende .xml gibt’s hier zum DOWNLOAD

b) Wichtig: Du solltest nur 1 STARTabbild aktiviert haben!!!

c) wenn ADMINOMAT am WDS-Server gestartet wird, gibt es den Menüpunkt „WDS“ –>  „ohne F12“
-> dadurch muss auf den Clients nicht mehr die Taste F12 gedrückt werden!!!
(es erscheint ein roter Hinweis, dass derzeit alle startenden Clients neu aufgesetzt werden…)

d) STARTE nun die gewünschten Clients oder die gesamte OU durch drücken des Buttons

e) WARTE ein paar Minuten (bis auf allen Clients PE gebootet hat)

f) drücke anschließend wieder den Button „mit F12“
(ansonsten wiederholt sich der Vorgang beim 1. Reboot und der Client wird zum 2. mal neu aufgesetzt…)

 

technischer Hintergrund
Wake on LAN wurde über das Tool wake.exe von Matthias Zirngibl (http://masterbootrecord.de/docs/wakeup.php) realisiert.)

 

in diesem Sinne

Have fun!

Drucken im AD – Erweiterung für Vista und Windows7

Gegen jede Vernunft: Domänenbenutzer dürfen  seit Windows Vista nicht mehr Drucker installieren
(was unter XP problemlos möglich war…)

Aber: es gibt eine Lösung…

Step-by-Step-Anleitung: Drucker im Active Directory per Script verteilen – für Parallelbetrieb Windows XP, Windows Vista bzw. Windows 7 Weiterlesen

Schriftliche Prüfungen am PC sicher und „schwindelfrei“

Das Problem:
Es sollen vermehrt Prüfungen am PC abgewickelt werden. Schummeln könnte eingeschränkt werden, wenn folgende Rahmenbedingungen erfüllt wären:

a) kein Datenaustausch übers Internet
b) nicht auf die eigenen Daten zugreifen
c) keine Daten per USB-Stick mitbringen
d) Daten nicht schon vor der Prüfung irgendwo am PC deponieren
e) nicht auf Netzwerkfreigaben (z.B auf Laptops eingerichtet) zugreifen können
f) während der Prüfung soll sich der Schüler nur mit der Prüfungskennung einloggen können

Ein Lösungsansatz: Weiterlesen

Installation der neuen PCs übernehmen bei mir die SchülerInnen selbständig ;-)

Step-by-Step-Anleitung: WDS UND RIS im Parallelbetrieb

Es ist möglich, RIS (bzw. WDS im Legacy-Mode) und Windows Deployment Service parallel auf 2 Domänencontrollern zu betreiben!
[Btw: eine detailreiche Anleitung zur Installation von WDS gibts hier]

Gründe für den Prallelbetrieb:

  • Während der Einführung (Testphase) von WDS sollte die OS-Verteilung über RIS weiterhin funktionieren!
  • Windows Deployment Service bietet mit Boardmitteln keine Möglichkeit, dem Client einen Namen zu vergeben. EDIT: Die Clients könnten im Parallelbetrieb unter RIS ins AD eingetragen und benannt werden. Möglich wäre aber auch die Benennung per WDS:
    Wenn man in der Unatted.xml folgenden Eintrag weglässt, dann können die Clients während des Rollouts benannt werden: <ComputerName>%machinename%</ComputerName>
    Weiterlesen

XML-Datei für WDS – Windows 7

UnattendPE.xml und Image Unattend.xml für Windows Deployment Server und Windows 7  . Funktionieren GARANTIERT 😉

Prämissen:
Active Directory vorhanden; Lizensierung über KMS;
Clients werden mit der Kennung „domain.local\administrator“ zur Domäne hinzugefügt

(Was man aber besser aus Sicherheitsüberlegungen dahin gehend verbessern sollte, dass es einen User gibt, der zwar Clients der Domäne hinzufügen darf, aber NICHT in der Sicherheitsgruppe der Domänenadministratoren Mitglied ist…
Vielleicht dazu ein anderes Mal mehr…) Weiterlesen