Compartilhar via


Usar o Windows PowerShell para gerenciar o SharePoint Online

 

Tópico modificado em: 2015-03-09

Resumo: Use o Windows PowerShell para Gerenciar o Office 365 usando cmdlets, scripts e processos em lote do Windows PowerShell.

O SharePoint Online pode ser gerenciado usando os cmdlets do SharePoint Online. (Viu? Nem todos os nomes de software são complicados e obscuros.) Na sua encarnação atual, a implementação do SharePoint Online com o Windows PowerShell é, de certa forma, limitada: há apenas 30 cmdlets disponíveis para administradores do Office 365 e, no momento, você não pode usar o Windows PowerShell para gerenciar coisas como o SkyDrive Pro, as pesquisas do SharePoint Online, o repositório de termos do SharePoint Online, perfis de usuários e assim por diante. Isso significa que não há razão para usar o Windows PowerShell para gerenciar o SharePoint Online? Não vamos nos apressar sobre isso. Como se pode ver, há várias partes essenciais do SharePoint Online que podem ser gerenciadas, e muito bem, com o Windows PowerShell.

Usar o Windows PowerShell para gerenciar o SharePoint Online

Nesta seção, abordamos os seguintes tópicos:

  • Trabalhar com sites do SharePoint Online

  • Trabalhar com usuários do SharePoint Online

  • Trabalhar com grupos de sites do SharePoint Online

  • Uma breve observação sobre o cmdlet ForEach-Object

Para obter mais informações sobre o uso do Windows PowerShell para gerenciar o SharePoint Online, dê uma olhada na referência sobre cmdlets do SharePoint Online, um conjunto de tópicos de ajuda disponível aqui.

E não se esqueça desses dois artigos repletos de comandos úteis do Windows PowerShell para o SharePoint Online:

Trabalhar com sites do SharePoint Online

Podemos dar um exemplo de uma área relacionada ao SharePoint Online que pode ser gerenciada com o Windows PowerShell? Claro que sim. Por exemplo, o Windows PowerShell realmente se destaca ao ajudá-lo a identificar um subconjunto dos seus sites do SharePoint Online. Em grandes organizações, não é incomum ter muitos sites, até mesmo centenas ou milhares deles. Há algo errado nisso? Claro que não. Mas suponha que você tenha centenas de sites e queira saber quantos deles são wikis. Em outras palavras, você quer saber quantos foram criados com o modelo Enterprise Wiki (um modelo que, oficialmente, tem o nome ENTERWIKI#0.) Você pode encontrar essas informações usando o Centro de administração do SharePoint Online? Não podemos dizer que é impossível encontrar as informações dessa maneira, mas não será fácil. E com certeza não será tão fácil quanto executar este comando do Windows PowerShell:

Get-SPOSite | Where-Object {$_.Template -eq "ENTERWIKI#0"}

Em outras palavras, usamos o cmdlet Get-SPOSite para retornar informações sobre todos os nossos sites e, em seguida, usamos o cmdlet Where-Object para selecionar apenas os sites cuja propriedade Template equivale a ENTERWIKI#0.

Dica

Como sabíamos que o nome oficial do modelo Enterprise Wiki é ENTERWIKI#0? É fácil: executamos este comando:
Get-SPOWebTemplate

Ou talvez você queira uma lista de todos os sites com uma cota de armazenamento superior a 1000 MB ou inferior a 250 MB. É possível fazer isso de maneira rápida e fácil usando o Windows PowerShell? Claro que sim:

Get-SPOSite | Where-Object {$_.StorageQuota -gt 1000 -or $_.StorageQuota -lt 250}

É uma consulta um pouco mais complicada do que algumas das que já vimos, mas depois que você aprende a linguagem, não terá problemas para entender como funciona. Neste exemplo, estamos procurando sites que atendem a um de dois critérios. Ou o site: 1) tem um StorageQuota superior (-gt) a 1000 MB; ou (-or), 2) tem um StorageQuota inferior (-lt) a 250 MB. Suponha que temos quatro sites:

