Condividi tramite


Informazioni sulla multi-tenancy in SharePoint Server 2013

SI APPLICA A:yes-img-132013 no-img-162016 no-img-192019 no-img-seSubscription Edition no-img-sopSharePoint 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

Microsoft OneDrive con integrazione 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 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. autenticazione di Windows metodi, 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 Persone selezione delle attestazioni e dei 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.

Figura che mostra la struttura di unità organizzative per un ambiente host

È 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.

Figura che mostra la finestra dell'editor delle proprietà ADSI per l'attributo uPNSuffixes

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.

Figura che mostra la finestra di dialogo Nuovo oggetto che consente di creare un nuovo utente

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 il flusso di lavoro 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.

Figura che mostra il sito di amministrazione tenant per Gestione app

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.

Figura che mostra le caratteristiche di Amministrazione ricerca nel sito amministrazione tenant

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.

Figura che mostra la configurazione del profilo utente

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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; Proxy, and User Profile Service Instance
     If omitted, -ProfileSyncDBServer, -SocialDBServer &amp; -ProfileDBServer are the SharePoint Default DB Server
     If omitted, -SyncInstanceMachine is the local machine 
#>
Write-Host "Creating $upaName Application &amp; 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

  1. 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.

  2. Dal sito Web Amministrazione centrale passare a Sicurezza.

  3. Nella pagina Sicurezza passare a Configura Information Rights Management.

  4. Nella pagina Information Rights Management fare clic su Utilizza il server RMS seguente.

  5. 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

  1. 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.

  1. Aprire SharePoint Management Shell.

  2. 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'azienda.

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 del flusso di lavoro 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.

Figura che mostra l'opzione Flusso di lavoro di SharePoint 2013 in SharePoint Designer

Estensione del modello del sito di amministrazione tenant

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