SharePoint backup PowerShellel

Nem sok olyan szörnyű dolog van az életben, mint egy korábban írt forráskódot újra elővenni, hogy valamit módosítsunk rajta. A dolog egy kicsit kellemesebb, ha a kódot nem más írta, de ha VB Scriptben van, akkor azt semmivel sem lehet ellensúlyozni!

Ma abba a problémába futottam bele, hogy egy korábban írt backup scriptet kellene frissíteni, ami a tanszéki Windows SharePoint Servicest menti le. Furdalt a kíváncsiság, hogyan lehetne megoldani a feladatot PowerShellel…

Először is be kell töltenünk a Microsoft.SharePoint.dll-t:

[system.reflection.assembly]::LoadWithPartialName( "Microsoft.SharePoint" )

Ha ez a válasz, akkor jó, a hallgatás hibát jelent :)

GAC    Version        Location
---    -------        --------
True   v2.0.50727     C:WINDOWSassemblyGAC_MSILMicrosoft.SharePoint12.0.0.0__71e9bce111e9429cMicrosoft.SharePo...

Kellene egy SPGlobalAdmin objektum:

$globaladmin = New-Object Microsoft.SharePoint.Administration.SPGlobalAdmin

Aki nem hiszi, hogy létrejött, csak írja be, hogy $globaladmin és valami hasonló lesz a válasz:

Config                         : Microsoft.SharePoint.Administration.SPGlobalConfig
Version                        : 12.0.0.4518
AllowUnsafeUpdates             : True
ApplicationPools               : {DefaultAppPool, Intranet Pool, SharePoint Central Administration v3, WSS Admin Pool}
AdminPortUrl                   : http://maffia:4444/
AdminPortApplicationPoolId     : SharePoint Central Administration v3
AdminPortIISInstanceId         : 201702596
VirtualServers                 : {MAFFIA, MAFFIA, 152.66.251.54, MAFFIA...}
VirtualServerNames             : {Intranet Web Site}
ConfigDatabase                 : Microsoft.SharePoint.Administration.SPConfigDatabase
ConfigDatabaseServer           : MAFFIA
ConfigDatabaseName             : IntranetConfigDB
UseNtAuthenticationForDatabase : True
ConfigDatabaseUser             :
UsageSettings                  : SPUsageSettings Parent=SPWebService Name=WSS_Administration
OutboundSmtpServer             : MAIL
MailFromAddress                : no-reply@aut.bme.hu
MailReplyToAddress             : no-reply@aut.bme.hu
MailCodePage                   : 0
AdminFormDigest                : 0xA2F82FA8DAE0854788585078B59D6C2AD84A69D5FFCC8ED01CC1430E1A597E5825B9889FC5D2871FA149
                                 4111C72B52F0D248D4ED812A175485F5AC15B5A0AF7F,10 Sep 2007 17:32:09 -0000
AccountCreationModeEnabled     : False
InstalledLanguages             : {Magyar}
ServerLanguage                 : Microsoft.SharePoint.SPLanguage
TimeZones                      : {39, 16, 15, 14...}
UseHostHeaderAsSiteName        : False

 Tegyük el a gyökér webhely címét egy változóba:

$url = "https://maffia"

Nyissuk meg a címen elérhető SPVirtualServer objektumot:

$vserver = $globaladmin.OpenVirtualServer( $url )

Nézzük meg, hogy ez mit tud:

PS C:> $vserver

IisWebSiteSettings         : Microsoft.SharePoint.Administration.SPIisSettings
WebApplication             : SPWebApplication Name=Intranet Web Site Parent=SPWebService
HostName                   : 152.66.251.54
Port                       : 80
Url                        : https://intranet/
CatchAccessDeniedException : False
Sites                      : {a7b2b582-2017-49a7-8524-873d4aec27ae, ec4d8bdb-1ce7-427e-a0f1-3c5a9fc813d0, 7dc69ef5-ae41
                             -4afa-94d6-7f1b933509af, 2e764d06-842c-45d4-be57-ce6f28c9d110...}
Config                     : Microsoft.SharePoint.Administration.SPVirtualServerConfig
IISInstanceId              : 2049022554
VirtualServerId            : 32895ea5-1dc1-47ba-b25f-d9371aa50c0e
Description                : Intranet Web Site
PresenceEnabled            : True
Version                    : 12.0.0.4518
State                      : Ready
ApplicationPoolId          : Intranet Site Pool
OutboundSmtpServer         : MAIL
MailFromAddress            : no-reply@aut.bme.hu
MailReplyToAddress         : no-reply@aut.bme.hu
MailCodePage               : 0
ContentDatabases           :

Kérdezzük meg, hogy ennek az objektumnak milyen tulajdonságai vannak:

PS C:> $vserver | Get-Member -memberType property

   TypeName: Microsoft.SharePoint.Administration.SPVirtualServer

