netzweise2

Dateien restlos entfernen und Festplatten rückstandslos löschen mit Windows Bordmitteln

Immer wieder liest man den Mythos, dass man eine Festplatte 37 mal überschreiben muß, bevor die Daten vollständig gelöscht sind. In der aktuellen c´t 13/2016 gibt es dazu einen sehr guten Artikel, der die Hintergründe dazu beschreibt. Das Fazit der Artikelserie lautet: Bei alten MFM-Festplatten, bei denen die Datensektoren der Festplatten noch so groß waren wie Pfannkuchen, war eine Datenwiederherstellung mit den enstprechenden Werkzeugen in der Tat noch möglich. Bei aktuellen magnetischen Datenträgern haben sich die Aufzeichnungsverfahren aber maßgeblich verändert, und auch Datenrettungsunternehmen sind mit Ihren Werkzeugen nicht in der Lage, einmal überschriebene Daten wiederherzustellen. Ach das BSI und das amerikanische Pendant NIST geben als Richtlinie inzwischen heraus, dass eine einfache Überschreibung reicht, um Daten rückstandlos zu entfernen.

Kommen wir nun dazu, wie die Datenlöschung am einfachsten auszuführen ist. Windows bietet dazu 2 Bordmittel an.

Zum Löschen von einzelnen Dateien oder Partitionen auf der Festplatte bietet sich das Tool cipher.exe an. Es ist das Tool zur Kommandozeilensteuerung von EFS (Encrypted File System) und bietet den Schalter /w, mit dem man einzelne Dateien, Ordner oder aber auch ganze Partitionen löschen kann. Um den Ordner c:\Temp\geheim zu löschen und zu überschreiben, geben Sie hierfür ein:

Cipher.exe /w c:\Temp\geheim

Die Löschung kann eine Weile dauern, da die Daten in 3 Durchgängen mit 0, dann mit 1 und anschliessend wieder mit 0 überschrieben werden. Um die ganze Partition zu löschen, geben Sie nur Laufwerksbuchstabe: ein:

Continue reading
  10105 Hits

Root-Zertifikat aus dem Zertifikats-Store entfernen

Haben Sie schon einmal versucht, ein per Gruppenrichtlinien verteiltes Root-Zertifikat wieder zu entfernen? Wie sich herausstellt, ist das über das Zertifikats-Plug-In in der Management-Konsole gar nicht so einfach. Hilfe verschafft hier das Kommandozeilentools Certutil in Verbindung mit Powershell.

Certutil besitzt einen Parameter -delstore, mit dem man Zertifikate aus dem Store entfernen kann. Ruft man Certutil -delstore -? auf, so bekommtn man folgende Optionen angezeigt:

Optionen:

-enterprise -- Verwendet den Unternehmensregistrierungs-Zertifikatspeicher auf dem lokalen Computer
-user -- Verwendet HKEY_CURRENT_USER oder Zertifikatspeicher.
-GroupPolicy -- Gruppenrichtlinien-Zertifikatspeicher verwenden

Verwenden Sie die Option -GroupPolicy für Zertifikate, die per Gruppenrichtlinie verteilt wurden. Der richtige Speicher ist wichtig, da Certutil Ihnen sonst zwar Vollzug vermeldet, aber die Zertifikate nicht löscht. Weiterhin benötigen Sie den Thumbprint (Daumenabdruck oder Checksumme) des zu entfernenden Zertifikats. Den erhalten Sie über Powershell:

Continue reading
  9769 Hits

Hyper-V VM per Powershell anlegen und konfigurieren

Das Anlegen einer virtuellen Maschine in Hyper-V geht sehr einfach. Hier zeige ich ein kleines Beispiel, dass eine Generation-2 VM anlegt, konfiguriert und ein ISO-Image zum Starten bereitstellt. 

Zuerst erzeuge ich ein Credential-Objekt, um das ISO-File für die VM aus einer Freigabe zu kopieren. Die Methode PSCredential der Klasse PSAutomation erzeugt uns dafür ein Credential-Objekt, das 2 Parameter benötigt: Den Benutzernamen und das Kennwort.

  • $password = ConvertTo-SecureString -String "Passwort" -AsPlainText -Force
  • $UserName = "Administrator"
  • $adminCred = New-Object System.Management.Automation.PSCredential ($username, $password)

 

Als nächstes wird ein Ordner für das Iso angelegt:

$isoPath = mkdir D:\iso -Force

Continue reading
  5540 Hits

SQL-Server Management Studio kostenlos herunterladen

Ich habe es in meinem letzten Tipp zwar schon einmal kurz erwähnt, aber ich finde, die Info ist trotzdem einen eigenen Eintrag wert. Microsoft hat sich entschieden, das SQL-Server Management Studio als eigenständiges Produkt unabhängig von den restlichen SQL-Server Features weiter zu entwickeln. Damit ist das Management Studio jetzt für jeden frei verfügbar! Das ziemlich cool, denn bisher konnte man nur die eingeschränkte Express-Edition kostenlos installieren. Das vollwertige Management-Studio konnte eigentlich nur mit dem SQL-Server installiert werden. Die RTM ist seit gestern in der Version 13.0.1601.5 offiziell released. Man kann Sie bei MSDN herunterladen

Zusätzliche Informationen zur Version und zu den Features hat man bei SQL-Sentry zusammengetragen. 

Eine Reihe von Erweiterungen für das Management-Studio findet man übrigens im SSMS Tool Pack (leider ab SSMS 2012 nicht mehr kostenlos, aber sehr preisgünstig). Alterantiv bietet sich SSMS Boost mit einer kostenlosen Community-Edition an. Sehr hilfreich und kostenlos zum automatischen Formatieren von Code ist auch der Poor Mans SQL-Formatter

  7469 Hits

SQL Server 2016 Developer Edition (Funktionsidentisch mit Enterprise) jetzt kostenlos!

Immer wenn mein Frust auf Microsoft so richtig groß ist, machen Sie wieder was richtig cooles. Windows 10 nervt mich manchmal mächtig ab. Aber dafür hat Microsoft jetzt die gestern offiziell releaste Version 2016 in der Developer-Edition kostenlos verfügbar gemacht! Die Developer-Edition darf nur für Test-und Programmierzwecke eingesetzt werden, ist aber ansonsten voll Featureidentisch mit der Enterprise-Edition! Man kann Sie direkt bei MSDN herunterladen. Außerdem sollten Sie beachten, dass das SQL-Server Management Studio jetzt nicht mehr Bestandteil der SQL-Server Installation ist, weil es als eigenes Produkt weiterentewickelt wird. Den Link zum Download finden Sie ebenfalls beim MSDN. 

Eine Sache gibt es zu beachten: Die Developer-Edition hat den Netzwerkzugriff im Gegensatz zu den anderen Editions standardmässig deaktiviert. Er kann aber problemlos aktiviert werden. Starten Sie dafür nach der Installation den SQL-Server Configuration Manager und wählen Sie hier unter SQL-Server Network Configuration "Protocols for MSSQL-Server". Hier sehen sie die aktiven Zugriffsprotokolle. TCP/IP ist allerding deaktviert.

Doppelklicken Sie zum Aktivieren auf "TCP/IP". Im folgenden Fenster stellen Sie "Enabled" auf Yes.

Zum Aktivieren des Netzwerkzugriffs ist allerdings ein Neustart des Dienstes notwendig. Der Server läuft bei einer Standardinstanz dann auf Port 1433, bei einer benannten Instanz wird ein dynamischer (automatisch zugewiesener) Port verwendet. Diese Einstellungen können Sie ebenfalls im Configuration Manager ändern, indem Sie den Reiter "IP Addresses" wählen. 

Hier können Sie den Port eintragen, auf dem der SQL-Server Anfragen annehmen soll. Ist hier kein Port eingetragen, aber dafür eine Null bei dynamic Ports gesetzt, wählt der SQL-Dienst bei jedem Start automatisch einen Port. Entfernen Sie die 0 und tragen Sie stattdessen einen festen Port ein, wird dieses Verhalten deaktiviert. Auch für das Ändern des Ports ist ein Neustart notwendig. 

  7977 Hits

Anfordern und einrichten eines (kostenlosen) SSL-Zertifikats unter Windows

