Weisheiten - der Netz-Weise Blog
Eine ganze Reihe von Powershell-Commandlets haben einen Parameter -Credential, der es erlaubt, ein Commandlet über das Netzwerk unter anderen Benutzerrechten zu starten. Das Commandlet Get-Credential liefert das hierzu notwendige Powershell Credential Objekt, das den Benutzernamen und das Kennwort für die Anmeldung enthält. Will man die Benutzerinformationen aber nicht interaktiv abfragen, sondern Scripten, hilft das interaktive Get-Credential nicht weiter. Stattdessen kann man aber die Benutzerinformationen in eine Datei speichern. Will man die Benutzerinformationen einfach in der gleichen Benutzersitzung weiterverwenden, kann man die Benutzerinformationen einfach an Export-CliXML weiterleiten:
$user = Get-Credential
$user | Export-CliXML C:\temp\user.xml
Dieser Befehlt ruft Benutzerinformationen ab und leitet diese direkt in die XML-Datei user.xml um. Die Daten werden allerdings vom System verschlüsselt und sind nur unter dem Benutzer wiederverwendbar, der die Datei angelegt hat. Das ist in den seltensten Fällen hilfreich. Um das Kennwort sicher und aus anderen Sitzungen verwenden zu können, helfen die Commandlets ConvertFrom-SecureString und ConvertTo-Securestring weiter. Mit Ihnen kann das vom System mit den Benutzerinformationen verschlüsselte Kennwort in ein mit AES verschlüsselten String umgewandelt bzw. wieder in einen Secure-String zurückgewandelt werden. Um das Kennwort eines Benutzers zu verschlüsseln und in einer Datei zu speichern:
$user = get-Credential
$user.password | ConvertFrom-Securestring -Key (1..16) | out-file .\Password.txt
Um die Daten zu reimportieren:
$user = "nw\Holger"
$pw = get-content .\Password.txt | ConvertTo-Securestring -key (1..16)
$Cred = New-Object System.Management.Automation.PSCredential $user, $Password
ConvertFrom-Securestring nimmt das vom System gesicherte Kennwort, entschlüsselt und sichert es erneut mit AES. -Key übergibt den symmetrischen Schlüssel, mit dem das Kennwort gesichert wird. Der Schlüssel muß 128, 192 oder 256 Bit lang sein, daher muß das Kennwort aus 8, 12 oder 16 Zeichen bestehen. Die Zeichen werden in Form eines Byte-Arrays übergeben. Das sehr einfache Beispiel gilt nur Demo-Zwecken und sollte in der Praxis nicht nachgeahmt werden, denn (1..16) erzeugt ein Array von Zahlen von 1 bis 16. ConvertFrom-Securestring wandelt das Kennwort wieder zurück in einen Secure Key. Mit New-Object wird ein neues Benutzerobjekt erzeugt und ein Benutzername und das Kennwort als Secure String übergeben. Damit können die Credentials jetzt auch unter einem anderen Benutzerkonto verwendet werden.
Wenn Sie ein Powershell-Script in eine sich selbst ausführende Datei umwandeln wollen (.exe), gibt es dafür eine Reihe von Möglichkeiten. Eine davon ist das Tool PS2EXE auf Codeplex, eine andere Variante ist ein Script von Keith Hill, dass allerdings die Powershell Community-Extensions voraussetzt.
Mit dem SQL-Server Agent und der Datenbankrolle ""SQLAgentUserRole"" in der msdb-Datenbank kann man einem SQL-Login Zugriff auf einen Job geben. Voraussetzung ist, dass der Login dem JOB auch als Owner zugewiesen wird. Soll der User allerdings auch die Zeitpläne für geplante Aufträge verwalten, stellt man fest, dass dies nicht unbedingt klappt. Ursache dafür ist die schlecht Dokumentierte Tatsache, dass der Login auch Besitzer der Zeitpläne sein muß. Hat er diese nicht angelegt, kann er dementsprechend keine Änderungen durchführen. Stattdessen bekommt er eine Meldung ""The specified schedule @schedule_id(
SELECT (SELECT name FROM sys.server_principals WHERE [SID] = ss.owner_sid) AS ScheduleOwner,
(SELECT name FROM sys.server_principals WHERE [SID] = sj.owner_sid) AS JobOwner,
ss.name AS ScheduleName,
ss.owner_sid AS ScheduleOwnerSid,
sj.name AS JobName,
sj.owner_sid AS JobOwnerSID
FROM msdb.dbo.sysschedules AS ss
INNER JOIN msdb.dbo.sysjobschedules AS sjs
ON sjs.schedule_id = ss.schedule_id
INNER JOIN msdb.dbo.sysjobs AS sj
ON sjs.job_id = sj.job_id
WHERE ss.owner_sid <> sj.owner_sid
Und mit folgendem Script beheben Sie das Problem, indem Sie den Besitzer aller zeitpläne auf den gleichen Besitzer setzen wie den zugehörigen Job. Um nicht alle Jobs ungesehen zu überschreiben, geben Sie in der 1. Zeile einen Login-Namen ein:
DECLARE @JobOwner NVARCHAR(255) = 'Benutzer'
DECLARE @JobOwnerSid VARBINARY(85)
SELECT @JobOwnerSid = [sid] FROM master.sys.server_principals WHERE name = @JobOwner
UPDATE SS
SET ss.owner_sid = sj.owner_sid
FROM msdb.dbo.sysschedules AS ss
INNER JOIN msdb.dbo.sysjobschedules AS sjs
ON sjs.schedule_id = ss.schedule_id
INNER JOIN msdb.dbo.sysjobs AS sj
ON sjs.job_id = sj.job_id
WHERE (ss.owner_sid <> sj.owner_sid)
AND (sj.owner_sid = @JobOwnerSid)
Windows 10 - bei mir hat sich diese Beziehung zu einer Haßliebe entwickelt. Ich bin wirklich inzwischen am Überlegen, ob ich nicht doch lieber einmal Linux probieren sollte. Auch nach einem Jahr habe ich nicht das Gefühl, dass Windows 10 aus der Beta-Phase raus ist, und das, obwohl ich inzwischen (aus genau diesen Gründen) nicht mehr an der Insider-Preview teilnehme.
Beispiel gefällig? Ich habe Stunden damit zugebracht herauszufinden, warum meine CPU-Last ständig oberhalb von 50% liegt. Ich habe jetzt die Ursache gefunden - sie tut es gar nicht. Der Taskmanager zeigt einfach nur völlig falsche Werte an. Auf die Idee bin ich gekommen, nachdem ich einen Artikel gefunden habe, der beschrieb, dass es im Taskmanager den Idle-Task nicht mehr gibt, und dass daher der Task-Manager Prozess manchmal sehr hohe Lastwerte anzeigt. Daraufhin habe ich den Sysinternals Process Monitor angeworfen und - während der Taskmanager konstant fast 50% Last anzeigte, dümpelte der Procmon bei 4% Last herum.
Die beste Lösung für das Problem - Den Taskmanager gleich durch Procmon ersetzen. Dafür bring Procmon sogar eine eigene Funktionalität mit. Klicken Sie im Menü unter Options einfach auf "Replace Task Manager", und Procmon erledigt den Rest für Sie. Wählen Sie die Option erneut, stellt Procmon den Taskmanager wieder her. Und da es sich auch bei Procmon um ein Microsoft-Tool handelt, muß man sich auch keine weiteren Gedanken machen. Das besser Werkzeug ist der Procmon eh.
Weiterführende Links:
Um mit Powershell Programme zu deinstallieren, muß man mit Powershell entweder tief in die Trickkiste greifen (genau genommen in die WMI-Kiste), oder aber Powershell 5.0 installieren. Wenn Sie WMI verwenden wollen oder müssen, greifen Sie auf die Klasse Win32_Product zurück. Der Zugriff auf WMI gestaltet sich dank Powershell dabei sehr einfach:
Get-WMIObject -Class Win32_Product -Filter "name like '%Office%'"
Die obige Zeile ruft die installierten Programme ab. Zum Deinstallieren können Sie die Methode Uninstall() verwenden. Das sieht dann so aus:
$VS = Get-WMIObject -Class Win32_Product -Filter "name = 'Microsoft Visual Studio Professional 2015'"
$VS.Uninstall()
Unglücklicherweise gibt die Klasse Win32_Product nicht alle installierten Programme zurück und ist auch nicht besonders schnell. Mit dem Powershell-Packagemanager (ab Powershell 5.0 Bestandteil von Powershell) geht es jetzt aber deutlich einfacher.
Benutzereinstellungen in Office 365 kann über die Weboberfläche mühsam sein, da das Webinterface nicht unbedingt schnell ist. Außerdem möchte man eine große Anzahl von Änderungen auch ungerne per Hand eintickern. Aber zum Glück kann man in Office 365 ja alles über Powershell steuern. ;-) Im folgenden Beispiel zeige ich, wie man Adressbuch-Informationen in Exchange Online setzt, aber die meisten anderen Einstellungen lassen sich genauso leicht konfigurieren.
Zuerst muß man den Microsft Online Services Anmelde-Assistenten für IT-Experten RTW (sprechen Sie das 10 mal hintereinander schnell aus) und das Azure Active Directory-Modul für Windows Powershell installieren. Anschliessend können Sie eine Powershell-Konsole öffnen und sich mit Office 365 verbinden:
# die Office 365 Anmeldedaten abfragen und speichern
$UserCredential = Get-Credential
# Mit den Anmeldedaten eine Verbindung mit Microsoft Online (MSol) herstellen
Connect-MsolService -Credential $UserCredential
# Jetzt eine Remote-Sitzung zu einem Server herstellen
$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $UserCredential -Authentication "Basic" -AllowRedirection
# Die Powershell-Befehle der Remote-Sitzung können auf den lokalen Rechner importiert werden
Import-PSSession -Session $ExchangeSession
# Alle User anzeigen
Get-User
# Und die Telefonnummer eines Users verändern
Get-User -Identity holger.voges | Set-User -Phone
Um eine Gruppe von Benutzern aus einer CSV-Datei heraus zu ändern, ist direktes Pipen der Daten aus dem csv-Datei, wie es mit den AD-Cmdlets seit Windows Server 2012 geht, leider nicht möglich. Hier behelfen wir uns mit einem kleinen Workaround. Gehen wir davon aus, dass wir eine csv-Datei mit Benutzerdaten haben, deren Inhalt ungefährt so aussieht:
"Name","Company","Phone"
"dummy.user","Netz-Weise","0511-16592599"
"holger.voges","Netz-Weise","0511-1659250"
"julia.voges","Netz-Weise","0511-16592512"
SQL-Server lassen sich mit Hilfe der SMO-Erweiterungen (Server Management Objects) des SQL-Servers per Powershell wunderbar verwalten. Einen ganzen Satz von Beispielen finden Sie z.B. auf unserer Website unter Dokus. Für den Einsatz von SMO muß SMO allerdings erst einmal installiert werden. Dies geschieht entweder bei der SQL-Server Installation, indem Sie unter der Feature-Auswahl "Client Tools SDK" auswählen, oder indem Sie von der Microsoft-Website aus dem Feature-Pack Download "SharedManagementObjects.msi" und "SQLSysCLRTypes.msi" herunterladen und installieren. Oder Sie bauen sich alternativ ein Powershell-Modul, dass die notwendigen dll´s enthält und von selbst nachlädt. Alles, was Sie hierzu benötigen, sind die beiden Downloads aus dem Feature Pack, und eine Powershell Modul-Datei. Hierfür bietet sich passenderweise eine Manifest-Datei (.psd1) an.
Aber fangen wir von vorne an. SMO ist ein Feature, dass Microsoft eingeführt hat, um die Verwaltung von SQL-Servern aus dem .NET-Framework zu erleichtern. Anstatt über SQL-Befehle kann man per SMO programmatisch über Objekte auf den SQL-Server zugreifen. Und da man mit Powershell auf alles zugreifen kann, was das .Net-Framework zur Verfügung stellt, kann man natürlich auch SMO nutzen. Tatsächlich tun Sie das sogar bereits, wenn Sie mit der SQL-Server Konsole für Powershell (SQLPS) arbeiten, denn das besondere an dieser Konsole ist vor allem, dass beim Starten von SQLPS automatisch die SMO-Assemblies geladen werden.
Unschön an SMO ist, dass auf jedem Rechner, auf dem Sie Ihre SQL-Server Powershell-Scripte laufen lassen möchten, SMO installiert sein muß. Allerdings läßt sich dieses Problem mit einem kleinen Trick umgehen, denn tatsächlich muß die SMO-Funktionalität gar nicht installiert werden - Sie benötigen nur die dll-Dateien, die die SMO-Funktionalität zur Verfügung stellen. Und die erhalten Sie, wenn Sie die beiden oben angegebenen msi-Pakete auf einem beliebigen Rechner installieren. Die SMO-Assemblies finden Sie nach der Installation standardmässig im Ordner %ProgramFiles% unter "Microsoft SQL Server\<Version>\SDK\Assemblies", wobei Version der internen Versionsnummer des SQL-Servers entspricht. Bei einer Standardinstallation von SMO für SQL Server 2014 wäre das also Beispielsweise:
C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\
Kopieren Sie den Ordner Assemblies. Weiterhin benötigen Sie die "Microsoft.SqlServer.SqlClrProvider.dll", an die allerdings nicht so einfach heran zu kommen ist. Sie ist im Global Assembly Cache installiert und wird standardmässig aus der Explorer-Ansicht gefiltert. Sie müssen den Filter deaktivieren. Starten Sie hierfür den Registieriungseditor und setzen Sie die folgenden Wert:
Neulich in Azure - Sie wollen einen Strorage-Account löschen, aber er will einfach nicht verschwinden, obwohl die GUI meldet, der Job sei erfolgreich abgeschlossen? Nach einer genauen Untersuchung stellen sie fest, dass das System folgende Fehlermeldung schmeißt: Error: There is currently a lease on the blob and no lease ID was specified in the request.
Das Problem besteht darin, dass sich in dem Storage-Account noch vhd-Dateien befinden, deren VMs inzwischen gelöscht sind, was an Azure aber irgendwie vorbei gegangen ist. In meinem Fall war die Ursache vermutlich, dass ich die Objekte einzeln über Powershell gelöscht habe statt über die Web-GUI. Jedenfalls hat Azure noch eine Verbindung zwischen der VM, die nicht mehr existiert, und der vhd gespeichert und sperrt deswegen die Löschung der Daten. Lösen lässt sich das Problem auch nicht mit den Azure Powershell Cmdlets und dem Parameter Force. Stattdessen hilft AzureCLI weiter, ein Kommandozeilentool zur Verwaltung von Azure. Eine Anleitung zur Installation finden Sie bei Microsoft.
Nachdem Sie AzureCLI installiert haben, starten Sie ein Konsole, Powershell oder cmd. Das Tool zur Verwaltung lautet einfach azure:
azure login
azure account set "Ihr Subscription-Name"
azure config mode arm
azure storage account list
azure storage account delete <Ihr Storage Account Name>
Azure config mode arm ist nur notwendig, wenn Ihr Account im Azure Resource Manager mode angelegt wurde. Ein sicheres Zeichen dafür, dass das nicht der Fall war ist, wenn Sie den account noch im alten Portal angelegt haben. Probieren Sie es einfach aus, wird Ihr Account ohne den Moduswechsel nicht angezeigt, geben Sie einfach azure config mode arm ein. Mit dem delete wird der Account sofort und ohne Meldung entfernt. Wie Mr. Spock sagen würde - faszinierend!
Ein häufig auftretendes Problem ist das umschliessen von Texten z.B. mit Anführungszeichen. Für Transact-SQL gibt es dafür sogar eine eigenen Funktion, Quotename, die das übernimmt. In Powershell fehlt diese Funktion zwar, sie lässt sich aber durch den Format-Operator -f sehr einfach nachrüsten. Der Format-Operator kann in einen String beliebige Texte einfügen. Im Text werden dafür Platzhalter definiert. Ein Platzhalter ist ein Zahl, die in geschweifte Klammern eingeschlossen ist, z.B. {0}. Hinter dem Text folgt der Format-Operator -f, wiederum gefolgt von den Werten, die in die Platzhalter eingefügt werden sollen:
'Dies ist ein {0} Text mit {2} Platzhaltern, der als {1} dient' -f "sinnloser","Beispiel","drei"
Das Prinzip ist sehr einfach. Hinter dem -f folgen 3 Strings, die durch Kommas getrennt sind. Die Strings werden von 0 ab durchgezählt und in die entsprechenden Platzhalter eingefügt. Das Ergebnis lautet also:
Dies ist ein sinnloser Text mit drei Platzhaltnern, der als Beispiel dient.
Das kann man sich zunutze machen, um Texte einfach mit beliebigen Zeichen zu umschliessen:
Als IT-Trainer werde ich oft nach Tastaturtipps gefragt. Wer da wirklich möglichst flächendeckend versorgt werden möchte, sollte - Achtung, nicht lachen - mal den Begriff Tastenkombinationen in der Excel-Hilfe eingeben.
Trotzdem schreibe ich hier mal einige meiner Favoriten auf:
Strg + A --> Tabelle oder Arbeitsblatt markieren
Strg + POS1 --> Nach oben links springen (meistens A1)
Strg + Ende --> letzte benutzte Zelle im Bereich aufrufen
Strg + Enter --> Alle markierten Zellen mit dem getippten Inhalt füllen
Strg + . --> Aktuelles Datum einfügen (statisch)
Strg + : --> Aktuelle Uhrzeit einfügen (statisch)
Strg + + --> Zellen einfügen
Strg + - --> Zellen löschen
Strg + G --> Gehe zu (--> Inhalte!)
Strg + ALT + V --> Inhalte einfügen
ALT + Enter --> Zeilenumbruch in Zelle
Viel Spaß! Dirk Röllecke
Was man mit dem Kameratool in Excel erreichen kann (alle Excel-Versionen, Beschreibung gilt ab Excel 2007)
Ich bin neulich mal wieder über einen eigentlich alten Excel-Befehl gestolpert, der aber eventuell auch in Zeiten von Menübändern und Screenshots durchaus sinnvoll sein kann. Zunächst muss man dazu (mit Rechtsklick) seine Symbolleiste für den Schnellzugriff anpassen. Im Optionen-Fenster bei "Befehle auswählen" "alle Befehle" anklicken und die Kamera suchen. Per Doppelklick in die Symbolleiste für den Schnellzugriff hinzufügen und mit OK bestätigen.
Mit diesem Befehl kann man nun markierte Excel-Zellen fotografieren. Klickt man dann an eine andere Stelle in der Datei (oder auch in eine andere Excel-Datei), wir ein verknüpftes Bild der markierten Zellen eingefügt.
Das ist nicht dasselbe wie verknüpfte Zellinhalte (weil es ja ein Bild ist) und auch kein Screenshot oder ein Bild wie man es beim Kopieren mit "Als Bild kopieren" vorfindet, denn letztere sind statisch, weil nicht verknüpft.
Tut sich nur noch die Frage auf: Was könnte es zu dieser Lösung für ein Problem geben? Naja, ich stelle mir z.B. eine Diagrammsammlung vor, die man aus verschiedenen Dateien zusammengestellt hat. Da könnte man sich z.B. mit der Kamera ein Bild der Originaldaten dazulegen, damit man eine Kontrolle hat, ohne in die Originaldatei wechseln zu müssen. Vielleicht hat für Sie aber auch ein verknüpftes Bild von Excel-Daten einen in ihm wohnenden Charme…
Powershell-Module machen das Nachrüsten von Cmdlets einfach, aber was tun, wenn zwei Cmdlets mit unterschiedlicher Funktion den gleichen Namen haben?
Beim Erstellen von Cmdlets hat Microsoft eine Reihe von Vorgaben definiert, um das Cmdlet zu bennen. So sollen alle Cmdlets mit einem Verb aus einer vordefinierte Liste (Get-Verb listet die erlaubten Verben auf) erstellt werden. Außerdem soll das Cmdlet aus dem Namen erkennen lassen, was es tut. Das kann aber zu einem Problem führen: Wenn man Cmdlets unterschiedlicher Quellen verwendet, können prinzipiell Cmdlets mit gleichem Namen aber unterschiedlicher Funktion auftreten. Im .Net Framework löst man dieses Problem über Namensräume, aber die gibt es bei Powershell nicht.
Die zwei elegantesten Lösungen sind, entweder beim Aufrufen des Cmdlets den Modulnamen vor dem Cmdlet zu setzen:
Hyper-V\get-vm
oder beim Import des Moduls ein Prefix für die Cmdlets zu definieren. Hierbei muß der Import aber vor dem ersten Anwenden eines Cmdlets aus dem Modul erfolgen, weil die Cmdlets sonst doppelt importiert werden:
Import-Module -Name Hyper-V -Prefix HV
Der für IT- und andere Trainingsunterlagen renommierte Herdt-Verlag hat auf seinen Web-Seiten für Word und Excel jeweils 30 Fragen umfassende Wissenstests veröffentlicht, die man bei Bedarf auch downloaden kann.
Falls Sie an so etwas Spaß und ein wenig Zeit haben, probieren Sie sich gerne einmal an den Tests, aber Vorsicht: ganz einfach sind die nicht...
Hier gelangen Sie zur WebSeite: http://www.herdt.de/office-quiz
Viel Spaß!
Dirk Röllecke
Wenn Sie den AD-Papierkorb aktiviert haben, dann können Sie gelöschte Objekte im AD mit allen Eigenschaften und Gruppenmitgliedschaften 180 Tage lang wiederherstellen. Der AD-Papierkorb ist seit Windows Server 2008 R2 verfügbar. Um ihn nutzen zu können, müssen alle Domänencontroller mindestens mit Windows Server 2008 R2 laufen und sowohl der Domänen- als auch der Forest-Funktionalitätsmodus müssen ebenfalls mindestens auf Windows Server 2008R2 heraufgestuft sein.Sind die Voraussetzungen erfüllt, wählen Sie im Administrative Center Ihre Domäne aus und klicken Sie im rechten Menü auf „Enable Recycle Bin…“. Aktualisieren Sie danach das Administrative Center und Sie sehen einen neuen Ordner „Deleted Objects“ in Ihrem Domänen-Stamm. Das Powershell-Kommando, um den Papierkorb zu aktivieren, lautet:
Enable-ADOptionalFeature -Confirm:$false -Identity:"766ddcd8-acd0-445e-f3b9-a7f9b6744f2a" -Scope:"ForestOrConfigurationSet" -Target:"netz-weise.lokal"
Um zu überprüfen, ob der Papierkorb bei Ihnen bereits aktiviert ist, können Sie ebenfalls ein Powershell-Kommando nutzen:
Get-ADOptionalFeature -Identity "Recycle Bin Feature"
Normalerweise zeigt Ihnen Get-ADUser oder Get-ADObject gelöschte Objekte nicht mehr an. Im AD-Administrative Center nutzen Sie zur Anzeige gelöschter Objekte den Ordner Deleted Objects. Alle Powershell-Cmdlets bieten Ihnen aber den Parameter IncludeDeletedObjects. Um sich nur gelöschte Objekte anzeigen zu lassen, filtern Sie einfach nach der Eigenschaft "Isdeleted":
Get-ADObject -Filter (isdeleted -eq $true) -IncludeDeletedObjects
Um gelöschte Objekte wiederherzustellen, nutzen Sie Restore-ADObject:
Get-ADObject -Filter (isdeleted -eq $true) -IncludeDeletedObjects | Restore-ADObject
Die Group Policy Preferences oder Einstellungen, wie es schlecht übersetzt im deutschen heißt, sind ein sehr mächtiges Feature, das ab Windows Vista standardmässig mitgeliefert wurde, um eine Alternative zu Login-Scripten zu lieferen. Die Einstellungen bieten sehr viele Möglichkeiten, wie z.B. das Targetting, um festzulegen, welcher Benutzer von einer Richtlinie betroffen sein soll. Wenn es allerdings zu unerwartetem Verhalten kommt, ist guter Rat erst mal teuer, denn die Voreinstellungen haben viele mögliche Fehlerquellen. Zum Glück kann man das Logging aktivieren.
Das Logging teilt sich in ein Event-Log basiertes Logging und ein erweitertes, Textdateibasiertes Tracing auf und wird für jede Komponente (Client Side Extension, CSE) einzeln aktiviert. Dies geschieht - natürlich - in einer Gruppenrichtlinie. Die Einstellungen finden Sie unter Computereinstellungen > Administrative Vorlagen > System > Group Policy > Logging and tracing. Hier haben Sie für jede CSE die Möglichkeit, die Konfiguration des Event-Loggins zu ändern - standardmässig werden Fehler und Warnings im Eventlog protokolliert - oder das Dateibasierte Tracing zu aktivieren.
Unter Event-Logging legen Sie fest, welche Informationen im Event-Log gespeichert werden sollen. Die von den Preferences erzeugen Logs werden im Anwendung-Log gespeichert! Mehr Informationen zu den Log-Einträgen für Preferences finden Sie in der Knowledge-Base.
Um ein erweitertes Log-File zu erzeugen, müssen Sie das Tracing aktivieren. Die Systemvariable %COMMONAPPDATA% ist eine Variable, die von den Preferences gesetzt wird (keine echte Umgebungsvariable) und verweist auf den Ordner ProgamData. Achten Sie darauf, dass dieser Ordner erst mit Vista angelegt wurde! Im Beispiel habe ich das Logging für das User-Laufwerksmapping aktiviert und anschließend ein Laufwerksmapping über die Group Policy Preferences aktiviert. Das erzeugte Trace-File finden Sie unten zum Download.
Wenn Sie die Proxyeinstellungen in den Interneteinstellungen setzen, werden Sie nur vom IE ausgewertet. Aber mit netsh können Sie den Proxy auch global setzen.
Wenn Sie mit den Interneteinstellungen den Proxy-Server setzen, werden diese Einstellungen nur vom IE übernommen. Alle anderen Netzwerkeinstellungen ignorieren nach wie vor die Proxy-Konfiguration. Einzige Ausnahme sind die Tools, die direkt auf die IE-Konfiguration zugreifen. Um den Proxy global zu setzen, müssen Sie auf das Kommandozeilentool netsh zurückgreifen. Zum systemweiten setzen des Proxys geben Sie in der Kommandozeile in Powershell ein
netsh winhttp set proxy <Proxyserver:Port>
Wenn sie die vorhandenen Interneteinstellungen als globale Einstellungen verwenden wollen, geben sie ein
netsh winhttp import proxy source=ie
Eine Ausnahmeliste geben Sie über byPassList mit:
netsh winhttp set proxy <Proxyserver:Port> bypass-list="*.Netz-Weise.intern"
So konfigurieren Sie die AD-Replikation zwischen Standorten.
Wenn Sie eine größere Active-Directory Infrastruktur verwalten, verfügen Sie vermutlich auch über mehrere Standort. Diese Infrastruktur kann man zur effizienteren Nutzung der Netzwerkresourcen mit dem Tool Active Directory Sites and Services (Standort und Dienste) abbilden. Hierfür erstellt man IP-Subnetze, die Standorten zugewiesen werden - dadurch kann das AD anhand der IP den Standort des Servers feststellen. Die Standort werden über sogenannte Site-Links verbunden. Sie entsprechen den Netzwerkverbindungen (Standleitungen) zwischen den Standorten.
Während ein Domänencontroller innerhalb eines Standortes jede Änderung im AD innerhalb von 15 Sekunden an seine Replikationspartner versendet, wird zwischen Standorten ein anderes Replikationsintervall gewählt, das einstellbar ist, aber standardmäßig 180 Minuten (3 Stunden) beträgt. Änderungen werden nur in diesem Zeitrahmen repliziert - auch Kontosperrungen, die innerhalb eines Standortes als "urgent replication" augenblicklich repliziert werden.
Es ist mit einer kleinen Änderungen an den AD-Attributen des Site-Links jedoch möglich, Change-Notifications (also Update-Änderungen) zu aktivieren, so dass die Replikation im normalen Replikationsintervall durchgeführt wird. Davon sind dann entsprechend auch urgent Replications betroffen. Öffnen Sie hierzu Active Directory Standort und Dienst, wählen Sie Sites->Inter-Site-Transports-IP und dann den Site-Link, den Sie konfigurieren möchten. Im Kontext-Menü wählen Sie Properties, wechseln in den Reiter "Attribute Editor" und suchen das Attribut "Options". Wenn Sie Options auf 1 setzten, aktivieren Sie die Change-Notifications. Die Replikation findet dann, wie zwischen Standorten üblich, komprimiert statt. Wählen Sie 5, findet eine unkomprimierte Replikation statt. Sollte hier bereits ein Wert stehen, müssen Sie die Werte XOR verrechnen - es handelt sich um eine Bitmaske, die hier verwendet wird.
Links:
Active Directory Replication: Change Notification and you
https://blogs.msdn.microsoft.com/canberrapfe/2012/03/25/active-directory-replication-change-notification-you/
Advanced Replication Management
https://technet.microsoft.com/en-us/library/cc961787.aspx
In Windows Server 2008 R2 exportierte virtuelle Maschinen lassen sich in Windows Server 2012 R2 nicht mehr importieren... Aber mit einem größeren Trick schon Wenn Sie virtuelle Maschinen von Windows 2008 R2 in Windows Server 2012 R2 exportieren wollen, lassen Sie es am Besten bleiben. Windows Server 2012 R2 kann das nämlich schlicht und ergreifend nicht. Schuld daran ist eine Änderung der WMI-Klassen. Am einfachsten ist es, die VMs einfach direkt ohne Export zu kopieren, denn Windows Server 2012 R2 kann virtuelle Maschinen ohne Probleme importieren, wenn sie nicht vorher exportiert worden sind. Ist der Geist aber erst mal aus der Flasche, haben Sie also schon einen Satz Maschinen exportiert und keinen Zugriff mehr auf den alten Server - wenn Sie z.B. virtuelle Maschinen aus fremder Quelle bekommen - hilft ein Windows Server 2012 mit Hyper-V aus. Der ist noch in der Lage, das alte Format korrekt zu importieren. Von hier aus können Sie die virtuellen Maschinen dann wieder exportieren oder einfach direkt kopieren. Dumm nur, wenn Sie gar keinen Windows Server 2012 mehr haben. Der geniale Trick, den ich gefunden habe, um die Maschinen so schnell und mit so wenig Aufwand wie möglich zu transferieren, geht über einen virtuellen Windows Server 2012. Hmmm, werden Sie jetzt sagen, aber der Import einer virtuellen Maschine geht doch nur auf einem Hyper-V Server, und der ist in einer virtuellen Maschine nicht lauffähig... Korrekt, aber mit einem kleinen Trick kann man Hyper-V auf einer virtuellen Maschine installieren, und zum Importieren muß die virtuelle Maschine nicht gestartet werden. Und das geht so: Installieren Sie einen virtuellen Windows Server 2012, am Besten mit - - convert-windowsimage>convert-windowsimage.ps1 aus der Technet-Gallery. Dafür benötigen Sie nur ein Windows Server 2012-Iso-File. Das dauert ca. 5 Minuten. In der Zwischenzeit können Sie schon einmal eine virtuelle Maschine in Hyper-V anlegen und als Datenträger die neu erstelle Festplatte angeben. Anschließend starten Sie die VM und installieren Hyper-V mit Hilfe von DISM.exe. Es ist wichtig, dass Sie DISM verwenden, da Powershell die Installation verweigert.
dism /online /enable-feature /FeatureName:Microsoft-Hyper-V
Nun können Sie die Hyper-V Verwaltungswerkzeug nachinstallieren, z.B. mit der Powershell:
Add-WindowsFeature -Name RSAT-Hyper-V-Tools -IncludeAllSubFeature
Im letzten Schritt können Sie jetzt alle exportieren virtuellen Maschinen importieren. Liegen Ihre VMs z.B. auf E:\Hyper-V, verwenden Sie folgende Powershell-Befehl:
$vm = ( dir E:\Hyper-V\*.exp -Recurse ).FullName
$vm | % { Import-VM -Path $_ -Copy }
Nun importiert Hyper-V Ihre virtuellen Maschinen. Nach dem Import liegt die Konfiguration der Maschine in einer normalen XML-Datei vor, die Windows Server 2012 R2 importieren kann. Am einfachsten kopieren Sie Ihre virtuellen Maschinen vor dem Import in eine VHD-Datei und hängen diese direkt an die virtuelle Maschine, dann ist der Kopiervorgang am Einfachsten. Damit bekommen Sie den ganzen Vorgang in einer halben Stunde über die Bühne.
Mit Windows 10 und der nächsten Version von Windows Server fehlen noch einige kompatible Treiber. So jubeln Sie Windows nicht für die Version vorgesehen Treiber unter Treiber, Treiber, Treiber. Immer wieder stößt man auf Hardware, die vom Betriebssystem nicht unterstützt wird, weil die Hardware zu alt ist oder man auf einem Serversystem (testweise) arbeitet, für das keine Treiber zur Verfügung gestellt werden. Die Krux an der Sache - oft gibt es funktionsfähige Treiber, aber der Hersteller hat den Treiber nur für z.B. Windows Clients zur Verfügung gestellt oder aber man arbeitet mit einer neuen Version des Betriebssystems, für die noch keine neuen Treiber existieren, obwohl die alten funktionieren würden. Im folgenden Beispiel beschreibe ich, wie Sie einen Intel-Treiber für den in der CPU integrierten Intel GM 4000 Grafikadapter unter Windows Server Next (Windows Server 2016) zum Laufen bekommen. Besorgen Sie sich zuerst einen Treiber für Windows 8.1 64 Bit. Den können Sie bei Intel bekommen. Eine gute Alternative Treiberquelle ist Microsoft Update, denn Microsoft stellt oft noch Treiber für Produkte zur Verfügung, die vom Hersteller gar nicht mehr unterstützt werden. Die Microsoft-Treiber finden Sie unter http://catalog.update.microsoft.com. Laden Sie den Treiber als cab-File oder zip-File herunter, und entpacken Sie ihn. Wenn er, wie bei MS Update, als .cab-File geliefert wird, doppelklicken Sie einfach die cab-Datei im Explorere, markieren Sie dann alle Dateien im Ordner und rechtklicken Sie eine Datei. Es wird dann der Menüeintrag "Extract" angegeben. Extrahieren Sie die Dateien z.B. in C:\treiber\intelGM. Nachdem die Dateien extrahiert sind, suchen Sie im IntelGM-Ordner die Datei mit der Endung .inf und editieren die Datei im Notepad. In der inf-Datei ist für jedes unterstützte Betriebssystem ein Eintrag vorhanden, der ungefähr so aussieht:
;=====================================================================
; Windows 8 Install
;=====================================================================
[IntelGfx.NTamd64.6.2] [...]
Das ; ist einfach nur ein Kommentar. Wichtig ist der Teil [IntelGfx.NTamd64.6.2], da die Zahl 6.2 das Betriebssystem angibt. Windows 10 und Windows Server Next haben die internen Betriebssystemnummer 6.4, und für die müssen wir einen Eintrag erstellen, damit Windows den Treiber akzeptiert. Kopieren Sie also den Eintrag mit allen folgenden Werten (die mit % beginnen bzw. bis zum nächsten Kommentar) und fügen Sie ihn unter dem letzten Abschnitt ein. Ändern Sie jetzt den Betriebssystemstring auf 6.4 und, wenn Sie möchten, den Kommentar:
;=====================================================================
; Windows 10 Install
;=====================================================================
[IntelGfx.NTamd64.6.4]
Da Windows nur signierte Treiber installiert, und wir mit dem Ändern der .inf-Datei die Signatur ungültig gemacht haben, müssen wir Windows jetzt so einstellen, dass es auch unsignierte Treiber akzeptiert. Dazu ändern wir die Starteinstellungen, indem wir eine administrative Kommandozeile öffnen und mit bcdedit die Bootoptionen ändern:
bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING ON
Anschließend starten wir den Computer neu, öffnen den Gerätemanager und wählen das Gerät aus, dass aktualisiert werden soll. Aus dem Kontextmenü des Geräts wählen Sie jetzt "update Driver Software..." aus und nehmen den lokalen Computer als Treiberquelle. Im Folgefenster geben Sie an, dass Sie den Treiber selber auswählen möchten. Im nächsten Fenster wählen Sie "Have Disk..." aus und geben den Pfad an, in dem sich Ihr bearbeiteter Treiber befindet.
Windows 8.1 Backup - eine Geschichte voller Mißverständnisse... oder was hat sich Microsoft dabei eigentlich gedacht? Sie suchen bei Windows 8.1 das System Backup? Ha, da können Sie lange suchen. Das gibt es zwar noch, aber Microsoft hat die GUI abgeschafft. Microsoft möchte nämlich nicht, dass Sie ihr Windows noch komplett sichern. Das Konzept, das Microsoft sich ausgedacht hat, ist 3-stufig und sieht so aus: Windows-Wiederherstellungen finden nur noch über eine Systemreparatur statt - oder über eine Neuinstallation. Um Windows auf einen sauberen Zustand zurück zu setzen, brauchen Sie einen Wiederherstellungsdatenträger, den Sie z.B. in der Systemsteuerung über Wiederherstellung erstellen können. (Wiederherstellungslaufwerk erstellen auswählen) Gesichert werden nur noch Dateien. Dafür gibt es den Windows Dateiversions-Verlauf (File History). Hierfür benötigen Sie einen Sicherungsdatenträger - das ist ein USB-Datenträger oder ein Netzlaufwerk. Einschalten und konfigurieren können Sie den Dateiversionsverlauf über Systemsteuerung - Dateiversionsverlauf. Die Konfiguration ist denkbar einfach: Über Laufwerk auswählen geben Sie das Laufwerk an, AUF das gesichert werden soll. Über Optionen können Sie einstellen, wie oft gesichert werden soll, wie lange Sicherungen aufbewahrt werden, und wie viele % Ihres lokalen Systemlaufwerks als Backup-Cache genutzt wird. Der Backup-Cache ist eine Kopie der Datensicherung auf Ihrem Rechner, die immer verfügbar ist und aus der alte Daten wiederhergestellt werden können, selbst wenn Sie den Backupdatenträger nicht verfügbar haben. Über Ausnahmen legen sie fest, welche Ordner NICHT gesichert werden sollen. Was und zu der Frage führt, welche Daten überhaupt gesichert werden. Windows macht ein Backup von den persönlichen Daten, die da sind:
- Favoriten
- Dateien im Skydrive
- den Desktop-Ordner
- alle Bibliotheken
Um weitere Ordner neben den Standardordnern ins Backup aufzunehmen, müssen Sie diese also in Bibliotheken umwandeln - Rechtsklick auf den Ordner und dann im Kontextmenü "in Bibliothek aufnehmen" auswählen. Die dritte Stufe ist die Sicherung der Daten in die Cloud, also zu Skydrive. Ob dieses Verfahren Sinn macht, überlasse ich Ihnen. Wenn Sie lieber ein vollständiges Backup Ihres Systems machen wollen, können Sie das glücklicherweise über wbadmin machen, das Kommandozeilentool des alten Systembackups. Es ist aber davon aus zu gehen, dass Microsoft über kurz oder lang auch diese letzte Möglichkeit abschafft, vollständige Systemsicherungen zu machen.
By accepting you will be accessing a service provided by a third-party external to https://netz-weise-it.training/