Distributed Cache Service (Microblogging, Newsfeed) geht nicht, wenn keine Firewall Regel gesetzt

Mit SharePoint 2013 wurde der Distributed Cache Service eingeführt, welcher sich u.a. um das Mikroblogging kümmert. Mehr Informationen zu den verschiedenen Caches in SharePoint finden Sie hier. Dieser Artikel behandelt die Situation, dass bei der der Installation von SharePoint die Ausnahmen für die Firewall, welche für den Distributed Cache Service notwendig sind, nicht gesetzt wurden. Ich bin mir bisher nicht sicher, warum dies nicht geschieht, ich gehe aber davon aus, dass es interne Gruppenrichtlinien waren, welche es verhinderten.

In der Standardinstallation ist der Distributed Cache Service als Cachecluster konfiguriert, das heißt, der Distributed Cache Service läuft auf allen SharePoint Servern in einer SharePoint Farm. Dabei ist der Server, welcher zuerst installiert wurde, der erste Cachehost. Sie können allerdings auch einen einzelnen Server zum Cachehost bestimmen. Damit haben Sie u.U. eine höhere Leistung, aber eben auch keine Ausfallsicherheit mehr. Dieser Artikel behandelt den Fall des Cachecluster.

Dass die Ausnahmen der Firewall nicht gesetzt wurden, merken Sie u.a. daran, dass weder der Newsfeed, noch das Feature für Microblogging funktioniert. Auf dem ersten installierten SharePoint Server in einer SharePoint Farm schauen Sie sich die Windowsfirewall an. Diese muss auf den Ports

  • 22233
  • 22234
  • 22235
  • 22236

Ausnahmen enthalten. Die Ausnahmen müssen eingehenden ICMP Datenverkehr (ICMPv4) zulassen. Falls dies nicht der Fall ist, fügen Sie die Ausnahmen hinzu. Beachten sie außerdem, wenn Sie einen Cachehost aus einem Cachecluster entfernen, bleiben die Ausnahmen in der Firewall bestehen. Diese müssen Sie nach dem Entfernen des Cachehost manuell entfernen.

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Arbeiten mit dem SharePoint Health Analyzer (SharePoint-Integritätsanalyse)

Immer wieder erlebe ich in Projekten, dass viele Administratoren, welche mit SharePoint anfangen, mit dem Health Analyzer bzw. auf Deutsch der SharePoint-Integritätsanalyse überfordert sind. Dabei stellen sich oft die Fragen, wie entstehen eigentlich die Meldungen des Health Analyzers und wie können diese ggf. deaktiviert werden? Dieser Artikel erläutert einige grundlegende Funktionen dieses Features.

Gesehen hat den Health Analyzer sicher jeder Administrator schon einmal. Ein gelber (Hinweise, nicht kritisch) bzw. roter (potentielle Gefahr) Balken auf der Startseite der Zentraladministration. Die Meldungen können sofort angezeigt werden.

Bis die Liste mit den Meldungen erscheint, kann es eine Weile dauern. Dies ist normal, kann aber ggf. durch ein WakeUp Script beschleunigt werden. In der Liste kann jede Meldung angeklickt und näher untersucht werden.

Regeln prüfen

Die Seite eines Eintrages verrät neben der Meldung an sich auch noch viele weitere interessante Informationen. So kann man am Fuß der Seite sehen, wann die Regel ausgeführt wurde, d.h. die entsprechende Aufgabe ausgeführt wurde. Einige Regeln sind so konfiguriert, dass sie einmal in der Nacht geprüft werden, einige stündlich. Dies ist insofern wichtig, weil es durchaus möglich ist, dass ein Problem schon behoben wurde, aber die Meldung immer noch erscheint. Dies ist der erste Punkt, welcher häufig für Verwirrung sorgt. Wenn die Meldung noch in der Liste steht, heißt dies nicht, dass das Problem zum aktuellen Zeitpunkt noch besteht!

Wenn man sicher gehen möchte, dass das Problem nicht mehr besteht, kann man in der Menüleiste des Eintrages den Punkt Jetzt erneut analysieren wählen. Es ist durchaus möglich, dass die Aufgabe eine Weile dauert, abhängig davon, was geprüft wird. Ebenso ist es bei einigen Fehlern möglich, SharePoint aufzufordern diese selber zu beheben. Wenn der Fehler nicht mehr auftritt, sollte auch der Eintrag in der Liste der Fehler verschwunden sein. Diese immer wieder mal mit F5 aktualisieren.

Achtung: Wenn Sie den Eintrag bearbeiten, ändern Sie nicht die Definition der Regel, sondern wirklich nur den Listeneintrag. Der nächste Regeldurchlauf wird einen neuen Eintrag erzeugen.

Regeln deaktivieren bzw. ändern