Site StorageQuota

Site A

180

Site B

700

Site C

300

Site D

1500

Usando esses dados de amostra, o Site A será retornado porque tem um StorageQuota inferior a 250 MB. O Site D também será retornado, pois seu StorageQuota é superior a 1000 MB. Os Sites B e C não atendem a nenhum dos critérios, então não serão retornados.

Eis um outro exemplo, apenas por diversão. Suponha que você queira uma lista de todos os sites que não pertencem a um administrador, ou seja, todos os sites cujo parâmetro Owner seja equivalente a alguém que não seja, em nosso exemplo, admin@litwareinc.onmicrosoft.com. Esse comando é muito fácil de escrever:

Get-SPOSite | Where-Object {$_.Owner -ne "admin@litwareinc.onmicrosoft.com"}

Mas só porque é fácil não significa que não é útil, certo?

Trabalhar com usuários do SharePoint Online

O Windows PowerShell é uma ferramenta extremamente útil para trabalhar com usuários de site do SharePoint Online. De um lado, você pode usar o Windows PowerShell e o cmdlet Get-SPOUser para obter uma lista de todos os usuários que têm acesso a um site. É fácil:

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance"

Tudo que você deve fazer é chamar Get-SPOUser seguido da URL do site no qual está interessado.

Ou, se quiser apenas os usuários (e não os grupos) que têm acesso a um site, você pode usar este comando:

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance" | Where-Object {$_.IsGroup -eq $False}

Isso também é fácil: nós simplesmente solicitamos usuários do site em que a propriedade IsGroup está definida como False. (No Windows PowerShell, você usa $True e $False ao escrever comandos, em vez do tradicional True e False.)

É fácil obter apenas os usuários que são administradores de sites; ou seja, os usuários em que a propriedade IsSiteAdmin é True:

Get-SPOUser -Site "https://litwareinc.sharepoint.com/sites/finance" | Where-Object {$_.IsSiteAdmin -eq $True}

Mas isso é para apenas um site. Geralmente, o poder do Windows PowerShell (por assim dizer) surge quando você precisa trabalhar com vários objetos; você sabe, como muitos sites. Por exemplo, é bom ter uma lista de todos os usuários que têm acesso a um determinado site. Mas e o inverso: e uma lista de todos os sites aos quais um único usuário tem acesso? É possível fazer isso usando o Windows PowerShell? Claro que sim. Eis um pequeno script simples (simples supostamente para quem têm alguma experiência com o Windows PowerShell) que retorna os nomes de todos os sites aos quais um usuário específico tem acesso (neste exemplo, Paulo Araújo):

$x = (Get-SPOSite).Url

foreach ($y in $x)
    {
        $z = $Null
        $z = Get-SpoUser -Site $y | Where-Object {$_.DisplayName -eq "Ken Myer"}
        if ($z -ne $Null) {$y}
    }

Dica

Como você usa um script no Windows PowerShell? Assim: copie o código anterior, cole-o no Bloco de Notas (ou em outro editor de texto) e depois salve o arquivo usando uma extensão de arquivo .ps1 (por exemplo, C:\Scripts\SitesAUserCanAccess.ps1). Para executar o script, use o Windows PowerShell para conectar ao SharePoint Online, depois, no prompt de comando do Windows PowerShell, simplesmente digite o caminho para o arquivo .ps1 e pressione ENTER:
C:\Scripts\SitesAUserCanAccess.ps1

Ou, que tal uma lista de todos os seus sites e os administradores para cada um desses sites? Essas informações podem ser obtidas usando um único comando:

Get-SPOSite | ForEach-Object {Write-Host $_.Url; Get-SPOUser -Site $_.Url | Where-Object {$_.IsSiteAdmin -eq $True}}

Você deve obter algo semelhante a isto:

