SharePoint 2013 Farm Installation mittels PowerShell Teil 1

Der erste Teil dieser Serie befasst sich mit der Farmkonfiguration einer SharePoint 2013 Umgebung. Das Hauptteil beschäftigt sich mit der Konfiguration via PowerShell. Die Konfiguration der einzelnen Service Applicationen findet ihr im zweiten Teil.

SharePoint lässt sich auch in der Version 2013 wieder sehr gut automatisieren. In diesem Artikel erhaltet ihr einen kurzen Überblick wie dies mittels PowerShell Skript gemacht werden kann.

Abfragen der Farm Parameter

Im erste Teil des Skripts fragt die benötigten Parameter für die Farm ab. Für den Datenbankserver sollte vorher in jedem Fall ein entsprechender Alias angelegt werden, die Beschreibung dazu findet ihr im folgendem Beitrag.

Weiterhin habt ihr die Möglichkeit per Skript neuen SharePoint 2013 Server in eine bestehende Farm hinzuzufügen.

 Write-Host "Joining the server into a existing farm" -foregroundcolor "green"
    # Database server name
    $DBServer = Read-Host "Please specify the name of your sql server (SERVER or SERVERINSTANCE,PORT");
    $ConfigDB = Read-Host "Please specify the name of the existing SharePoint configuration database";
    $Passphrase = Read-Host "Finally, please specify your farm passphrase" -AsSecureString
}
else
{
    # Database server name
    $DBServer = Read-Host "Please specify the name of your sql server (SERVER or SERVERINSTANCE,PORT");
    # Name of the SharePoint farm
    $FarmName = Read-Host "Please specify your farm name";
    #Name of your SharePoint farm
    $ConfigDB = $FarmName+"_Config";
    # Name of the admin content database
    $AdminContentDB = $FarmName+"_AdminContentDB";
    # set username and password for the farm account
    Write-Host "Please enter your credentials for the farm account e.g. DOMAINUsername";
    # Get credetials for the FarmAccount
    $FarmAccount = Get-Credential;
    $condWebApp = Read-Host "Do you want register the Web Application Account? (Y/N)"
    if($condWebApp -eq "Y")
    {
        # set service account for web applications
        $WebAppAccount = Get-Credential
    }

    $condService = Read-Host "Do you want to register a service application account? (Y/N)"
    if($condService -eq "Y")
    {
        # set user account for service applications
        $ServiceAppAccount = Get-Credential
    }

    $Passphrase = Read-Host "Enter your farm passphrase (must comply password guidelines)" -AsSecureString;
    $CAPort = Read-Host "Enter a port number for central administration e.g. 9090";
    # set authentication method for the central administration website
    $NTLM = New-Object System.Management.Automation.Host.ChoiceDescription "&NTLM", ""
    $Kerberos = New-Object System.Management.Automation.Host.ChoiceDescription "&Kerberos", ""
    $Options = [System.Management.Automation.Host.ChoiceDescription[]]($NTLM, $Kerberos)
    $Result = $Host.UI.PromptForChoice("","Please choose your authentication method",$Options,0)
    switch($Result)
    {
        0 { $AuthMethod = "NTLM"}
        1 { $AuthMethod = "Kerberos"}
    }
}

Nicht vergessen, bevor die eigentliche Konfiguration beginnt muss die SharePoint PowerShell Erweiterung geladen werden.

if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null)
{
	Add-PSSnapin Microsoft.SharePoint.PowerShell;
}

Der zweite Teil übernimmt die eigentliche Konfiguration, die mit den oben eingegebenen Parametern durchgeführt wird. Die ausgeführten Befehle entsprechen denen des Configuration Wizards, nur das sie mittels PowerShell durchgeführt werden.

#Gerneate new configuration database for sharepoint environment
    New-SPConfigurationDatabase -DatabaseName $ConfigDB  -DatabaseServer $DBServer -AdministrationContentDatabasename $AdminContentDB -Passphrase $Passphrase -FarmCredentials $FarmAccount

    # perform the configuration wizard tasks
    Initialize-SPResourceSecurity
    Install-SPHelpCollection -All
    Install-SPService;
    Install-SPFeature -AllExistingFeatures
    Install-SPApplicationContent

    # generate the new website for central administration
    New-SPCentralAdministration -Port $CAPort -WindowsAuthProvider $AuthMethod

Nach erfolgreichem Ausführen der Befehle ist der SharePoint 2013 Server grundlegend konfiguriert. Der Zugriff auf die Zentraladministration ist nun bereits möglich.

Abschließend kann noch für Entwicklungs- und Testsysteme der LoopbackCheck deaktiviert werden.

$disableLoopback = read-host "Do you wish to disable loopback check? (Y/N)"
if ($disableLoopback -eq "Y")
{
    New-ItemProperty HKLM:SystemCurrentControlSetControlLsa -Name "DisableLoopbackCheck"  -value "1" -PropertyType dword
    Write-Host "Loopback Check has been disabled. Please reboot your server after the configuration." -ForegroundColor Green
}

Das vollständige PowerShell Script kann hier heruntergeladen werden.
Im Teil 2 wird dann die Konfiguration der Service Applications näher erläutert.

SharePoint 2013 RTM Installation

Nachdem ich den mühsamen Weg der SharePoint 2013 Installation nun schon ein paar mal gegangen bin, habe ich nun die Hotfixes, die noch benötigt werden aufgelistet. Bei der Suche nach solchen wertvollen Tipps hilft hin und wieder sogar die Microsoft Dokumentation weiter.
Damit SharePoint unter dem Windows Server 2008 R2 richtig funktioniert, müssen die folgenden Hotfixes installiert werden:

Windows Server 2012 benötigt nur den folgenden Hotfix:

Viel Spaß beim Installieren.

SQL Alias vergeben

Bei Anwendungen, wie z.B. SharePoint Server möchte man einen Namen des Datenbankservers angeben, der sich nicht mehr ändern soll oder aufgrund der Anwendung sich nicht mehr ändern lässt. Zu diesem Zweck gibt es die Möglichkeit einen sog. Alias zu vergeben. Die Vergabe kann über zwei Wege erfolgen.

  1. SQL Server Client Network Utility
  2. Powershell Skript

Für die erste Variante muss der SQL Server Configuration Manager auf dem betroffenen System installiert sein.

Anlegen mittels cliconfg

Das Einrichten über das SQL Server Client Network Utility funktioniert wie folgt:
32 Bit Systeme: C:windowssystem32cliconfg.exe
64 Bit Systeme: C:windowssyswow64cliconfg.exe

Anschließen wie im Bild zu sehen, den Alias Tab öffnenSQl Alias

 

 

 

 

 

Anschließend mittel Hinzufügen einen neuen Alias angeben. sqlalias1

 

 

 

 

Der Servername muss an dieser Stelle mit Instanz angegeben werden, wenn es mehrere Instanzen gibt. Wichtig ist dabei darauf zu achten, dass ihr den gleichen Port eintragt, wie er auf dem SQL Server für die Kommunikation mittels TCP/IP festgelegt wurde.

sqlalias2

Wenn alles geklappt hat wird euer Alias wie im Bild zu sehen angezeigt

Anlegen mittels PowerShell

Im folgenden Script werden die Parameter mittels Konsoleneingabe abgrfragt.

#Name of the SQL Alias
$AliasName = Read-Host "Please specify the name of the SQL Server Alias"

#Name of the SQL Server with Instance name if it is necessary
$ServerName =  Read-Host "Please specify the SQL Server Name (SERVER or SERVERINSTANCE,PORT)"
# port in which the sql server is running
$ServerPort =  Read-Host "Please specify the SQL Server Port e.g. 1433"
#These are the two paths in the registry where the aliases are stored
$x86 = "HKLM:SoftwareMicrosoftMSSQLServerClientConnectTo"
$x64 = "HKLM:SoftwareWow6432NodeMicrosoftMSSQLServerClientConnectTo"

#We're going to see if the ConnectTo key already exists, and create it if it doesn't.
if ((test-path -path $x86) -ne $True)
{
    write-host "$x86 doesn't exist"
    New-Item $x86
}
if ((test-path -path $x64) -ne $True)
{
    write-host "$x64 doesn't exist"
    New-Item $x64
}

#Set alias the type is TCP
$TCPAlias = "DBMSSOCN," + $ServerName +"," + $ServerPort

#Write values into registy
New-ItemProperty -Path $x86 -Name $AliasName -PropertyType String -Value $TCPAlias
New-ItemProperty -Path $x64 -Name $AliasName -PropertyType String -Value $TCPAlias