Einige Regeln möchte man auch deaktivieren oder ändern, z.B. weil man den Fehler kennt und mit diesen leben kann. Ein klassisches Beispiel dafür ist die Meldung, dass der der freie Speicherplatz auf Laufwerken zur Neige geht. Um dies zu erledigen, klicken Sie in der Zentraladministration auf Überwachung -> Integritätsanalyse -> Regeldefinitionen
überprüfen

Suchen Sie die Regel, welche Sie ändern möchten. Der Eintrag für den freien Speicherplatz finden Sie unter Verfügbarkeit.

Öffnen Sie die Regel und klicken Sie hier auf Element bearbeiten. In der Mitte finden Sie eine Checkbox Aktiviert. Wenn Sie dort den Hacken entfernen und speichern, wird die Regel im nächsten Durchlauf nicht mehr geprüft.

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Einstellungen für die Suche bedingen Kompatibilitätsansicht

In einigen Projekten ist mir ein merkwürdiges Phänomen untergekommen. Und zwar geht es darum, dass es nicht möglich ist, die URL eines Suchcenters in den Einstellungen der Suche für die Websitesammlung bzw. Website zu setzen. Diese Einstellung findet sich in den Websiteeinstellungen. Dort ist diese Einstellung nicht aktivierbar, sofern die Anwendung nicht in der Kompatibilitätsansicht des IE ausgeführt wird. Besonders verwirrend ist, dass der Fehler nur in bestimmten Konstellationen aufzutreten scheint.

Wenn Sie die Einstellung öffnen, finden Sie den Punkt Which search results page should queries be sent to? Diese Einstellung legt fest, an welche Webpage die Suchabfrage gesendet werden soll, wenn ein Benutzer etwas ins Suchfeld einträgt und die Suche abschickt.

Ist die Kompatibilitätsansicht aktiviert, ist dies auch kein Problem. Sie aktivieren die Checkbox und tragen die URL der Seite ein. Ist die Kompatibilitätsansicht aber nicht aktiviert, ist die Checkbox ausgegraut. Ich habe bisher auch keine Möglichkeit gefunden, diese zu aktivieren, außer eben das aktivieren der Kompatibilitätsansicht.

Sie finden die Kompatibilitätsansicht im IE über das Zahnrad am oberen rechten Rand.

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Verwendete Caches in SharePoint

In SharePoint Server 2013 existieren verschiedene Cache, welche gerade für einen Anfänger zu ziemlicher Verwirrung führen können. Diese Cache nehmen unterschiedliche Aufgaben wahr und werden auch, sofern möglich, unterschiedlich konfiguriert. Dieser Artikel erläutert kurz die einzelnen Caches und liefert Hinweise auf weitere Informationen. Sämtliche Informationen beziehen sich auf eine SharePoint onPremise Umgebung.

Distributed Cache Service

Dient u.a. dem Mikroblogging und für den Newsfeed. Wird durch die AppFabric für Windows Server bereitgestellt und bietet umfangreiche Konfigurationsmöglichkeiten. Ist u.a. notwendig, wenn mit MySites gearbeitet wird. Weitere Informationen finden Sie hier:

Verwalten des Diensts für verteilten Cache in SharePoint Server 2013

BLOB-Cache

Der BLOB Cache dient der Zwischenspeicherung von Bildern und CSS Dateien im Dateisystem des Frontendservers einer SharePoint Farm. Dazu ist ein Eintrag in die web.config erforderlich, welcher sogar schon vorhanden, aber deaktiviert ist. Eine genaue Anleitung dazu findet sich hier:

Konfigurieren der BLOB-Cacheeinstellungen

Seitenausgabecache

Dieser Cache wird nur verwendet, wenn das Feature SharePoint Server Publishing Infrastructure aktiviert ist. Es kann damit geregelt werden, welche Seitenbestandteile zwischengespeichert werden und welche nicht. Dies ist u.a. abhängig davon, wo sich die Website befinden, z.B. anonymen Zugang oder nicht. Dazu werden verschiedene Profile erzeugt, wie hier beschrieben:

Konfigurieren der Cacheprofileeinstellungen

Objectcache

Dieser Cache wird nur verwendet, wenn das Feature SharePoint Server Publishing Infrastructure aktiviert ist. Er speichert Eigenschaften von Sites und Seiten. Die Last zwischen SharePoint und dem SQL Server wird reduziert. Bei diesem Cache kann u.a. die maximale Cachegröße eingestellt werden. Außerdem müssen für die Verwendung dieses Caches zwei Konten konfiguriert werden.

Konfigurieren der Objektcacheeinstellungen
Konfigurieren von Objektcache-Benutzerkonten in SharePoint Server 2013

Anonymer Suchergebniscache

