Share via


Utilizzo di Windows PowerShell per gestire SharePoint Online

 

Ultima modifica dell'argomento: 2015-03-09

Riepilogo: Utilizzare Windows PowerShell per gestire Office 365 tramite Windows PowerShell cmdlet, script e processi batch.

SharePoint Online può essere gestito tramite i cmdlet SharePoint Online. (Vedere? Non tutti i nomi di software sono criptici e complessi). Nell'incarnation corrente, l'implementazione SharePoint Online di Windows PowerShell è in qualche modo limitata: sono disponibili solo 30 cmdlet per gli amministratori Office 365 e, al momento, non è possibile utilizzare Windows PowerShell per gestire operazioni con SkyDrive Pro, ricerche SharePoint Online, l'archivio termini SharePoint Online, profili utenti e così via. Ciò significa che non ci sono motivi per utilizzare Windows PowerShell per gestire SharePoint Online? Non corriamo troppo. In questo caso, sono presenti porzioni chiave di SharePoint Online che non solo possono essere gestire utilizzando Windows PowerShell ma possono anche essere gestite straordinariamente bene utilizzando Windows PowerShell.

Utilizzo di Windows PowerShell per gestire SharePoint Online

In questo argomento sono inclusi i seguenti argomenti:

  • Utilizzo dei siti di SharePoint Online

  • Lavorare con gli utenti di SharePoint Online

  • Utilizzo dei gruppi del sito di SharePoint Online

  • Una breve nota relativa al cmdlet ForEach-Object

Per ulteriori informazioni sull'utilizzo di Windows PowerShell per gestire SharePoint Online, l'utente potrebbe voler dare uno sguardo ai riferimenti del cmdlet di SharePoint Online, un insieme di argomenti della guida disponibili qui.

Non bisogna dimenticare questi due articoli, pieni di comandi utili di Windows PowerShell per SharePoint Online:

Utilizzo dei siti di SharePoint Online

Si desidera visualizzare un esempio di un'area correlata a SharePoint Online che può essere gestita tramite Windows PowerShell? Naturalmente, è possibile. Uno dei punti di forza di Windows PowerShell è rappresentato dalla capacità di identificare un sottogruppo di siti di SharePoint Online. Nelle organizzazioni di dimensioni maggiori, è comune disporre di molti siti, perfino centinaia o migliaia. Ciò crea problema? Assolutamente no. Se si dispone di molte centinaia di siti e si desidera sapere quanti di questi siti sono wiki, ovvero sono stati creati utilizzando il modello Enterprise Wiki (un modello che dispone ufficialmente del nome ENTERWIKI#0). È possibile individuare tali informazioni tramite l'interfaccia di amministrazione di SharePoint Online? Trovare informazioni utilizzando quella modalità non è impossibile, ma molto difficile. Sicuramente, non si tratta di un'operazione semplice come quella di eseguire il comando di Windows PowerShell riportato di seguito:

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

In altre parole, il cmdlet Get-SPOSite viene utilizzato per restituire informazioni relative a tutti i siti. In seguito, utilizzare il cmdlet Where-Object per selezionare soltanto i siti per i quali la proprietà del modello è parti a ENTERWIKI#0.

Nota

Come è possibile sapere che il modello Enterprise Wiki è ufficialmente denominato ENTERWIKI#0? Semplice: è sufficiente eseguire il comando
Get-SPOWebTemplate

In alternativa, è possibile visualizzare un elenco di tutti i siti che dispongono di una quota di archiviazione superiore a 100 MB o inferiore a 250 MB. È possibile effettuare questa operazione in modo rapido e facile utilizzando Windows PowerShell? Assolutamente sì.

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

Si tratta di una query più complicata di quelle esaminate fino a questo momento, ma una volta compreso il linguaggio non dovrebbero verificarsi problemi a comprenderne il funzionamento. In questo esempio, si effettua la ricerca di siti che soddisfino i criteri 1 e 2. Il sito 1) dispone di un valore StorageQuota superiore a (-gt) 1000 MB o (-or) 2) dispone di un valore StorageQuota inferiore a (-lt) 250 MB. Si supponga di disporre di 4 siti:

Sito StorageQuota

Sito A

180

Sito B

700

Sito C

300

Sito D

1500

Utilizzando questi dati di esempio, Sito A verrà restituito poiché dispone di un valore StorageQuota inferiore a 250 MB. Anche il Sito D verrà restituito poiché dispone di un valore StorageQuota superiore a 1000. Sito B e C soddisfano i criteri, quindi non verranno restituiti.

