Tagged Konsole

Microsoft SharePoint Listen verschieben

Microsoft SharePoint ist eine wunderbare Plattform, um die verschiedensten Daten zu speichern und zu Verfügung zu stellen. Es ist einfach in der Anwendung, stabil in der Ausführung und flexibel genug, all ihre Belange abzubilden. Dennoch sind manche Dinge nicht so offensichtlich. Sie haben zum Beispiel eine Datenstruktur aufgebaut und möchten eine Liste verschieben, da sie nun zu einer neuen oder anderen logischen Struktur gehört. Es gibt zwar die Option Dokumente in andere Listen zu verschieben, wenn es aber darum geht Listen in andere Unterwebseiten zu verschieben, dann sucht man in der Benutzeroberfläche vergebens.

Es gibt zwar einen Befehl zum exportieren einer Liste, aber keine Möglichkeit, diese Liste wieder zu importieren. Jedenfalls nicht über die grafische Benutzeroberfläche. Der einzige Weg führt über die Microsoft SharePoint PowerShell. Hier werden die folgenden Arbeitsschritte ausgeführt:

  1. Liste exportieren
  2. Liste importieren
  3. Liste am ursprünglichen Ort löschen

Das Vorgehen ist recht einfach. Wichtig ist hier, dass man darauf achten muss, immer den URL einer Website oder einer Liste angeben muss. Auch wenn die Website oder Liste anders heißt.
Im Video legen wir eine Unterwebsite an, legen eine Liste an und füllen diese mit Daten und führen dann die Verschiebung der Liste in die Unterwebsite aus. Deswegen beschränke ich mich in diesem Blog-Post auf die Befehle, die ausgeführt werden müssen.

1.  Liste exportieren

Export-spweb QuellWebUrl -ItemUrl “Lists/UrlDerListe/“ -IncludeUserSecurity -IncludeVersions All
             -path C:\PfadInDenExportiertWerdenSoll\NameDerDatei.cmp -nologfile

Betrachten wir nun die einzelnen Parameter:

QuellWebUrl Der URL der Website, die die Liste enthält. Zum Beispiel http://sharepoint.MeineWebsite.com
ItemUrl Der URL der Liste, die verschoben werden soll. Allerdings wird hier nicht der vollständige URL angegeben, sondern nur der Teil nach der QuellWebUrl, also zum Beispiel lists/MeineListe/. Beachten Sie bitte, dass sie einen abschließenden / setzen müssen, da der Befehl sonst einen Fehler produziert.
IncludeUserSecurity SharePoint speichert Meta Daten. Beispielsweise wird bei jedem Vorgang festgehalten, welcher Benutzer wann diese Operation durchgeführt hat. Wann also ein Element angelegt, oder verändert wurde. Mit dem Parameter IncludeUserSecurity werden diese Daten unverändert exportiert.
IncludeVersions Bei einer Liste oder Bibliothek kann man die Version einschalten. D.h. dass zum Beispiel von Dateien bei jedem Speichern eine neue Version angelegt wird, und man so die Möglichkeit hat, eine alte Version wiederherzustellen. Mit dem Befehl IncludeVersions und dem Wert All werden alle Versionen mit übernommen.
path Gibt den Dateipfad inklusiv Dateiname an, an dem die exportierte Datei gespeichert werden soll.
nologfile Verhindert die Erstellung eines Logfiles.

2. Liste importieren

import-spweb ZielWebUrl -IncludeUserSecurity
             -path C:\PfadInDenDieDateiExportiertWordenIst\NameDerDatei.cmp -nologfile

Auch hier betrachten wir die Parameter:

ZielWebUrl Der URL der Website, in die die Liste eingefügt werden soll. Zum Beispiel http://sharepoint.MeineWebsite.com/Unterweb
IncludeUserSecurity SharePoint speichert Meta Daten. Beispielsweise wird bei jedem Vorgang festgehalten, welcher Benutzer wann diese Operation durchgeführt hat. Wann also ein Element angelegt, oder verändert wurde. Mit dem Parameter IncludeUserSecurity werden diese Daten unverändert importiert, sofern sie exportiert wurden.
path Gibt den Dateipfad inklusiv Dateiname an, an dem die zu importierende Datei gespeichert ist.
nologfile Verhindert die Erstellung eines Logfiles.

3. Liste am ursprünglichen Ort löschen

Um die Liste am ursprünglichen Ort zu löschen ist eine kurze Befehlabfolge von Nöten. Die Befehlabfolge besteht aus drei Befehlen:

  1. Holen eines SharePoint Webobjektes
  2. Ausführen der Objekt eigenen Löschfunktion
  3. Freigeben des SharePoint Webobjektes

Und hier die drei Befehle:

C:\>$spweb = Get-SPWeb QuellWebUrl
C:\>$spweb.Lists["NameDerListe"].Delete()
C:\>$spweb.Dispose()