Der anonyme Suchergebniscache wird in erster Linie von Veröffentlichungswebsites genutzt, die den Zugriff anonymer Benutzer zulassen. Dieser Cache speichert die Suchergebnisse von anonymen Benutzern und verwendet diese Ergebnisse für spätere Abfragen, die identisch mit der ursprünglichen Abfrage sind. Auf diese Weise wird die Leistung auf Webseiten verbessert, die den Inhaltssuche-Webpart verwenden. Eine Anpassung ist bei mir bisher nicht nötig gewesen.

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Erstes Arbeiten mit dem Microsoft Lumia 950

Zuerst einmal möchte ich allen Lesern dieses Blogs ein erfolgreiches neues Jahr 2016 wünschen! Ich für meinen Teil habe versucht dies entsprechend zu unterstützen und mir Ende des Jahres 2015 das Lumia 950 DualSim bestellt. Dieser Artikel stellt die ersten Eindrücke vor.

Wenn man das Handy auspackt und installiert, wird zuerst positiv wahrgenommen, dass das Lumia 950 über einen Akku zum Wechseln verfügt. Als SIM Karten kommen nur eine NanoSim in Frage. Da ich diese vorher noch nicht hatte, musste ich sie erst bei meinem Provider (Vodafone) bestellen. Das ging auch ohne Probleme und recht schnell.

Das erste Einrichten geht flott von der Hand, da ich vorher auf meinem Lumia 925 eine Sicherung gemacht hatte, sind die Apps und Einstellungen auch schnell wiederhergestellt. Das Handy liegt auch gut in der Hand, der Sound ist durchaus in Ordnung. Windows 10 für mobile wirkt durchdacht. Es macht durchaus Spaß damit zu arbeiten.

Die Kamera ist einfach super, auch weil es die vielen manuellen Einstellungen es ermöglichen damit richtig zu arbeiten. Damit meine ich keine Effekte, sondern u.a. manuelle Schärfe, ISO und Belichtungszeit. Die Lichtempfindlichkeit ist grandios.

Was schon ein wenig verwunderte, war die Einstellung des W-Lan . Ich habe dabei das Handy mit meinem W-Lan vom Router verbunden, was erst nach dem zweiten Anlauf geklappt hat. Die Synchronisierung meiner Kontakte, immerhin knapp 2.500 hat, hat ewig gedauert. Zwischen den Feiertagen habe ich Urlaub im Ausland gemacht und dort versucht mich an Hotel bzw. andere freie W-Lans anzuschließen. Dies hat oft nicht funktioniert, obwohl eine Verbindung mit dem Tablet ohne Probleme möglich war. Schlimmer war allerdings, wenn man sich durch eine Region bewegte, welche ständig neue W-Lans präsentierte, startete das Handy nachvollziehbar spontan neu. W-Lan deaktiviert, kein Neustart. W-Lan aktiviert, keine fünf Minuten später Handy startet neu. Ganz offensichtlich liegt hier was gewaltig im Argen. Hoffen wir auf das Beste und auf ein Update.

Natürlich ist Windows Continuum ein Highlight. Zwar benötigt man dazu ein Dock, aber das ist nicht wirklich das Problem. Wichtig ist, dass eben nicht der Handymonitor auf einem „richtigen“ Monitor dargestellt wird, sondern das auf dem Monitor ein Windows erscheint, wie man es vom Desktop kennt. Wenn man die richtigen, also universelle Apps hat, kann man mit diese auf den Monitor auch wie in einer Windows App arbeiten. Zwar ist bei den Office Programmen der Funktionsumfang bisher eingeschränkt, aber zum Arbeiten taugt das allemal. Standard Apps werden z.T. in voller Größe auf dem Monitor angezeigt. Das Handy kann man währenddessen, wer es denn möchte, als Maus benutzen.

Als Fazit bleibt, das Lumia 950 ist ein durchaus interessantes Gerät, welches gerade durch Windows 10 noch viele Möglichkeiten hat.

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Ampelfunktion für Aufgabenlisten hinzufügen

Wer hat sich nicht schon einmal für Aufgabenlisten in SharePoint eine visuelle Statusanzeige gewünscht? Zum Beispiel eine, mit welcher es möglich ist, abhängig vom Füllstand der Aufgabe (% abgeschlossen) eine rotes, gelbes oder grünes Symbol anzeigen zu lassen? Genau dies leistet das unter stehende JavaScript. Ist die Aufgabe bis zu 30% abgeschlossen, wird ein rotes Symbol angezeigt. Ist sie zu mehr als 30% und zu weniger als 100% Prozent abgeschlossen ein gelbes Symbol, bei 100% wird ein grünes Symbol angezeigt.