https://litwareinc.sharepoint.com/sites/communities
MOD Administrator  admin@litwareinc.com {Communities Members, Comm...}
Sara Davis  sarad@litwareinc.com {Communities Members, Communities...}

https://litwareinc.sharepoint.com/sites/finance
MOD Administrator admin@litwareinc.com {Excel Services Viewers, Hi...}

https://litwareinc.sharepoint.com/sites/hr
MOD Administrator  admin@litwareinc.com   {Contoso Beta Members, C...}

Embora não seja o resultado mais bonito do mundo, não é preciso dizer que aparência não é tudo. E, conforme você ganha mais experiência e se adapta melhor ao Windows PowerShell, aprenderá como personalizar esse resultado de várias formas.

O melhor de tudo: o Windows PowerShell não serve apenas para recuperar as coisas, também serve para configurá-las. Você diz que tem várias centenas de sites e que precisa fazer de Paulo Araújo um administrador em cada um? Era só pedir:

Get-SPOSite | ForEach-Object {Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True}

Legal, né?

Trabalhar com grupos de sites do SharePoint Online

Não se preocupe: nós não esquecemos sobre grupos de sites. Na verdade, Windows PowerShell é uma excelente maneira de gerenciar os grupos de sites do SharePoint. O Centro de administração do SharePoint Online tem alguns métodos fáceis de usar para gerenciar grupos de sites, mas obter esses métodos pode ser um pouco trabalhoso. Por exemplo, suponha que você queira observar os grupos, e os membros dos grupos, para o site https://litwareinc.com/sites/finance. Aqui está o que você precisa fazer para obter isso:

  1. No Centro de administração do SharePoint Online, na guia coleções de sites, clique no nome do site.

  2. Na caixa de diálogo Propriedades da coleção de sites, clique no link que abre https://litwareinc.com/sites/finance.

  3. Na página do site, clique no ícone Configurações (localizado no canto superior direito da página) e depois clique em Configurações do Site:

    Opção de configurações de Site do SharePoint Online.

  4. Na página Configurações do Site, clique em Sites e permissões.

E, em seguida, repita o processo para o próximo site que você deseja examinar.

Então, há outra forma de obter uma lista de todos os grupos, e seus usuários, de um determinado site? Bem, existe pelo menos uma outra forma:

$x = Get-SPOSiteGroup -Site "https://litwareinc.com/sites/finance"

foreach ($y in $x)
    {
        Write-Host $y.Title -ForegroundColor "Yellow"
        Get-SPOSiteGroup -Site "https://litwareinc.com/sites/finance" -Group $y.Title | Select-Object -ExpandProperty Users
        Write-Host
    }

Reconhecidamente, o script anterior é um pouquinho mais complicado do que a maioria dos comandos que mostramos a você até agora. E é um pouco incômodo também: afinal, você precisa copiar o código, colar no Bloco de notas (ou algum outro editor de texto), salvar o arquivo usando uma extensão de arquivo .ps1 (por exemplo, C:\Scripts\SiteGroupsAndUsers.ps1) e depois executar o script de dentro do Windows PowerShell. Embora, como dissemos, seja um pouco incômodo; afinal de contas, a execução do script simplesmente envolve digitar o caminho completo para o arquivo. ps1:

C:\Scripts\SiteGroupsAndUsers.ps1

Portanto, sim, há um pouco de esforço envolvido em tudo isso. Mas, veja o que obtemos em retorno para essa quantidade mínima de trabalho:

Grupos de sites e membros do grupo local.

Esses são todos os grupos que foram criados para o site https://litwareinc.com/sites/finance, bem como todos os usuários designados a esses grupos. (E, apenas para mostra alguns, nós exibimos os nomes de grupos em amarelo, para ajudá-lo a manter os grupos e suas listas de associação, à parte.)

E se você acha que isso foi alguma coisa, aguarde até que você veja este script:

$x = Get-SPOSite