drücken Sie nach der Eingabe eines jeden Befehls die ENTER-Taste.  Der Befehl Get-SPWeb bekommt in diesem Fall den gleichen QuellWebUrl, den wir auch in Schritt 1 angegeben haben.  Bitte beachten Sie, dass für NameDerListe an dieser Stelle wirklich der Name der Liste zu benutzen ist und nicht der URL.  Unser Beispiel würde zusammengefasst so aussehen:

C:\>Export-SPWeb https://sharepoint.pmd-media.local/Test -ItemUrl "lists/Zu verschiebende Liste/"
-IncludeUserSecurity -IncludeVersions All -path "C:\Zu verschiebende Liste.cmp" -nologfile
C:\>Import-SPWeb https://sharepoint.pmd-media.local/Test/Unterweb -IncludeUserSecurity
-path "C:\Zu verschiebende Liste.cmp" -nologfile
C:\>$spweb = Get-SPWeb https://sharepoint.pmd-media.local/Test
C:\>$spweb.Lists["Zu verschiebende Liste"].Delete()
C:\>$spweb.Dispose()

im Video gehe ich mit Ihnen Schritt für Schritt durch den Prozess durch. Ich zeige Ihnen, wie Sie eine ScharePoint-Liste anlegen, mit Daten befüllen, dann eine Unterwebsite anlegen, danach die Liste exportieren und wieder importieren, um dann über die Benutzeroberfläche von SharePoint die Liste zu löschen. So lernen Sie die unterschiedlichsten Wege kennen, um mit Listen effizient zu arbeiten.

Viel Spaß beim Video!

Über Ihre Kommentare, Kritik, Lob, Anregungen freue ich mich. Benutzen Sie dafür einfach die Kommentarfunktion unterhalb dieses Beitrags.

Kaputte Namespaces im Microsoft Distributed File System (DFS) löschen

Es kann vorkommen, dass durch Fehlkonfiguration ein Namespace in einem Verteilten Datei System (Distributed File System, DFS) zerstört wird. Er kann dann nicht mehr abgerufen oder gelöscht werden. Die einzige Option, die bleibt, ist, den Namespace aus der Anzeige zu nehmen. Da ich nun den Namespace benutzen wollte, wollte ich ihn wieder herstellen bzw. neu anlegen. Doch dieses quittierte mir der Server immer wieder mit der Aussage, dass der Namespace bereits vorhanden wäre und deswegen wahrscheinlich nicht richtig funktionieren würde. ...

Read more

Microsoft Exchange Server 2003 ExMerge-Problem

Gestern habe ich mit ExMerge gekämpft, um einzelne Postfächer aus einem Microsoft Exchange Server 2003 in PST-Dateien zu exportieren. Also habe ich die Konfiguration aufgesetzt, die exmerge.ini Datei ausgefüllt, eine mailboxes.txt Datei angelegt, etc. Also, alle Vorarbeiten getroffen, die durchzuführen waren.

Dann ging es an die Ausführung:

exmerge -b -d

-b startet ExMerge im Batch-Mode (ohne GUI) und -d zeigt während der Ausführung ein Fenster mit einem Fortschrittsbalken an.

Soweit die Theorie. In der Praxis funktionierte das nicht. Ich bekam im Logfile folgende Fehlermeldung:

Error! Server server.domain.local is not listed as an Exchange 2000
server in the Active Directory on server SERVER.
(CADRoutines::GetExchangeServerNameInfo)

Das Web gab hierzu nicht wirklich was her. Ich habe gesucht und gesucht. Und folgende Vorschläge überprüft:

  • Receive As (Empfangen als) und Send As (Senden als) Erlaubnis für den ausführenden User auf dem Exchange Server (Administratoren haben bei diesen Punkten sowohl die Erlaubnis als auch die Verweigerung)
  • ob Exchange-Dienste ausgeführt werden
  • verschiedene Einstellungen in der exmerge.ini ausprobiert
  • eine Gruppe und einen User angelegt (es sollte laut Foren eine Gruppe Exchange Services geben, die ich aber nicht finden konnte. Dieser Gruppe sollte der User zugeordnet werden. Angeblich weil ExMerge nicht mit dem Administrator Konto ausführbar sei – sobald aber die Einstellungen bzgl. Receive As und Send As geändert waren und der Informationsspeicher neu gestartet wurde, ist das aber kein Problem!)

Lösung

Zu diesem Fehler gab das Web leider nicht mehr her. Heute habe ich das Problem gelöst: Der Servername! Ich hatte den FQDN (Full Qualified Domain Name, Voll qualifizierter Domain-Name) angegeben. ExMerge nutzt zur Überprüfung aber LDAP, um das Active Directory abzufragen und erwartet hier den reinen Servernamen. In meinem Fall also nicht server.domain.local, sondern schlicht und einfach nur server. Im Active Directory findet er weder unter der IP etwas, noch unter localhost.

Danach lief alles wie gewünscht und problemlos.

Haben Sie Ähnliches erlebt mit ExMerge? Ich freue mich auf Ihre Kommentare.

HowTo: Symantec Endpoint Protection Manager Passwort zurücksetzen

Es kann passieren, dass bei der Anmeldung am Symantec Endpoint Protection Manager die folgende Meldung kommt:

Authentifizierungsfehler, wiederholen sie den Vorgang

bzw. nach mehrmaligen Fehlversuchen

Das Administratorkonto ist gesperrt

Ich hatte den Fall auf 2 Systemen, in die ich längere Zeit nicht reingeschaut hatte. Meine dokumentierten Passwörter funktionierten nicht. Aus welchem Grund, kann ich nicht genau sagen, vielleicht hat ja jemand eine Erklärung dafür (ich würde mich über Kommentare dazu sehr freuen).

Die Lösung

Im Programmverzeichnis von Symantec Endpoint Protection Manager gibt es ein Unterverzeichnis Tools:

C:\Programme (x86)\Symantec\Symantec Endpoint Protection Manager\Tools

bzw.

C:\Program Files (x86)\Symantec\Symantec Endpoint Protection Manager\Tools

(die zweite Schreibweise ist der Standard-Pfad, wenn man ihn über die Kommandozeile erreichen möchte).

In diesem Verzeichnis ist die Datei resetpass.bat, die das Administratorpasswort auf die Default-Werte zurücksetzt:

Benutzername: admin
Passwort: admin

Bei der Anmeldung am Symantec Endpoint Protection Manager wird man nach Eingabe der Passwörter nach einem neuen Passwort gefragt.

Virtuelle Maschine im Virtual Server 2005 von der Kommandozeile starten

Hyper-V ist die Technologie, wenn es um Virtualisierungen auf Microsoft Windows Server 2008-Systemen geht. Doch auch auf Server 2003 kann man virtualisieren: mit Microsoft Virtual Server 2005 (kostenloser Download hier).

Die Konfiguration ist ähnlich wie auch bei Hyper-V, allerdings ist der Server-Manager auf einer Web-Oberfläche zu Hause. Nun hatte ich das Problem, dass, nachdem ich die virtuelle Maschine angelegt hatte, der Browser (Internet Explorer 8 ) beim Klick auf den Link zum Starten der virtuellen Maschine einen Java-Script Error meldete. Kurzum, die Maschine ließ sich nicht starten.

Virtual Server hat zwar keine direkten Befehle zum Starten, bringt aber ein API mit, derer man sich bedienen kann.

Zunächst legt man in einem Script folgende Initialisierung an:

var objVS = new ActiveXObject("VirtualServer.Application", strServer);
var objVM = objVS.FindVirtualMachine(strVMName);
var objTask;

Nachdem das Objekt angelegt wurde, kann man die Maschine mit folgendem Befehl starten:

objTask = objVM.StartUp();
WaitForTask(objTask);

Hier der Code für ein komplettes Script:

//
// Remote Start/Stop einer Virtuellen Maschine
//
var CRLF = "rn";
var VM_STATE_OFF = 1;
var VM_STATE_RUNNING = 5;

var strServer = "VS Server"
var strVMName = "Gast VM Name"

var objVS = new ActiveXObject("VirtualServer.Application", strServer);
var objVM = objVS.FindVirtualMachine(strVMName);
var objTask;

//
// Wenn die virtuelle Maschine gefunden wurde
//
if ( objVM != null )
{
    WScript.Echo("Virtuelle Maschine mit folgendem Namen gefunden: " +
      strVMName);

    //
    // Wenn die VM läuft, dann auf einen sauberen Shutdown warten
    //
    // Das setzt voraus, dass die VM Additions auf dem Gast OS
    // installiert sind
    //
    // Es kann passieren, dass dieser Befehl auf einer
    // "eingefrorenen" VM nicht funktioniert
    //
    if ( objVM.State == VM_STATE_RUNNING )
    {
        try
        {
            WScript.Echo("Versuche, die VM herunterzufahren...");
            task = objVM.GuestOS.Shutdown();
            WaitForTask(task);
        }
        catch (e)
        {
            //
            // Das Herunterfahren hat nicht funktioniert,
            // also schalte die VM aus
            //
            WScript.Echo("Erzwinge das Ausschalten der VM...");
            task = objVM.TurnOff();
            WaitForTask( task );
        }
    }

    //
    // Ist eine VM ausgeschltet, dann wird sie gestartet
    //
    if ( objVM.State == VM_STATE_OFF )
    {
        WScript.Echo("Starte VM...");
        objTask = objVM.StartUp();
        WaitForTask(objTask);
    }
}
else
{
    WScript.Echo("Konnte kein VM mit folgendem Namen finden: " +
        strVMName);
}

Kopieren Sie diesen Code in einen Editor und speichern die Datei mit der Endung .js ab. Danach können Sie sie auf dem Host (Server, der den Virtual Server 2005 ausführt) auf der Kommandozeile ausführen. Ersetzen Sie die Werte VS Server und Gast VM Name mit dem Namen Ihres Servers und mit dem Namen der virtuellen Maschine.

Diesen Code habe ich auf dem Blog von David Wang gefunden: http://blogs.msdn.com/david.wang/archive/2005/10/18/HOWTO_Remotely_start_and_stop_a_Virtual_Machine_on_Virtual_Server_2005.aspx - Thank you David for sharing this code on the web.