Damit alles funktioniert, müssen allerdings einige Anpassungen vorgenommen werden, was ja nicht wirklich verwunderlich ist.

  1. Speichern Sie den JavaScript Code in einer Datei lokal ab.
  2. Gehen Sie zur Aufgabenliste und legen Sie eine neue Spalte mit dem Namen KPI und vom Typ Link oder Bild an. Die URL muss dabei als Bild formatiert werden. Blenden Sie die neue Spalte in die Ansicht ein, falls dies nicht automatisch geschieht.
  3. Gehen Sie in die Websiteeinstellungen und dort in Gestaltungsvorlagen bzw. in MasterPage gallery. Sie finden diesen Link im Abschnitt Web-Designer-Kataloge.
  4. Klicken Sie auf Dateien -> Neues Dokument und dann auf JavaScript-Anzeigenvorlage bzw. auf JavaScript Display Template.

  5. Sie müssen jetzt noch Einstellungen vornehmen wie in der Abbildung unten gezeigt. Der Zielbereich ist dabei die Site, auf welcher Sie das Script verwenden möchten, im Allgemeinen also die Website auf der Sie sich gerade befinden. Es sind dies die Eigenschaften Zielsteuerelement-Typ, Eigenständig und Zielbereich.
  6. Gehen Sie jetzt zu der Ansicht in der Aufgabenliste, in welcher Sie die grafische Anzeige nutzen möchten. Editieren Sie die Seite und bearbeiten Sie den Webpart. Ganz am unteren Ende des Webpartsmenü gibt es den Punkt Verschiedene bzw. Miscellaneous. Im Feld JS-Link tragen Sie den Ort zu der JavaScript in dem Format
    ~site/_catalogs/masterpage/<IhrName.js>
    ein.
  7. Laden Sie zuletzt die von Ihnen gewünschten Bilder in die von Ihnen gewünschte Bibliothek hoch. Der Code geht davon aus, dass es die Bilder
    green.png
    red.png
    yellow.png

    in der Bibliothek SiteAssets gibt. Die Websitesammlung befindet sich in unter http://<Servername>/Sites/dev/.

Das sollte es gewesen sein. Natürlich läßt sich das JavaScript anpassen, der Fantasie sind da wenig Grenzen gesetzt. Inspiriert zu der Lösung wurde ich übrigens durch den folgenden Blog: http://www.abelsolutions.com/2013-blog/creating-a-simple-kpi-column-in-sharepoint-2013-list-views-using-js-link/

