NTP Einstellungen

Bei Windows 2000 können Sie einfach mit NET TIME die IP-Adresse des Servers angeben. Führen Sie in einer DOS-Box dazu folgende Befehle aus:

net stop w32time
net time /setsntp:xxx.xxx.xxx.xxx
net start w32time
w32tm.exe /once

Seit Windows 2003 hat sich der Aufruf der Konfiguration geändert.

w32tm /config /syncfromflags:manual /manualpeerlist:time.firma.tld /update /reliable:YES

Diese Zeile setzt den Zeitserver auf „Manuelles Update“ von „time.firma.tld“ und gibt sich dann als „zuverlässiger“ Zeitserver aus und holt sich sofort die Zeit. Seit Windows 2003 ist es auch möglich, ein Debuglog für den W32TIME-Dienst zu aktivieren. Speichern Sie einfach folgende Zeilen als REG-Datei und importieren Sie diese

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"FileLogName"="c:\\temp\\ntp.log"
"FileLogSize"=dword:01000000
"FileLogEntries"="0-116"

Vergessen Sie am Ende nicht, das Diagnoseprotokoll wieder abzuschalten. Bei Windows 2000 können Sie die „w32tm /once“ eine interaktive Verbindung zum NTP-Server in der Konsole beobachten. Auch im Systemeventlog hinterlässt W32TIME entsprechende Meldungen, wenn ein Fehler auftritt.

Autoritativer Zeitserver Wenn es nun keinem ihrer Domänencontroller möglich ist, eine Zeit von einer vertrauenswürdigen NTP-Quelle zu bekommen, dann sollten Sie natürlich einen DC zur maßgeblich Zeitquelle deklarieren und dort sicherstellen, dass dessen Uhrzeit möglichst genau geht. Dies könnte dann eine Hardwareuhr (DCF77 o.ä.) sein, die einfach die lokale Uhr immer wieder korrigiert.

Um einen Windows Server nun zu einer „Referenz“ zu deklarieren, müssen Sie per Regedit zwei Schlüssel setzen. Speichern Sie einfach diesen text z.B. als „W32HWTime.reg und importieren diesen auf dem PDC-Emulator der Stammdomäne

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"LocalNTP"=dword:00000001
"ReliableTimeSource"=dword:00000001