Ecco un altro esempio, a titolo informativo. Se si desidera visualizzare un elenco di tutti i siti che non sono posseduti dall'amministratore, ovvero tutti i siti nei quali il valore Owner è pari a un elemento diverso rispetto a admin@litwareinc.onmicrosoft.com (in questo esempio). È molto facile scrivere tale comando:

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

È facile, ma non significa che non sia anche utile.

Lavorare con gli utenti di SharePoint Online

Windows PowerShell è uno strumento estremamente utile per lavorare con gli utenti dei siti di SharePoint Online. Innanzitutto, è possibile utilizzare Windows PowerShell e il cmdlet Get-SPOUser per ottenere un elenco di tutti gli utenti ai quali è stato concesso l'accesso al sito. Semplice:

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

tutto quello che occorre fare è chiamare Get-SPOUser seguito dall'URL del sito al quale si è interessati.

In alternativa, se si desidera visualizzare solo gli utenti (e non i gruppi) che hanno accesso a un sito, è possibile utilizzare questo comando:

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

Nessun problema: vengono richiesti gli utenti del sito dove la proprietà IsGroup è impostata su False (in Windows PowerShell, è possibile utilizzare $True e $False quando si scrivono i comandi invece i classici valori True e False).

È semplice come ottenere solo gli utenti che sono amministratori del sito; vale a dire, gli utenti dove la proprietà IsSiteAdmin è impostata su True:

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

Ma vale solo per un sito. L'utilità di Windows PowerShell (così per parlare) spesso si evidenza quando è necessario lavorar con più oggetti, ad esempio, più siti. Ad esempio, è interessante ottenere un elenco di tutti gli utenti che hanno accesso a un dato sito. Ma per quanto riguarda il contrario: ad esempio un elenco di tutti i siti ai quali un solo utente ha accesso? È possibile farlo con Windows PowerShell? Assolutamente sì. Ecco un semplice script di esempio (a dire il vero, semplice per coloro che hanno un po' di esperienza con Windows PowerShell) che restituisce i nomi di tutti i siti ai quali un utente in particolare (in questo esempio, Ken Myer) ha accesso:

$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}
    }

Nota

Come si utilizza uno script in Windows PowerShell? In questo modo: copiare il codice precedente, incollarlo nel blocco note (o in un altro editor di testo), quindi salvare il file con un'estensione di file .ps1 (ad esempio, C:\Script\SitesAUserCanAccess.ps1). Per eseguire lo script, utilizzare Windows PowerShell per connettersi a SharePoint Online, quindi, nel prompt di comandi di Windows PowerShell, digitare semplicemente il percorso del file .ps1 e premere INVIO:
C:\Script\SitesAUserCanAccess.ps1

E se si desidera un elenco di tutti i siti e degli amministratori di ognuno di questi siti? Tali informazioni possono essere restituite utilizzando un unico comando:

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

Si dovrebbe ottenere qualcosa di simile a quanto segue:

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

Concesso che non è il miglior risultato del mondo, ma, inutile a dirsi, l'aspetto non è tutto. Inoltre, man mano che si acquisisce maggiore esperienza e si migliora con Windows PowerShell, si imparerà a personalizzare tale risultato in diversi modi interessanti.

Soprattutto, Windows PowerShell non è solo un modo per recuperare cose: serve anche a configurare. Si hanno diverse centinaia di siti e si deve rendere Ken Myer amministratore di ognuno di questi siti? Basta chiedere:

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

Molto interessante, vero?

Utilizzo dei gruppi del sito di SharePoint Online

Non occorre preoccuparsi: i gruppi di siti non sono stati dimenticati. Infatti, Windows PowerShell è un ottimo modo per gestire i gruppi di siti di SharePoint. L'interfaccia di amministrazione di SharePoint Online presenta alcuni metodi semplici da utilizzare per gestire i gruppi di siti, ma accedere a tali metodi può risultare un po' scomodo. Ad esempio, si supponga che si desideri osservare gruppo e membri di gruppi del sito https://litwareinc.com/sites/finance. Ecco la procedura per farlo:

  1. Dall'interfaccia di amministrazione di SharePoint Online, nella scheda delle raccolte di siti, fare clic sul nome del sito.

  2. Nella finestra di dialogo relativa alle proprietà della raccolta dei siti, fare clic sul collegamento che consente di aprire https://litwareinc.com/sites/finance.

  3. Nella pagina del sito, fare clic sull'icona Impostazioni (nell'angolo in alto a destra della pagina), quindi fare clic su Impostazioni sito:

    Opzione Impostazioni sito di SharePoint Online.

  4. Nella pagina Impostazioni sito, fare clic su Siti e autorizzazioni.

Ripetere quindi la procedura per il sito successivo.

Esiste quindi un altro modo di ottenere un elenco di tutti i gruppi e dei relativi utenti da un dato sito? Bene, esiste almeno un altro modo:

$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
    }

Effettivamente, lo script precedente è leggermente più complicato della maggior parte dei comandi mostrati finora. Ed è anche un po' più complicato: dopo tutto, è necessario copiare il codice, incollarlo nel Blocco note (o un altro editor di testo), salvare il file con estensione .ps1 (ad esempio, C:\Script\SiteGroupsAndUsers.ps1), quindi eseguire lo script da Windows PowerShell. Tuttavia, come è stato detto, è un po' problematico; dopo tutto, l'esecuzione dello script prevede semplicemente la digitazione del percorso completo del file. ps1:

C:\Scripts\SiteGroupsAndUsers.ps1

C'è un minimo sforzo da fare. Ma va notato quello che si ottiene con questo piccolo sforzo:

Gruppi di siti e membri dei gruppi di siti.

Si tratta di tutti i gruppi creati per il sito https://litwareinc.com/sites/finance e degli utenti assegnati a tali gruppi (i nomi dei gruppi vengono visualizzati in giallo per differenziarli dai relativi elenchi di membri).

Inoltre, se si ritiene che sia qualcosa, attendere finché non si vede lo 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
            }
    }

Lo script elenca tutti i gruppi e tutti i membri del gruppo, per ognuno dei siti di SharePoint Online. Vale la pena provare e scoprirlo.

Si è compreso perché si potrebbe voler utilizzare Windows PowerShell per gestire SharePoint Online?

Una breve nota relativa al cmdlet ForEach-Object

Nella sezione Lavorare con gli utenti di SharePoint Online, è stato eseguito il piping delle informazioni di sito nel cmdlet ForEach-Object:

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

Ciò fa sorgere una domanda interessante. Per quale motivo è stata eseguita tale operazione? Quando sono stati utilizzati i cmdlet di Azure Active Directory, è stato eseguito il piping delle informazioni direttamente dal cmdlet Get-MsolUser a quello Set-MsolUser:

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

Quindi, perché non è stata eseguita un'operazione di questo tipo con il comando SharePoint Online?

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

Il motivo principale è che non funzionerebbe. Con il cmdlet Set-SPOUser è necessario includere il parametro Site seguito dal nome del sito. Ad esempio:

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

Ciò significa che, se si prova a eseguire il piping delle informazioni direttamente a Set-SPOUser, il cmdlet non restituirà tutti i siti e Ken Myer sarà l'amministratore di ogni sito. Al contrario, all'utente verrà richiesto di inserire l'URL del sito:

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: 

In questo modo, è necessario eseguire il piping delle informazioni di sito al cmdlet ForEach-Object. ForEach-Object prende gli elementi trasferiti (ogni sito) affinché l'utente possa indicare le azioni da compiervi. In questo caso, l'utente gli comunica di utilizzare il cmdlet Set-SPOUser per assegnare a Ken Myer il ruolo di amministratore del sito:

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

La sintassi $_.Url corrisponde all'URL del sito. Il valore $_. indica che sono in uso le informazione per le quali è stato eseguito il piping al cmdlet ForEach-Object da parte di un altro cmdlet.

In caso di dubbi, fare riferimento al seguente esempio. Si supponga di disporre di 3 siti con i seguenti URL:

Quando si esegue il piping di quelle informazioni a ForEach-Object, il cmdlet prende il primo elemento della raccolta (site1) ed esegue il cmdlet Set-SPOUser utilizzando l'URL di quel sito. In altre parole, esegue il seguente comando:

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

Al termine dell'operazione, prende il secondo sito (site2) ed esegue Set-SPOUser con tale sito:

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

Come è evidente, ora utilizza l'URL del secondo sito della raccolta. ForEach-Object verrà eseguito per tutti i siti della raccolta e assegnerà a Ken Myer il ruolo di amministratore su ciascun sito.

Per ulteriori informazioni, consultare questo articolo. Ovviamente, ForEach-Object consiste in un piccolo cmdlet, molto utile e che è opportuno conoscere. Ad esempio, quando si prova a eseguire il piping delle informazioni da un cmdlet a un altro, viene visualizzato un messaggio di errore analogo al seguente:

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.

Ciò si verifica poiché non tutti i cmdlet accettano l'input per il quale viene eseguito il piping. Come risolvere il problema? Ovviamente, utilizzando ForEach-Object.

Vedere anche

Modi migliori per gestire Office 365 con Windows PowerShell