Das vollständige Script zum Download

SharePoint 2010 Taxonomiewerte werden nicht angezeigt

Das Problem ist, das Metadaten zwar zugewiesen wurden, aber nur der Administrator kann diese einsehen.

Lösung:

  • Alle User besitzen keine Berechtigung auf die versteckte Liste „TaxonomyHiddenList“ auf Rootweb-Ebene
  • Für „authentifizierte Benutzer“ die Berechtigung „Lesend“ hinzufügen

Originalartikel: http://social.msdn.microsoft.com/Forums/en-US/sharepoint2010general/thread/b9394362-98b0-4318-a60b-e39e75c5e722

SharePoint indziert keine Dateien > 16 MB

Um in einer SharePoint Bibliothek alle Dateien die größer sind als 16 MB indizieren zu lassen, muss die Suchkonfiguration an drei Stellen zusätzlich angepasst werden.
Ich möchte in diesem Artikel die Parameter die verändert werden müssen am folgenden Beispiel kurz erklären. Hierfür sollen Dateien bis 64MB indizierbar gemacht werden.

Als erstes muss mittels des folgenden PowerShell Scripts die maximale Dateigröße verändert werden.

$s = Get-SPEnterpriseSearchServiceApplication;
"old: " + $s.GetProperty("MaxDownloadSize");
$s.SetProperty("MaxDownloadSize", 64);
$s.Update();
"new: " + $s.GetProperty("MaxDownloadSize");

Im nächsten Schritt muss der Timeout des Crawlers hochgesetzt werden. Diese Option befindet sich in der Zentraladministration unter

(Deutsche ZA): Sucheinstellungen der Farm -> Proxy und Timeout -> neuen Wert (in Sek.) eintragen (z.B. 120)
(Englische ZA): General Application Settings -> Farm Search Administration -> Timeout Seconds neuen Wert (in Sek.) eintragen (z.B. 120)

Als letztes muss der Verbindungstimeout zur Datenbank noch erhöht werden, damit die Abfragen auch ausgeführt werden können. Der Standardwert ist auf 15 Sekunden gesetzt und muss mit dem folgenden STSADM Befehl erhöht werden.

stsadm -o setproperty -pn database-connection-timeout -pv 30

Damit wird der Timepout auf 30s erhöht.

Abschließend müssen der Suchdienst osearch und der IIS neugestartet werden.

 

SharePoint 2010 PDF iFilter

Nachdem Update auf Sharepoint 2010 oder Foundation muss die Suche, im speziellen die PDF Indizierung, wieder konfiguriert werden.
Dabei kommt die von Adobe frei zur Verfügung gestellte 64Bit Version des pdf iFilters zum Einsatz.
Unter folgendem Link kann dieser herunter geladen werden.
Link: Download

Anschließend sind folgende Schritte auszuführen.

  1. Download des iFilters unter der oben genannten Adresse
  2. pdf Icon unter Link herunterladen und unter <drive>:Program FilesCommon FilesMicrosoft Sharedweb server extensions14TemplateImagespdficon.GIF abspeichern.
  3. Die Datei DOCICON editieren und den folgenden Eintrag hinzufügen: <Mapping Key=”pdf” Value=”pdficon.gif“ />
  4. Die Dateierweiterung zu den indizierten Dateierweiterungen hinzufügen. Bei einer deutschen Version ist der Punkt unter folgendem Pfad zu finden.
    Zentraladministration –>Anwendungsverwaltung –> Farm Such Konfiguation –><SERVICE_APPLICATION> –> Dateitypen auswählen
    Neuen Dateityp hinzufügen. „PDF“ hinzufügen.
  5. Der folgende Schlüssel muss in der Registry erstellt werden.
    \HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice Server14.0SearchSetupContentIndexCommonFiltersExtension einen neuen KEY .pdf erstellen und den Default Value auf {E8978DA6-047F-4E3D-9C78-CDBE46041603} setzen.
  6. IIS Webserver neustarten (iisreset /noforce)
  7. Suchdienste neustarten
    • SharePoint 2010 Server:
      net stop osearch
      net start osearch
    • Search Server Express:
      net stop osearch14
      net start osearch14

Regelmäßiges SharePoint Backup mit Bordmitteln

Mit der Version 2010 des SharePoint Server hielt ein zusätzliches Hauptverwaltungswerkzeug Einzug, die Windows PowerShell.

Um ein regelmäßiges Backup einer SharePoint Farm erstellen zu können, bietet SharePoint leider auch in der Version 2010 kein build-in Werkzeug. Microsoft empfiehlt an dieser Stelle die Verwendung eines PowerShell Scripts. Das folgende Beispiel zeigt ein Script zur Sicherung Ihrer Serverfarm. Die Backups werden 2 Tage aufbewahrt, bevor sie automatisch gelöscht werden.

Um nun ein Backup erstellen zu können, sind verschiedene Vorrausetzungen zu erfüllen. Die folgende Liste gibt einen Überblick, welche vorraussetzungen wie geschaffen werden müssen.

  • Es wird empfohlen für das Backup ein eigenes Benutzerkonto zu erstellen, das ist zwar nicht zwingend erforderlich, hat jedoch einige Vorteile, die in diesem Artikel aber nicht weiter beleuchtet werden.
  • Eine Dateifreigabe, oder ein Ordner muss vorhanden sein, in dem der ausführende Benutzer, das Dienstkonto der Zentraladministration und das Konto des SQL-Servers  Schreibrechte haben.
  • Das im folgenden beschriebene Backupscript
  • Ein geplanter Task, zum automatischen ausführen des Backups

Benutzerkonto anlegen

Das Benutzerkonto kann entweder ein normaler Cumputerbenutzer oder ein Domainbenutzer sein. der nächste Schritt, ist das hinzufügen des Benutzers in die Gruppe der lokalen Administratoren.

Im nächsten Schritt wird das Konto zur Gruppe der Farmadministratoren hinzugefügt. Das kann zum einen über die Zentraladministration erfolgen (siehe Bild), oder mittels eines PowerShell Befehls.

New-SPUser -UserAlias domainbackupuser -Web "http://centralAdmin:8888 -Group "Farm Administrators"

Weiterhin benötigt der Benutzer noch das Recht auf die einzelnen SharePoint Datenbank zugreifen zu können. Dazu dient der folgende Befehl.

Get-SPDatabase | Add-SPShellAdmin -UserName domainbackupuser

Dateifreigabe anlegen

Die Freigabe sollte auf einem Server angelegt werden, der weder SharePoint Datenbank Server ist, noch Applikation Server. Auf dem Server wird einfach ein Ordner freigegeben, in den der oben angelegt Backupuser Schreib- und Leseberechtigung hat.

PowerShell Script

Da nun die Voraussetzungen für das Backup geschaffen sind, können wir uns nun an die Erstellung des eigentlichen Scripts machen. Dazu wird das Verwaltungsmodul für PowerShell benötigt. Das Script führt die folgenden Aufgaben durch. Es erstellt Backups der Farm und liegt die ein einem Ordner mit dem Aktuellen Datum ab. Weiterhin löscht es Backups, die 2 Tag alt sind, sodass die Backups des heutigen Tags und das von gestern vorhanden sind.

"Get dates for create and delete"
$today=Get-Date -f "dd-MM-yyyy"
$dayBeforeYesterday = (get-date -date ((get-date).AddDays(-2)) -uFormat -Format “dd-MM-yyyy");
"start a sharepoint farm backup und delete the two days old backup"
if((Get-PSSnapin -Name "Microsoft.SharePoint.Powershell" -ErrorAction SilentlyContinue) -eq $null)
{
      Add-PSSnapin -Name "Microsoft.SharePoint.Powershell"
}
Remove-Item -Path "\UNCPathBackup$dayBeforeYesterday" -Recurse -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Path "\UNCPathBackup$today"
Backup-SPFarm -Directory "\UNCPathBackup$today" BackupMethod Full -BackupThreads 8

Aufgabe anlegen

Im letzten Schritt muss nun die geplante Aufgabe noch angelegt werden. Dazu müssen die folgenden Punkte berücksichtigt werden.

  • Der Benutzer, unter dem die Aufgabe ausgeführt wird, ist der oben im Artikel angelegte.
  • Die Intervalle sollten so eingestellt werden, dass täglich ein Backup durchgeführt wird
  • Die Aufgabe muss so konfiguriert werden, dass sie auch startet, wenn der Benutzer nicht angemeldet ist.
  • Der Häkchen für „mit erweiterten Berechtigungen ausführen“ muss gesetzt sein.
  • Die Aufgabe soll folgende Datei ausführen C:WindowsSystem32WindowsPowerShellv1.0powershell.exe
  • Als Startparatmeter muss folgender hinzugefügt werden. -ExecutionPolicy Bypass -File "C:scriptsSharePointFarmBackup.ps1"

LS::connect E-Mails von Outlook in SharePoint kopieren

Ich habe in letzter Zeit häufiger das Problem gehabt, E-Mails in eine SharePoint Dokumentenbibliothek zu kopieren. Outlook biete das Feature standardmäßig nicht.
Das Tool LS::connect bietet die Möglichekeit diesen Misstand zu beheben und bringt sogar zusätzlich die Möglichkeit mit extra Metadaten zu setzen,
zZusätzlich kann das Format (msg, eml), vor dem kopieren bestimmt werden.
Es steht eine 30 Tage Demo zum Download zur Verfügung.

Mail for Exchange für Exchange 2010

Nachdem die Migration von Exchange 2007 auf Exchange 2010 problemlos vollzogen war, musste ich feststellen, das es zur Zeit noch keine Möglichkeit gibt mit einem Nokia Smartphone (E66, N95) über Active Sync (Mail for Exchange Version 2.9) seine E-Mails zu syncronisieren.
Der Test mit einem aktuellen Windows Mobile brachte schließlich die Gewissheit, dass die Konfiguration der Firewall in Ordnung war und die Syncronisation möglich ist.
Konnte jemand das Problem lösen? Gibt es Workarounds um die Syncronisation zu ermöglichen?

Ich habe das Problem lösen können, es liegt an der Active Sync Event ID 1053. Wer mehr wissen möchte, kann mich einfach kontaktieren.

Typo3 Headergrafik

Headergrafik automatisch ändern

Um eine zufällige Grafik im Kopf einer Website anzuzeigen auszuwählen ist das Plugin kiddog_multilevelbanner nötig. Nach der Installation über den Extensionmanager folgt nun die eigentliche Konfiguration.

Der erste Schritt ist das Anlegen eines Sysfolders. In unserem Beispiel bekommt er den Namen „Banner“. Die ID, die der Sysfolder bekommen hat, sollte man sich notieren, da sie später noch benötigt wird.

l_ba_sysfolder_banner

Nun muss im HTML Template noch ein Marker an die Stelle gesetzt werden, an der die Bilder später automatisch wechseln sollen.

Bsp.: ###banner###

Nachdem ein Marker im Template gesetzt ist, wird nun mittels Typoscript dieser Marker ersetzt und die entsprechenden Bilder angezeigt.
Folgender Scriptcode übernimmt diese Funktion.

#Bannerrotation
plugin.tx_kiddogmultilevelbanner_pi1{
bannerwidth = 286px
bannerheight = 124px
blankgif = fileadmin/picture/blank.gif
sysuid = 17
}
site.10.marks.banner < plugin.tx_kiddogmultilevelbanner_pi1

Erklärung:
sysuid = 17 ist die ID, die der oben angelegt Systemordner hat.
blankgif = fileadmin/picture/blank.gif Diese unsichtbare Grafik dient als Platzhalter, damit der Inhalt beim Bilderwechsel nicht verschoben wird.

Im letzen Schritt muss nun im Sysfolder Banner noch ein Bilderpool angelegt werden, welcher die zur Anzeige freigegebenen Bilder enthält. Um ein neues Bild für die Anzeige frei zu schalten, muss als erstes die Listenansicht im Ordner aktiviert werden. Nun kann ein neuer Datensatz vom Typ „[kiddog]multilevelbanner“ angelegt werden.

l_ba_sysfolder_ds_auswahl

Nachdem der Datensatz angelegt wurde, kann er nun konfiguriert werden.

l_ba_kiddog_bild_auswahl

Hier müssen nun die entsprechenden Felder ja nach Konfiguration ausgewählt werden. Dabei ist noch zu beachten, dass maximal ein Bild pro Datensatz ausgewählt werden kann.
Nun sollte an der entsprechenden Stelle regelmäßig ein anderes Bild zu sehen sein.