Informazioni sulla multi-tenancy in SharePoint Server 2013
SI APPLICA A:2013 2016 2019 Subscription Edition SharePoint in Microsoft 365
Questo articolo descrive i componenti e i servizi correlati alla multi-tenancy in SharePoint Server 2013 e fornisce anche indicazioni architetturali, di sicurezza, operative e di gestione per aiutare i provider di servizi a comprendere la multi-tenancy in SharePoint Server 2013 per la pianificazione, la progettazione, la creazione e la gestione di una piattaforma di hosting multi-tenant di SharePoint Server 2013.
Nota
L'integrazione di Microsoft OneDrive con Viva Engage non funziona per le applicazioni di servizio multi-tenancy o partizionate per le distribuzioni locali.
Prima di iniziare
Introduzione alla multi-tenancy in SharePoint Server 2013
Che cos'è la multi-tenancy?
Prima di introdurre la funzionalità multi-tenancy in SharePoint Server 2013, è necessario comprendere il concetto generale di multi-tenancy e le relative caratteristiche. La comprensione della multi-tenancy e delle relative caratteristiche consente di prendere le decisioni appropriate per la pianificazione, la progettazione, il funzionamento e la gestione della piattaforma di hosting multi-tenant di SharePoint Server 2013.
La multi-tenancy si riferisce alla possibilità di gestire e partizionare i dati dei siti e di servizi o software altrimenti condivisi per supportare più tenant. Questa funzionalità è in contrasto con l'esecuzione di più istanze di un servizio o la configurazione di hardware separato. Nei prodotti e tecnologie Microsoft la multi-tenancy dei servizi crea un ambiente di hosting in cui le risorse della server farm sono ottimizzate. Prima di conoscere gli ambienti di hosting, è importante comprendere l'architettura dei servizi.
Componenti e servizi chiave per l'abilitazione della multi-tenancy in SharePoint Server 2013
In questa sezione vengono illustrati i componenti e servizi chiave per l'abilitazione della multi-tenancy in SharePoint Server 2013.
Applicazione Web
Un'applicazione Web di SharePoint 2013 è costituita da un sito Web IIS (Internet Information Services) che funge da unità logica di gestione e sicurezza per le raccolte siti che vengono create. Ogni applicazione Web è rappresentata da un diverso sito Web IIS che utilizza un pool di applicazioni specifico o condiviso. Quando si crea un'applicazione Web, si crea anche un database del contenuto e si definisce il metodo di autenticazione utilizzato per connettersi al o ai database.
Raccolta siti con nome host
Le raccolte siti con nome host consentono di assegnare un nome DNS univoco alle raccolte siti. Ad esempio, è possibile risolverli come http://TeamA.contoso.com
e http://TeamB.fabrikam.com
. Questo provisioning consente di distribuire molti siti che usano nomi DNS univoci nella stessa applicazione Web. Consente inoltre ai provider di servizi di ridimensionare un ambiente a molti clienti. Se non si usano raccolte siti con nome host, l'applicazione Web SharePoint conterrà molte raccolte siti basate su percorso che condividono lo stesso nome host (nome DNS). Ad esempio, il team A avrebbe una raccolta siti in https://contoso.com/sites/teamA
e il team B avrebbe una raccolta siti in https://fabrikam.com/sites/teamB
.
Le raccolte siti con nome host fondamentalmente rappresentano l'unico modo per implementare la scalabilità in ambienti di multi-tenancy e garantiscono flessibilità in relazione allo spazio dei nomi URL utilizzato. Se si usano siti basati su percorso con multi-tenancy, il limite software per i percorsi gestiti verrà raggiunto rapidamente.
Per altre informazioni su come pianificare raccolte siti con nome host per SharePoint Server 2013, vedere Architettura e distribuzione di raccolte siti con nome host (SharePoint 2013).
Gruppi di servizi (gruppi proxy)
Un gruppo di servizi, noto anche come gruppo proxy, è un gruppo di applicazioni di servizio selezionate per l'uso da parte di un'applicazione Web.
Per impostazione predefinita, tutte le applicazioni di servizio sono incluse nel gruppo predefinito, a meno che non venga specificato un altro gruppo al momento della creazione dell'applicazione di servizio. È possibile aggiungere e rimuovere applicazioni di servizio dal gruppo predefinito in qualsiasi momento. Quando si crea un'applicazione Web, è possibile selezionare il gruppo predefinito oppure creare un gruppo personalizzato di servizi. Per creare un gruppo personalizzato di servizi, selezionare solo le applicazioni di servizio da usare.
I gruppi personalizzati non sono riutilizzabili in più applicazioni Web. Ogni volta che si seleziona "personalizzata" quando si crea un'applicazione Web, si selezionano i servizi solo per l'applicazione Web che si sta creando.
Proxy di servizio
Quando si crea un'applicazione di servizio, contemporaneamente viene creato un proxy per tale applicazione. Un proxy è un'entità virtuale che connette le applicazioni Web alle applicazioni di servizio. I proxy sono elencati nella pagina Gestisci applicazioni di servizio tramite il il sito Web Amministrazione centrale SharePoint.
I proxy vengono creati automaticamente se si utilizza Amministrazione centrale oppure la Configurazione guidata Prodotti SharePoint 2016 per creare le applicazioni di servizio. Se si usa Microsoft PowerShell per creare applicazioni di servizio, i proxy non vengono sempre creati automaticamente e devono essere creati tramite Microsoft PowerShell.
Alcuni proxy possono includere impostazioni modificabili. Ad esempio, se un'applicazione Web è connessa a più istanze del servizio metadati gestiti, è necessario indicare i proxy connessi all'applicazione di servizio principale che ospita la tassonomia aziendale. Queste impostazioni passano alla configurazione a livello di tenant quando si usa la multi-tenancy.
Applicazioni di servizio
Un'applicazione di servizio è una rappresentazione logica di un determinato servizio e della relativa configurazione di sicurezza e gestione, che ne definisce il comportamento operativo. Tra gli esempi sono inclusi Metadati gestiti e Profili utente. Diverse applicazioni di servizio vengono implementate in modi diversi e questa flessibilità influenzerà la progettazione di soluzioni multi-tenant.
Per determinare l'elenco delle applicazioni di servizio disponibili in SharePoint Server 2013 e la relativa disponibilità da un'edizione all'altra di SharePoint con la funzionalità multi-tenancy, vedere la sezione Servizi e funzionalità in Indicazioni generali per provider di servizi di hosting in SharePoint Server 2013.
Feature Pack e licenze
Un Feature Pack in SharePoint rappresenta un modo per raggruppare un insieme di funzionalità con ambito sito o Web. Dopo aver raggruppato le funzionalità di SharePoint, è possibile associare le funzionalità a una sottoscrizione del sito, ovvero al tenant. Tutte le raccolte siti incluse in tale sottoscrizione di sito (tenant) possono utilizzare solo le funzionalità con ambito sito o Web che fanno parte del Feature Pack. Questa capacità consente ai provider di servizi di fornire offerte di servizi a più livelli in base a insiemi diversi di funzionalità.
In SharePoint Server 2013 è stata aggiunta una nuova funzionalità per l'assegnazione di licenze di SharePoint diverse per ogni utente. Attiva anche i controlli delle licenze di SharePoint in fase di esecuzione. Questa funzionalità offre maggiore flessibilità a un provider di servizi per creare offerte di servizi diverse in un modello di distribuzione semplificato. Nelle versioni precedenti di SharePoint, i provider di servizi dovevano creare modelli di distribuzione di SharePoint diversi per ogni versione di SharePoint. Per altre informazioni sulle funzionalità di SharePoint, vedere la sezione relativa alla disponibilità delle funzionalità di SharePoint nelle soluzioni locali dell'articolo seguente: Descrizione del servizio SharePoint.
Information Rights Management
L'integrazione di Information Rights Management (IRM) in SharePoint Server 2013 garantisce un supporto ancora più completo per la multi-tenancy, pertanto consente di gestire le impostazioni IRM a livello di tenant.
Considerazioni sulla progettazione dell'architettura
In questa sezione sono riportate diverse considerazioni per la definizione dell'architettura di un ambiente SharePoint Server 2013 di multi-tenancy. Come spiegato più indietro in questo documento, per la multi-tenancy è necessario considerare alcune caratteristiche specifiche quando si definisce l'architettura e si progetta l'ambiente SharePoint Server 2013. Per prendere le decisioni appropriate, è necessario valutare tali fattori in base alle proprie esigenze.
Limiti software e limiti configurabili in SharePoint Server 2013
Comprendendo i limiti software e i limiti configurabili di SharePoint Server 2013, sarà possibile prendere le decisioni appropriate riguardo alla scelta dell'architettura più idonea per un ambiente SharePoint di multi-tenancy. Per altre informazioni sui limiti e i limiti principali per un database del contenuto e una raccolta siti applicati a un ambiente multi-tenancy di SharePoint Server 2013, vedere Limiti e limiti software per SharePoint Server 2016 e Limiti e limiti software per SharePoint Server 2016.
Farm condivisa o farm dedicata
L'utilizzo di una farm condivisa per ospitare raccolte siti multi-tenant in un'unica applicazione Web garantisce una migliore scalabilità rispetto all'utilizzo di un'applicazione Web dedicata per ogni tenant.
Utilizzare un'applicazione Web dedicata e un pool di applicazioni dedicato per cliente esclusivamente se è necessario soddisfare requisiti per l'isolamento.
Non consentire la distribuzione di codice con attendibilità completa nei siti.
Non consentire personalizzazioni che influiscono sulle risorse condivise, ad esempio il file web.config.
Utilizzare raccolte siti con nome host per creare più raccolte siti a livello radice (siti con nome di dominio) all'interno di un'applicazione Web.
Un'unica applicazione Web o più applicazioni Web
Utilizzare applicazioni Web dedicate per i tenant che richiedono personalizzazioni che riguardano risorse condivise all'interno di un'applicazione Web, ad esempio il file web.config.
Quando si combinano più tenant in una singola farm, usare un'applicazione Web SharePoint dedicata per tutto il contenuto autenticato e un'applicazione Web dedicata separata per tutto il contenuto anonimo. Questo metodo richiederà due ID di sottoscrizioni distinti per i tenant con entrambi i tipi di contenuto. Questo metodo semplificherà anche le licenze.
Alcune funzionalità di SharePoint sono associate al livello di applicazione Web, come ad esempio l'impostazione per la creazione di raccolte siti in modalità self-service. Dopo l'attivazione, tutti i tenant all'interno della stessa applicazione Web saranno in grado di creare raccolte siti.
Progettazione di un ambiente con un'unica farm
In un ambiente di hosting multi-organizzazione in cui i dati e l'amministrazione del tenant sono isolati, la configurazione dei servizi partizionati e condivisi è importante. In questo esempio viene fornita un'implementazione pratica dei servizi partizionati con suggerimenti per la distribuzione dei siti dei clienti.
In questo esempio vengono dettagliati i seguenti modi in cui i siti dei clienti possono essere distribuiti in una farm:
Pool di applicazioni e applicazione Web dedicati
Pool di applicazioni condiviso e applicazione Web dedicata
Applicazione Web condivisa
Siti autenticati
Siti non autenticati
Utilizzare un pool di applicazioni dedicato per ogni cliente solo se è necessario soddisfare requisiti per l'isolamento. Utilizzare applicazioni Web dedicate per i tenant che richiedono personalizzazioni riguardanti risorse condivise all'interno di un'applicazione Web, ad esempio il file web.config.
Quando si combinano più tenant in una singola applicazione Web, usare un'applicazione Web dedicata per tutto il contenuto autenticato e un'applicazione Web dedicata separata per tutti i contenuti anonimi. Questo metodo richiederà due ID di sottoscrizioni distinti per i tenant con entrambi i tipi di contenuto. Questo metodo swill semplifica anche le licenze.
Non consentire la distribuzione di codice con attendibilità totale nei siti.
Non consentire personalizzazioni che interessano risorse condivise, ad esempio il file web.config.
Nel seguente esempio (siti autenticati) viene utilizzata una raccolta siti con nome host diversa per ogni società. La società C include due diverse raccolte siti con nome host. Al di sotto di ogni raccolta siti con nome host principale viene utilizzato un percorso gestito per creare un secondo livello di raccolte siti principali per i siti come quelli del team, i Siti personali, il contenuto Intranet pubblicato o i siti di reparto distinti.
Progettazione dell'ambiente a più livelli
Come illustrato in precedenza, sono molti i fattori da considerare quando si pianifica la piattaforma di hosting SharePoint Server 2013 multi-tenant, tra cui il costo, la gestione semplificata, l'isolamento delle risorse, le prestazioni e la scalabilità.
Man mano che la base di clienti si espande, può essere difficile soddisfare tutti i requisiti di tutti i clienti in un unico ambiente. A quel punto possono presentarsi alcuni svantaggi se si tenta di trovare un equilibrio fra tali fattori.
In un caso come questo, un'alternativa da considerare potrebbe essere la progettazione di un ambiente a livelli in cui più ambienti SharePoint fanno fronte alle diverse esigenze dei clienti. Ogni ambiente deve concentrarsi su aspetti diversi delle offerte di servizi, ad esempio basso costo, alta densità, maggior isolamento delle risorse e migliore qualità dei servizi (QoS) con costi più elevati e così via.
Questo approccio basato sulla progettazione di un ambiente a più livelli potrebbe offrire diversi contratti di servizio ai clienti. Si potrebbe quindi riuscire a servire un numero più ampio di clienti, semplificare la gestione e le operazioni, ridurre i costi di gestione e aumentare i margini di profitto.
Considerazioni sulla sicurezza
In questa sezione sono riportate diverse considerazioni sulla sicurezza per la pianificazione e progettazione di una piattaforma di hosting SharePoint Server 2013 multi-tenant. Da questo punto in poi, qualsiasi sezione, ad esempio la sezione Unità organizzativa (OU), che parla della configurazione della selezione utenti funziona solo senza ulteriori personalizzazioni con l'autenticazione di Windows.
In SharePoint Server 2013 sono supportati diversi metodi e provider di autenticazione per i seguenti tipi di autenticazione:
Autenticazione di Windows
Autenticazione basata su moduli
Autenticazione basata su token SAML
Il tipo di autenticazione di Windows prevede l'utilizzo del provider di autenticazione di Windows esistente e dei protocolli di autenticazione utilizzati da un ambiente di dominio di Windows per convalidare le credenziali dei client che eseguono la connessione. I metodi di autenticazione di Windows, usati sia dall'autenticazione basata sulle attestazioni che dalla modalità classica, includono:
NTLM
Kerberos
Del digest
Di base
L'autenticazione basata su moduli è un sistema di gestione delle identità basato sulle attestazioni che si basa sull'autenticazione dei provider di ruoli e di appartenenze ASP.NET. L'autenticazione basata su form può essere usata per le credenziali archiviate in un provider di autenticazione, ad esempio:
Servizi di dominio Active Directory (AD DS)
Un database, ad esempio un database di SQL Server
Un archivio dati LDAP (Lightweight Directory Access Protocol), come Novell eDirectory, Novell Directory Services (NDS) o Sun ONE
Tramite l'autenticazione basata su moduli gli utenti vengono convalidati in base alle credenziali immesse in un modulo di accesso (in genere una pagina Web). Le richieste non autenticate vengono reindirizzate a una pagina di accesso, in cui l'utente deve specificare credenziali valide e inviare il modulo. Per le richieste autenticate viene emesso dal sistema un cookie contenente una chiave che consente di ristabilire l'identità per le richieste successive.
Per usare l'autenticazione basata su moduli per autenticare gli utenti in un sistema di gestione delle identità non basato su Windows o esterno, è necessario registrare il provider di appartenenze e il gestore dei ruoli in diversi file di web.config. In SharePoint Server 2013 viene utilizzata l'interfaccia di gestione dei ruoli ASP.NET standard per raccogliere informazioni sul gruppo dell'utente corrente. Ogni ruolo ASP.NET viene gestito come un gruppo di dominio dal processo di autorizzazione in SharePoint Server 2013. La registrazione di un manager dei ruoli in un file web.config viene eseguita in modo analogo a quella di un provider di appartenenze per l'autenticazione.
Per gestire gli utenti o i ruoli di appartenenza dal sito Web Amministrazione centrale, è necessario registrare il provider di appartenenze e il gestore dei ruoli nel file web.config del sito Web Amministrazione centrale. È inoltre necessario registrare il provider di appartenenze e il gestore dei ruoli nel file web.config dell'applicazione Web che ospita il contenuto e nel file web.config del servizio token di sicurezza.
Per l'autenticazione basata su token SAML in SharePoint Server 2013 vengono utilizzati il protocollo SAML 1.1 e WS-Federation Passive Requestor Profile (WS-F PRP). Richiede il coordinamento con gli amministratori di un ambiente basato sulle attestazioni, che si tratti dell'ambiente interno o di un ambiente partner. Se si utilizza Active Directory Federation Services (ADFS) 2.0, si dispone di un ambiente di autenticazione basato su token SAML.
Per le applicazioni Web in cui viene utilizzata l'autenticazione basata sulle attestazioni, Selezione utenti è un controllo disponibile all'interno di SharePoint Server 2013. Tale controllo utilizza provider di attestazioni per elencare, risolvere, ricercare e determinare il nome visualizzato "descrittivo" di utenti, gruppi e attestazioni. Per altre informazioni sulla configurazione della selezione utenti, vedere Panoramica di Selezione utenti e provider di attestazioni.
Le aree rappresentano percorsi logici diversi per l'accesso agli stessi siti in un'applicazione Web. Ogni applicazione Web può includere fino a cinque aree. Quando si crea un'applicazione Web, in Amministrazione centrale viene creata l'area Predefinita. Per creare più zone, estendere l'applicazione Web e selezionare uno dei nomi di zona rimanenti: Intranet, Extranet, Internet o Personalizzato.
Unità organizzative
Le unità organizzative (OU) consentono di organizzare gli oggetti utente e computer nell'ambiente Active Directory. Ai fini dell'hosting, la struttura delle unità organizzative può essere definita come illustrato nella figura riportata di seguito.
È necessario almeno collegare Criteri di gruppo alla radice di dominio, all'unità organizzativa dei controller di dominio, a quella dei server SharePoint e a quella dei clienti.
Radice di dominio
La sicurezza da applicare all'intero dominio viene applicata nel criterio di dominio. Queste impostazioni sono contenute negli oggetti Criteri di gruppo validi per l'intero dominio.
Unità organizzativa dei controller di dominio
Nei controller di dominio vengono conservati i dati più riservati dell'organizzazione, i dati che controllano la configurazione di sicurezza vera e propria. Gli oggetti Criteri di gruppo applicati a questo livello vengono utilizzati per configurare e proteggere i controller di dominio nel dominio.
Unità organizzativa dei server SharePoint
I server SharePoint hanno un ruolo specifico non incluso in altri server della directory. Inserendo tali server nella relativa unità organizzativa, è possibile applicare criteri specifici a tali server. Possono inoltre essere separati da altri server nella directory. È inoltre possibile creare unità organizzative secondarie quando devono essere creati oggetti Criteri di gruppo diversi, ad esempio server con contenuto ad accesso anonimo e server con contenuto autenticato.
Unità organizzativa dei clienti
Questa unità organizzativa di primo livello consente di separare tutti gli account utente dal resto della directory. Il livello successivo di unità organizzative contiene le unità organizzative del cliente. È disponibile un'unità organizzativa per ogni cliente. Questa unità organizzativa consente di separare tutti gli account utente e gli account computer di un cliente da tali account di altri clienti. Inoltre, questa struttura di unità organizzativa è quella necessaria per supportare la sincronizzazione dei profili utente nelle distribuzioni multi-tenant.
Per dare agli utenti l'impressione di accedere al proprio dominio personalizzato, usare Active Directory Service Interfaces Editor (ADSI Edit) o un altro strumento AD per modificare l'attributo uPNSuffixes di ogni unità organizzativa del cliente, come illustrato nel diagramma seguente.
Dopo che l'attributo uPNSuffixes di un'unità organizzativa dei clienti è stato configurato, il relativo valore sarà disponibile per essere associato a un account utente all'interno di tale unità organizzativa, come illustrato nella figura riportata di seguito.
Autenticazione utente
L'autenticazione utente è la convalida dell'identità di un utente tramite un provider di autenticazione, ovvero una directory o un database contenente le credenziali dell'utente e in grado di confermare se tali credenziali sono state inviate correttamente dall'utente. Un esempio di provider di autenticazione è rappresentato da Servizi di dominio Active Directory. Altri nomi comuni relativi a un provider di autenticazione sono directory degli utenti e archivio di attributi.
Un metodo di autenticazione è uno scambio specifico di credenziali dell'account e altre informazioni che affermano l'identità di un utente. Il risultato del metodo di autenticazione è la prova, in genere in forma di token contenente attestazioni, che un utente è stato autenticato da un provider di autenticazione.
Un tipo di autenticazione è un modo specifico per convalidare le credenziali tramite uno o più provider di autenticazione, talvolta utilizzando un protocollo standard del settore. Un tipo di autenticazione può prevedere l'utilizzo di più metodi di autenticazione.
Dopo la convalida dell'identità di un utente, tramite il processo di autorizzazione vengono determinati i siti, il contenuto e le altre funzionalità a cui l'utente può accedere.
Per la pianificazione dei tipi e dei metodi di autenticazione è necessario determinare quanto segue:
Tipi e metodi di autenticazione utente per ogni applicazione Web e area
Infrastruttura di autenticazione necessaria per supportare i tipi e metodi di autenticazione determinati
Modalità di migrazione delle aree e delle applicazioni Web correnti da cui viene utilizzata l'autenticazione in modalità classica in modo che venga utilizzata l'autenticazione basata sulle attestazioni
Active Directory Federation Services (ADFS)
SharePoint Server 2013 supporta l'autenticazione basata sulle attestazioni. Active Directory Federation Services (AD FS) può essere configurato per fungere da servizio token di sicurezza del provider di identità (IP-STS) per un'applicazione Web di SharePoint Server 2013. In questa configurazione, ADFS emette token di sicurezza basati su SAML costituiti da attestazioni che consentono ai computer client di accedere alle applicazioni Web che utilizzano l'autenticazione basata sulle attestazioni. È possibile usare un provider di identità che è un'alternativa ad AD FS. Ma deve supportare lo standard WS-Federation. Usando anche la configurazione di AD FS, è necessario codice personalizzato.
Per altre informazioni su come configurare l'autenticazione delle attestazioni basata su SAML con AD FS per SharePoint Server 2013, vedere Configurare l'autenticazione delle attestazioni basata su SAML con AD FS in SharePoint Server.
Considerazioni sulla gestione e sulle operazioni
In questa sezione sono riportate diverse considerazioni relative alla gestione e alle operazioni per un ambiente SharePoint Server 2013 multi-tenant.
Gestione della capacità
La gestione della capacità è un processo in continua evoluzione perché nessuna implementazione rimane statica in termini di contenuto e utilizzo. È necessario effettuare una pianificazione tenendo conto di esigenze di espansione e modifica, in modo che l'ambiente SharePoint Server 2013 rappresenti sempre una soluzione aziendale efficace. Per altre informazioni sulla gestione della capacità in SharePoint Server 2013, vedere Panoramica della gestione della capacità e del ridimensionamento per SharePoint Server 2013.
Gestione dell’app
Le app per SharePoint sono un nuovo metodo per fornire informazioni o funzionalità specifiche a un sito di SharePoint. Un'app per SharePoint è piccola, facile da utilizzare e autonoma e consente di rispondere a un'esigenza specifica dell'azienda o dell'utente finale. I proprietari di siti possono scoprire e scaricare app per SharePoint da uno SharePoint Store pubblico o dal Catalogo app interno dell'organizzazione e installarle nei relativi siti di SharePoint. Queste app per SharePoint integrano il meglio del Web con SharePoint Server 2013. Non sostituiscono le funzionalità di SharePoint e i pacchetti della soluzione, che consentono di personalizzare o aumentare i siti di SharePoint. A differenza delle funzionalità e delle soluzioni, che devono essere installate dagli amministratori della raccolta siti o della farm, le app per SharePoint sono applicazioni autonome che i proprietari dei siti possono aggiungere ai propri siti di SharePoint. Le app per SharePoint hanno un ciclo di vita semplice: possono essere installate, aggiornate e disinstallate dai proprietari dei siti.
Il servizio di gestione app in SharePoint Server 2013 supporta la multi-tenancy. La maggior parte delle funzionalità di configurazione e gestione delle app viene esposta mediante il sito di amministrazione tenant e consente a ogni amministratore di tenant di configurare singolarmente le rispettive impostazioni.
Backup e ripristino
Quando si eseguono operazioni di backup e ripristino indipendenti dal tenant in una piattaforma di hosting SharePoint Server 2013 multi-tenant, è possibile attenersi alle istruzioni generali per l'esecuzione di tali operazioni in ambienti SharePoint Server 2013. Vedere Backup e ripristino in SharePoint Server.
Si noti che in SharePoint Server 2013 la piattaforma del flusso di lavoro è diversa dalla piattaforma SharePoint. Le operazioni di backup e ripristino in Gestione flusso di lavoro devono pertanto essere coordinate con le operazioni di backup e ripristino di SharePoint per essere certi che restino sincronizzate l'una con l'altra. Per altre indicazioni su come pianificare le operazioni di backup e ripristino per Workflow Service Manager, vedere Ripristino di emergenza e ripristino dell'ambito in Workflow Manager 1.0
Quando si eseguono operazioni di backup e ripristino specifiche del tenant in una piattaforma di hosting SharePoint Server 2013 multi-tenant, potrebbe essere necessario mantenere sincronizzati tra loro i seguenti componenti in grado di riconoscere il tenant: applicazioni di servizio, flusso di lavoro, database del contenuto e raccolte siti.
Applicazioni di servizio
Alle applicazioni di servizio configurate in modalità partizione sono associati uno o più database contenenti dati specifici del tenant. Mentre è possibile eseguire operazioni di backup e ripristino generali su tali applicazioni di servizio sia a livello di applicazione che di database, sono limitati i comandi che consentono di eseguire operazioni di backup e ripristino dettagliate specifiche del tenant su tali applicazioni o sui relativi database.
Considerazioni sulle applicazioni di servizio
Servizio di gestione app
Il servizio di gestione app è l'applicazione di servizio utilizzata per gestire la funzionalità per app per SharePoint introdotta in SharePoint Server 2013. Le app per SharePoint sono un nuovo metodo per fornire informazioni o funzionalità specifiche a un sito di SharePoint. Un'app per SharePoint è piccola, facile da utilizzare e autonoma e consente di rispondere a un'esigenza specifica dell'azienda o dell'utente finale. Il servizio di gestione app non supporta la modalità di partizione, ma è in grado di riconoscere la sottoscrizione del sito in modo nativo. Nell'ambiente SharePoint multi-tenant la maggior parte delle funzionalità di gestione app, ovvero Gestisci Catalogo app, Gestisci licenze app, Autorizzazioni app e così via, si ottiene mediante il sito di amministrazione tenant.
Nella figura riportata di seguito viene illustrata la gestione delle app nel sito di amministrazione tenant.
Servizio di integrazione applicativa dei dati
Dopo la configurazione in modalità partizione, qualsiasi attività di configurazione del servizio di integrazione applicativa dei dati viene trasferita all'amministrazione tenant. Tuttavia, il modello di sito Amministrazione tenant non include il collegamento a questa pagina, che può essere aggiunto usando la tecnica di personalizzazione nella sezione Estensione del modello di sito Amministrazione tenant
Servizio di archiviazione sicura
Dopo la configurazione in modalità partizione, la generazione delle chiavi di crittografia rimane una configurazione a livello di farm eseguita mediante Amministrazione centrale o Windows PowerShell. Il resto delle attività di configurazione del servizio di archiviazione sicura viene trasferita all'amministrazione tenant. Tuttavia, il modello di sito Amministrazione tenant non include il collegamento a questa pagina, che può essere aggiunto usando la tecnica di personalizzazione nella sezione Estensione del modello di sito Amministrazione tenant.
Servizio metadati gestiti
Dopo la configurazione in modalità partizione, tutte le attività di configurazione vengono trasferite all'amministrazione tenant e la pubblicazione del tipo di contenuto è abilitata per impostazione predefinita.
Servizio di ricerca
Molte funzioni correlate alla configurazione della ricerca specifica del tenant vengono esposte nel sito di amministrazione tenant come illustrato nella figura riportata di seguito.
Nota
Molti dei *. I cmdlet di Microsoft PowerShell enterpriseSearch* sono ora compatibili con le partizioni e possono essere usati per automatizzare alcune funzioni di configurazione e gestione esposte nel sito Amministrazione tenant.
Servizio profili utente
Un numero elevato di elementi di configurazione viene trasferito all'amministrazione tenant. Gran parte della configurazione per la sincronizzazione dei profili resta tuttavia a livello di farm ed è applicabile a tutti i tenant, come illustrato nella figura riportata di seguito.
Flusso di lavoro
Come indicato in precedenza, in SharePoint Server 2013 la piattaforma Flusso di lavoro è separata dalla piattaforma SharePoint. La piattaforma Flusso di lavoro usa uno o più database. Anche se è possibile eseguire operazioni generali di backup e ripristino a livello di database su questi database, non esistono comandi o utilità per eseguire operazioni di backup e ripristino specifiche del tenant in questi database del flusso di lavoro.
Database del contenuto
Se un tenant dispone dell'utilizzo esclusivo di uno o più database del contenuto dedicati, è possibile eseguire operazioni di backup e ripristino generali su tali database.
Nota
[!NOTA] Non è possibile ottenere l'utilizzo esclusivo di uno o più database del contenuto dedicati ricorrendo a funzionalità di prodotto standard, come ad esempio la creazione di siti in modalità self-service. Di seguito è riportato un esempio in cui è necessaria la personalizzazione per soddisfare una determinata offerta di servizio.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come eseguire un'azione di backup iniziale su un database del contenuto tenant.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Backup-SPFarm -Directory "c:\backups\alpha" -Item "HostingFarm_Content_Hosting" -BackupMethod Full
Write-Host "Tenant Content Database Backup Script Completed!"
The following Windows PowerShell script shows how to perform a restore operation on a tenant site collection:
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Restore-SPFarm -Directory "c:\backups\alpha" -Item "HostingFarm_Content_Hosting" -RestoreMethod Overwrite
Write-Host "Tenant Content Database Restore Script Completed!"
Raccolte siti
È possibile eseguire operazioni di backup e ripristino specifiche su una raccolta siti tenant. Lo strumento che si sceglie di utilizzare dipende dalle dimensioni della raccolta siti. I cmdlet di Microsoft PowerShell sono adatti per le raccolte siti di piccole o medie dimensioni.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come eseguire un'azione di backup su una raccolta siti tenant.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Backup-SPSite -Identity "http://alpha.contoso.com" -Path "c:\backups\alpha\root.bak" -UseSqlSnapshot
Write-Host "Tenant Site Collection Backup Script Completed!"
The following script shows how to perform a restore operation on a tenant site collection:
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Restore-SPSite -Identity "http://alpha.contoso.com" -Path "c:\backups\alpha\root.bak" -DatabaseServer "SQLServer01" -DatabaseName "HostingFarm_Content_Hosting" -HostHeaderWebApplication "http://$ENV:COMPUTERNAME" -GradualDelete - Confirm: $false -Force
Write-Host "Tenant Site Collection Restore Script Completed!"
Monitoraggio
Sono disponibili numerosi strumenti per il monitoraggio di SharePoint Server 2013 e la risoluzione dei problemi. I vari strumenti coprono aspetti diversi dell'ambiente, anche se alcune aree possono sovrapporsi. Considerare gli strumenti che consentono di ottenere i massimi vantaggi dal monitoraggio. Per altre indicazioni su come pianificare il monitoraggio per SharePoint Server 2013, vedere Pianificare il monitoraggio in SharePoint Server.
Gestione dei Feature Pack
Come spiegato in precedenza, un Feature Pack può essere utilizzato per raggruppare diverse funzionalità e associarle a una sottoscrizione di sito, ovvero a un tenant. Tutte le raccolte siti incluse nella sottoscrizione di sito, o tenant, possono utilizzare solo le funzionalità con ambito sito o Web che fanno parte del Feature Pack. Questa capacità consente ai provider di servizi di fornire offerte di servizi a più livelli in base a insiemi diversi di funzionalità. È possibile utilizzare il cmdlet New-SPSiteSubscriptionFeaturePack per creare il contenitore del Feature Pack e il cmdlet Add-SPSiteSubscriptionFeaturePackMember per aggiungere al contenitore le singole funzionalità.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare un Feature Pack a livello di tenant che rappresenta le funzionalità di SharePoint Foundation 2013 e archivia l'ID del Feature Pack nel contenitore delle proprietà della farm.
Nota
L'applicazione di servizio per le impostazioni della sottoscrizione deve essere presente prima che vengano eseguiti script che interagiscono con i Feature Pack.
<#
Feature Packs.ps1
Creates a new Feature Pack comprised of SharePoint Foundation 2013 Features
Adds the Feature Pack ID with a friendly name to the Farm's Property Bag for future use.
#>
asnp Microsoft.SharePoint.PowerShell
# Create an alias for Add-SPSiteSubscriptionFeaturePackMember
Set-Alias AddFeature Add-SPSiteSubscriptionFeaturePackMember
# create a new feature pack, and store it in the Farm's Property Bag
$ffp = New-SPSiteSubscriptionFeaturePack
$farm = Get-SPFarm
$farm.Properties.Add("Foundation_FeaturePack", $ffp.Id);
$farm.Update();
# add foundation features to the feature pack
# web scoped features...
AddFeature -identity $ffp -FeatureDefinition XmlFormLibrary
AddFeature -identity $ffp -FeatureDefinition LinksList
AddFeature -identity $ffp -FeatureDefinition WorkflowProcessList
AddFeature -identity $ffp -FeatureDefinition GridList
AddFeature -identity $ffp -FeatureDefinition WorkflowHistoryList
AddFeature -identity $ffp -FeatureDefinition TeamCollab
AddFeature -identity $ffp -FeatureDefinition GanttTasksList
AddFeature -identity $ffp -FeatureDefinition PictureLibrary
AddFeature -identity $ffp -FeatureDefinition IssuesList
AddFeature -identity $ffp -FeatureDefinition DiscussionsList
AddFeature -identity $ffp -FeatureDefinition ContactsList
AddFeature -identity $ffp -FeatureDefinition ExternalList
AddFeature -identity $ffp -FeatureDefinition TasksList
AddFeature -identity $ffp -FeatureDefinition WebPageLibrary
AddFeature -identity $ffp -FeatureDefinition AnnouncementsList
AddFeature -identity $ffp -FeatureDefinition WikiPageHomePage
AddFeature -identity $ffp -FeatureDefinition CustomList
AddFeature -identity $ffp -FeatureDefinition DocumentLibrary
AddFeature -identity $ffp -FeatureDefinition SurveysList
AddFeature -identity $ffp -FeatureDefinition EventsList
AddFeature -identity $ffp -FeatureDefinition DataSourceLibrary
AddFeature -identity $ffp -FeatureDefinition NoCodeWorkflowLibrary
AddFeature -identity $ffp -FeatureDefinition OsrvLinks
AddFeature -identity $ffp -FeatureDefinition FCGroupsList
AddFeature -identity $ffp -FeatureDefinition TenantAdminBDC
AddFeature -identity $ffp -FeatureDefinition OssNavigation
AddFeature -identity $ffp -FeatureDefinition IMEDicList
AddFeature -identity $ffp -FeatureDefinition CallTrackList
AddFeature -identity $ffp -FeatureDefinition SSSvcAdmin
AddFeature -identity $ffp -FeatureDefinition MpsWebParts
AddFeature -identity $ffp -FeatureDefinition GBWWebParts
AddFeature -identity $ffp -FeatureDefinition FacilityList
AddFeature -identity $ffp -FeatureDefinition ScheduleList
AddFeature -identity $ffp -FeatureDefinition ObaProfilePages
AddFeature -identity $ffp -FeatureDefinition GBWProvision
AddFeature -identity $ffp -FeatureDefinition OSSSearchSearchCenterUrlFeature
AddFeature -identity $ffp -FeatureDefinition WikiWelcome
AddFeature -identity $ffp -FeatureDefinition MaintenanceLogs
AddFeature -identity $ffp -FeatureDefinition TenantAdminLinks
AddFeature -identity $ffp -FeatureDefinition HolidaysList
AddFeature -identity $ffp -FeatureDefinition GroupWork
AddFeature -identity $ffp -FeatureDefinition WhereaboutsList
AddFeature -identity $ffp -FeatureDefinition CirculationList
AddFeature -identity $ffp -FeatureDefinition TenantAdminSecureStore
AddFeature -identity $ffp -FeatureDefinition SearchAdminWebParts
AddFeature -identity $ffp -FeatureDefinition ObaSimpleSolution
AddFeature -identity $ffp -FeatureDefinition TimecardList
AddFeature -identity $ffp -FeatureDefinition WhatsNewList
AddFeature -identity $ffp -FeatureDefinition MobilityRedirect
AddFeature -identity $ffp -FeatureDefinition AdminLinks
AddFeature -identity $ffp -FeatureDefinition SearchCenterLiteFiles
AddFeature -identity $ffp -FeatureDefinition CorporateCatalog
AddFeature -identity $ffp -FeatureDefinition BlogContent
AddFeature -identity $ffp -FeatureDefinition PromotedLinksList
AddFeature -identity $ffp -FeatureDefinition AppLockdown
AddFeature -identity $ffp -FeatureDefinition AppRequestsList
AddFeature -identity $ffp -FeatureDefinition SearchCenterUpgrade
AddFeature -identity $ffp -FeatureDefinition SearchConfigFields
AddFeature -identity $ffp -FeatureDefinition PhonePNSubscriber
AddFeature -identity $ffp -FeatureDefinition SearchConfigContentType
AddFeature -identity $ffp -FeatureDefinition GettingStarted
AddFeature -identity $ffp -FeatureDefinition GettingStartedWithAppCatalogSite
AddFeature -identity $ffp -FeatureDefinition ExternalSubscription
AddFeature -identity $ffp -FeatureDefinition SearchCenterFiles
AddFeature -identity $ffp -FeatureDefinition BcsEvents
AddFeature -identity $ffp -FeatureDefinition OfficeExtensionCatalog
AddFeature -identity $ffp -FeatureDefinition MDSFeature
AddFeature -identity $ffp -FeatureDefinition TenantSearchAdmin
AddFeature -identity $ffp -FeatureDefinition SiteAssets
AddFeature -identity $ffp -FeatureDefinition PremiumSearchVerticals
AddFeature -identity $ffp -FeatureDefinition AccessRequests
AddFeature -identity $ffp -FeatureDefinition SearchConfigList
AddFeature -identity $ffp -FeatureDefinition ReportAndDataSearch
AddFeature -identity $ffp -FeatureDefinition MBrowserRedirect
AddFeature -identity $ffp -FeatureDefinition BlogHomePage
AddFeature -identity $ffp -FeatureDefinition SearchConfigListTemplate
AddFeature -identity $ffp -FeatureDefinition SiteNotebook
AddFeature -identity $ffp -FeatureDefinition HierarchyTasksList
AddFeature -identity $ffp -FeatureDefinition BlogSiteTemplate
AddFeature -identity $ffp -FeatureDefinition SearchCenterLiteUpgrade
# Site Scoped features...
AddFeature -identity $ffp -FeatureDefinition BasicWebParts
AddFeature -identity $ffp -FeatureDefinition OSSSearchEndUserHelpFeature
AddFeature -identity $ffp -FeatureDefinition HelpLibrary
AddFeature -identity $ffp -FeatureDefinition OfficeWebApps
AddFeature -identity $ffp -FeatureDefinition WordServerViewing
AddFeature -identity $ffp -FeatureDefinition OnenoteServerViewing
AddFeature -identity $ffp -FeatureDefinition SiteHelp
AddFeature -identity $ffp -FeatureDefinition ctypes
AddFeature -identity $ffp -FeatureDefinition OSSSearchSearchCenterUrlSiteFeature
AddFeature -identity $ffp -FeatureDefinition OpenInClient
AddFeature -identity $ffp -FeatureDefinition ExcelServerEdit
AddFeature -identity $ffp -FeatureDefinition AdminReportCore
AddFeature -identity $ffp -FeatureDefinition fields
AddFeature -identity $ffp -FeatureDefinition SearchServerWizardFeature
AddFeature -identity $ffp -FeatureDefinition OSearchHealthReports
AddFeature -identity $ffp -FeatureDefinition SearchWebParts
AddFeature -identity $ffp -FeatureDefinition IssueTrackingWorkflow
AddFeature -identity $ffp -FeatureDefinition ShareWithEveryone
AddFeature -identity $ffp -FeatureDefinition MonitoredApps
AddFeature -identity $ffp -FeatureDefinition SearchTaxonomyRefinementWebParts
AddFeature -identity $ffp -FeatureDefinition SearchTaxonomyRefinementWebPartsHtml
AddFeature -identity $ffp -FeatureDefinition SearchMaster
AddFeature -identity $ffp -FeatureDefinition EnableAppSideLoading
AddFeature -identity $ffp -FeatureDefinition Developer
AddFeature -identity $ffp -FeatureDefinition AutohostedAppLicensing
AddFeature -identity $ffp -FeatureDefinition AppRegistration
Write-Host "Feature Pack Created! " + $ffp.ID
Gestione delle licenze
In SharePoint Server 2013 è stata aggiunta una nuova funzionalità per la gestione delle licenze. Gli amministratori di farm ora possono assegnare licenze agli utenti e abilitare i controlli delle licenze in fase di runtime. Grazie a questa nuova funzionalità, ci si assicura che solo gli utenti provvisti della licenza appropriata possano utilizzare una determinata funzionalità. Viene inoltre semplificato il modello di distribuzione, in quanto non è più necessario creare farm separate per le edizioni Standard ed Enterprise di SharePoint Server.
Le licenze utente vengono assegnate eseguendo il mapping delle attestazioni a un tipo noto di licenza. Un'attestazione può essere, ad esempio, un gruppo di sicurezza di Servizi di dominio Active Directory. Eseguendo il mapping del gruppo di sicurezza ContosoFinanceDept a una licenza Enterprise, si assegna in modo efficace una licenza Enterprise a tutti i membri di tale gruppo. Agli utenti che accedono a SharePoint Server vengono assegnate attestazioni. SharePoint Server esamina le attestazioni degli utenti per determinare la propria licenza, se un utente non dispone di una licenza per usare una particolare funzionalità, SharePoint bloccherà l'accesso a tale funzionalità in fase di esecuzione.
Questa implementazione delle licenze di SharePoint Server 2013 viene gestita mediante nuovi cmdlet di Microsoft PowerShell. Per impostazione predefinita, la gestione delle licenze è disabilitata in SharePoint Server. Gli amministratori possono tuttavia decidere di attivarla mediante Microsoft PowerShell. Per altre informazioni su come configurare le licenze in SharePoint Server 2013, vedere Configurare le licenze in SharePoint Server.
Gestione del ciclo di vita
Anche se in questo white paper sono riportate le principali considerazioni sull'infrastruttura per la progettazione di una soluzione SharePoint 2013 multi-tenant e vengono forniti script iniziali per la configurazione, è indispensabile effettuare la gestione generale del ciclo di vita delle operazioni. Ad esempio, l'amministrazione tenant personalizzata, il deprovisioning delle sottoscrizioni, l'archiviazione, la gestione degli utenti, la reimpostazione della password self-service e le quote sono tutte aree comuni che richiedono una combinazione di più Windows PowerShell e sforzi di personalizzazione per offrire un'offerta di servizio completa. Ogni provider di servizi avrà requisiti diversi in questo ambito ed è incredibilmente importante assicurarsi che questi requisiti siano parte del lavoro iniziale di ambito e progettazione per la piattaforma di infrastruttura.
Installazione e configurazione
In questa sezione vengono illustrati i passaggi generali da eseguire per installare e configurare una piattaforma SharePoint Server 2013 di hosting multi-tenant.
Riconoscimenti
Questa sezione fornisce dettagli e contiene script di PowerShell che illustrano la creazione e la configurazione di vari componenti. Questi script vengono forniti per illustrare i requisiti di configurazione per la multi-tenancy e pertanto non rappresentano l'ordine di provisioning ottimale, tuttavia possono fungere da base per lo sviluppo di una soluzione di scripting end-to-end personalizzata.
Gli script di Microsoft PowerShell contenuti nelle sezioni seguenti si basano (interi o in parte) sul lavoro di Spencer Harbar (http://www.harbar.net) e sono riprodotti qui con il suo gentile consenso. Per altre informazioni sul lavoro originale di Spencer Harbar, vedere i documenti seguenti:
Negli script di PowerShell forniti sono incluse alcune variabili da modificare in base al proprio ambiente.
Esempio di distribuzione
Questa sezione presenta un esempio di distribuzione che usa una singola applicazione Web di hosting usando raccolte siti denominate host e percorsi gestiti di intestazione host. Viene distribuito in un singolo server per motivi di semplicità. Questo esempio di distribuzione è il modello di progettazione previsto per la multi-tenancy con SharePoint 2013 e può essere esteso a una distribuzione in cui i ruoli dell'istanza del servizio sono articolati tra più computer. Si tratta del modello di progettazione previsto per la multi-tenancy con SharePoint 2013 e può essere esteso a una distribuzione in cui i ruoli delle istanze di servizio sono implementate su più computer. Nell'esempio di distribuzione viene utilizzato HTTP per l'applicazione Web, mentre in una distribuzione reale è consigliabile utilizzare SSL per proteggere l'accesso, il contenuto e i token di autorizzazione utilizzati con le app di SharePoint e altri servizi correlati a OAuth2 come ad esempio Gestione flusso di lavoro.
Configurazione del sistema DNS
Poiché per un ambiente SharePoint multi-tenant verranno utilizzate raccolte siti con nome host, è necessario configurare il sistema DNS, ovvero creare record DNS appropriati e così via, in base al proprio piano. Per altre indicazioni su come pianificare raccolte siti con nome host per SharePoint Server 2013, vedere Architettura e distribuzione di raccolte siti con nome host (SharePoint 2013).
Se inoltre si intende supportare app per SharePoint, è necessario configurare DNS anche per supportare il proprio ambiente. Per altre informazioni su come configurare un ambiente di app per SharePoint Server 2013, vedere Configurare un ambiente per le app per SharePoint Server.
Configurazione di Active Directory
Come spiegato in precedenza, per supportare la multi-tenancy in SharePoint, è necessario strutturare correttamente Active Directory creando una struttura gerarchica di unità organizzative a supporto della sincronizzazione dei profili utente per ogni sottoscrizione. È inoltre necessario creare account di servizio adatti per il proprio ambiente. Per altre informazioni su come pianificare gli account del servizio per SharePoint Server 2013, vedere Pianificare gli account amministrativi e di servizio in SharePoint Server. In questo esempio di distribuzione vengono utilizzati i tre account di servizio seguenti:
SPFarm - account della farm di SharePoint
SPServices : identità del pool di applicazioni che ospita gli endpoint dell'applicazione di servizio
SPContent : identità del pool di applicazioni che ospita l'applicazione Web contenuto
Creazione e configurazione di una farm di SharePoint
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare una farm di SharePoint.
<#
1. Farm Creation.ps1
Creates a new SharePoint Farm
Creates Central Administration on Port 8080
Update initial variables as needed to reflect your environment
Script will prompt for the password of the farm account
#>
asnp Microsoft.SharePoint.PowerShell
$databaseServer = "SQLSP1"
$configDatabase = "HostingFarm_Config"
$adminContentDB = "HostingFarm_Content_Admin"
$passphrase = "Password1"
$farmAccountName = "FABRIKAM\spfarm"
$farmAccount = Get-Credential $farmAccountName
$passphrase = (ConvertTo-SecureString $passphrase -AsPlainText -force)
Write-Host "Creating Configuration Database and Central Admin Content Database..."
New-SPConfigurationDatabase -DatabaseServer $databaseServer -DatabaseName $configDatabase `
-AdministrationContentDatabaseName $adminContentDB `
-Passphrase $passphrase -FarmCredentials $farmAccount
$spfarm = Get-SPFarm -ErrorAction SilentlyContinue -ErrorVariable err
if ($spfarm -eq $null -or $err) {
throw "Unable to verify farm creation."
}
Write-Host "ACLing SharePoint Resources..."
Initialize-SPResourceSecurity
Write-Host "Installing Services ..."
Install-SPService
Write-Host "Installing Features..."
Install-SPFeature -AllExistingFeatures
Write-Host "Creating Central Administration..."
New-SPCentralAdministration -Port 8080 -WindowsAuthProvider NTLM
Write-Host "Installing Help..."
Install-SPHelpCollection -All
Write-Host "Installing Application Content..."
Install-SPApplicationContent
Write-Host "Farm Creation Done!"
Gruppo proxy, applicazione Web di hosting e percorsi gestiti
Inizialmente viene creato un account gestito per il pool di applicazioni che ospita l'applicazione Web del contenuto. Viene creato un nuovo gruppo proxy, seguito dall'applicazione Web. Viene infine eseguita la configurazione dell'applicazione Web per consentire la creazione di siti in modalità self-service e vengono creati i percorsi gestiti condivisi. È importante creare una raccolta siti "radice" nell'applicazione Web di hosting anche se questa raccolta siti non sarà accessibile agli utenti finali. Questa raccolta siti "radice" è necessaria per supportare e correggere il comportamento operativo di SharePoint 2013.
Nota
In questo esempio viene utilizzato HTTP per l'applicazione Web.
<#
2. Proxy Group, Web Application & Farm Settings.ps1
Creates a new Managed Account
Creates a new Proxy Group
Creates a new Web Application for HNSC, in a new Application Pool, in the new Proxy Group
Creates an empty root Site Collection
Enables Self Service Site Creation
Creates Managed Paths for HNSC
Update initial variables as needed to reflect your environment
Update the Managed Paths section to use the paths you need
Script will prompt for the password of the App Pool account used for the Web App
You will need to configure the SSL certificate manually or via IIS PowerShell
#>
asnp Microsoft.SharePoint.PowerShell
## UPDATE THESE VARS ##
$waAppPoolUserName = "FABRIKAM\spcontent"
$waAppPoolName = "SharePoint Hosting"
$proxyGroupName = "Hosting Proxy Group"
$waUrl = "http://$ENV:COMPUTERNAME"
$webAppName = "SharePoint Hosting"
$contentDBName = "HostingFarm_Content_Hosting"
$ownerEmail = "administrator@contoso.com"
$ownerAlias = "FABRIKAM\administrator"
## END VARS ##
# Create Managed Account
Write-Host "Please supply the password for the $waAppPoolUserName Account..."
$appPoolCred = Get-Credential $waAppPoolUserName
Write-Host "Creating Managed Account..."
$waAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred
# Create a new Proxy Group
Write-Host "Creating Proxy Group..."
$proxyGroup = New-SPServiceApplicationProxyGroup -Name $proxyGroupName
# Create a new Web App in the new Proxy Group using Windows Claims on Port 80 with no host header
Write-Host "Creating Web Application..."
# SSL example, not used
#$webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 443 -SecureSocketsLayer:$true -AuthenticationProvider (New-SPAuthenticationProvider) -DatabaseName $contentDBName -ServiceApplicationProxyGroup $proxyGroup
# following line is to use port 80
$webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 80 -AuthenticationProvider (New-SPAuthenticationProvider) -DatabaseName $contentDBName -ServiceApplicationProxyGroup $proxyGroup
# Create a empty root Site Collection, required for support and SSSC
Write-Host "Creating empty root Site Collection..."
New-SPSite -Url $waUrl -owneralias $ownerAlias -ownerEmail $ownerEmail
# Enable Self Service Site Creation
Write-Host "Enabling Self Service Site Creation..."
$webApp.SelfServiceSiteCreationEnabled = $true
$webApp.RequireContactForSelfServiceSiteCreation = $false
$webApp.Update()
# Create Managed Paths for all 2013 Tenancy capabilities (remove the ones you don't want)
# the default /sites path is removed to prevent creation of sites from CA
Write-Host "Creating HNSC Managed Paths..."
Remove-SPManagedPath "sites" -WebApplication $webApp -Confirm:$false
New-SPManagedPath "admin" -HostHeader -Explicit # Tenant Administration
New-SPManagedPath "apps" -HostHeader -Explicit # App Catalog
New-SPManagedPath "cthub" -HostHeader -Explicit # Content Type Hub
New-SPManagedPath "my" -HostHeader -Explicit # MySite Host
New-SPManagedPath "my/sites" -HostHeader # MySites
New-SPManagedPath "edisc" -HostHeader -Explicit # E-Discovery Hub
Write-Host "Proxy Group and Web Application done!"
Servizi non partizionati
In questa fase è possibile creare le applicazioni di servizio non partizionate. Queste applicazioni di servizio sono necessarie nella farm per le normali operazioni (ad esempio, il servizio stato) o non devono essere partizionate per supportare la multi-tenancy perché non archiviano dati. A tale scopo, è necessario un altro account gestito e quindi ogni applicazione di servizio viene creata a sua volta.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare le applicazioni di servizio non partizionate.
<#
3. Non Partitioned Services.ps1
Creates a new Managed Account
Creates a new Service Application Pool
Starts the Service Instances for and creates non partitioned Service Applications and Proxies:
State Service
Usage and Health Data Collection Service
Subscription Settings Service
App Management Service
Work Management Service
...in the new Proxy Group
Adds any configured Workflow Service Proxy to the new Proxy Group
Update initial variables as needed to reflect your environment
Script will prompt for the password of the Service Application Pool account
#>
asnp Microsoft.SharePoint.PowerShell
## UPDATE THESE VARS ##
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$saAppPoolUserName = "FABRIKAM\spservices"
# Service Application and DB names
$stateName = "State Service"
$stateDBName = "HostingFarm_StateService"
$usageName = "Usage and Health Data Collection Service"
$usageDBName = "HostingFarm_Usage"
$subsName = "Subscription Settings Service"
$subsDBName = "HostingFarm_SubscriptionSettings"
$appsName = "App Management Service"
$appsDBName = "HostingFarm_AppManagement"
$wmsName = "Work Management Service"
$pasName = "PowerPoint Automation Service"
## END VARS ##
# Create Managed Account and App Pool for Service App Endpoints
Write-Host "Please supply the password for the $saAppPoolUserName Account..."
$appPoolCred = Get-Credential $saAppPoolUserName
Write-Host "Creating Managed Account..."
$saAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred
Write-Host "Creating Service Application Pool..."
$saAppPool = New-SPServiceApplicationPool -Name $saAppPoolName -Account $saAppPoolAccount
# Grab the Proxy Group
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Create State Service Application and Proxy, add to Proxy Group
Write-Host "Creating $stateName Application and Proxy..."
$stateDB = New-SPStateServiceDatabase -Name $stateDBName
$state = New-SPStateServiceApplication -Name $stateName -Database $stateDB
$proxy = New-SPStateServiceApplicationProxy -Name "$stateName Proxy" -ServiceApplication $state
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Create Usage Service Application and Proxy, add to Proxy Group, and provision it's Proxy
Write-Host "Creating $usageName Application and Proxy..."
$serviceInstance = Get-SPUsageService
New-SPUsageApplication -Name $usageName -DatabaseName $usageDBName -UsageService $serviceInstance
$proxy = Get-SPServiceApplicationProxy | ? { $_.TypeName -eq "Usage and Health Data Collection Proxy" }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
$proxy.Provision();
# Start the Subscription Settings Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $subsName Application and Proxy..."
Get-SPServiceInstance | where { $_.TypeName -eq "Microsoft SharePoint Foundation Subscription Settings Service" } | Start-SPServiceInstance
$subs = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $saAppPool -Name $subsName -DatabaseName $subsDBName
$proxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $subs
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Start the App Management Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $appsName Application and Proxy..."
Get-SPServiceInstance | where { $_.TypeName -eq "App Management Service"} | Start-SPServiceInstance
$apps = New-SPAppManagementServiceApplication -ApplicationPool $saAppPool -Name $appsName -DatabaseName $appsDBName
$proxy = New-SPAppManagementServiceApplicationProxy -ServiceApplication $apps -Name "$appsName Proxy"
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Start the Work Management Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $wmsName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Work Management Service" } | Start-SPServiceInstance
$wms = New-SPWorkManagementServiceApplication -ApplicationPool $saAppPool -Name $wmsName
$proxy = New-SPWorkManagementServiceApplicationProxy -ServiceApplication $wms -Name "$wmsName Proxy"
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Start the PowerPoint Automation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $pasName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "PowerPoint Conversion Service" } | Start-SPServiceInstance
$pas = New-SPPowerPointConversionServiceApplication -ApplicationPool $saAppPool -Name $pasName
$proxy = New-SPPowerPointConversionServiceApplicationProxy -ServiceApplication $pas -Name "$pasName Proxy"
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Adds any Workflow Service proxy to the Proxy Group (if it exists)
$wfProxy = Get-SPServiceApplicationProxy | ? {$_.TypeName -like "*Workflow Service*" }
if ($wfProxy -ne $null) {
Write-Host "Adding Workflow Service Proxy to Proxy Group..."
# should probably remove from the default group as well
Add-SPServiceApplicationProxyGroupMember -Identity $proxyGroup -Member $wfProxy
}
Write-Host "Non Partitioned Service Applications done!"
Creazione e configurazione di applicazioni di servizio partizionate
Le sezioni seguenti descrivono le procedure di Microsoft PowerShell necessarie per creare e configurare ogni applicazione di servizio che supporta il partizionamento. Lo stesso modello generale si applica a ogni applicazione di servizio, ad eccezione di Ricerca e Profili utente. Vi sono tuttavia piccole differenze per i proxy delle applicazioni di servizio.
Servizio di integrazione applicativa dei dati
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare l'applicazione del servizio di integrazione applicativa dei dati in modalità partizione e come aggiungerla a un gruppo proxy di servizio personalizzato.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$bcsName = "Business Data Connectivity Service"
$bcsDBName = "HostingFarm_BusinessDataConnectivity"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Business Data Connectivity Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $bcsName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Business Data Connectivity Service" } | Start-SPServiceInstance
$bcs = New-SPBusinessDataCatalogServiceApplication -PartitionMode -Name $bcsName -ApplicationPool $saAppPool -DatabaseName $bcsDBName
$proxy = Get-SPServiceApplicationProxy | ? { $_.Name -eq "$bcsName" }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Servizio metadati gestiti
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare l'applicazione del servizio metadati gestiti in modalità partizione e come aggiungerla a un gruppo proxy di servizio personalizzato.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$mmsName = "Managed Metadata Service"
$mmsDBName = "HostingFarm_ManagedMetadata"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start the Managed Metadata Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $mmsName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Managed Metadata Web Service" } | Start-SPServiceInstance
$mms = New-SPMetadataServiceApplication -PartitionMode -Name $mmsName -ApplicationPool $saAppPool -DatabaseName $mmsDBName
$proxy = New-SPMetadataServiceApplicationProxy -PartitionMode -Name "$mmsName Proxy" -ServiceApplication $mms
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Servizio di traduzione automatica
Il servizio di traduzione automatica supporta la multi-tenancy mediante la creazione della relativa applicazione di servizio in modalità partizione. Non è disponibile alcuna configurazione specifica del tenant e il servizio viene gestito a livello di farm. Il relativo database funge da coda, pertanto deve essere in grado di riconoscere la partizione o il tenant.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare l'applicazione del servizio di traduzione automatica in modalità partizione.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$mtsName = "Machine Translation Service"
$mtsDBName = "HostingFarm_MachineTranslation"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Machine Translation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $mtsName Application & proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Machine Translation Service" } | Start-SPServiceInstance
$mts = New-SPTranslationServiceApplication -PartitionMode -Name $mtsName -ApplicationPool $saAppPool -DatabaseName $mtsDBName
Get-SPServiceApplicationProxy | ? {$_.Name -eq $mtsName} | Remove-SPServiceApplicationProxy -Confirm:$false
$proxy = New-SPTranslationServiceApplicationProxy -PartitionMode -Name "$mtsName Proxy" -ServiceApplication $mts
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Servizio di archiviazione sicura
Dopo la configurazione in modalità partizione, la generazione delle chiavi di crittografia rimane una configurazione a livello di farm eseguita mediante Amministrazione centrale o Windows PowerShell. Il resto delle attività di configurazione del servizio di archiviazione sicura viene trasferita all'amministrazione tenant. Tuttavia, il modello di sito Amministrazione tenant non include il collegamento a questa pagina, che può essere aggiunto usando la tecnica di personalizzazione nella sezione Estensione del modello di sito Amministrazione tenant.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare l'applicazione del servizio di archiviazione sicura in modalità partizione e come aggiungerla a un gruppo proxy di servizio personalizzato.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$sssName = "Secure Store Service"
$sssDBName = "HostingFarm_SecureStore"
$sssAuditing = $false
$sssSharing = $false
$sssAuditLogMaxSize = ""
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Secure Store Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $sssName Application & Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Secure Store Service" } | Start-SPServiceInstance
$sss = New-SPSecureStoreServiceApplication -PartitionMode -Name $sssName -ApplicationPool $saAppPool -DatabaseName $sssDBName -auditingEnabled:$sssAuditing -AuditlogMaxSize $sssAuditLogMaxSize -Sharing:$sssSharing
$proxy = New-SPSecureStoreServiceApplicationProxy -Name "$sssName Proxy" -ServiceApplication $sss
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Servizio di ricerca
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare l'applicazione del servizio di ricerca in modalità partizione.
Nota
Nello script per questa applicazione di servizio viene utilizzato il parametro Partitioned anziché il parametro PartitionMode.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$searchServerName = "$ENV:COMPUTERNAME"
$searchName = "Search Service"
$searchDBName = "HostingFarm_Search"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Search Service Instances, create the Service Application and Proxy, add to Proxy Group, configure Topology
Write-Host "Starting Search Service Instances..."
Start-SPEnterpriseSearchServiceInstance $searchServerName
Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $searchServerName
Write-Host "Creating Search Service Application and Proxy..."
$search = New-SPEnterpriseSearchServiceApplication -Partitioned -Name $searchName -ApplicationPool $saAppPool -DatabaseName $searchDBName
$proxy = New-SPEnterpriseSearchServiceApplicationProxy -Partitioned -Name "$searchName Proxy" -SearchApplication $search
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Clone the default Topology (which is empty) and create a new one and then activate it
Write-Host "Configuring Search Component Topology..."
$clone = $search.ActiveTopology.Clone()
$searchServiceInstance = Get-SPEnterpriseSearchServiceInstance
New-SPEnterpriseSearchAdminComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchCrawlComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
$clone.Activate()
Write-Host "Search complete!"
Word Automation Services
L'applicazione del servizio Word Automation Services supporta la modalità partizione. Non è disponibile alcun cmdlet per la creazione di un proxy.
Nello script di Microsoft PowerShell riportato di seguito viene mostrato come creare l'applicazione del servizio Word Automation Services in modalità partizione.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$wasName = "Word Automation Service"
$wasDBName = "HostingFarm_WordAutomation"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Word Automation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $wasName Application & Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Word Automation Services" } | Start-SPServiceInstance
$was = New-SPWordConversionServiceApplication -PartitionMode -Name $wasName -ApplicationPool $saAppPool -DatabaseName $wasDBName
# we cannot change the name of this proxy as there is no New-SPWordConversionServiceApplicationProxy
$proxy = Get-SPServiceApplicationProxy | ? { $_.Name -eq $wasName }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Servizio profili utente
La creazione del servizio profili utente mediante l'utilizzo di PowerShell come richiesto dal provisioning in modalità partizionata rappresenta una sfida se Windows PowerShell non viene eseguito con l'account della farm di SharePoint. Per risolvere questo problema e per avviare correttamente il servizio Sincronizzazione profili utente, usare il cmdlet Start-Process e simulare l'esecuzione dello script come account della farm.
Sono necessari due script: il primo crea l'applicazione di servizio profili utente (UPA) e il secondo chiama il primo script.
Lo script di Microsoft PowerShell seguente illustra come creare l'applicazione del servizio profili utente in modalità partizione e aggiungerla a un gruppo di proxy di servizio personalizzato...
Nota
[!NOTA] NON eseguire direttamente questo script, altrimenti non sarà possibile avviare l'istanza del servizio di sincronizzazione dei profili utente. Lo script deve essere salvato in locale e il relativo percorso deve essere annotato.
<#
partitionedUPAcreation.ps1
External dependency to create UPA under farm account creds
#>
asnp Microsoft.SharePoint.PowerShell
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$upaName = "User Profile Service"
$upaProfileDBName = "HostingFarm_UserProfile_Profile"
$upaSocialDBName = "HostingFarm_UserProfile_Social"
$upaSyncDBName = "HostingFarm_UserProfile_Sync"
# Grab the Proxy Group
$proxyGroup = Get-SPServiceApplicationProxyGroup -Identity $mtProxyName
# Grab the Appplication Pool for Service Application Endpoint
$saAppPool = Get-SPServiceApplicationPool $saAppPoolName
<# Creates UPA Service Application & Proxy, and User Profile Service Instance
If omitted, -ProfileSyncDBServer, -SocialDBServer & -ProfileDBServer are the SharePoint Default DB Server
If omitted, -SyncInstanceMachine is the local machine
#>
Write-Host "Creating $upaName Application & Proxy..."
$upa = New-SPProfileServiceApplication -PartitionMode -Name $upaName -ApplicationPool $saAppPoolName -ProfileDBName $upaProfileDBName -SocialDBName $upaSocialDBName -ProfileSyncDBName $upaSyncDBName
$proxy = New-SPProfileServiceApplicationProxy -PartitionMode -Name "$upaName Proxy" -ServiceApplication $upa
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Check it worked
Get-SPServiceApplication | ? {$_.Name -eq $upaName}
Il secondo script, riportato di seguito, esegue il lavoro necessario per chiamare lo script di creazione dell'applicazione di servizio profili utente (UPA) e avviare le istanze del servizio necessarie. Il percorso dello script di creazione deve essere aggiornato nella variabile $upaScriptFile. Inoltre, alcune autorizzazioni necessarie sono impostate nell'UPA.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$upaScriptfile = "c:\partitionedUPAcreation.ps1"
$upaName = "User Profile Service"
$user = "FABRIKAM\Administrator"
$serviceUser = "FABRIKAM\spservices"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start User Profile Service Instance
Write-Host "Starting User Profile Service Instance..."
Get-SPServiceInstance | ? { $_.TypeName -eq "User Profile Service" } | Start-SPServiceInstance
Write-Host "Restarting SPTimerV4..."
Restart-Service SPTimerV4
# Grab the Farm Account credentials
Write-Host "Please enter the Farm Account Password:"
$farmAcct = (Get-SPFarm).DefaultServiceAccount
$cred = Get-Credential $farmAcct.Name
# Create a new process to initiate User Profile Service Application creation under UAC elevation
Write-Host "Creating new process for UPA creation..."
Start-Process $PSHOME\powershell.exe -Credential $cred -ArgumentList "-Command Start-Process $PSHOME\powershell.exe -ArgumentList `"'$upaScriptfile'`" -Verb Runas" -Wait
Get-Date
Write-Host "UPA Created!"
# Start the User Profile Synchronization Service Instance
Write-Host "Starting the UPS Service Instance..."
Get-Date
$upa = Get-SPServiceApplication | where-object {$_.Name -eq $upaName}
$upsInstanceName = "User Profile Synchronization Service"
[String]$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($cred.Password));
Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName} | % {
$_.Status = [Microsoft.SharePoint.Administration.SPObjectStatus]::Provisioning
$_.IsProvisioned = $false
$_.UserProfileApplicationGuid = $upa.Id
$_.Update()
$upa.SetSynchronizationMachine($_.Server.Address, $_.Id, $cred.UserName, $password) # this can cause update conflicts
Start-SPServiceInstance $_
}
Write-Host "Waiting on $upsInstanceName to provision..."
Write-Host "Baseline time is 130 seconds"
[int]$time = 0
$ups = Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName}
while(-not ($ups.Status -eq "Online")){
sleep 10;
Write-Host "Still waiting... ($time seconds elapsed)"
$ups = Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName}
$time = $time + 10
}
Write-Host "$upsInstanceName provisioned, it took $time seconds."
Get-Date
Write-Host "UPS Service Instance Started"
# UPA Settings and Permissions, do this after UPS SI Started and Get it again to prevent update conflicts
Write-Host "Configuring NETBios Domain Names and UPA Permissions..."
$upa = Get-SPServiceApplication | where-object {$_.Name -eq $upaName}
$upa.NetBIOSDomainNamesEnabled=1
$upa.Update()
function Grant-ServiceAppPermission($app, $user, $perm, $admin) {
$sec = $app | Get-SPServiceApplicationSecurity -Admin:$admin
$claim = New-SPClaimsPrincipal -Identity $user -IdentityType WindowsSamAccountName
$sec | Grant-SPObjectSecurity -Principal $claim -Rights $perm
$app | Set-SPServiceApplicationSecurity -ObjectSecurity $sec -Admin:$admin
}
Grant-ServiceAppPermission $upa $user "Full Control" $false
Grant-ServiceAppPermission $upa $serviceUser "Full Control" $false
Configurazione di Information Rights Management
Il supporto di Information Rights Management per la multi-tenancy può essere attivato tramite il sito Web Amministrazione centrale SharePoint o i cmdlet aggiornati di Microsoft PowerShell.
Attivare Information Rights Management tramite Amministrazione centrale
Verificare che l'account utente che esegue questa procedura sia membro del gruppo di SharePoint Amministratori farm e del gruppo Administrators per il computer che esegue Amministrazione centrale.
Dal sito Web Amministrazione centrale passare a Sicurezza.
Nella pagina Sicurezza passare a Configura Information Rights Management.
Nella pagina Information Rights Management fare clic su Utilizza il server RMS seguente.
Inserire un segno di spunta nella casella di controllo Selezionare questa casella nelle configurazioni multi-tenant per consentire ai tenant di configurare le impostazioni IRM a livello di tenant.
Attivare Information Rights Management tramite Microsoft PowerShell
- Verificare di essere membri dei ruoli e dei gruppi seguenti:
Ruolo predefinito del server securityadmin nell'istanza di SQL Server.
Ruolo predefinito del database db_owner in tutti i database da aggiornare.
Gruppo Administrators nel server in cui si eseguono i cmdlet di PowerShell.
Un amministratore può utilizzare il cmdlet Add-SPShellAdmin per concedere le autorizzazioni per l'utilizzo dei cmdlet di SharePoint Server 2013.
Nota
[!NOTA] Se non si dispone delle autorizzazioni, richiederle all'amministratore dell'installazione o all'amministratore di SQL Server. Per altre informazioni sulle autorizzazioni di PowerShell, vedere Add-SPShellAdmin.
Aprire SharePoint Management Shell.
Al prompt dei comandi di PowerShell digitare il comando seguente:
Set-SPIRMSettings -IrmEnabled -UseActiveDirectoryDiscovery -SubscriptionScopeSettingsEnabled
Non sono disponibili opzioni di configurazione incorporate per IRM nel sito di amministrazione tenant. Per applicare la configurazione, utilizzare il cmdlet Set-SPSiteSubscriptionIRMConfig come mostrato nello script riportato di seguito:
$subscription=Get-SPSiteSubscription "http://www.contoso.com"
Set-SPSiteSubscriptionIRMConfig -identity $subscription -IrmEnabled -CertificateServerUrl "http://rms.contoso.com"
Tale configurazione viene eseguita come parte del provisioning del tenant.
Provisioning e gestione dei tenant
In questa sezione vengono illustrati i processi e gli approcci per il provisioning dei tenant e la personalizzazione dell'ambiente multi-tenant.
Provisioning dei tenant
Per creare un tenant, eseguire i passaggi descritti nella tabella.
Tasks |
Steps |
---|---|
1. Creare una sottoscrizione di sito. |
Al prompt dei comandi di Microsoft PowerShell digitare la seguente sintassi:$sub = New-SPSiteSubscription |
2. Assegnare un Feature Pack alla sottoscrizione di sito e configurare un'unità organizzativa personalizzata mediante Selezione utenti. |
Al prompt dei comandi di Microsoft PowerShell digitare la seguente sintassi:Set-SPSiteSubscriptionConfig -id $sub -FeaturePack $customerFeatures -UserAccountDirectoryPath "OU=$customerName,OU=Customers,DC=contoso,DC=com" |
3. Creare una o più raccolte siti da assegnare alla sottoscrizione di sito. |
Al prompt dei comandi di Microsoft PowerShell digitare la seguente sintassi:Write-Host "Creating Member Site..." New-SPSite -url "http://$customerName.contoso.com" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 -ContentDatabase $contentDBName``````# create Tenant Admin site Write-Host "Creating Tenant Admin site..." New-SPSite -url "http://$customerName.contoso.com/admin" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template tenantadmin#0 -AdministrationSiteType TenantAdministration -ContentDatabase $contentDBName``````Write-Host "Creating My Site Host..." New-SPSite -url "http://$customerName.contoso.com/mysites" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template SPSMSITEHOST#0 -ContentDatabase $contentDBName |
Nello script di PowerShell riportato di seguito viene mostrato come creare un sito di amministrazione tenant in cui venga utilizzato il modello TENANTADMIN#0. Se il tenant è configurato per l'uso di un Pacchetto di funzionalità Enterprise, lo script di Microsoft PowerShell esegue più operazioni, ovvero crea la raccolta Siti personali.
Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0
# farm details (update to reflect your environment)
$hostingMainURL = "http://$ENV:COMPUTERNAME"
$upaProxyName = "Tenant User Profile Service Proxy"
$mmsProxyName = "Tenant Managed Metadata Service"
$contentDBName = "HostingFarm_Content_Hosting"
$farm = Get-SPFarm
$foundationFeaturePack = $farm.Properties.Foundation_FeaturePack
#$standardFeaturePack = $farm.Properties.Standard_FeaturePack
#$enterpriseFeaturePack = $farm.Properties.Enterprise_FeaturePack
# tenant-specific information (vary by tenant)
$customerName = "Customer A"
$customerTenantAdmin = "CONTOSO\customerA-Admin"
$customerTenantAdminEmail = "admin@customerA.com"
$customerFeatures = $enterpriseFeatures
# Note:
# this script assumes that the Content Web App and necessary Managed Paths exist.
# grab the web app
$webApp = Get-SPWebApplication $hostingMainURL
# create new Site Subscription
Write-Host "Creating Site Subscription..."
$sub = New-SPSiteSubscription
# assign feature pack and set the OU to be used by the People
Write-Host "Assigning Feature Pack and configuring People Picker..."
Set-SPSiteSubscriptionConfig -id $sub -FeaturePack $customerFeatures -UserAccountDirectoryPath "OU=$customerName,OU=Customers,DC=contoso,DC=com"
# create the "main" member site (we need a site at the root to use Host Headers and Managed Paths in the following cmdlets)
Write-Host "Creating Member Site..."
New-SPSite -url "http://$customerName.contoso.com" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 -ContentDatabase $contentDBName
# create Tenant Admin site
Write-Host "Creating Tenant Admin site..."
New-SPSite -url "http://$customerName.contoso.com/admin" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template tenantadmin#0 -AdministrationSiteType TenantAdministration -ContentDatabase $contentDBName
# everything else needs standard
if (!($customerFeatures -eq $foundationFeatures))
{
Write-Host "Tenant has SharePoint Server features"
# create a mysite host
Write-Host "Creating My Site Host..."
New-SPSite -url "http://$customerName.contoso.com/mysites" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template SPSMSITEHOST#0 -ContentDatabase $contentDBName
# configure the MySites host, MySites path, Naming Resolution and Profile Sync OU for the Subscription
Write-Host "Configuring Tenant Profile Config..."
$upaProxy = Get-SPServiceApplicationProxy | where-object {$_.DisplayName -eq $upaProxyName}
Add-SPSiteSubscriptionProfileConfig -id $sub -SynchronizationOU $customerName -MySiteHostLocation "http://$customerName.contoso.com/mysites" -MySiteManagedPath "/mysites/personal" -SiteNamingConflictResolution "None" -ProfileServiceApplicationProxy $upaProxy
# create a site for the Content Type Gallery
Write-Host "Creating Content Type Gallery..."
New-SPSite -url "http://$customerName.contoso.com/cthub" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 -ContentDatabase $contentDBName
# configure the Content Type Gallery for the Subscription
Write-Host "Configuring Tenant Content Type Gallery..."
$mmsProxy = Get-SPServiceApplicationProxy | where-object {$_.DisplayName -eq $mmsProxyName}
# ContentTypeHub feature activation may fail - if so activate manually
Set-SPSiteSubscriptionMetadataConfig -identity $sub -serviceProxy $mmsProxy -huburi "http://$customerName.contoso.com/cthub" -SyndicationErrorReportEnabled
Write-Host "Activating Content Type Hub..."
Enable-SPFeature -Identity ContentTypeHub -url "http://$customerName.contoso.com/cthub"
}
Write-Host "Tenant Provisioning Script Completed!"
Questo approccio può essere ulteriormente personalizzato per contenere altre configurazioni del tenant, ad esempio flusso di lavoro, app e IRM. Questo script viene incapsulato in una funzione o in cmdlet personalizzati, che ne consente l'esecuzione ripetuta per i tenant futuri.
Servizio di flusso di lavoro
SharePoint Server 2013 apporta importanti miglioramenti al flusso di lavoro, tra cui funzionalità aziendali quali la creazione pienamente dichiarativa, la messaggistica REST e Service Bus, la scalabilità flessibile e l'affidabilità dei servizi gestiti. SharePoint 2013 è in grado di utilizzare un nuovo servizio di flusso di lavoro basato sui componenti Windows Workflow Foundation di .NET Framework 4.5. Il nuovo servizio è denominato Workflow Manager ed è progettato per svolgere un ruolo centrale nell'organizzazione.
La piattaforma per flussi di lavoro di SharePoint 2013 diventa disponibile, anche a livello di strumenti, solo dopo che il nuovo servizio Gestione flusso di lavoro è stato scaricato, installato e configurato per la comunicazione con la farm di SharePoint Server 2013. Per altre informazioni su come installare e configurare il servizio Workflow Manager per SharePoint 2013, vedere Installare e configurare il flusso di lavoro per SharePoint Server.
Per configurare il servizio di flusso di lavoro, utilizzare il cmdlet Register-SPWorkflowService per registrare la farm con Gestione flusso di lavoro in modalità partizione. In questa registrazione della farm usare il parametro SPSite per passare l'URL di qualsiasi raccolta siti tenant esistente dalla farm e usare il parametro ScopeName per definire un ambito del flusso di lavoro denominato per la farm.
Nello script di Windows PowerShell riportato di seguito viene mostrato come registrare la farm di SharePoint con il servizio Gestione flusso di lavoro in modalità partizione.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
# Register the Farm with the Workflow Service and create a workflow scope
# Note: any tenant site will suffice
Register-SPWorkflowService -SPSite "http://tenant.contoso.com" -WorkflowHostUri "http://WFSvr01:12291" -PartitionMode -AllowOAuthHttp -Force -ScopeName "HostingFarm"
Write-Host "Farm Workflow Registration Script Completed!"
Per abilitare un tenant specifico per il flusso di lavoro di SharePoint, è necessario configurare il proxy del servizio di flusso di lavoro. In questa configurazione, ottenere un riferimento alla raccolta siti radice del tenant e registrarlo con il proxy del servizio del flusso di lavoro.
Nello script di PowerShell riportato di seguito viene mostrato come abilitare un tenant per il flusso di lavoro di SharePoint.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
#Get the Workflow Service Application Proxy
$wfProxy = Get-SPWorkflowServiceApplicationProxy
#Create a credential object
$user = New-Object System.Net.NetworkCredential ("domain\Admin", "Password")
#Get the SPSite object of the root site collection of the tenant
$site = Get-SPSite http://tenant.domain.com
#Set the Workflow address for the tenant site (reference our workflow scope)
$wfProxy.SetWorkflowServiceAddress($site,"http://WFSvr01:12291/HostingFarm")
#Register the proxy with tenant site collection
$wfProxy.Register($site,$user)
#Connect the tenant site collection to the proxy
$wfProxy.Connect($site)
Write-Host "Tenant Workflow Registration Script Completed!"
Dopo aver configurato il tenant per l'uso di Workflow Service Manager, è possibile usare SharePoint Designer per creare flussi di lavoro usando l'opzione Flusso di lavoro di SharePoint 2013, come illustrato nel diagramma seguente.
Estensione del modello del sito di amministrazione tenant
Aggiunta o rimozione di collegamenti
Utilizzare lo schema di definizione di azioni personalizzate per aggiungere e rimuovere collegamenti nella pagina principale del sito di amministrazione tenant.
Nella definizione di funzionalità riportata di seguito viene mostrato come aggiungere un nuovo gruppo e diversi collegamenti e come rimuovere il collegamento relativo alla pagina Gestisci raccolte siti.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomActionGroup
Id="TenantAdmin_HostingUserAccounts"
Location="Microsoft.SharePoint.TenantAdministration"
Title="User Accounts"
Sequence="90"
ImageUrl="_layouts/images/SiteSettings_UsersAndPermissions_48x48.png">
<UrlAction
Url="" />
</CustomActionGroup>
<CustomAction
Id="TenantAdmin_HostingUserAccounts_AddUser"
GroupId="TenantAdmin_HostingUserAccounts"
Location="Microsoft.SharePoint.TenantAdministration"
Sequence="10"
Title="Create User">
<UrlAction
Url="_layouts/UserAccountsWebParts/UA_AddUsers.aspx" />
</CustomAction>
<CustomAction
Id="TenantAdmin_HostingUserAccounts_ManageUsers"
GroupId="TenantAdmin_HostingUserAccounts"
Location="Microsoft.SharePoint.TenantAdministration"
Sequence="30"
Title="Manage Users">
<UrlAction
Url="_layouts/UserAccountsWebParts/UA_ManageUsers.aspx" />
</CustomAction>
<HideCustomAction
GroupId = "TenantAdmin_Sites"
HideActionId = "TenantAdmin_Sites_ManageSiteCollections"
Location="Microsoft.SharePoint.TenantAdministration" />
</Elements>
Per altre informazioni sulle azioni personalizzate, ad esempio gli ID predefiniti per i collegamenti predefiniti, vedere Schema di definizione delle azioni personalizzate.
Personalizzazione della barra multifunzione
La barra multifunzione Server in SharePoint Server 2013 può essere personalizzata mediante l'apposito codice XML ed ECMAScript (JavaScript, JScript). Il codice XML definisce i controlli disponibili sulla barra multifunzione. L'ECMAScript esegue le azioni su una pagina o un oggetto presente nella pagina. È possibile utilizzare l'ECMAScript incluso nel modello a oggetti FoundationECMAScript di SharePoint oppure le funzioni ECMAScript incorporate. È inoltre possibile aggiungere il proprio ECMAScript alla pagina e utilizzarlo per interagire con la barra multifunzione.
Quando si personalizza la barra multifunzione Server, è possibile aggiungere, sostituire e rimuovere controlli, gruppi e schede. Le personalizzazioni relative alla barra multifunzione vengono definite mediante l'apposito codice XML in una funzionalità e possono essere distribuite in un pacchetto della soluzione (file con estensione wsp). Per tali personalizzazioni è possibile impostare come ambito un tipo di elenco specifico utilizzando gli attributi RegistrationId e RegistrationType. È inoltre possibile specificare come ambito un sito o una determinata applicazione Web utilizzando l'attributo Scope nel file Feature.xml.
Nel codice XML riportato di seguito viene mostrato come sostituire la funzionalità del pulsante Quota disco nella pagina Gestisci raccolte siti.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
<CustomAction Id="Ribbon.Library.Actions.ReplacementButton"
Location="CommandUI.Ribbon"
Title="Replace a Ribbon Button">
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition
Location="Ribbon.SiteCollections.Manage.DiskQuota">
<Button Id="Ribbon.SiteCollections.Manage.DiskQuota.Replacement"
Command="ReplacementButtonCommand"
Image32by32="/_layouts/1033/images/formatmap32x32.png?vk=4536"
Image32by32Left="-256"
Image32by32Top="-224"
LabelText="Disk Quota"
TemplateAlias="o1" />
</CommandUIDefinition>
</CommandUIDefinitions>
<CommandUIHandlers>
<CommandUIHandler
Command="ReplacementButtonCommand"
CommandAction="javascript:
function demoCallback(dialogResult, returnValue)
{
}
var options = {
url: 'HostingTenantAdmin/DiskQuota.aspx',
tite: 'Manage Disk Quota',
allowMaximize: true,
showClose: true,
width: 610,
height: 450,
dialogReturnValueCallback: demoCallback };
SP.UI.ModalDialog.showModalDialog(options);" />
</CommandUIHandlers>
</CommandUIExtension>
</CustomAction>
</Elements>
Per altre informazioni su come personalizzare la barra multifunzione server, vedere Personalizzazione della barra multifunzione del server.
Estensione di una sottoscrizione di sito con proprietà personalizzate
L'applicazione del servizio per la sottoscrizione al sito è in grado di archiviare sia proprietà personalizzate amministrative sia proprietà personalizzate tenant. Come tipi di proprietà supportati sono inclusi i seguenti valori:
string
int
long
bool
Guid
DateTime
È possibile utilizzare le proprietà personalizzate per estendere la funzionalità di gestione tenant, ad esempio la gestione delle quote tenant.
Nello script di PowerShell riportato di seguito viene mostrato come accedere alle proprietà personalizzate.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
#-----------------------------------------------------
# Load Assemblies
#-----------------------------------------------------
[void] [Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
#-----------------------------------------------------
# Functions
#-----------------------------------------------------
function GetSPSiteSubscription([string]$url)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = Get-SPSiteSubscription $url;
return $sub;
}
function GetSiteSubAdminProperties([string]$url)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
return $props;
}
function AddOrSetSiteSubAdminProperty([string]$url, [string]$theKey, $theValue)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.SetValue($theKey, $theValue);
}
else
{
$props.Add($theKey, $theValue);
}
$props.Update();
}
function GetSiteSubAdminProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
$theValue = "";
if ($props.ContainsKey($theKey) -eq $true)
{
foreach ($prop in $props)
{
if ($prop.Key -eq $theKey)
{
$theValue = $prop.Value;
break;
}
}
return $theValue;
}
else
{
return $null;
}
}
function RemoveSiteSubAdminProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.Remove($theKey);
$props.Update();
}
}
function GetSiteSubTenantProperties($url)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
return $props;
}
function AddOrSetSiteSubTenantProperty([string]$url, [string]$theKey, $theValue)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.SetValue($theKey, $theValue);
}
else
{
$props.Add($theKey, $theValue);
}
$props.Update();
}
function GetSiteSubTenantProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
$theValue = "";
if ($props.ContainsKey($theKey) -eq $true)
{
foreach ($prop in $props)
{
if ($prop.Key -eq $theKey)
{
$theValue = $prop.Value;
break;
}
}
return $theValue;
}
else
{
return $null;
}
}
function RemoveSiteSubTenantProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.Remove($theKey);
$props.Update();
}
Vedere anche
Concetti
Indicazioni generali per provider di servizi di hosting in SharePoint Server 2013