In meiner kleinen Reihe über Einrichtung und Verwaltung von Azure wird es auch um die Einrichtung von ADFS-Servern für Office 365 gehen. Für ADFS benötigen Sie, auch für Testzwecke, ein gültiges SSL-Zertifikat. In diesem Artikel zeige ich, wie Sie dafür einen Zertifikatsrequest erstellen und wie Sie bei Comodo ein 90 Tage gültiges SSL-Zertifikat beantragen können. Das Testzertifikat ist ein ganz normales SSL-Zertifikat, das bei Comodo auch verlängert werden kann. Die einzige Einschränkung ist die Laufzeit von 90 Tagen. Für die Verwendung als Zertifikat für Webserver würde ich LetsEncrypt empfehlen, da man hier komplett kostenlose SSL-Zertifikate bekommt. 

SSL-Zertifikats-Request erstellen

Um ein Zertifikat bei einer Zertifizierungsstelle zu beantragen, benötigen Sie eine Zertifikats-Anforderung. Die kann Ihnen z.B. von der IIS-Konsole erstellt werden. Einfacher geht es aber mit einem freien Tool von Digicert, die selber auch Zertifikatsanbieter sind. Laden Sie dazu einfach das Digicert Certificate Utility for Windows https://www.digicert.com/util/ auf den Rechner, auf dem das Zertifikat erstellt werden soll, herunter. Wichtig ist, dass Sie das Tool wirklich auf dem Rechner starten, auf dem das Zertifikat installiert werden soll, da mit dem Zeritifikatsrequest ein privater Schlüssel erstellt wird, der den Rechner nicht verlässt und der zusammen mit dem Zertifikat benötigt wird. Den Schlüssel später auf den Zielrechner zu exportieren ist zwar möglich, aber sehr umständlich. Das Certificate Utility muss auch nicht installiert werden, insofern sollte der Aufruf auch auf einem Server unproblematisch sein.

Das Tool kommt in einem Zip-File. Entpacken Sie es und starten Sie DigicertUtil.exe. Nachdem Sie dem Lizenzvertrag zugestimmt haben, öffnet sich die Digicert-Konsole. Hier Wählen Sie gleich im ersten Fenster oben rechts den Eintrag „Create CSR“.

Geben Sie jetzt die Zertifikatsinformationen ein. Das Utility gibt dabei auch Hilfestellung – auf der rechten Seite finden Sie Informationen zu den Daten, die gewünscht sind. 

 

Continue reading
  13488 Hits

Office 365, Azure AD, ADSync und ADFS - eine Einführung und Begriffsklärung

Mit diesem Artikel beginne ich eine kleine Serie zum Thema Office 365 Benutzerverwaltung. Im ersten Teil möchte ich erst einmal klären, wie Office 365 und Azure AD zusammen hängen und wofür man den Azure AD Sync Dienst und Active Directory Federation Services (ADFS) benötigt. 

Wofür brauche ich Azure AD, wenn ich doch Office 365 einsetze?

Azure AD (Actice Directory) ist ein Benutzerverzeichnis, das von Microsoft ohne Installation eines eigenen Servers auf den Microsoft-Servern bereitgestellt wird. Office 365 verwendet Azure AD zur Speicherung Ihrer Office 365 Benutzerkonten. Dafür wird beim Anlegen eines Office 365-Accounts automatisch ein Azure-AD Verzeichnis angelegt.
Azure AD speicher Ihre Benutzerinformationen. Immer, wenn Sie im Office 365 einen neuen Benutzeraccount anlegen oder Benutzerinformationen ändern, werden tatsächlich Änderungen im Azure AD durchgeführt.

Benutzer mit einem lokalen AD zusammenführen

Um zu verhindern, dass Ihre Benutzer sich mehrere Kennwörter merken müssen – eins für Ihr Outlook und Sharepoint, und eins für Ihre lokale Anmeldung am PC – hat Microsoft die Möglichkeit zur Verfügung gestellt, Ihre Benutzerkonten ins Azure AD zu synchronisieren. Dafür benötigen Sie ein Tool namens Azure AD Sync (ehemals Dirsync), das Sie auf einem Server in Ihrem Netzwerk installieren („On Premise“). AAD Sync prüft in regelmäßigen Abständen Ihre Verzeichnisse (lokales AD oder, wenn eine Rücksynchronisation gewünscht wird, auch Ihr Azure AD) und synchronisiert Daten wie Kennwörter zwischen den Verzeichnissen. Die synchronisierten Verzeichnisse bleiben nach wir vor getrennt, aber die Daten können auf dem gleichen Stand gehalten werden. Die Synchronisation kann jederzeit abgebrochen werden.
Durch AAD Sync brauchen Ihre Benutzer sich nur noch ein Kennwort zu merken, da die Kennwörter im lokalen AD und im Internet immer gleich sind. Was Azure AD jedoch nicht leisten kann ist ein Single Sign on, wie er normalerweise auf einem Domänen-PC ausgeführt wird. Das bedeutet, daß z.B. der Zugriff auf Ihren Office 365 Sharepoint eine zusätzliche Anmeldung auf der Sharepoint Website erfordert, auch wenn das Kennwort lokal wie auf dem Sharepoint dank Azure AD das gleich ist. Um einen Single Sign on zu ermöglichen, benötigen Sie ADFS (Active Diretory Federation Services).

Single Sign on mit Office 365

Damit Ihre Benutzer nicht für jede Office 365 Ressource eine Anmeldung durchführen müssen, sondern wie in einem lokalen Netzwerk üblich nur eine Anmeldung am PC durchführen und dann Zugriff auf alle Ressourcen haben, benötigen Sie Active Directory Federation Services (ADFS).
ADFS ist ein Dienst, der dazu dienst, die Anmeldungen von Websites „befreundeter“ Unternehmen in Ihr AD umzuleiten. Ein Beispiel für ähnliche Dienste, die Sie vermutlich zumindest schon oft gesehen haben, sind die Anmeldungen auf Websites via Google oder Facebook.

Anstatt auf einer Website ein neues Benutzerkonto anzulegen, verwenden Sie einfach Ihren Google-Account. Das Prinzip dahinter funktioniert so, dass die Website, an der Sie sich anmelden, Ihren Client im Hintergrund an den Anmeldeserver von Google weiterleitet. Ihre Google-Anmeldeinformationen werden von Google überprüft, und wenn Sie sich korrekt angemeldet haben, wird Ihrem Client ein Anmeldetoken ausgestellt und digital signiert (vor Änderungen geschützt und mit einem Stempel versehen, der sicher stellt, dass das Anmeldetoken wirklich von Google erzeugt wurde). Dieses Anmeldetoken gibt Ihre Clientsoftware an die Website zurück. Da die Website google vertraut, kann Sie nun die Anmeldeinformationen von Google verwenden, um für Sie ein Konto zu erstellen, dass mit dem Google-Konto verknüpft ist.

  6533 Hits

Die Startzeit / Reboot des Servers herausfinden

Update, 29.09.2020: Ein fleißiger Kommentator hat mir folgendes Code hinterlassen, der ab Powershell 5 besser funktioniert:

Get-Computerinfo | select OsLastBootUpTime

----

Jefrey Snover hat gerade ein Modul in der Powershell Gallery gepostet, das die letzte Reboot-Zeit aus dem Eventlog ausliest: https://www.powershellgallery.com/packages/get-lastreboot/0.1.1/DisplayScript. Dabei fiel mir ein, dass es doch auch noch dieses tolle Tool Systeminfo gibt, dass an der Kommandozeile alle möglichen Systeminformationen ausgibt - auch die Systemstartzeit. Das großartige an diesem Tool ist aber, dass es die Ausgabe auch ins csv-Format umwandeln kann, indem man den Parameter -FO aufruft. Die gesamten Informationen werden dann ins csv-Format umgewandelt, mit dem Powershell wiederum ganz hervorragend umgehen kann. Und so kann man dann ganz hervorragend die Daten von systeminfo direkt in Powershell weiterverarbeiten: 

systeminfo /FO csv | convertfrom-csv

Continue reading
  15161 Hits

Datenbanken migrieren von mySQL zu SQL-Server

SQL-Server und mySql sind leider SQL-seitig nicht wirklich kompatibel. So gibt es zwar die Möglichkeit, eine Datenbank in mySQL als Script zu exportieren, aber leider kann man das Script auf dem SQL-Server nicht mehr für den Import benutzen. Der beste Weg für den Import führt daher über den SQL Server Migration Wizard. Der Migration Wizard steht für verschiedene Datenbanken zur Verfügung und hilft z.B. auch bei der Migration von Access-Datenbanken zu SQL-Server. Da das Tool recht komplex ist, möchte ich hier nur kurz zeigen, wie man eine einfach Migration durchführt, ohne auf die schmutzigen kleinen Details des Tools eingehen zu wollen. Ich verwende hierzu die derzeit aktuelle Version 6.0.1, 6.1 (für SQL-Server 2016) ist derzeit in der Beta-Phase.