Name                       MemberType Definition
----                       ---------- ----------
ApplicationPoolId          Property   System.String ApplicationPoolId {get;}
CatchAccessDeniedException Property   System.Boolean CatchAccessDeniedException {get;set;}
Config                     Property   Microsoft.SharePoint.Administration.SPVirtualServerConfig Config {get;}
ContentDatabases           Property   Microsoft.SharePoint.Administration.SPContentDatabaseCollection ContentDatabas...
Description                Property   System.String Description {get;}
HostName                   Property   System.String HostName {get;}
IISInstanceId              Property   System.Int32 IISInstanceId {get;}
IisWebSiteSettings         Property   Microsoft.SharePoint.Administration.SPIisSettings IisWebSiteSettings {get;}
MailCodePage               Property   System.Int32 MailCodePage {get;}
MailFromAddress            Property   System.String MailFromAddress {get;}
MailReplyToAddress         Property   System.String MailReplyToAddress {get;}
OutboundSmtpServer         Property   System.String OutboundSmtpServer {get;}
Port                       Property   System.Int32 Port {get;}
PresenceEnabled            Property   System.Boolean PresenceEnabled {get;}
Sites                      Property   Microsoft.SharePoint.Administration.SPSiteCollection Sites {get;}
State                      Property   Microsoft.SharePoint.Administration.SPVirtualServerState State {get;}
Url                        Property   System.Uri Url {get;}
Version                    Property   System.Version Version {get;}
VirtualServerId            Property   System.Guid VirtualServerId {get;}
WebApplication             Property   Microsoft.SharePoint.Administration.SPWebApplication WebApplication {get;}

A Sites tulajdonság érdekes számunkra, ugyanis az SPSiteCollection osztály tartalmaz egy Backup metódust és éppen arra van szükségünk. Megjegyzem az stsadm.exe is éppen ezt hívja. De előbb nézzük, mit tudunk a webhelyekről, pontosabban webhely gyűjteményekről, hiszen nem SPWeb, hanem SPSite objektumokkal dolgozunk. Bátran be lehet írni, hogy $vserver.Sites[0], hogy megnézzük, mit mond a PowerShell egy webhelyről és természetesen ezt is belecsövezhetjük a Get-Member pajtásba.

Kérhetünk egy átlátható listát a virtuális kiszolgálón található webhely gyűjteményekről:

PS C:> $vserver.Sites | Format-Table Url, RootWeb

Url                                                         RootWeb
---                                                         -------
https://intranet                                            BME AAIT Intranet
https://intranet/courses/dotnet                             Csoportwebhely
https://intranet/courses/portals                            Webportálok fejlesztése
https://intranet/courses/SzofTechBSc                        A Szoftvertechnikák (BSc) tárgy munkaterülete
https://intranet/projects/seagull                           Seagull Project
https://intranet/projects/vjt                               Csoportwebhely
https://intranet/projects/vmts                              Visual Modeling and Transformation System
https://intranet/sites/eBooks                               Elektronikus könyvtár
https://intranet/sites/mscorpevents                         Microsoft Nemzetközi Rendezvény Archívum
https://intranet/sites/msevents                             Microsoft Hazai Rendezvény Archívum

Ebből rögtön látszik, hogy egyesek lusták átnevezni a webhelyüket. (Egyébként van itt egy csalás, ugyanis a RootWeb egy SPWeb típusú objektum, nem csak egy string.) A rendszergazda-lét előnye, hogy az ember retorziókat is alkalmazhat, például nem menti le a hanyag gazdik webhelyeit:

PS C:> $vserver.Sites | Where-Object{ $_.RootWeb.Title -ne "Csoportwebhely"  } | Format-Table Url, RootWeb

Url                                                         RootWeb
---                                                         -------
https://intranet                                            BME AAIT Intranet
https://intranet/courses/portals                            Webportálok fejlesztése
https://intranet/courses/SzofTechBSc                        A Szoftvertechnikák (BSc) tárgy munkaterülete
https://intranet/projects/seagull                           Seagull Project
https://intranet/projects/vmts                              Visual Modeling and Transformation System
https://intranet/sites/eBooks                               Elektronikus könyvtár
https://intranet/sites/mscorpevents                         Microsoft Nemzetközi Rendezvény Archívum
https://intranet/sites/msevents                             Microsoft Hazai Rendezvény Archívum

Egyetlen webhelyet így menthetünk le:

$vserver.Sites.Backup( "https://intranet/projects/seagull", "E:Backupsseagull.backup", $true )

A hátralévő részt mindenki el tudja képzelni: ForEach-Object segítségével ciklusba zavarjuk a metódushívást vagy függvényt gyártunk az egészből.

Már játszom egy ideje a PowerShellel, de még mindig tudok lelkesedni érte. A Windows Workflow Foundation vagy a SharePoint ennyi idő után már nem mert a szemem elé kerülni🙂

 

Technorati tags: , , ,

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s