foreach ($y in $x)
    {
        Write-Host $y.Url -ForegroundColor "Yellow"
        $z = Get-SPOSiteGroup -Site $y.Url
        foreach ($a in $z)
            {
                 $b = Get-SPOSiteGroup -Site $y.Url -Group $a.Title 
                 Write-Host $b.Title -ForegroundColor "Cyan"
                 $b | Select-Object -ExpandProperty Users
                 Write-Host
            }
    }

Esse script lista todos os grupos e todas associações aos grupos, para todos os seus sites do SharePoint Online, cada um deles. Experimente e veja por si mesmo.

Agora você compreende por que você pode querer usar o Windows PowerShell para gerenciar SharePoint Online?

Uma breve observação sobre o cmdlet ForEach-Object

Na seção Trabalhar com usuários do SharePoint Online, você pode ter percebido que nós redirecionamos informações do site para o cmdlet ForEach-Object:

Get-SPOSite | ForEach-Object {Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True}

Isso levanta uma questão interessante: por que fizemos isso? Afinal, ao trabalhar com os cmdlets do Active Directory do Azure, nós redirecionamos informações diretamente do cmdlet Get-MsolUser para o Set-MsolUser:

Get-MsolUser | Set-MsolUser -UsageLocation "FR"

Então, por que não podemos fazer algo assim com nosso comando do SharePoint Online:

Get-SPOSite | Set-SPOUser -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

O principal motivo para não fazermos isso é porque não funciona. Com o cmdlet Set-SPOUser, você deve incluir explicitamente o parâmetro Site seguido pelo nome do site. Por exemplo:

Set-SPOUser -Site "https://litwareinc.sharepoint.com/sites/communities" -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Isso significa que, se tentarmos redirecionar informações diretamente para Set-SPOUser, o cmdlet não tornará Paulo Araújo um administrador de todos os nossos sites. Em vez disso, ele solicitará a URL do site:

Get-SPOSite | Set-SPOUser -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True
cmdlet Set-SPOUser at command pipeline position 2
Supply values for the following parameters:
Site: 

Isso significa que precisamos redirecionar informações do site para o cmdlet ForEach-Object. O ForEach-Object seleciona cada item transferido a ele (cada site) e faz o que instruirmos com esses itens. Nesse caso, estamos solicitando que ele use o cmdlet Set-SPOUser para transformar Paulo Araújo em um administrador do site em questão:

Set-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

A sintaxe $_.Url representa a URL do site. $_. indica que estamos usando informações redirecionadas ao cmdlet ForEach-Object por outro cmdlet.

Confuso? Veja um exemplo rápido. Suponha que temos três sites com as seguintes URLs:

Quando redirecionamos essas informações para ForEach-Object, o cmdlet seleciona o primeiro item do grupo (site1) e executa o cmdlet Set-SPOUser usando a URL desse site. Em outras palavras, ele executa este comando:

Set-SPOUser -Site "https://litwareinc.sharepoint.com/sites/site1" -LoginName "kenmyer@litwareinc.com" -IsSiteCollectionAdmin $True

Quando termina, ele seleciona o segundo site (site2) e executa o Set-SPOUser nesse site:

Set-SPOUser –Site "https://litwareinc.sharepoint.com/sites/site1" –LoginName "pauloaraujo@litwareinc.com" –IsSiteCollectionAdmin $True

Como você pode ver, agora ele está usando a URL do segundo site no grupo. ForEach-Object passará por todos os sites do grupo e transformará Paulo Araújo em administrador de todos eles.

Para obter mais informações, dê uma olhada neste artigo. Nem é preciso dizer que o ForEach-Object é um cmdlet bastante útil. Por exemplo, ao tentar redirecionar informações de um cmdlet a outro, você pode, ocasionalmente, receber uma mensagem de erro como esta:

The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

Isso acontece porque nem todos os cmdlets aceitam entrada de pipeline. Como contornar esse problema? Isso mesmo: usar o ForEach-Object.

Veja também

Melhores maneiras de gerenciar o Office 365 com o Windows PowerShell