Danach müssen Sie den Windows Zeitdienst einmal durchstarten (net stop w32time && net start w32time). Sorgen Sie dann noch dafür, dass alle Clients und anderen Server die Zeit neu holen (z.B.: durch Eingabe von „w32tm -s“ und kontrollieren Sie das Eventlog.

216734 How to configure an authoritative time server in Windows 2000

So konfigurieren Sie den Windows-Zeitdienst auf dem ersten Controller in der Gesamtstruktur-Stammdomäne

  1. Melden Sie sich beim ersten Domänencontroller an, den Sie bereitgestellt haben.
  2. Geben Sie an einer Eingabeaufforderung den folgenden Befehl ein, und drücken Sie dann die EINGABETASTE:
    w32tm /stripchart /computer:de.pool.ntp.org /samples:5 /dataonly

    Dadurch wird getestet, ob eine Verbindung zu einem Timeserver im Internet möglich ist.

  3. Öffnen Sie bei Bedarf den UDP-Port (User Datagram Protocol) 123 für ausgehenden Datenverkehr ins Internet.
  4. Öffnen Sie den UDP-Port 123 für eingehenden NTP-Datenverkehr am PDC-Emulator (Windows-Firewall).
  5. Geben Sie zum Konfigurieren des PDC-Emulators den folgenden Befehl ein, und drücken Sie dann die EINGABETASTE:
    w32tm /config /manualpeerlist:<Peers> /syncfromflags:manual /reliable:yes /update

Parameter Beschreibung

W32tm /stripchart Zeigt ein Diagramm des Offsets zwischen synchronisierenden Computern an.

W32tm /config /update Konfiguriert den PDC-Emulator.

/computer:<Ziel> Gibt den DNS-Namen (Domain Name System) oder die IP-Adresse des NTP-Servers an, dessen Zeit mit der Zeit auf dem lokalen Computer verglichen werden soll. Ein Beispiel für einen NTP-Server ist time.windows.com.

/samples:<Anzahl> Gibt die Anzahl der vom Zielcomputer zurückgegebenen Zeitbeispiele an.

/dataonly Gibt an, dass in den Ergebnissen nur Daten, aber keine Grafiken angezeigt werden.

/manualpeerlist:<Peers> Listet die DNS-Namen oder IP-Adressen für die NTP-Zeitquelle auf, mit denen der PDC-Emulator synchronisiert wird. (Diese Liste wird als manuelle Peerliste bezeichnet.) Sie können beispielsweise time.windows.com als NTP-Zeitserver angeben. Verwenden Sie beim Angeben mehrerer Peers ein Leerzeichen als Trennzeichen, und schließen Sie die Namen der Peers in Anführungszeichen ein.

/syncfromflags:manual Gibt an, dass die Zeit mit Peers in der manuellen Peerliste synchronisiert werden soll.

/reliable:yes Gibt an, dass es sich bei dem Computer um einen zuverlässigen Zeitdienst handelt.

Caps-Lock zur Shift-Taste umbelegen

Eine gute Alternative ist die umbelegung der Caps-Lock Taste zur Shift-Taste. Die kann ganz einfach per Regitry erfolgen:

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,2a,00,3a,00,00,00,00,00

…und so setzt man Windows wieder auf den Standard zurück:

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-

 

 

Erstellen von Volumes

Gewünschte Einstellungen:

  • Thin Provisioned
  • Deduplizierung
  • Keine Snapshot-Reserve
  • Kein Snapshot-Schedule
  • Unix-Security-Style
  • Export für bestimmte IP
  • geeignet für VMWare
  • Freigegbeben für 2 IPs

Beispiel:
Name: vol1
Aggregat: aggr1
Größe: 10G

vol create vol1 -s none aggr1  10G
snap reserve -V vol1 0
snap sched vol1 0 0 0
qtree security /vol/vol1 unix
sis on /vol/vol1

Eine Zeile aus der Datei /etc/exports:

/vol/vol1 -sec=sys,rw=10.0.0.1:10.0.0.2,root=10.0.0.1:10.0.0.2

Nach dem bearbeiten der Datei „/etc/exports“ muss diese Änderung mit dem Befegl „exportfs -a“ aktiviert werden

 

WSUS-ID löschen

Werden Rechner per Cloning ausgerollt, kann es passieren, dass die Rechner die gleiche WSUS-ID haben. Dies passiert, wenn der Quell-Rechner vor den Image-Vorgang Kontakt mit dem WSUS-Server aufnimmt. Bei diesem Vorgang wird nämlich die ID erstellt.

Ein einfaches Batch-Script kann hier helfen, die ID neu erstellen zu lassen:

@echo off
set el=%errorlevel%
if "%1" == "" goto error
echo %1:
reg query \\%1\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientid
set el=%errorlevel%
if %el% == 1 goto error
reg delete \\%1\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientid
 
Echo WSUS-Dienst beenden
sc \\%1 stop wuauserv
set el=%errorlevel%
 
Echo WSUS-Dienst starten
if %el% == 1 goto error
sc \\%1 start wuauserv
set el=%errorlevel%
if %el% == 1 goto error
 
goto ende
 
:error
echo.
echo Ein Fehler ist aufgetreten!!!
echo Computer:   %1
echo ErrorLevel: %el%
:ende

 

 

Migrate Contacts across Organization

Heute habe ich in einer Testumgebung Migrationen getestet.

Die Testumgebung bestand aus zwei Forests. Verbunden mit transitiven, bidirektionalen Forest-Trusts.
Ich hab dann munter mit ADMT 3.2 migriert: Benutzer, Gruppen PCs und mit Exchange Bordmitteln auch die Postfächer.
Dann wollte ich die Kontakte migrieren und habe nichts gefunden. Nur extrem komplizierte Installationsanleitungen oder teure Software.

Meine Kontakte wurde hauptsächlich wegen eMail verwendet.

Ich hab dann mein Lieblingstool gestartet: Powershell.exe 🙂

$C = Get-ADObject -LDAPFilter "(objectClass=contact)" -Server dc-2.powershell_pub.lan

$C | foreach {
New-MailContact -Name $_.Name -ExternalEmailAddress ($_.targetAddress.Split(':'))[1] -OrganizationalUnit "OU=Contact,DC=powershell_pub,DC=local"
}

Wenn man noch andere Infos migrieren will,  braucht man nur die entsprechenden Infos per Variable in die entsprechenden Parameter „einfüllen“

 

eMail-Adressen exportieren

Zur Spam-Bekämpfung ist es von großem Vorteil, wenn die erste Instanz der MailRoute alle gültigen eMailadressen kennt.

Bei mir ist das ein PostFix welches auf einem Ubuntu-Server läuft.

Folgendes Script wird nun zyklisch per Task-Scheduler auf dem Exchange-Server aufgerufen. Es erstellt ein Text-File und legt dies in „wwwroot“ ab.

Auf dem Linux-Server läuft ein Cron-Job der das File vom Exchange läd, mit dem vorhergehenden vergleicht und PostFix, wenn nötig, durchstartet.

#--------------------------------------------------------------------------------------------------
#
# Skript zum exportieren der aktuell gültigen eMail-Adressen für die SMTP1 (vormals SV10)
# Autor Robert R. 25.01.2012
#--------------------------------------------------------------------------------------------------
# Historie:
# 11.12.2012	Robert R. Accepted-Domains und CustomAttribute6 zum Filtern verwenden
#
#--------------------------------------------------------------------------------------------------
# Variablen und Parameter
#--------------------------------------------------------------------------------------------------

param
	(
	[string]$MailTo = "admin@powershell.local",
	[string]$MailFrom = "admin@powershell.local",
	[string]$File = "C:\inetpub\wwwroot\email.txt",
	[switch]$Sendmail,
	[switch]$Debug,
	[switch]$NoOut
	)

#$NoMailGroup = "MAIL_ALL_NoExternalMails"
$NoMailToAlias = "team-group","root","extest_7133eae530fc4"
$UnwantedDomains = "powershell.local"

#--------------------------------------------------------------------------------------------------
# Module und Pugins
#--------------------------------------------------------------------------------------------------

	$a = (Get-PSSnapin | where {$_.Name -ilike "Microsoft.Exchange.Management.*"} | measure).Count
if ( $a -eq 0 )
	{
	if ( $Debug ) {write-host "Exchange-Plugin loading..."}
	Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
	}
Import-Module activedirectory

#--------------------------------------------------------------------------------------------------

Set-ADServerSettings -ViewEntireForest $true

# Akzeptierte Domänen in Array kopieren
if ( $DEBUG ) { write-host "Get Accepted Domains" }
$DOMAINs = @()
Get-AcceptedDomain | select DomainName | foreach { $DOMAINs += $_.DomainName.SmtpDomain.tostring() }

# Alle Recipients einsammeln 
if ( $DEBUG ) { write-host "Get Recipients" }
$RCPs = Get-Recipient -resultsize unlimited | select Alias, RecipientTypeDetails, EmailAddresses, GUID, CustomAttribute6

# GUID der Mitglieder aus der Gruppe <$NoMailGroup> in ein Array speichern um diese später zu filtern
#if ( $DEBUG ) { write-host "Get NoMailGroup" }
#$NoMail = @()
#Get-ADGroupMember $NoMailGroup -Recursive | foreach { $NoMail += $_.objectGUID.tostring() }

# Filter-Array umwandeln in Kleinbuchstaben. $attachment wird als temp-Variable verwendet
$attachment = @()
$NoMailToAlias | foreach { $attachment += $_.tolower() }
$NoMailToAlias = $attachment

# Alle eMailadressen werden in dem Array $attachment gespeichert
if ( $DEBUG ) { write-host "Filter List of Recipients" }
$attachment = @()
foreach ( $RCP in $RCPs )
	{
#	Ausfiltern von eMailadressen die nicht extern errichbar sein sollen
	if ( $RCP.RecipientTypeDetails.tostring().tolower() -eq "discoverymailbox" )	{ continue }
	if ( $NoMailToAlias -contains $RCP.Alias.tolower() )							{ continue }
	if ( $RCP.Alias -like "publicfolder*" )											{ continue }
	if ( $RCP.Alias -like "acl_mbx_*" )												{ continue }
#	if ( $NoMail -contains $RCP.GUID )												{ continue }
#	if ( $RCP.Alias.tolower() -eq "MAIL_ALL_NoExternalMails" )						{ continue }
#	if ( $RCP.CustomAttribute6 -ne "" )												{ continue }
	
	
	# eMailadressen des Emängers in die Liste schreiben
	foreach ( $email in $RCP.EmailAddresses )
		{
		$emaildomain = $email.ProxyAddressString.tolower().split("@")[1]
		if ( $email.Prefix -ilike "SMTP" -and $DOMAINs -contains $emaildomain -and
			-not ($UnwantedDomains -contains $emaildomain) )
			{
			if ( $DEBUG ) { Write-Host -NoNewline "." }
			$attachment += $email.SmtpAddress.tolower() + "`tx"
			#$attachment += $email.ProxyAddressString
			}
		elseif ( $DEBUG -and $email.Prefix -ilike "SMTP" ) { Write-Host -NoNewline "!" }
		}
	}

Write-Host ""

if ( -not $Debug )
	{
	remove-item $File
	$attachment | Sort-Object | out-file $File -Encoding ASCII
	}
	

if ( $Sendmail -and -not $Debug)
	{
	Send-MailMessage -To $MailTo -From $MailFrom -subject "email-smtp-adressen" -Body "das sind die emails smtp-adressen" -SmtpServer mailcas-c -Attachments $File
	}
elseif ( -not $NoOut )
	{
	$attachment | Sort-Object
	}

 

GPOs exportieren

Um eine Dokumentation zu erstellen ist es u.U. hilfreich HTML-Reports von GPOs zu erstellen

param
	(
	[string]$Path=$env:tmp
	)

$GPOs = Get-GPO -all
foreach ( $GPO in $GPOs )
	{
	$File = Join-Path -path $Path -ChildPath $(($GPO.DisplayName -replace ("[\W]","")) + ".htm")
	Get-GPOReport -Id $GPO.id -ReportType html -Path $File
	$File = Join-Path -path $Path -ChildPath $(($GPO.DisplayName -replace ("[\W]","")) + ".xml")
	Get-GPOReport -Id $GPO.id -ReportType xml -Path $File
	}

Der Parameter Path wird standardmäßig auf das TMP-Verzeichnis gelegt. Sie können aber jeden beliebigen Pfad dort angeben

Aufruf:
export-gpo.ps1 [-path <Pfad>]

Im Pfad bzw TMP-Verzeichnis werden dann pro GPO eine HTML- und eine XML-Datei erstellt.

120m – Walchensee Galerie

 

 

120-1   120-2

rt-120

Wie man auf den Bildern sehen kann, war ich mit meinem Buddy auf 120m im Walchensee am Tauchplatz Galerie.

Man kann auch sehen, dass wir bei ca. 92m etwas verweilt sind um das Autowrack anzuschauen 🙂

Im 100m Bereich waren wir schon mehrmals aber dies war das zweite mal, dass ich mich zu dieser Tiefe vorgewagt habe.

Wir sind beide langjährige technische Taucher (IANTD Trimix OC und CC) und sind Sommer wie Winter jedes Wochenende beim Tauchen.

Ausgerüstet waren wir jeweils mit 4 Stages (80cft 200Bar) und natürlich einem Rebreather.
Beide verwenden wir ein JJ-CCR auf dem jeder von und mehr als 200 Tauchstunden vorweisen kann.

Impressum

Die Informationen auf dieser Website verstehen sich als „Aussagen an sich“ ohne implizite Garantien jedweder Art. Die bereitgestellten Informationen auf dieser Website wurden sorgfältig geprüft und werden regelmäßig aktualisiert. Jedoch kann keine Garantie dafür übernommen werden, dass alle Angaben zu jeder Zeit vollständig, richtig und in letzter Aktualität dargestellt sind. Dies gilt insbesondere für alle Links zu anderen Websites, auf die direkt oder indirekt verwiesen wird. Alle Angaben können ohne vorherige Ankündigung ergänzt, entfernt oder geändert werden. Außerdem liegt es nicht in unserer Verantwortung, Vorsichtsmaßnahmen zu ergreifen gegen destruktive Programme oder Programmteile wie Viren, Würmer, Trojanische Pferde o.ä., die auf fremden Webservern liegen, die aber möglicherweise durch Links von unserer Website aus erreicht werden. Hiermit distanzieren wir uns ausdrücklich von den Inhalten aller verlinkten Seiten auf unserer Homepage und machen uns diese Inhalte nicht zu eigen. Diese Erklärung gilt für alle angebrachten Links. Die Inhalte und / oder Programme dieser Website sind durch uns urheberrechtlich geschützt. Alle Rechte vorbehalten. Teile dieser Website können Bilder, Texte oder Sounds beinhalten, die dem Urheberrecht Dritter unterliegen. Die Urheberrechtshinweise sind in diesen Fällen an entsprechenden Stellen vermerkt. Informationen auf dieser Website, einschließlich Texten, Bildern und Sound, dürfen nicht, sofern nicht ausdrücklich anders bestimmt, vervielfältigt, transferiert, vertrieben oder gespeichert werden ohne schriftliche Genehmigung des Herausgebers. Modifikationen des Inhalts dieser Website sind ausdrücklich untersagt. Wenn Sie mittels E-Mail oder Formular Kontakt mit uns aufnehmen möchten, sollten Sie wissen, dass wir Ihre persönlichen Daten (Name, Adresse), die Sie uns übermitteln, elektronisch speichern. Wir werden Ihre Daten jedoch nicht an Dritte übergeben. Eine übermittlung an Dritte erfolgt nur mit Ihrer ausdrücklichen Einwilligung, insbesondere soweit die übermittlung zur Erbringung von Ihnen in Anspruch genommener Dienste erforderlich ist oder soweit sonst gesetzlich zulässig. Mit der Nutzung dieser Website und der Abgabe Ihrer persönlichen Daten per E-Mail oder Formular geben Sie Ihre Einwilligung zu der hier beschriebenen Erhebung Ihrer persönlichen Daten. Sie können diese Einwilligung jederzeit widerrufen und die Löschung Ihrer Daten verlangen.

Fragen, Meinungen, Anregungen und Kritik bitte an den Webmaster

 

Die Zusendung von „Spam“ jeglicher Art (z.B. Werbung) ist untersagt! You must not send any kind of „spam“ (e.g. advertising).

…über mich

Hallo,

ich bin Robert und werde hier hauptsächlich PowerShell-Scripte veröffentlichen.

Ich habe mich schon mit ein paar Programmiersprachen und Script-Sprachen gequält.
Seit ein paar Jahren (so schnell vergeht die Zeit) übe ich mich in PowerShell. Tatsächlich empfinde ich PowerShell gegenüber allen anderen, von mir verwendeten Sprachen, als echten Fortschritt.

Als Hobby tauche ich gerne mit meinem Rebreather. Das tue ich fast jedes Wochenende und natürlich im Urlaub. Somit kommt evtl. auch mal ein Artikel über Tauchen 🙂

Wenn jemand meine Scripte brauchen kann, freue ich mich.

Alles was ich hier schreibe spiegelt meine persönliche Meinung oder Erfahrung. Es gibt natürlich keine Garantie, dass alle Scripte fehlerfrei sind und in jeder Umgebung laufen. Jedes der hier veröffentlichten Scripte hat jedoch irgendwo schon seine Dienste geleistet oder tut es immer noch.
Wenn jemand einen Fehler findet, würde ich mich über einen kleinen Hinweis freuen

Viele Grüße

Robert