(function() {
var statusFieldCtx = {};
statusFieldCtx.Templates ={};
statusFieldCtx.Templates.Fields = {
&quot;KPI&quot;: {&quot;View&quot;: StatusIconViewTemplate}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(statusFieldCtx);
})();

function StatusIconViewTemplate(ctx){

var _percentValue = ctx.CurrentItem.PercentComplete;
var _percentValueConvert = parseFloat(_percentValue);

	if ( _percentValueConvert == '100')
	{
		return &quot;&amp;lt;img src='/Sites/dev/SiteAssets/green.png' /&amp;gt;&quot;;
	}
	else if (_percentValueConvert &amp;lt;= '30')
	{
		return &quot;&amp;lt;img src='/Sites/dev/SiteAssets/red.png' /&amp;gt;&quot;;
	}
	else if ( _percentValueConvert &amp;lt;='100' &amp;amp;&amp;amp; _percentValue &amp;gt;'30'  )
	{
		return &quot;&amp;lt;img src='/Sites/dev/SiteAssets/yellow.png' /&amp;gt;&quot;;
	}
}

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Meine Abenteuer mit Upgrade auf Windows 10

Nachdem mein Arbeitsrechner diverse Probleme hatte, habe ich mich zu einem Upgrade auf Windows 10 Enterprise entschlossen. Dies ging dann noch wesentlicher angespannter über die Bühne als gedacht. Einige Fehler habe ich schlicht selbst verschuldet, bei einigen ist mir die Ursache bis heute nicht ganz klar. Dieser Blogartikel soll die Fehler benennen und dafür mögliche Lösungen aufzeigen. Vielleicht hilft es ja den einen oder anderen. Ich habe mich bemüht, dabei die chronologische Reihenfolge der Fehler einzuhalten.

Falsche Version im Download

Ich habe mir Windows 10 aus meinen MSDN Abo als MCT Trainer gezogen. Dabei ich zuerst die 32 Bit Version heruntergeladen, obwohl ich ja ein 64 Bit System habe. Typischer Fehler von meiner Seite. Das Setup sagt dann auch brav, das es ein Update nicht ausführen kann.

Kein Installation möglich, weil Windows angeblich auf USB Stick installiert

Nach dem Herunterladen des richtigen Installationsmediums überraschte mich das Setup mit einer interessanten Meldung: Windows 10 kann mit Hilfe von Setup nicht auf einem USB-Speicherstick installiert werden.

Natürlich ist dies nicht der Fall, mein Windows 8.1 wurde auf einer internen Festplatte installiert. Aber, und das ist wahrscheinlich die eigentliche Ursache des Fehlers, das Betriebssystem ist auf die Festplatte gekommen, weil ich per Image dieses von einem anderen Laptop geklont habe. Das Klonen hat einen Registry Eintrag verursacht, mit dem das Setup einfach nicht umgehen konnte.

Um das Problem zu lösen, öffnen Sie den Registrierungseditor und gehen Sie zu dem Schlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control. Suchen Sie dort den DWORD-Wert PortableOperatingSystem. Dieser sollte den Wert 1 haben, das Setup erwartet aber 0. Ändern Sie den Wert entsprechend.

Danach ist das Setup ohne Probleme durchgelaufen und die Anmeldung erschien. Doch dort lauerte der nächste Fehler.

Keine Anmeldung an Windows 10 möglich, angeblich ist das Passwort falsch

Voller Freude in der Anmeldung mein Passwort eingetippt und die Meldung bekommen, dieses wäre falsch. Nun gut, beim ersten Mal kann dies passieren. Noch einmal, noch einmal und noch einmal eingetippt und immer noch falsch. Auch die visuelle Kontrolle bestätigt: Dies ist mein Passwort. Aber nein, Windows 10 sagt, es wäre falsch. Ebenso werden mir die Netzwerkverbindungen als nicht funktionierend angezeigt. Es gibt auch kein alternatives Konto zum Anmelden.

Nach etlichen Recherchen scheint sich folgendes abzuspielen: Da ich mich an Windows 8.1 mit einem Microsoft Konto anmelde, wurde dies auch so von Windows 10 übernommen. Jetzt versucht Windows 10 einen Microsoft Server zu kontaktieren um herauszufinden, ob mein eingegebenes Passwort das richtige ist. Da aber das Netzwerk nicht funktioniert…

Es blieb mir nichts anderes übrig, ich bin zu Windows 8.1 zurückgekehrt und habe dann dort einen neuen lokalen Benutzer mit administrativen Rechten angelegt. Das Windows 10 Setup neu gestartet und siehe da, mit einem lokalen Konto funktioniert die Anmeldung. Bei meinen nächsten Migrationen werde ich immer ein lokales Konto vorher anlegen. Sicher ist sicher. Jetzt geht es als nächstes an das Netzwerk.

Kein Netzwerk mehr vorhanden

Nach der Anmeldung mit dem lokalen Konto ließ sich keine Netzwerkverbindung herstellen, egal auf welchen Kanal. Weder über Kabel noch über W-Lan. Ein Blick in die Adaptereinstellungen zeigte, dass alle Netzwerkverbindungen deaktiviert waren. Es war auch nicht möglich diese zu aktivieren. Der Versuch wurde ohne Kommentar und Fehler abgebrochen. Dazu muss man noch wissen, dass auf meinem Rechner Hyper-V aktiviert war, welches virtuelle Switche erstellt hatte. Diese virtuellen Switche waren das eigentliche Problem. Ich habe diese dann gelöscht, was aber immer noch keinen Erfolg gebracht hat. Logisch, denn in den realen Verbindungen war das komplette TCP/IP nicht gebunden. Nachdem ich dieses wieder gebunden und entsprechend konfiguriert hatte, war auch dieses Problem gelöst.

Ich habe dann das Hyper-V Feature deinstalliert, neu installiert und auch das ging wunderbar.

Neu aktivieren

Da es sich um eine Windows 10 Enterprise Edition handelt, musste ich auch den Produktschlüssel neu eingeben. Ein automatische Aktivierung erfolgte nicht.

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Kopieren von VHD Dateien zwischen verschiedenen Azure Installationen

Kürzlich hatte ich die Anforderung, zwischen zwei verschiedenen Azureinstallationen VHD Dateien kopieren zu müssen. Dabei hatte ich im ersten Mandanten (Quelle) die VHDs erstellt und in virtuellen Maschinen genutzt. In einer zweiten Installation (Ziel) von Azure wurde diese dann produktiv verwendet. Das Kopieren der VHDs kann ich natürlich realisieren, indem ich die Quell-VHD auf meinen Rechner herunterlade und dann wieder auf das Zielsystem hoch lade. Besser wäre allerdings die Möglichkeit, die VHDs direkt in Azure zu kopieren. Genau dies soll das unten stehende Skript bewirken. Das Skript können Sie auch von http://www.nicothiemer.de/Download/CopyVHDsInAzure.zip herunterladen.

Bei der Ausführung des Skripts gilt die Voraussetzung, dass das Zielsystem in Azure noch nicht konfiguriert ist. Der Azuremandat steht unmittelbar nach dem anlegen zur Verfügung. Da ich mehrere Mandanten habe, muss ich in der PowerShell zwischen diesen wechseln. Wie dies geht, beschreibt dieser Blogbeitrag https://nicothiemer.wordpress.com/2015/08/24/arbeiten-mit-mehreren-mandaten-in-der-azure-powershell. Gestartet werden sollte das Skript aus dem Mandanten des Zielsystems! Dieser muss auch als Default subscription eingetragen sein.Damit das Skript erfolgreich laufen kann, muss ich daher in der PowerShell mit dem Zielmandanten verbunden sein.

Was genau das Skript wie macht, ist in den Kommentaren beschrieben. Natürlich müssen die Dummys für die Variablen mit den echten Werten ersetzt werden. Einfach gesagt kopiert es eine VHD Datei und erstellt anschließend eine VM, welche die VHD nutzt. Es soll auch bewusst als Inspiration dienen. Ich habe darum auf Abfragen, ob schon Objekte bestehen, verzichtet. Damit sollte der eigentliche Code besser lesbar sein.

Anpassungen

Sie müssen sämtliche Variablen mit Ihnen eigenen Werten versehen. Einige Werte benötigen dazu besondere Aufmerksamkeit.

In der Zeile 55 muss noch eine Anpassung vorgenommen werden. In dieser wird mit Set-AzureVNetConfig das neu erstellte Netzwerk konfiguriert. Die XML Datei dazu steht in der Zeile 14 in der Variable $netconfigpath. Neben diesem Pfad müssen Sie außerdem noch die Datei als solche anpassen. Sie finden diese Datei in der .zip Datei zum Download oder am Ende des Artikels.

Was ich noch brauche, ist die URL der VHD, welche kopiert werden soll. Diese kann ich u.a. erhalten, wenn ich mir in der UI von Azure die Eigenschaften der VHD anzeigen lasse. Gehen Sie dazu im Quellsystem im (alten) Azureportal auf ihre virtuellen Rechner und klicken Sie dort auf den Reiter Datenträger. Ganz am rechten Rand haben Sie die Spalte Speicherort. Wenn Sie über diese Einträge mit der Maus fahren, erscheint ein Symbol zum Kopieren. Klicken Sie auf dieses und Sie haben den Speicherort der VHD. Die Variable für den Wert ist $diskSource und steht in Zeile 20.

Natürlich muss die virtuelle Maschine, welche die VHD die Sie kopieren möchten verwendet, heruntergefahren sein. Ich möchte auch nicht verschweigen, dass ich mich bei der Erstellung dieses Skripts großzügig vom Installationsskript für den Kurs MOC 20-346C Managing Office 365 Identities and Services inspiriert haben lassen.

Skript CopyVHDsInAzure.ps1


#Azure variables:

$affinitygroup = &quot;Your affinitygroup&quot;

#locations: https://azure.microsoft.com/en-us/regions/#services
$location = &quot;West Europe&quot;

#Storage
#only use lowercase letters and numbers!
$storage = &quot;your storagename&quot;

#network variables
$dnsname = &quot;Your dns&quot;
$netconfigpath =&quot;C:\Azure\NetworkConfigFinal.xml&quot;
$vnet=&quot; Your virtualnetwork&quot;
$subnet = &quot;Your subnet&quot;

#copy VHDs
$diskSource = &quot;source of your your vhd, eg. https://xxx.blob.core.windows.net/vhds/xxx.vhd &quot;
$diskname = &quot;Name of the new vhd in the destination, eg. xxx-new.vhd&quot;
$AzureDiskname = &quot;Name of the new vhs without vhd., eg. xxx-new&quot;
$srcStorageContainer = &quot;Source storagecontainer, eg. vhds&quot;
$destStorageContainer = &quot;Destination storagecontainer, eg. vhds&quot;

#create VM
$servername=&quot;name of the new virtuel machine&quot;
$cloudservice =&quot;name of the cloudservice&quot;
Write-Host &quot; &quot;
Write-Host &quot;Step 1. Create Azure affinity group&quot; -ForegroundColor Magenta
Write-Host &quot; &quot;
#create affinitygroup
New-AzureAffinityGroup -Name $affinitygroup -Location $location
# Wait while affinity group is created
Write-Host &quot; &quot;
Write-Host &quot;Step 2. Create Azure storage service&quot; -ForegroundColor Magenta
Write-Host &quot; &quot;
#create storage
New-AzureStorageAccount -StorageAccountName $storage -AffinityGroup $affinitygroup

#get the current subscription
$subscriptionObj = get-AzureSubscription -Default
$subscriptionId = $subscriptionObj.SubscriptionId
set-azuresubscription -SubscriptionId $subscriptionId -CurrentStorageAccountName $storage
select-azuresubscription -SubscriptionId $subscriptionId

Write-Host &quot; &quot;
Write-Host &quot;Step 3. Create Virtual Network&quot; -ForegroundColor Magenta
Write-Host &quot; &quot;
#create network
$dns = New-AzureDns -IPAddress 10.0.0.4 -Name $dnsname
Set-AzureVNetConfig -ConfigurationPath $netconfigpath

Write-Host &quot; &quot;
Write-Host &quot;Step 4. Copy VHD Blob&quot; -ForegroundColor Magenta
Write-Host &quot; &quot;
#copy VHDs - create Storage Container
$destStorageAccountKeyObj = get-azurestoragekey $storage
$destStorageAccountKey = $destStorageAccountKeyObj.Primary
$dest = New-AzureStorageContext $storage $destStorageAccountKey
New-AzureStorageContainer $destStorageContainer -Permission Container -context $dest

#copy VHDs
Start-AzureStorageBlobCopy -AbsoluteUri $diskSource -DestBlob $diskname -DestContext $dest -DestContainer $destStorageContainer

$stateCopy = Get-AzureStorageBlob -Context $dest -Container $destStorageContainer | where {$_.Name -like $diskname}
$stateCopy | Get-AzureStorageBlobCopyState

do
{
Write-Verbose &quot;Checking storage blob copy status every $delaySeconds seconds.&quot;
Write-Verbose &quot;This will repeat until all copy operations are complete.&quot;

$continue = $false
Get-AzureStorageBlobCopyState -Blob $diskname -Container $destStorageContainer | Format-Table -AutoSize -Property Status,@{label=&quot;Percent&quot;;expression={&quot;{0:P2}&quot; -f $($_.BytesCopied/$_.TotalBytes)}}, @{label=&quot;VHD&quot;;expression={$($_.Source).tostring().substring(44,13)}}
$blobStatusPending = Get-AzureStorageBlobCopyState -Blob $diskname -Container $destStorageContainer

# Continue checking status as long as at least one operations is still pending.
if (!$continue)
{
$continue = $blobStatusPending.Status -eq &quot;Pending&quot;
}

if ($continue)
{
Start-Sleep $delaySeconds
}
} while ($continue)

Write-Host &quot; &quot;
Write-Host &quot;Step 5. Define Virtual Disks&quot; -ForegroundColor Magenta
Write-Host &quot; &quot;

$blobsToDisks = Get-AzureStorageBlob -Context $dest -Container $destStorageContainer | where {$_.Name -like $diskname}
Add-AzureDisk -DiskName $AzureDiskName -MediaLocation $blobsToDisks.ICloudBlob.Uri -OS Windows

Write-Host &quot; &quot;
Write-Host &quot;Step 6 Creating VM&quot; -ForegroundColor Magenta
Write-Host &quot; &quot;

$vmName = $servername
$newVM = New-AzureVMConfig -Name $vmName -DiskName $vmName -InstanceSize 'Small' `
| Add-AzureProvisioningConfig -Windows `
| Set-AzureSubnet -SubnetNames $subnet

New-AzureVM -ServiceName $cloudservice -AffinityGroup $affinitygroup -VMs $newVM -VNetName $vnet -DnsSettings $dns -WaitForBoot
Write-Host &quot;Finish!&quot;

Datei NetworkConfigFinal.xml

&amp;lt;NetworkConfiguration xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration&quot;&amp;gt;
&amp;lt;VirtualNetworkConfiguration&amp;gt;
&amp;lt;Dns&amp;gt;
&amp;lt;DnsServers&amp;gt;
&amp;lt;DnsServer name=&quot;Your DNS name&quot; IPAddress=&quot;10.0.0.4&quot; /&amp;gt;
&amp;lt;/DnsServers&amp;gt;
&amp;lt;/Dns&amp;gt;
&amp;lt;VirtualNetworkSites&amp;gt;
&amp;lt;VirtualNetworkSite name=&quot;Your virtualnetwork&quot; AffinityGroup=&quot;Your affinitygroup&quot;&amp;gt;
&amp;lt;AddressSpace&amp;gt;
&amp;lt;AddressPrefix&amp;gt;10.0.0.0/8&amp;lt;/AddressPrefix&amp;gt;
&amp;lt;/AddressSpace&amp;gt;
&amp;lt;Subnets&amp;gt;
&amp;lt;Subnet name=&quot;Your subnet&quot;&amp;gt;
&amp;lt;AddressPrefix&amp;gt;10.0.0.0/11&amp;lt;/AddressPrefix&amp;gt;
&amp;lt;/Subnet&amp;gt;
&amp;lt;/Subnets&amp;gt;
&amp;lt;DnsServersRef&amp;gt;
&amp;lt;DnsServerRef name=&quot;Your DNS name&quot; /&amp;gt;
&amp;lt;/DnsServersRef&amp;gt;
&amp;lt;/VirtualNetworkSite&amp;gt;
&amp;lt;/VirtualNetworkSites&amp;gt;
&amp;lt;/VirtualNetworkConfiguration&amp;gt;
&amp;lt;/NetworkConfiguration&amp;gt;

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

Arbeiten mit mehreren Mandaten in der Azure PowerShell

Wenn man wie ich viele Beratungen und/oder Schulungen für Microsoft Azure gibt, hat man nach einer Weile auch einige Testversionen von Microsoft Azure erstellt. In einer deutschen Azure Installation haben diese immer den Namen „Kostenlose Testversion“. Wenn ich jetzt mit meiner Testinstallation in der Azure PowerShell arbeiten möchte, muss ich zuerst eine Konfigurationsdatei importieren. Diese enthält neben dem Name der Installation auch deren eindeutige ID.

Ich gehe davon aus, dass ich im Standardbrowser schon an der Azure Testinstallation angemeldet bin und die Azure PowerShell installiert und offen ist. Mit dem Befehl
Get-AzurePublishSettingsFile
kann ich mir die Installationsdatei besorgen und lokal ablegen. Ist dies die erste Installation, kann ich mit dieser direkt in der PowerShell weiterarbeiten.
Beispiel:
Import-AzurePublishSettingsFile –PublishSettingsFile „C:\Azure\Kostenlose Testversion-8-24-2015-credentials.publishsettings“


Habe ich aber mehrere Installationen, wird es etwas komplizierter. Die Azure PowerShell arbeitet nämlich immer mit der ersten Installation. Wie viele es gibt und deren Daten kann ich mir mit
Get-AzureSubscription
anzeigen lassen.

Im Beispiel oben gibt es insgesamt drei Installationen, alle mit dem gleichen Namen „Kostenlose Testversion“. Wenn ich versuche, zu meiner neuen, aktuellen Installation zu wechseln, wird der folgende Befehl natürlich nicht funktionieren.

Select-AzureSubscription -Default -SubscriptionName „Kostenlose Testversion“

Mit dem Schalter –Default sorge ich dafür, dass die Änderung beständig ist. Das heißt, wenn ich die PowerShell schließe und wieder öffne, soll die Einstellung wieder gelten. Sonst gilt sie nur für die aktuelle Session. Der Name unterscheidet Übrigens zwischen Groß/Kleinschreibung.

In der Beschreibung zu dem Befehl unter https://msdn.microsoft.com/en-us/library/dn495189.aspx steht, der Parameter SubscriptionName ist erforderlich. Also versuche ich es mit

Select-AzureSubscription -Default -SubscriptionName „Kostenlose Testversion“ –SubscriptionId faf0d01c-82ad-482d-bd01-f983f80a3642

Da allerdings erhalte ich den Fehler, dass der Befehl mit diesen Argumenten nicht aufgerufen werden kann. OK, dann versuche ich eben, entgegen der Beschreibung einfach mal den Namen wegzulassen.

Select-AzureSubscription -Default -SubscriptionId faf0d01c-82ad-482d-bd01-f983f80a3642

Und siehe da, es geht!

Irgendwie nicht ganz so logisch, aber gut 🙂

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer

SharePoint Fehler owssvr.dll?CS=65001

In einem Kundenprojekt habe ich einen SharePoint Server auf einem, vom Kunden zur Verfügung gestellten, Server installiert. Die Installation verlief auch reibungslos, keine Probleme. Ebenso ließen sich neue Webanwendungen und Websitesammlungen erstellen. In der Websitesammlung ging auch das Erstellen von Listen noch wunderbar, aber das Anpassen der Ansichten war nicht möglich.

Wenn man versuchte eine Ansicht zu erstellen oder diese zu ändern, erhielt man eine weiße Seite. Mehr nicht. Keine Fehlermeldung, keine ID, nichts. Die Änderungen wurden auch nicht übernommen. In der URL wurde man allerdings zu http://<PortalURL>/owssvr.dll?CS=65001
weitergeleitet.

Im Internet gibt es dazu mehrere Blogbeiträge, leider half keiner weiter. Weder hatte ich das Tracing aktiviert, noch hatte ich einen benutzerdefinierten HTTP Handler geschrieben. Nach der Analyse der Windows- und SharePoint Log Dateien bin ich zu dem Schluss gekommen, dass die Kerberos Authentifizierung offensichtlich Probleme machte. Es scheint so zu sein, dass sich SharePoint nach dem Ändern einer Ansicht einen neuen Token holen möchte. Dies ist ihm –warum auch immer- nicht gelungen. Auch ein entfernen des Computers aus der Domain und das erneute Hinzufügen hat keine Veränderung gebracht.

Am Ende wurde ein komplett neuer Rechner aufgesetzt, auf welchen die oben beschrieben Fehler nicht auftraten. Sollte noch jemand eine Idee haben, was den Fehler verursacht hat, über einen Kommentar würde ich mich sehr freuen!

Vielen Dank für Ihr Interesse an meinem Blogeintrag.
Gerne beantworte ich Ihnen persönlich weitergehende Fragen zu diesem Thema.
Kontaktieren Sie mich einfach über mein Kontaktformular.

Sie wollen mehr über mich erfahren? Dann gehen Sie auf meine Site
http://www.nicothiemer.de

Nico Thiemer