Sie benötigen auf dem Rechner, auf dem Sie den SSMA einrichten wollen, zuerst einmal einen mySQL-ODBC-Treiber. Haben Sie die mySQL-Datenbank unter Windows auf dem gleichen Rechner installiert, dann müssen Sie nichts weiter machen, denn mySQL installiert den passenden ODBC-Treiber gleich mit. Ansonsten laden Sie den Treiber einfach bei mysql.com herunter. Nutzen Sie den 64-Bit Treiber, der SSMA wird nämlich auch in einer 64-Bit-Version installiert. Eine Konto für die Authentifizierung ist übrigens nicht notwendig, klicken Sie einfach auf den Link "No thanks, just start my download", wenn Sie nach Ihrem Login gefragt werden. Anschliessend installieren Sie den SSMA.

Wenn Sie den Migration Assistenten zum ersten Mal starten, müssen Sie ein Migrationsprojekt erstellen. Wählen Sie hierfür im Menü File "New Project" aus. Wichtig ist, dass Sie im folgenden Fenster das Migrationsziel auswählen. Standardmässig ist hier Azure angegeben. Leider können Sie das Ziel im Projekt selber dann nicht mehr ändern. Das kann ziemlich verwirrend sein!

Nun müssen Sie eine Verbindung zum Quell- und zum Zielsystem herstellen. Wählen Sie hierfür in der Toolbar zuerst "Connect to MySql". Wählen Sie im Verbindungsfenster den Provider aus - dies ist der ODBC-Treiber, den Sie installiert haben. Ist hier kein Treiber sichtbar, obwohl Sie einen Treiber installiert haben, dann prüfen Sie, ob Sie den Treiber und SSMA beide in der gleichen Version (32-Bit / 64-Bit) installiert bzw. gestartet haben. Außerdem benötigen Sie den Namen des Quellservers, den mySQL-Port (standardmässig 3306), sowie ein Konto mit Leserechten auf dem mySQL-System. 

Nun verbinden Sie sich mit dem SQL-Server. 

Continue reading
  6925 Hits

Unix/MySQL Timestamp in Datumswerte mit Powershell umwandeln

In Unix und MySQL werden Datumswerte oft als Timestamps angegeben. Ein Timestamp ist eigentlich ein Datums/Zeitwerte, der aber als Integer gespeichert ist und die Sekunden ab dem 1.01.1970 angibt. Diese Zeitzählung wird auch als "Epoch date" bezeichnet.

Die Umwandlung in einen Datumswert in Powershell ist eigentlich recht einfach, da uns Powershell alle zur Umrechung notwendigen Funktionen zur Verfügung stellt. Das Datum des 1.1.1970 liefert uns get-Date:

Get-Date '1/1/1970'

Get-Date liefert ein Objekt vom Type Datetime zurück. Alle Objekte vom Typ Datetime besitzen eine Reihe von Methoden für die Datumsmanipulation. Wir benötigen hier die Methode AddSeconds() zum Aufaddieren von Sekunden:

$Timestamp = 1464257993
(Get-Date '1/1/1970').AddSeconds($Timestamp)

Continue reading
  11261 Hits

Windows 10 - Taskmanager zeigt dauerhauft hohe Systemlast (Taskmanager durch Process Monitor ersetzen)

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. 

Promon vs. Taskmanager

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:

Continue reading
  4511 Hits

Programme deinstallieren mit Powershell

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. 

Continue reading
  26986 Hits

Benutzereinstellungen in Office 365 und Exchange Online mit Powershell setzen

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"

Continue reading
  4482 Hits

Zugriff auf SQL-Server per SMO mit Powershell - ohne SMO-Installation!

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: 

Continue reading
  4876 Hits

Widerspenstige Azure Storage Accounts löschen - "There is currently a lease on the blob and no lease ID was specified in the request"

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!

Continue reading
  4417 Hits

Texte umschliessen und kommaseparierte Listen erstellen in Powershell

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: 

Continue reading
  278078 Hits

Excel-Tastaturtipps

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

  3107 Hits

Fotografieren in Excel?

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…

Continue reading
  3293 Hits

Cmdlets mit gleichem Namen beim Aufruf unterscheiden

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

Continue reading
  2967 Hits

Powershell-Cmdlets mit gleichem Namen beim Aufruf unterscheiden

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

  1630 Hits