Noções básicas de multilocação no SharePoint Server 2013
APLICA-SE A:2013 2016 2019 Subscription Edition SharePoint no Microsoft 365
Este artigo descreve os componentes e serviços relacionados com vários inquilinos no SharePoint Server 2013 e também fornece orientações de arquitetura, segurança, operacional e gestão para ajudar os fornecedores de serviços a compreenderem vários inquilinos no SharePoint Server 2013 para planear, conceber, criar e gerir uma plataforma de alojamento multi-inquilino do SharePoint Server 2013.
Observação
O Microsoft OneDrive com integração Viva Engage não funciona para aplicações de serviço com vários inquilinos ou particionadas para implementações no local.
Antes de começar
Introdução à multilocação no SharePoint Server 2013
O que é multilocação?
Antes de introduzirmos a funcionalidade multi-inquilinos no SharePoint Server 2013, deve compreender o conceito geral de multi-inquilinos e as respetivas características relacionadas. Compreender o multi-inquilino e as respetivas características relacionadas ajuda-o a tomar as decisões adequadas para planear, estruturar, operar e gerir a sua plataforma de alojamento multi-inquilino do SharePoint Server 2013.
Multi-inquilinos refere-se à capacidade de gerir e particionar dados de sites e de serviços ou software partilhados de outra forma para acomodar vários inquilinos. Esta capacidade contrasta com a execução de várias instâncias de um serviço ou com a configuração de hardware separado. Nos produtos e tecnologias da Microsoft, a multilocação de serviços cria um ambiente de hospedagem no qual os recursos de farm de servidores são maximizados. Antes de saber mais sobre ambientes de alojamento, é importante compreender a arquitetura dos serviços.
Componentes e serviços essenciais para permitir a multilocação no SharePoint Server 2013
Esta seção descreve os componentes e serviços essenciais para habilitar multilocatários no SharePoint Server 2013.
Aplicativo Web
Um aplicativo Web do SharePoint 2013 é composto de um site Serviços de Informações da Internet (IIS), que atua como uma unidade lógica de gestão e segurança para os conjuntos de sites que você criar. Cada aplicativo Web é representado por um site IIS diferente que usa um pool de aplicativos exclusivo ou compartilhado. Quando você cria um aplicativo Web, você também cria um banco de dados de conteúdo e define o método de autenticação usado para conectar ao(s) banco(s) de dados.
Conjunto de sites denominado de host
Conjuntos de sites denominados de host permitem atribuir um nome DNS exclusivo para conjuntos de sites. Por exemplo, você pode intitulá-los como http://TeamA.contoso.com
e http://TeamB.fabrikam.com
. Esta aprovisionamento permite-lhe implementar muitos sites que utilizam nomes DNS exclusivos na mesma aplicação Web. Ele também permite que os provedores de serviços escalonem um ambiente para muitos clientes. Se não utilizar coleções de sites com nome de anfitrião, a aplicação Web do SharePoint contém muitas coleções de sites baseadas no caminho que partilham o mesmo nome de anfitrião (nome DNS). Por exemplo, a Equipe A teria um conjunto de sites em https://contoso.com/sites/teamA
e a Equipe B teria um conjunto de sites em https://fabrikam.com/sites/teamB
.
Os conjuntos de sites denominados do host são fundamentalmente a única maneira de escalonar para ambientes de multilocação e proporcionar a máxima flexibilidade em relação ao namespace da URL usada. Se utilizar sites baseados em caminhos com vários inquilinos, o limite de software para caminhos geridos será atingido rapidamente.
Para obter mais informações sobre como planear coleções de sites com nome de anfitrião para o SharePoint Server 2013, consulte Arquitetura e implementação de coleções de sites com nome de anfitrião (SharePoint 2013).
Grupos de serviços (grupos de proxy)
Um grupo de serviços, também conhecido como grupo de proxy, é um grupo de aplicações de serviço que estão selecionadas para uma aplicação Web as utilizar.
Por padrão, todos os aplicativos de serviço são incluídos no grupo padrão a menos que outro grupo seja especificado no momento em que o aplicativo de serviço é criado. Você pode adicionar e remover aplicativos de serviço do grupo padrão a qualquer momento. Quando você cria um aplicativo Web, você pode selecionar o grupo padrão ou pode criar um grupo personalizado de serviços. Você cria um grupo personalizado de serviços, selecionando apenas os aplicativos de serviço que você deseja que o aplicativo Web use.
Os grupos personalizados não são reutilizáveis em várias aplicações Web. Sempre que seleciona "personalizado" quando cria uma aplicação Web, está a selecionar serviços apenas para a aplicação Web que está a criar.
Proxy do serviço
Quando você cria um aplicativo de serviço, é criado ao mesmo tempo um proxy para o aplicativo de serviço. Um proxy é uma entidade virtual que conecta aplicativos Web a aplicativos de serviço. Os proxies são listados na página Gerenciar aplicativos de serviço no site da Administração Central do SharePoint.
Os proxies são criados automaticamente se você usar Administração Central ou o Assistente de Configuração de Produtos do SharePoint 2016 para criar aplicativos de serviço. Se utilizar o Microsoft PowerShell para criar aplicações de serviço, os proxies nem sempre são criados automaticamente e têm de ser criados com o Microsoft PowerShell.
Alguns proxies podem incluir configurações que podem ser alteradas. Por exemplo, se um aplicativo Web estiver conectado a várias instâncias do serviço de metadados gerenciados, você deve indicar os proxies que estão conectados ao aplicativo de serviço principal que hospeda a taxonomia corporativa. Estas definições são movidas para a configuração ao nível do inquilino ao utilizar multi-inquilinos.
Aplicativos de serviço
Uma aplicação de serviço é uma representação lógica de um determinado serviço e a respetiva configuração de segurança e gestão, que define o respetivo comportamento operacional. Exemplos incluem Metadados Gerenciados e Perfis de usuário. Diferentes aplicações de serviço são implementadas de diferentes formas e esta flexibilidade irá influenciar a conceção de soluções multi-inquilino.
Para determinar a lista de aplicativos de serviço que está disponível em SharePoint Server 2013 e sua disponibilidade entre edições do SharePoint com o recurso de multilocação, consulte a seção Serviços e funcionalidades em Orientação geral para hosters no SharePoint Server 2013
Licenciamento e pacotes de recursos
Um pacote de recursos no SharePoint é uma forma de agrupar um conjunto de recursos no escopo do site ou no escopo da Web. Assim que as funcionalidades do SharePoint estiverem agrupadas, podem ser associadas a uma subscrição de site (ou seja, inquilino). Todos os conjuntos de sites da assinatura do site (locatário) podem usar apenas os recursos no escopo do site ou da Web que fazem parte do pacote de recursos. Esta capacidade permite que os provedores de serviços forneçam ofertas de serviços em camadas com base em diferentes conjuntos de recursos.
No SharePoint Server 2013, um novo recurso foi adicionado para atribuir licenças diferentes do SharePoint para cada usuário. Esse recurso também ativa as verificações de licença do SharePoint no tempo de execução. Esta funcionalidade proporciona mais flexibilidade para um fornecedor de serviços criar diferentes ofertas de serviços ao longo de um modelo de implementação simplificado. Em versões anteriores do SharePoint, os provedores de serviços tinham que criar diferentes modelos de implantação do SharePoint para cada versão do SharePoint. Para obter mais informações sobre as funcionalidades do SharePoint, consulte a secção Disponibilidade de funcionalidades do SharePoint em soluções no local do seguinte artigo: Descrição do Serviço SharePoint.
Gerenciamento de Direitos de Informação
A Integração do Gerenciamento de Direitos de Informação no SharePoint Server 2013 adiciona suporte para multilocação, que permite a capacidade de gerenciar configurações do Gerenciamento de Direitos de Informação no nível de locatário.
Considerações sobre o projeto de arquitetura
Esta seção descreve várias considerações para arquitetar um ambiente de multilocação do SharePoint Server 2013. Conforme descrito anteriormente no documento, a multilocação traz algumas características únicas a considerar quando você arquitetar e projetar seu ambiente do SharePoint Server 2013. Você tem que considerar esses fatores com base em suas necessidades para tomar as decisões apropriadas.
Compreender os limites no SharePoint Server 2013
Entender os limites de software do SharePoint Server 2013 vai ajudá-lo a tomar as decisões corretas para selecionar a arquitetura adequada para um ambiente de multilocação do SharePoint. Para obter mais informações sobre limites chave e limites para uma base de dados de conteúdos e coleção de sites à medida que se aplicam a um ambiente multi-inquilinos do SharePoint Server 2013, veja Limites e limites de software para o SharePoint Server 2016e Limites de Software para o SharePoint Server 2016.
Farm compartilhado vs. farm dedicado
A utilização de um farm partilhado para alojar coleções de sites multi-inquilino numa única aplicação Web proporciona uma melhor escalabilidade em comparação com a utilização de uma aplicação Web dedicada por inquilino.
Use um aplicativo Web dedicado e pool de aplicativos por cliente somente se você precisa satisfazer as exigências de isolamento.
Não permita que o código de confiança total seja implementado em sites.
Não permita personalizações que afetem os recursos partilhados, como o ficheiro de web.config.
Use conjuntos de sites denominados de host para criar vários conjuntos de sites no nível da raiz (sites com nome de domínio) ao longo de um aplicativo Web.
Um aplicativo Web vs. vários aplicativos Web
Use aplicativos Web dedicados para os locatários que exigem personalizações que afetam os recursos compartilhados por meio de um aplicativo Web, como o arquivo web.config.
Ao combinar vários locatários em um único farm, use um aplicativo Web dedicado do SharePoint para todo o conteúdo autenticado e um aplicativo Web dedicado separado para todo o conteúdo anônimo. Este método requer dois IDs de subscrições separados para inquilinos com ambos os tipos de conteúdo. Este método também simplificará o licenciamento.
Alguns recursos do SharePoint estão vinculados no nível de aplicativo Web, como a configuração da Criação do Conjunto de sites de autoatendimento. Depois de ativo, todos os locatários sob o mesmo aplicativo Web serão capazes de criar conjuntos de sites.
Projeto de ambiente de farm único
Num ambiente de alojamento multi-organização no qual os dados e a administração do inquilino estão isolados, a configuração de serviços partilhados e particionados é importante. Este exemplo fornece uma implementação prática de serviços particionados e também fornece recomendações sobre como implantar sites de clientes.
Este exemplo detalha as seguintes maneiras em que os sites dos clientes podem ser implantados em um farm:
Pool de aplicativos dedicado e Web
Pool de aplicativo compartilhado e aplicativo Web dedicado
Aplicativo Web compartilhado
Sites autenticados
Sites não autenticados
Use um pool de aplicativos dedicados por cliente somente se você precisa satisfazer exigências de isolamento. Use aplicativos Web dedicados para os locatários que exigem personalizações que afetam os recursos que são compartilhados em um aplicativo Web, como o arquivo web.config.
Ao combinar vários locatários em um único aplicativo Web, use um aplicativo Web dedicado para todo o conteúdo autenticado e um aplicativo Web dedicado separado para todo o conteúdo anônimo. Este método requer dois IDs de subscrições separados para inquilinos com ambos os tipos de conteúdo. Este método também simplificará o licenciamento.
Não permita que o código de confiança total seja implementado em sites.
Não permita personalizações que afetem os recursos partilhados, como o ficheiro de web.config.
No exemplo a seguir (sites autenticados), um conjunto de sites diferente denominado de host diferente é usado para cada empresa. A Empresa C inclui dois diferentes conjuntos de sites denominados de host. Abaixo de cada conjunto de sites denominado de host de nível superior, um caminho gerenciado é usado para criar uma segunda camada de conjuntos de sites de nível superior para sites como sites de equipe, Meus Sites, conteúdo de intranet publicado ou sites de divisão separados.
Projeto de ambiente em camadas
Conforme descrito anteriormente, existem muitos aspetos a ter em conta quando planeia a sua plataforma de alojamento multi-inquilino do SharePoint Server 2013, entre estes fatores estão o custo, a gestão simplificada, o isolamento de recursos, o desempenho e a escalabilidade.
Conforme sua base de clientes cresce, você pode ter dificuldade para atender a todos os requisitos de todos os seus clientes em um único ambiente. Nesse ponto, certas escolhas teriam que ocorrer quando você procurar equilibrar esses fatores.
Em um caso como este, uma alternativa que convém você considerar é um projeto de ambiente em camadas no qual vários ambientes do SharePoint atendem às diversas necessidades de seus clientes. Cada ambiente iria incidir sobre diferentes aspectos de suas ofertas de serviços, tais como baixo custo, alta densidade, maior isolamento de recursos e melhor qualidade de serviços (QoS) com custos mais elevados, e assim por diante.
Esta abordagem de projeto de ambiente em camadas pode fornecer diferentes acordos de nível de serviço aos seus clientes. Como resultado, você pode servir a uma ampla variedade de clientes, simplificar o gerenciamento e as operações, reduzir os custos de gerenciamento e aumentar suas margens de lucro.
Considerações de segurança
Esta secção aborda várias considerações de segurança para planear e estruturar uma plataforma de alojamento multi-inquilino do SharePoint Server 2013. A partir deste ponto, qualquer secção, como a secção Unidade organizacional (UO), que fale sobre a configuração do seletor de pessoas só funciona sem personalização adicional com autenticação do Windows.
O SharePoint Server 2013 é compatível com vários métodos de autenticação e provedores de autenticação para os seguintes tipos de autenticação:
Autenticação do Windows
Autenticação baseada em formulários
Autenticação baseada em tokens do SAML
O tipo de autenticação do Windows aproveita seu provedor de autenticação do Windows existente e os protocolos de autenticação que um ambiente de domínio do Windows usa para validar as credenciais de clientes conectados. autenticação do Windows métodos, que são utilizados pela autenticação baseada em afirmações e pelo modo clássico, incluem:
NTLM
Kerberos
Digest
Básica
A autenticação com base em formulários é um sistema de gerenciamento de identidade baseado em declarações que se baseia na associação do ASP.NET e autenticação de provedor de função. Forms autenticação baseada em Forms podem ser utilizadas em credenciais armazenadas num fornecedor de autenticação, tais como:
Serviços de Domínio Active Directory (AD DS)
Um banco de dados como um banco de dados do SQL Server
Um armazenamento de dados do Lightweight Directory Access Protocol (LDAP) como o Novell eDirectory, Novell Directory Services (NDS) ou Sun ONE
Forms autenticação baseada em Forms valida os utilizadores com base nas credenciais que os utilizadores introduzem num formulário de início de sessão (normalmente uma página Web). Os pedidos não autenticados são redirecionados para uma página de início de sessão, onde um utilizador tem de fornecer credenciais válidas e submeter o formulário. O sistema emite um cookie para solicitações autenticadas que contém uma chave para restabelecer a identidade de pedidos posteriores.
Para utilizar a autenticação baseada em formulários para autenticar os utilizadores num sistema de gestão de identidades que não se baseia no Windows ou num sistema externo, tem de registar o fornecedor de associação e o gestor de funções em vários ficheiros web.config. O SharePoint Server 2013 usa a interface do gerenciador de funções padrão do ASP.NET para coletar informações do grupo sobre o usuário atual. Cada função ASP.NET é tratada como um grupo de domínios pelo processo de autorização no SharePoint Server 2013. Você registra um gerenciador de funções em um arquivo web.config exatamente como você registra um provedor de associação para autenticação.
Se você quiser gerenciar funções ou usuários de associação no site do Administração Central, você deve registrar o provedor de associação e o gerenciador de funções no arquivo web.config do site do Administração Central. Você também deve registrar o provedor de associação e o gerenciador de funções no arquivo web.config do aplicativo Web que hospeda o conteúdo e no arquivo web.config do Serviço de Token de Segurança.
A autenticação baseada em token SAML no SharePoint Server 2013 usa o protocolo SAML 1.1 e o protocolo WS-F PRP. Requer coordenação com os administradores de um ambiente baseado em afirmações, seja o seu próprio ambiente interno ou um ambiente de parceiro. Se usar o Serviços de Federação do Active Directory (AD FS) 2.0, você tem um ambiente de autenticação baseada em token SAML.
Para aplicativos Web que usam a autenticação baseada em declarações, o People Picker é um controle que está disponível no SharePoint Server 2013. O controle do People Picker usa provedores de declarações para listar, resolver, pesquisar e determinar a exibição "amigável" de usuários, grupos e declarações. Para obter mais informações sobre a configuração do seletor de pessoas, veja descrição geral Pessoas Picker e fornecedores de afirmações.
As zonas representam diferentes caminhos lógicos para obter acesso aos mesmos sites em um aplicativo da web. Cada aplicativo Web pode incluir até cinco zonas. Quando você cria um aplicativo Web, o Administração Central cria a zona denominada Padrão. Para criar mais zonas, expanda a aplicação Web e selecione um dos restantes nomes de zona: Intranet, Extranet, Internet ou Personalizado.
Unidades Organizacionais
As Unidades Organizacionais (OUs) organizam os usuários e objetos computadores no ambiente do Active Directory. Para fins de hospedagem, a estrutura da unidade organizacional poderia ser organizada conforme mostrado no diagrama a seguir.
No mínimo, quer ligar uma Política de Grupo à raiz de Domínio, UO dos Controladores de Domínio, UO do SharePoint Servers e UO dos Clientes.
Raiz do domínio
A segurança que se aplica a todo o domínio é aplicada na Política de Domínio. Essas configurações estão contidas em Objetos de Diretiva de Grupo (GPOs) que se aplicam a todo o domínio.
OU dos controladores de domínio
Os controladores de domínio mantêm os dados mais confidenciais em sua organização, dados que controlam a própria configuração de segurança. Os GPOs aplicados a este nível são usados para configurar e proteger os controladores de domínio no domínio.
OU dos servidores do SharePoint
Os servidores do SharePoint têm uma função única não incluída em outros servidores do diretório. Colocar esses servidores em seu próprio OU permite que políticas únicas sejam aplicadas a esses servidores. Eles também podem ser separados de outros servidores no diretório. Sub-OUs podem ser criadas quando GPOs diferentes precisam ser criados (como servidores de conteúdo de acesso anônimo versus servidores de conteúdo autenticado).
OU de clientes
Esta OU de nível superior permite que todas as contas de usuário sejam segregadas do resto do diretório. O próximo nível de OUs contém as OUs de cliente. Existe uma UO para cada cliente. Esta UO permite que todas as contas de utilizador e contas de computador de um cliente sejam separadas dessas contas de outros clientes. Além disso, esta estrutura de UO é a necessária para suportar a Sincronização de Perfis de Utilizador em implementações multi-inquilino.
Para dar aos utilizadores a impressão de que estão a iniciar sessão no seu próprio domínio personalizado, utilize as Interfaces de Serviço do Active Directory Editor (Edição ADSI) ou outra ferramenta do AD para editar o atributo uPNSuffixes de cada UO do Cliente, conforme mostrado no diagrama seguinte.
Assim que o atributo uPNSuffixes de uma UO do Cliente estiver configurado, o respetivo valor está disponível para associar a uma conta de utilizador nessa UO do Cliente, conforme mostrado no diagrama seguinte.
Autenticação do usuário
Autenticação é a validação da identidade de um usuário em um provedor de autenticação, que é um diretório ou banco de dados que contém as credenciais do usuário e pode confirmar se ele as enviou corretamente. Um exemplo de um provedor de autenticação é Serviços de Domínio Active Directory (AD DS). Outros nomes comuns para um provedor de autenticação são diretório do usuário e repositório de atributos.
Um método de autenticação é uma troca específica de credenciais da conta e outras informações que confirmam a identidade de um usuário. O resultado do método de autenticação prova que, normalmente na forma de um token que contém declarações, um provedor de autenticação autenticou um usuário.
Um tipo de autenticação é uma maneira específica de validar as credenciais em um ou mais provedores de autenticação, às vezes usando um protocolo padrão do setor. Um tipo de autenticação pode usar vários métodos de autenticação.
Após a identidade de um usuário ser validada, o processo de autorização determina os sites, conteúdos e outros recursos que o usuário pode acessar.
O planejamento de métodos e tipos de autenticação de usuário deve determinar os seguintes itens:
Os métodos e tipos de autenticação de usuário para cada aplicativo Web e zona.
A infraestrutura de autenticação necessária para suportar os métodos e tipos de autenticação determinados.
Como migrar seus aplicativos web e zonas atuais que usam autenticação de modo clássico para usar a autenticação baseada em declarações.
Serviços de Federação do Active Directory (AD FS)
O SharePoint Server 2013 suporta autenticação com base em declarações. Os Serviços de Federação do Active Directory (AD FS) podem ser configurados para atuar como um Serviço de Token de Segurança do Provedor de Identidade (IP-STS) de um aplicativo Web do SharePoint Server 2013. Nesta configuração, o AD FS emite tokens de segurança baseados em SAML consistindo em declarações para que computadores cliente possam acessar aplicativos Web que usam a autenticação baseada em declarações. Pode utilizar um fornecedor de identidade que seja uma alternativa ao AD FS. Mas ele deve suportar o padrão WS-Federation. Também ao usar a configuração do AD FS, o código personalizado é necessário.
Para obter mais informações sobre como configurar a autenticação de afirmações baseadas em SAML com o AD FS para SharePoint Server 2013, veja Configurar a autenticação de afirmações baseadas em SAML com o AD FS no SharePoint Server.
Considerações de gerenciamento e operacionais
Esta secção aborda várias considerações de gestão e operacionais para um ambiente multi-inquilino do SharePoint Server 2013.
Gerenciamento de capacidade
O gerenciamento de capacidade é um processo contínuo porque nenhuma implementação permanece estática sobre o conteúdo e uso. Você tem que planejar para o crescimento e mudança, para que o ambiente do SharePoint Server 2013 possa continuar a fornecer uma solução de negócios eficaz. Para obter mais informações sobre a gestão de capacidade no SharePoint Server 2013, veja Capacity management and sizing overview for SharePoint Server 2013 (Descrição geral da gestão e dimensionamento de capacidade do SharePoint Server 2013).
Gerenciamento de aplicativos
O aplicativos para SharePoint fornece um novo método para fornecer informações ou funcionalidades específicas para um site do SharePoint. Um aplicativo para SharePoint é um aplicativo pequeno, autônomo e fácil de usar que resolve uma necessidade específica do usuário final ou da empresa. Os proprietários do site podem descobrir e baixar aplicativos para SharePoint de um Repositório do SharePoint público ou do Catálogo de Aplicativos interno da empresa e instalá-los em seus sites do SharePoint. Esses aplicativos para SharePoint integram o melhor da Web com SharePoint Server 2013. Não substituem as funcionalidades e os pacotes de soluções do SharePoint, que personalizam ou aumentam os sites do SharePoint. Ao contrário de recursos e soluções, que os administradores do farm ou do conjunto de sites precisam instalar, o aplicativos para SharePoint são aplicativos autônomos que os proprietários de sites podem adicionar aos seus sites do SharePoint. O aplicativos para SharePoint têm um ciclo de vida simples: eles podem ser instalados, atualizados e desinstalados pelos proprietários do site.
O Serviço de Gerenciamento de Aplicativos no SharePoint Server 2013 é habilitado à multilocação. A maioria das configurações de aplicativo e funcionalidade de gerenciamento é exposta por meio do site de Administração de locatário e permite que cada administrador de locatários defina suas configurações individuais.
Backup e restauração
Ao realizar operações de cópia de segurança e restauro agnósticas de inquilino numa plataforma de alojamento multi-inquilino do SharePoint Server 2013, pode seguir as orientações gerais para realizar operações de cópia de segurança e restauro em ambientes do SharePoint Server 2013. Veja Cópia de segurança e restauro no SharePoint Server.
Observe que no SharePoint Server 2013, a plataforma de fluxo de trabalho é independente da plataforma do SharePoint. Portanto, as operações de backup e restauração no Gerenciador de Fluxo de Trabalho devem ser coordenadas com as operações de backup e restauração do SharePoint para garantir que ambas permaneçam em sincronia uma com a outra. Para obter mais informações sobre como planear operações de cópia de segurança e restauro para Service Manager de Fluxo de Trabalho, veja Recuperação Após Desastre e Restauro do Âmbito no Gerenciador de Fluxos de Trabalho 1.0
Quando efetua operações de cópia de segurança e restauro específicas do inquilino numa plataforma de alojamento multi-inquilino do SharePoint Server 2013, poderá ter de manter os seguintes componentes com deteção de inquilino sincronizados entre si: aplicações de serviço, fluxo de trabalho, bases de dados de conteúdos e coleções de sites.
Aplicativos de serviço
Os aplicativos de serviço que estão configurados no Modo de partição têm um ou mais bancos de dados associados que contêm dados específicos ao locatário. Embora você possa executar operações de backup e restauração gerais nesses aplicativos de serviços tanto nos níveis de banco de dados e do aplicativo, existem comandos limitados para realizar operações de backup e restauração detalhadas específicas ao locatário nesses aplicativos de serviço ou em seus bancos de dados.
Considerações de aplicativo de serviço
Serviço de gerenciamento de aplicativos
O serviço de Gerenciamento de aplicativos é o aplicativo de serviço usado para controlar o recurso do aplicativo para SharePoint apresentado no SharePoint Server 2013. O aplicativos para SharePoint fornece um novo método para fornecer informações ou funcionalidades específicas para um site do SharePoint. Um aplicativo para SharePoint aplicativo pequeno, autônomo e fácil de usar que resolve uma necessidade específica do usuário final ou da empresa. O Serviço de Gestão de Aplicações não suporta o Modo de Partição. No entanto, tem conhecimento de Subscrição de Site nativamente. No ambiente multi-inquilino do SharePoint, a maioria das funcionalidades de Gestão de Aplicações (ou seja, Gerir Catálogo de Aplicações, Gerir Licenças de Aplicações, Permissões de Aplicações, etc.) é obtida através do Site de Administração de Inquilinos.
O diagrama a seguir mostra o gerenciamento de aplicativos no site de administração de locatários.
Serviço Conectividade de Dados Corporativos
Uma vez configurado no modo de partição, toda a configuração do serviço Conectividade de Dados Corporativos move-se para a administração de locatários. No entanto, o modelo de site Administração de Inquilinos não inclui a ligação para esta página, que pode ser adicionada com a técnica de personalização na secção Expandir o modelo de site de Administração de Inquilinos
Serviço de repositório seguro
Uma vez configurado no modo de partição, a geração de chaves de criptografia permanece uma configuração de nível de farm realizada tanto via Administração Central ou Windows PowerShell. O restante da configuração do serviço de repositório seguro se transfere para a administração de locatário. No entanto, o modelo de site Administração de Inquilinos não inclui a ligação para esta página, que pode ser adicionada com a técnica de personalização na secção Expandir o modelo de site Administração de Inquilinos.
Serviço de metadados gerenciados
Uma vez configurado no modo de partição, toda a configuração se transfere para administração de locatários, e a publicação de Tipo de conteúdo é ativada por padrão.
Serviço de pesquisa
Muitas funções relacionadas à configuração de pesquisa específica do locatário são expostas no site de administração de locatários como mostra o diagrama a seguir.
Observação
Muitos dos *. EnterpriseSearch* Os cmdlets do Microsoft PowerShell estão agora com deteção de partições e podem ser utilizados para automatizar algumas funções de configuração e gestão expostas no site de Administração de Inquilinos.
Serviço Perfil de Usuário
Um grande número de elementos de configuração são transferidos para administração de locatários; no entanto, grande parte da configuração de sincronização do perfil permanece em um nível de farm e é aplicável a todos os locatários, conforme ilustrado na figura a seguir.
Fluxo de trabalho
Conforme observado anteriormente, no SharePoint Server 2013, a plataforma de fluxo de trabalho é separada da plataforma do SharePoint. A plataforma de fluxo de trabalho em si usa um ou mais bancos de dados. Embora você possa executar operações de backup e restauração gerais em nível de banco de dados nesses bancos de dados, não existem comandos, nem utilitários para a realização de operações de backup e restauração específicas do locatário nesses bancos de dados de fluxo de trabalho.
Bancos de dados de conteúdo
Se um locatário tiver uso exclusivo de um ou mais bancos de dados de conteúdo dedicados, você pode realizar operações de restauração e backup gerais em nível de banco de dados nesses bancos de dados.
Observação
[!OBSERVAçãO] Não é possível atingir um uso exclusivo de um ou mais bancos de dados de conteúdo dedicados por meio do uso de recursos padrão do produto, por exemplo, a criação de site pessoal. Este é um exemplo de onde a personalização é necessária a fim de atender a uma determinada oferta de nível de serviço.
O seguinte scrip do Microsoft PowerShell mostra como executar uma ação de backup inicial em um banco de dados de conteúdo de locatário.
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!"
Conjuntos de sites
Você pode executar operações de backup e restauração específicas em um conjunto de sites de locatário. A ferramenta que você escolher usar depende do tamanho do próprio conjunto de sites. Os cmdlets do Microsoft PowerShell são uma escolha apropriada para conjuntos de sites de pequeno e médio porte.
O seguinte script do Microsoft PowerShell mostra como executar uma ação de backup em um conjunto de sites de locatário.
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!"
Monitoramento
Existem muitas ferramentas que permitem monitorar o SharePoint Server 2013 e solucionar problemas. Diferentes ferramentas abrangem diferentes aspectos do ambiente, embora possa haver áreas sobrepostas. Considere quais ferramentas podem maximizar seus benefícios de monitoramento. Para obter mais informações sobre como planear a monitorização do SharePoint Server 2013, consulte Planear a monitorização no SharePoint Server.
Gerenciamento de pacote de serviços
Conforme descrito anteriormente, um pacote de recursos pode ser usado para agrupar diferentes recursos e associá-los a uma assinatura do site (ou seja, locatário). Todos os conjuntos de sites na assinatura do site (locatário) podem usar apenas os recursos no escopo do site ou da Web que fazem parte do pacote de recursos. Esta capacidade permite que os provedores de serviços forneçam ofertas de serviços em camadas com base em diferentes conjuntos de recursos. São criados pacotes de recursos que usam o cmdlet do New-SPSiteSubscriptionFeaturePack para criar o contêiner de pacote de recursos e o cmdlet Add-SPSiteSubscriptionFeaturePackMember adicionar os recursos individuais para o contêiner.
O seguinte script do Microsoft PowerShell mostra como criar um pacote de recursos em nível de locatário representando recursos do SharePoint Foundation 2013 e armazena a ID do pacote de recursos no recipiente de propriedades do farm.
Observação
O aplicativo de serviço de configurações de inscrição deve estar presente antes de executar scripts que funcionam com pacotes de serviços.
<#
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
Gerenciamento de licenciamento
No SharePoint Server 2013, foi adicionada uma nova capacidade de gestão de licenciamento. Os administradores de farm agora podem atribuir licenças a usuários e permitir verificações de licença do tempo de execução. Ao utilizar esta nova funcionalidade, você pode garantir que apenas os usuários que têm a licença apropriada usem um recurso específico. A funcionalidade também simplifica o modelo de implantação, porque você não precisa mais compilar farms separados para as edições Standard e Enterprise do SharePoint Server.
As licenças de usuário são atribuídas por meio do mapeamento de declarações para um tipo de licença conhecido. Por exemplo, uma declaração pode ser um grupo de segurança dos Serviços de Domínio Active Directory (AD DS). Ao mapear o grupo de segurança ContosoFinanceDept para uma licença Enterprise, você atribui efetivamente uma licença Enterprise a todos os membros do grupo. São atribuídas afirmações aos utilizadores que iniciam sessão no SharePoint Server. O SharePoint Server examina as afirmações dos utilizadores para determinar a respetiva licença. Se um utilizador não tiver uma licença para utilizar uma determinada funcionalidade, o SharePoint bloqueia o acesso a essa funcionalidade no tempo de execução.
Essa implementação de licença do SharePoint Server 2013 é gerenciada pelo uso de novos cmdlets do Microsoft PowerShell. Por padrão, o licenciamento é desativado no SharePoint Server. No entanto, os administradores podem optar por ativá-la usando o Microsoft PowerShell. Para obter mais informações sobre como configurar o licenciamento no SharePoint Server 2013, veja Configurar o licenciamento no SharePoint Server.
Gerenciamento do ciclo de vida
Embora este documento técnico delineia as principais considerações de infraestrutura ao conceber uma solução multi-inquilino do SharePoint 2013 e fornece scripts de linha de base para configuração, a gestão geral do ciclo de vida das operações é imperativa. Por exemplo, a administração personalizada de inquilinos, o desaprovisionamento de subscrições, arquivo, gestão de utilizadores, reposição personalizada de palavra-passe e quotas são áreas comuns que requerem alguma combinação de mais Windows PowerShell e esforço de personalização para fornecer uma oferta de serviço completa. Cada fornecedor de serviços tem requisitos diferentes nesta esfera e é incrivelmente importante garantir que estes requisitos fazem parte do âmbito inicial e do trabalho de conceção para a plataforma de infraestrutura.
Instalação e configuração
Esta secção descreve os passos gerais para configurar uma plataforma de alojamento multi-inquilino do SharePoint Server 2013.
Confirmações
Esta seção fornece detalhes e contém os scripts do PowerShell que demonstram a criação e a configuração de vários componentes. Estes scripts são fornecidos para demonstrar os requisitos de configuração para multi-inquilinos e, por conseguinte, não representam a ordem de aprovisionamento ideal. No entanto, podem servir de base para desenvolver a sua própria solução de scripting ponto a ponto personalizada.
Os scripts do Microsoft PowerShell contidos nas seguintes subsecções baseiam-se (inteiros ou parcialmente) no trabalho de Spencer Harbar (http://www.harbar.net) e são reproduzidos aqui com o seu consentimento gracioso. Para obter mais informações sobre o trabalho original de Spencer Harbar, consulte os seguintes documentos:
Os scripts do PowerShell fornecidos incluem variáveis, que devem ser modificadas para se adequarem ao seu ambiente.
Exemplo de implantação
Esta secção apresenta um exemplo de implementação que utiliza uma única aplicação Web de alojamento através de coleções de sites chamadas de anfitrião e caminhos geridos por cabeçalhos de anfitrião. É implementado num único servidor por uma questão de simplicidade. Este exemplo de implementação é o modelo de design pretendido para multi-inquilinos com o SharePoint 2013 e pode ser expandido para uma implementação em que as funções de instância de serviço são articuladas em vários computadores. O exemplo de implantação usa HTTP para o aplicativo Web. Numa implementação real, o SSL deve ser utilizado para proteger o início de sessão, o conteúdo e os tokens de autorização utilizados com o SharePoint Apps e outros serviços relacionados com o OAuth2, como Gerenciador de Fluxos de Trabalho.
Configuração de DNS
Uma vez que as coleções de sites com nome de anfitrião serão utilizadas para um ambiente do SharePoint multi-inquilino, tem de configurar o seu DNS (ou seja, criar registos DNS adequados, etc.) em conformidade com o seu plano. Para obter mais informações sobre como planear coleções de sites com nome de anfitrião para o SharePoint Server 2013, consulte Arquitetura e implementação de coleções de sites com nome de anfitrião (SharePoint 2013).
Se você também pretende oferecer suporte ao aplicativos para SharePoint, você também deve configurar o DNS para suportar o seu ambiente. Para obter mais informações sobre como configurar um ambiente de aplicações para o SharePoint Server 2013, veja Configurar um ambiente para aplicações para o SharePoint Server.
Configuração do Active Directory
Conforme descrito anteriormente, para dar suporte à multilocação no SharePoint, o Active Directory deve ser corretamente estruturado, criando uma estrutura de unidade organizacional hierárquica para suportar a sincronização de perfil de usuário para cada assinatura. Você também tem que criar contas de serviços apropriadas para o seu ambiente. Para obter mais informações sobre como planear contas de serviço para o SharePoint Server 2013, veja Planear contas administrativas e de serviço no SharePoint Server. Neste exemplo de implantação, as três contas de serviço a seguir são usadas:
SPFarm - a Conta do Farm do SharePoint
SPServices – a identidade do Conjunto Aplicacional que aloja os pontos finais da Aplicação de Serviço
SPContent – a identidade do Conjunto Aplicacional que aloja a Aplicação Web de Conteúdo
A criação e configuração do farm do SharePoint
O script a seguir Microsoft PowerShell mostra como criar um farm do 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!"
Grupo de proxies, aplicativo Web de hospedagem e caminhos gerenciados
Inicialmente, é criada uma Conta Gerida para o conjunto aplicacional que aloja a aplicação Web de conteúdo. Um novo grupo de proxies é criado, seguido pelo aplicativo Web. Finalmente, a configuração do aplicativo Web para permitir a criação de site pessoal e a criação de caminhos gerenciados compartilhados é realizada. É importante criar uma coleção de sites "raiz" na aplicação Web de alojamento, mesmo que esta coleção de sites não seja acedida pelos utilizadores finais. Esta coleção de sites "raiz" é necessária para suporte e comportamento operacional correto do SharePoint 2013.
Observação
Este exemplo usa HTTP para o aplicativo Web.
<#
2. Proxy Group, Web Application & Farm Settings.ps1
Creates a new Managed Account
Creates a new Proxy Group
Creates a new Web Application for HNSC, in a new Application Pool, in the new Proxy Group
Creates an empty root Site Collection
Enables Self Service Site Creation
Creates Managed Paths for HNSC
Update initial variables as needed to reflect your environment
Update the Managed Paths section to use the paths you need
Script will prompt for the password of the App Pool account used for the Web App
You will need to configure the SSL certificate manually or via IIS PowerShell
#>
asnp Microsoft.SharePoint.PowerShell
## UPDATE THESE VARS ##
$waAppPoolUserName = "FABRIKAM\spcontent"
$waAppPoolName = "SharePoint Hosting"
$proxyGroupName = "Hosting Proxy Group"
$waUrl = "http://$ENV:COMPUTERNAME"
$webAppName = "SharePoint Hosting"
$contentDBName = "HostingFarm_Content_Hosting"
$ownerEmail = "administrator@contoso.com"
$ownerAlias = "FABRIKAM\administrator"
## END VARS ##
# Create Managed Account
Write-Host "Please supply the password for the $waAppPoolUserName Account..."
$appPoolCred = Get-Credential $waAppPoolUserName
Write-Host "Creating Managed Account..."
$waAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred
# Create a new Proxy Group
Write-Host "Creating Proxy Group..."
$proxyGroup = New-SPServiceApplicationProxyGroup -Name $proxyGroupName
# Create a new Web App in the new Proxy Group using Windows Claims on Port 80 with no host header
Write-Host "Creating Web Application..."
# SSL example, not used
#$webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 443 -SecureSocketsLayer:$true -AuthenticationProvider (New-SPAuthenticationProvider) -DatabaseName $contentDBName -ServiceApplicationProxyGroup $proxyGroup
# following line is to use port 80
$webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 80 -AuthenticationProvider (New-SPAuthenticationProvider) -DatabaseName $contentDBName -ServiceApplicationProxyGroup $proxyGroup
# Create a empty root Site Collection, required for support and SSSC
Write-Host "Creating empty root Site Collection..."
New-SPSite -Url $waUrl -owneralias $ownerAlias -ownerEmail $ownerEmail
# Enable Self Service Site Creation
Write-Host "Enabling Self Service Site Creation..."
$webApp.SelfServiceSiteCreationEnabled = $true
$webApp.RequireContactForSelfServiceSiteCreation = $false
$webApp.Update()
# Create Managed Paths for all 2013 Tenancy capabilities (remove the ones you don't want)
# the default /sites path is removed to prevent creation of sites from CA
Write-Host "Creating HNSC Managed Paths..."
Remove-SPManagedPath "sites" -WebApplication $webApp -Confirm:$false
New-SPManagedPath "admin" -HostHeader -Explicit # Tenant Administration
New-SPManagedPath "apps" -HostHeader -Explicit # App Catalog
New-SPManagedPath "cthub" -HostHeader -Explicit # Content Type Hub
New-SPManagedPath "my" -HostHeader -Explicit # MySite Host
New-SPManagedPath "my/sites" -HostHeader # MySites
New-SPManagedPath "edisc" -HostHeader -Explicit # E-Discovery Hub
Write-Host "Proxy Group and Web Application done!"
Serviços não particionados
Nesta fase, as aplicações de serviço não particionadas podem ser criadas. Estas aplicações de serviço são necessárias no farm para operações normais (por exemplo, o Serviço de Estado) ou não precisam de ser particionadas para suportar multi-inquilinos, uma vez que não armazenam dados. Para tal, é necessária outra conta gerida e, em seguida, cada aplicação de serviço é criada por sua vez.
O seguinte script do Microsoft PowerShell mostra como criar os aplicativos de serviço não particionados.
<#
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!"
Criação e configuração de aplicativos de serviço particionados
As secções seguintes descrevem os procedimentos do Microsoft PowerShell necessários para criar e configurar cada aplicação de serviço que suporte a criação de partições. O mesmo padrão geral aplica-se a cada aplicação de serviço, exceto a Pesquisa e Perfis de Utilizador. No entanto, existem pequenas diferenças relacionadas aos proxies de aplicativos de serviço.
Serviço Conectividade de Dados Corporativos
O seguinte script do Microsoft PowerShell apresenta como criar o aplicativo do serviço Conectividade de Dados Corporativos no modo de partição e adicioná-lo a um grupo de proxies de serviço personalizado.
$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
Serviço de metadados gerenciados
O seguinte script do Microsoft PowerShell apresenta como criar o aplicativo de serviço de metadados gerenciados no modo de partição e adicioná-lo a um grupo de proxy de serviço personalizado.
$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
Serviço de tradução automática
O serviço de tradução automática suporta a multilocação, criando seu aplicativo de serviço no modo de partição. Não existe nenhuma configuração específica do inquilino e o serviço é gerido ao nível do farm. Seu banco de dados está atuando efetivamente como uma fila e, portanto, tem que ser habilitado à partição/locatário.
O seguinte script do Microsoft PowerShell mostra como criar o aplicativo de serviço de Tradução Automática no Modo de Partição.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$mtsName = "Machine Translation Service"
$mtsDBName = "HostingFarm_MachineTranslation"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Machine Translation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $mtsName Application & proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Machine Translation Service" } | Start-SPServiceInstance
$mts = New-SPTranslationServiceApplication -PartitionMode -Name $mtsName -ApplicationPool $saAppPool -DatabaseName $mtsDBName
Get-SPServiceApplicationProxy | ? {$_.Name -eq $mtsName} | Remove-SPServiceApplicationProxy -Confirm:$false
$proxy = New-SPTranslationServiceApplicationProxy -PartitionMode -Name "$mtsName Proxy" -ServiceApplication $mts
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Serviço de repositório seguro
Uma vez configurado no modo de partição, a geração de chaves de criptografia permanece uma configuração de nível de farm realizada tanto via Administração Central ou Windows PowerShell. O restante da configuração do serviço de repositório seguro se transfere para a administração de locatário. No entanto, o modelo de site Administração de Inquilinos não inclui a ligação para esta página, que pode ser adicionada com a técnica de personalização na secção Expandir o modelo de site de Administração de Inquilinos.
O seguinte script do Microsoft PowerShell mostra como criar o aplicativo do Serviço de Repositório Seguro no modo de partição e como adicioná-lo a um grupo de proxies de serviço personalizado.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$sssName = "Secure Store Service"
$sssDBName = "HostingFarm_SecureStore"
$sssAuditing = $false
$sssSharing = $false
$sssAuditLogMaxSize = ""
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Secure Store Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $sssName Application & Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Secure Store Service" } | Start-SPServiceInstance
$sss = New-SPSecureStoreServiceApplication -PartitionMode -Name $sssName -ApplicationPool $saAppPool -DatabaseName $sssDBName -auditingEnabled:$sssAuditing -AuditlogMaxSize $sssAuditLogMaxSize -Sharing:$sssSharing
$proxy = New-SPSecureStoreServiceApplicationProxy -Name "$sssName Proxy" -ServiceApplication $sss
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Serviço de Pesquisa
O seguinte script do Microsoft PowerShell mostra como criar o aplicativo de serviço de pesquisa no modo de partição.
Observação
O script para este aplicativo de serviço usa o parâmetro Partitioned em vez do parâmetro 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!"
Serviços de Automação do Word
O aplicativo de serviço Serviços de Automação do Word suporta o Modo de partição. Não existe nenhum cmdlet para criar um proxy.
O seguinte script do Microsoft PowerShell mostra como criar o aplicativo de serviço do Word Automation Services no Modo de Partição.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$wasName = "Word Automation Service"
$wasDBName = "HostingFarm_WordAutomation"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Word Automation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $wasName Application & Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Word Automation Services" } | Start-SPServiceInstance
$was = New-SPWordConversionServiceApplication -PartitionMode -Name $wasName -ApplicationPool $saAppPool -DatabaseName $wasDBName
# we cannot change the name of this proxy as there is no New-SPWordConversionServiceApplicationProxy
$proxy = Get-SPServiceApplicationProxy | ? { $_.Name -eq $wasName }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Serviço Perfil de Usuário
A criação do serviço Perfil de Usuário usando o PowerShell conforme necessário quando o provisionamento no modo particionado apresenta um desafio quando não estiver executando o Windows PowerShell como a conta do farm do SharePoint. Para contornar este desafio e para iniciar com êxito o serviço de Sincronização de Perfis de Utilizador, utilizamos o cmdlet Start-Process e simulamos a execução do script como a conta do farm.
São necessários dois scripts. O primeiro script cria a UPA e o segundo script chama o primeiro script.
O seguinte script do Microsoft PowerShell mostra como criar a aplicação Serviço de Perfis de Utilizador no Modo de Partição e adicioná-la a um grupo de Proxy de Serviço personalizado...
Observação
[!OBSERVAçãO] Este script NÃO deve ser executado diretamente, pois nesse caso será impossível iniciar a instância de serviço de Sincronização de Perfil de Usuário. Este script deve ser salvo localmente e seu local deve ser anotado.
<#
partitionedUPAcreation.ps1
External dependency to create UPA under farm account creds
#>
asnp Microsoft.SharePoint.PowerShell
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$upaName = "User Profile Service"
$upaProfileDBName = "HostingFarm_UserProfile_Profile"
$upaSocialDBName = "HostingFarm_UserProfile_Social"
$upaSyncDBName = "HostingFarm_UserProfile_Sync"
# Grab the Proxy Group
$proxyGroup = Get-SPServiceApplicationProxyGroup -Identity $mtProxyName
# Grab the Appplication Pool for Service Application Endpoint
$saAppPool = Get-SPServiceApplicationPool $saAppPoolName
<# Creates UPA Service Application & Proxy, and User Profile Service Instance
If omitted, -ProfileSyncDBServer, -SocialDBServer & -ProfileDBServer are the SharePoint Default DB Server
If omitted, -SyncInstanceMachine is the local machine
#>
Write-Host "Creating $upaName Application & Proxy..."
$upa = New-SPProfileServiceApplication -PartitionMode -Name $upaName -ApplicationPool $saAppPoolName -ProfileDBName $upaProfileDBName -SocialDBName $upaSocialDBName -ProfileSyncDBName $upaSyncDBName
$proxy = New-SPProfileServiceApplicationProxy -PartitionMode -Name "$upaName Proxy" -ServiceApplication $upa
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Check it worked
Get-SPServiceApplication | ? {$_.Name -eq $upaName}
O segundo script abaixo realiza o trabalho necessário para chamar o script de criação de UPA e iniciar as instâncias de serviço necessárias. A localização do script de criação de UPA deve ser atualizada na variável $upaScriptFile. Além disso, algumas permissões necessárias são definidas na 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
Configuração do gerenciamento de direitos de informação
O suporte da Gestão de Direitos de Informação para multi-inquilinos pode ser ativado através do site da Administração Central do SharePoint ou dos cmdlets atualizados do Microsoft PowerShell.
Ativar o Gerenciamento de Direitos de Informação usando o Administração Central
Verifique se a conta de usuário que está executando esse procedimento é membro do grupo Administradores de Farm do SharePoint e do grupo de Administradores no computador que está executando o Administração Central.
No site do Administração Central, vá para Segurança.
Na página Segurança, vá para Configurar gerenciamento de direitos de informação
Na página Gestão de Direitos de Informação , selecione Utilizar este Servidor RMS.
Certifique-se de marcar a caixa de seleção chamada Marque esta caixa em configurações multilocatário para permitir que os locatários definam as configurações de IRM no nível do locatário.
Ativar o Gerenciamento de Direitos de Informação usando o Microsoft PowerShell
- Verifique se você possui as seguintes associações:
A função de servidor fixa securityadmin na instância do SQL Server.
A função de banco de dados fixa db_owner em todos os bancos de dados que devem ser atualizados.
Grupos de administradores no servidor no qual está a executar os cmdlets do PowerShell.
Um administrador pode usar o cmdlet Add-SPShellAdmin para conceder permissões para usar cmdlets do SharePoint Server 2013.
Observação
[!OBSERVAçãO] Se você não possui permissões, entre em contato com o Administrador da configuração ou com o administrador do SQL Server para solicitar permissões. Para obter mais informações sobre as permissões do PowerShell, veja Add-SPShellAdmin.
Abra o Shell de Gerenciamento do SharePoint.
No prompt de comando do PowerShell, digite o seguinte comando:
Set-SPIRMSettings -IrmEnabled -UseActiveDirectoryDiscovery -SubscriptionScopeSettingsEnabled
Não há opções de configuração interna para IRM dentro do site de Administração de locatário. Para aplicar a configuração, use o cmdlet Set-SPSiteSubscriptionIRMConfig conforme mostrado no seguinte script:
$subscription=Get-SPSiteSubscription "http://www.contoso.com"
Set-SPSiteSubscriptionIRMConfig -identity $subscription -IrmEnabled -CertificateServerUrl "http://rms.contoso.com"
Essa configuração é efetuada como parte do aprovisionamento de inquilinos.
Provisionamento e gerenciamento de locatários
Esta secção descreve os processos e abordagens para aprovisionar inquilinos e personalizar o ambiente multi-inquilino.
Provisionamento de locatários
Para criar um locatário, siga as etapas na tabela.
Tasks |
Steps |
---|---|
1. Criar uma assinatura do site. |
No prompt de comando do Microsoft PowerShell, digite a seguinte sintaxe:$sub = New-SPSiteSubscription |
2. Atribua um pacote de recursos para a assinatura do site e configure a OU personalizada usando o people picker. |
No prompt de comando do Microsoft PowerShell, digite a seguinte sintaxe:Set-SPSiteSubscriptionConfig -id $sub -FeaturePack $customerFeatures -UserAccountDirectoryPath "OU=$customerName,OU=Customers,DC=contoso,DC=com" |
3. Crie um ou mais conjuntos de sites a serem atribuídos à assinatura do site. |
No prompt de comando do Microsoft PowerShell, digite a seguinte sintaxe: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 |
O seguinte script do PowerShell como criar um site de administração de locatários que usa o modelo TENANTADMIN#0. Se o inquilino estiver configurado para utilizar um Enterprise Feature Pack, o script do Microsoft PowerShell efetua mais operações, ou seja, cria a coleção Os Meus Sites.
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!"
Esta abordagem pode ser ainda mais personalizada para conter outra configuração de inquilino, como para Fluxo de Trabalho, Aplicações e IRM. Este script é encapsulado numa função ou cmdlets personalizados, o que permite que seja executado repetidamente para futuros inquilinos.
Serviço de fluxo de trabalho
O SharePoint Server 2013 traz um grande avanço para o fluxo de trabalho, incluindo recursos corporativos, como a autoria totalmente declarativa, mensagens REST e Service Bus, escalabilidade elástica e confiabilidade de serviços gerenciados. O SharePoint 2013 pode usar um novo serviço de fluxo de trabalho compilado nos componentes da Windows Workflow Foundation do NET Framework 4.5. O novo serviço chama-se Gerenciador de Fluxos de Trabalho e foi concebido para desempenhar um papel central na empresa.
A plataforma de fluxo de trabalho do SharePoint 2013 torna-se disponível para você e suas ferramentas, somente depois que você baixar e instalar o novo serviço do gerenciador de fluxo de trabalho e configurá-lo para se comunicar com o farm do SharePoint Server 2013. Para obter mais informações sobre como instalar e configurar o Serviço Gerenciador de Fluxos de Trabalho para o SharePoint 2013, consulte Instalar e configurar o fluxo de trabalho do SharePoint Server.
Para configurar o serviço de fluxo de trabalho, use o cmdlet Register-SPWorkflowService para registrar o farm com o gerenciador de serviço de fluxo de trabalho no modo de partição. Ao efetuar este registo de farm, utilize o parâmetro SPSite para transmitir o URL de qualquer coleção de sites de inquilino existente a partir do farm e utilize o parâmetro ScopeName para definir um âmbito de fluxo de trabalho com nome para o farm.
O seguinte script do Windows PowerShell mostra como registrar o farm do SharePoint com o gerenciador de fluxo de trabalho no modo de partição.
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!"
Para permitir um locatário específico para o fluxo de trabalho do SharePoint, você deve configurar o proxy do serviço de fluxo de trabalho. Ao efetuar esta configuração, obtenha uma referência à coleção de sites de raiz do inquilino e registe-a com o proxy do serviço de fluxo de trabalho.
O seguinte script do Microsoft PowerShell mostra como habilitar um locatário para o Fluxo de trabalho do 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!"
Depois de configurar o inquilino para utilizar o Fluxo de Trabalho Service Manager, poderá utilizar o SharePoint Designer para criar fluxos de trabalho com a opção Fluxo de Trabalho do SharePoint 2013, conforme mostrado no diagrama seguinte.
Estender o modelo de site de administração de locatário
Adicionar ou remover links
Use o esquema de definição de ação personalizada para adicionar e remover links na página principal do site de administração de locatários.
A seguinte definição de funcionalidade mostra como adicionar um novo grupo, várias ligações e como remover a ligação para a página Gerir Coleções de Sites.
<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>
Para obter mais informações sobre ações personalizadas, como os IDs predefinidos para ligações incorporadas, veja Esquema de Definição de Ação Personalizada.
Personalizar a faixa de opções
A faixa de opções do servidor no SharePoint Server 2013 pode ser personalizada usando o XML da faixa de opções do servidor e ECMAScript (JavaScript, JScript). O XML define os controles na faixa de opções. O ECMAScript realiza ações em uma página ou em um objeto na página. Você pode usar ECMAScript que existe no modelo de objeto do SharePoint do FoundationECMAScript ou funções ECMAScript embutidas. Você também pode adicionar seu próprio ECMAScript à página e usá-lo para interagir com a faixa de opções.
Ao personalizar a faixa de opções do servidor, você pode adicionar, substituir e remover controles, grupos e guias. As personalizações da faixa de opções são definidas usando o XML da faixa de opções do servidor em um recurso e podem ser implantadas em um pacote de solução (arquivo .wsp). As personalizações da faixa de opções podem ser delimitadas para um tipo de lista específico usando os atributos RegistrationId e RegistrationType. As personalizações também podem ser delimitadas para um site ou um aplicativo Web em particular usando o atributo Scope no arquivo Feature.xml.
O XML a seguir mostra como substituir a funcionalidade do botão Cota de Disco na página Gerenciar Conjuntos de Sites.
<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>
Para obter mais informações sobre como personalizar o friso Servidor, consulte Personalizar o Friso do Servidor.
Estendendo uma assinatura de site usando propriedades personalizadas
O aplicativo de serviço de assinatura de site pode armazenar tanto as propriedades personalizadas administrativas quanto as propriedades personalizadas de locatário. Os tipos de propriedade suportados incluem os seguintes valores:
string
int
long
bool
Guid
DateTime
Você pode usar as propriedades personalizadas para estender a funcionalidade de gerenciamento de locatário, como o gerenciamento de cotas de locatário.
O seguinte script do PowerShell mostra como acessar as propriedades personalizadas.
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();
}