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:\WINDOWS\assembly\GAC_MSIL\Microsoft.SharePoint\12.0.0.0__71e9bce111e9429c\Microsoft.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:\Backups\seagull.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 :)



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2007.09.10. 20:51:40 | Permalink | Hozzászólások: 0 | Tárgyszavak: ,


  • LINQ to XML: osztályhierarchia, navigációs és módosító metódusok

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az egyik óriási problémám az XML osztálykönyvtárakkal, hogy nagyon sok időbe kerül, míg sikerül átlátnom, hogy melyik osztály mire való és hogyan kapcsolódik az összes többihez. Az általam ismert XML osztálykönyvtárak közös jellemzője, hogy ugyanazt az eredményt nagyon sokféleképpen lehet elérni, hiszen egy adott elem több úton is megközelíthető. Na de melyik út a legrövidebb? Tovább »
  • Videógaléria - Silverlight 1.1 (2. rész)

    Előző cikkemben a Silverlight 1.1-gyel való ismerkedés kapcsán rögtön implementáltam is egy videolejátszót. Miután a hihetetlen boldogságból magamhoz tértem és újra gondolkozni tudtam, rájöttem, hogy bármilyen csodálatosnak is véltem az első Silverlight 1.1-en elkövetett "hello world" jellegű alkalmazásomat, máris jöttek belülről a kérdések. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások