Windows PowerShell을 사용하여 SharePoint Online 관리

 

마지막으로 수정된 항목: 2015-03-09

**요약:**Windows PowerShell에서 Windows PowerShell cmdlet, 스크립트 및 일괄 프로세스를 사용하여 Office 365를 관리합니다.

SharePoint Online cmdlet을 사용하여 SharePoint Online을 관리할 수 있습니다. 소프트웨어 이름에서도 확인할 수 있는 것처럼 말이죠. 현재 SharePoint Online의 Windows PowerShell 구현은 다소 제한되어 있습니다. Office 365 관리자에게는 30개의 cmdlet만이 제공되며, 현재는 Windows PowerShell을 사용하여 OneDrive Pro, SharePoint Online 검색, SharePoint Online 용어 저장소, 사용자 프로필 등을 관리할 수 없습니다. 그렇다고 해서 Windows PowerShell을 사용하여 SharePoint Online을 관리할 이유가 전혀 없는 것은 아닙니다. 실제로 SharePoint Online의 여러 주요 부분은 Windows PowerShell을 사용하여 관리할 수 있음은 물론 Windows PowerShell 사용 시 훨씬 더 효율적인 관리가 가능합니다.

Windows PowerShell을 사용하여 SharePoint Online 관리

이 항목에서 다루는 내용은 다음과 같습니다.

  • SharePoint Online 사이트 작업

  • SharePoint Online 사용자 작업

  • SharePoint Online 사이트 그룹 작업

  • ForEach-Object cmdlet 관련 참고 사항

Windows PowerShell을 사용하여 SharePoint Online을 관리하는 방법을 자세히 알아보려면 SharePoint Online용 Windows PowerShell 참조에서 제공되는 도움말 항목 집합인 SharePoint Online cmdlet 참조를 확인할 수 있습니다.

또한 아래의 두 문서에서도 유용한 SharePoint Online용 Windows PowerShell 명령이 다수 제공됩니다.

SharePoint Online 사이트 작업

여기서는 Windows PowerShell을 사용하여 관리할 수 있는 SharePoint Online 관련 영역의 예를 살펴보겠습니다. Windows PowerShell을 사용하면 매우 편리한 작업 중 하나는 SharePoint Online 사이트 하위 집합을 식별하는 것입니다. 대규모 조직에는 수백, 수천 개의 사이트가 사용되는 경우가 드물지 않습니다. 사이트는 수에 제한 없이 원하는 만큼 사용해도 아무런 문제가 없습니다. 그러나 예를 들어 수백 개의 사이트 중에서 위키 사이트, 즉 엔터프라이즈 위키 템플릿(공식 이름이 ENTERWIKI#0인 템플릿)을 사용하여 작성된 사이트의 수를 확인해야 하는 경우가 있을 수 있습니다. SharePoint Online 관리 센터를 사용하여 이러한 정보를 찾을 수는 있지만 해당 작업은 쉽지 않습니다. 그러나 다음 Windows PowerShell 명령 하나만 실행하면 이 정보를 쉽게 찾을 수 있습니다.

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

다시 말해서 Get-SPOSite cmdlet을 사용해 모든 사이트에 대한 정보를 반환한 다음 Where-Object cmdlet을 사용해 Template 속성이 ENTERWIKI#0과 같은 사이트만 선택합니다.

참고

엔터프라이즈 위키 템플릿의 공식 이름이 ENTERWIKI#0임을 확인하려면 그 이유는 간단합니다. 실행합니다.
Get-SPOWebTemplate

다음으로는 저장소 할당량이 1000MB보다 크거나 250MB보다 작은 모든 사이트의 목록을 확인하려는 경우를 가정해 보겠습니다. Windows PowerShell을 사용하면 이 목록을 빠르고 쉽게 확인할 수 있습니다.

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

이 쿼리는 지금까지 살펴본 것보다는 좀 더 복잡하지만, 용어만 파악하면 작동 방식을 쉽게 이해할 수 있습니다. 이 예에서는 두 기준 중 하나를 충족하는 사이트를 찾습니다. 즉, 사이트의 1) StorageQuota가 1000MB보다 크거나(-gt) 또는(-or) 2) StorageQuota가 250MB보다 작아야(-lt) 합니다. 다음 사이트 4개가 있다고 가정하겠습니다.

사이트 StorageQuota

사이트 A

180

사이트 B

700

사이트 C

300

사이트 D

1500

이 샘플 데이터를 사용하는 경우 StorageQuota가 250보다 작은 사이트 A가 반환됩니다. 사이트 D 역시 StorageQuota가 1000보다 크므로 반환됩니다. 사이트 B와 C는 두 기준을 모두 충족하지 않으므로 반환되지 않습니다.

마지막으로 한 가지 예를 더 살펴보겠습니다. 관리자가 소유하지 않은 모든 사이트, 즉 Owner가 admin@litwareinc.onmicrosoft.com이 아닌 모든 사이트의 목록을 확인하려는 경우에는 다음과 같은 간단한 명령을 실행합니다.

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

이 명령은 간편하지만 매우 유용합니다.

SharePoint Online 사용자 작업

Windows PowerShell은 SharePoint Online 사이트 사용자 관련 작업에 매우 유용한 도구입니다. 일례로 Windows PowerShell에서 Get-SPOUser cmdlet을 사용하면 사이트 액세스 권한이 부여된 모든 사용자의 목록을 반환할 수 있습니다. 그 이유는 간단합니다.

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

이처럼 Get-SPOUser와 원하는 사이트 URL을 차례로 입력하여 호출하면 됩니다.

사이트 액세스 권한이 있는 그룹이 아닌 사용자만 확인하려는 경우에는 다음 명령을 사용하면 됩니다.

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

이 경우에도 IsGroup 속성이 False로 설정된 사이트 사용자만 검색하면 됩니다. Windows PowerShell에서는 명령 작성 시 기존의 True 및 False가 아닌 $True 및 $False를 사용합니다.

또한 IsSiteAdmin 속성이 True로 설정된 사이트 관리자만 반환하는 작업도 간단합니다.

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

그러나 이 명령은 단일 사이트에만 사용할 수 있습니다. Windows PowerShell은 여러 사이트 등의 다수 개체에 사용하는 경우 보다 효율적입니다. 예를 들어 지정된 사이트에 대한 액세스 권한이 있는 모든 사용자의 목록을 반환하려는 경우 편리합니다. 반대로 단일 사용자에게 액세스 권한이 있는 모든 사이트 목록을 확인하려는 경우도 있습니다. 이 작업 역시 Windows PowerShell을 통해 물론 확인할 수 있습니다. 아래에는 특정 사용자(여기서는 Ken Myer)에게 액세스 권한이 있는 모든 사이트의 이름을 반환하는 간단한 스크립트가 나와 있습니다. Windows PowerShell을 어느 정도 사용해 보았다면 이 스크립트를 쉽게 이해할 수 있을 것입니다.

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

참고

Windows PowerShell에서 스크립트를 사용하려면 위의 코드를 복사하여 메모장이나 기타 텍스트 편집기에 붙여 넣은 다음 C:\Scripts\SitesAUserCanAccess.ps1과 같이 .ps1 파일 확장명을 사용하여 파일을 저장합니다. 스크립트를 실행하려면 Windows PowerShell을 사용하여 SharePoint Online에 연결한 다음 Windows PowerShell 명령 프롬프트에 .ps1 파일의 경로를 입력하고 Enter 키를 누릅니다.
C:\Scripts\SitesAUserCanAccess.ps1

모든 사이트 및 각 사이트의 관리자 목록이 필요한 경우 다음 명령 하나만 사용하면 원하는 정보를 쉽게 반환할 수 있습니다.

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

이 경우 반환되는 결과는 다음과 비슷합니다.

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

출력이 깔끔하지는 않지만 원하는 정보는 모두 제공됩니다. Windows PowerShell을 계속 사용하면서 더 익숙해지면 이러한 출력을 원하는 방식으로 자유롭게 사용자 지정할 수 있게 될 것입니다.

Windows PowerShell이 유용한 가장 큰 이유는 정보를 검색할 수 있을 뿐 아니라 구성할 수도 있기 때문입니다. 사이트가 수백 개이며 각 사이트에 대해 Ken Myer를 관리자로 지정해야 하는 경우 다음 명령만 실행하면 됩니다.

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

이처럼 작업을 매우 간단하게 완료할 수 있습니다.

SharePoint Online 사이트 그룹 작업

이 문서에서는 사이트 그룹에 대해 살펴봅니다. 실제로 Windows PowerShell을 사용하면 SharePoint 사이트 그룹을 효율적으로 관리할 수 있습니다. SharePoint Online 관리 센터에서도 사이트 그룹 관리를 위한 몇 가지 간편한 기능이 제공되기는 하지만 이러한 방법을 사용하면 작업이 다소 번거로워질 수 있습니다. https://litwareinc.com/sites/finance 사이트의 그룹 및 그룹 구성원을 확인하려는 경우를 예로 들어 보겠습니다. 관리 센터에서 다음 단계를 수행해야 합니다.

  1. SharePoint Online 관리 센터의 사이트 모음 탭에서 사이트의 이름을 클릭합니다.

  2. 사이트 모음 속성 대화 상자에서 https://litwareinc.com/sites/finance를 여는 링크를 클릭합니다.

  3. 사이트 페이지 오른쪽 위에 있는 설정 아이콘을 클릭하고 사이트 설정을 클릭합니다.

    SharePoint Online 사이트 설정 옵션

  4. 사이트 설정 페이지에서 사이트 및 사용 권한을 클릭합니다.

확인하려는 다음 사이트에 대해 프로세스를 반복합니다.

그러나 지정된 사이트의 모든 그룹 및 해당 사용자의 목록을 확인하려는 경우 다른 방법을 사용할 수 있습니다. 그 중 하나는 다음과 같습니다.

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

위의 스크립트는 지금까지 살펴본 대부분의 명령보다 약간 더 복잡하고 다소 번거롭기도 합니다. 코드를 복사하여 메모장이나 기타 텍스트 편집기에 붙여 넣고 파일을 C:\Scripts\SiteGroupsAndUsers.ps1과 같이 .ps1 파일 확장명으로 저장한 다음 Windows PowerShell 내에서 스크립트를 실행해야 하기 때문입니다. 그러나 스크립트를 실행하려면 다음과 같은 .ps1 파일의 전체 경로만 입력하면 되므로 약간의번거로움만 감수하면 됩니다.

C:\Scripts\SiteGroupsAndUsers.ps1

이처럼 최소한의 정보만 입력하면 다음과 같은 결과가 반환됩니다.

사이트 그룹 및 사이트 그룹 구성원

보시다시피 https://litwareinc.com/sites/finance 사이트에 대해 작성된 모든 그룹과 해당 그룹에 할당된 모든 사용자가 표시됩니다. 위의 화면에서는 그룹과 해당 구성원 목록을 쉽게 구분할 수 있도록 그룹 이름이 노란색으로 표시되어 있습니다.

그리고 다음 스크립트를 사용하면 더욱 편리합니다.

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

이 스크립트는 모든 SharePoint Online 사이트의 모든 그룹과 모든 그룹 구성원 자격 목록을 반환합니다. 직접 실행해 보시기 바랍니다.

이처럼 Windows PowerShell을 사용하면 SharePoint Online을 매우 효율적으로 관리할 수 있습니다.

ForEach-Object cmdlet 관련 참고 사항

SharePoint Online 사용자 작업 섹션에서는 사이트 정보를 다음과 같이 ForEach-Object cmdlet에 파이핑했습니다.

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

이와 같이 파이핑하는 이유는 Azure Active Directory cmdlet으로 작업할 때 Get-MsolUser cmdlet에서 Set-MsolUser cmdlet으로 정보를 직접 파이핑했기 때문입니다.

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

반면 다음 SharePoint Online 명령에서는 이러한 파이핑을 수행하지 않았습니다.

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

그 이유는 해당 파이핑이 작동하지 않기 때문입니다. Set-SPOUser cmdlet의 경우에는 명시적으로 Site 매개 변수와 사이트 이름을 차례로 포함해야 합니다. 예를 들면 다음과 같습니다.

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

즉, Set-SPOUser에 정보를 직접 파이핑하는 경우 cmdlet은 모든 사이트를 가져오지 않으며 Ken Myer를 각 사이트의 관리자로 지정하지 않습니다. 대신 사이트 URL을 입력하라는 메시지가 표시됩니다.

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: 

따라서 사이트 정보를 ForEach-Object cmdlet에 대신 파이핑해야 합니다. ForEach-Object는 전달된 각 항목(각 사이트)을 가져온 다음 해당 항목에 대해 지정된 작업을 수행합니다. 여기서는 Set-SPOUser cmdlet을 사용하여 Ken Myer를 해당 사이트의 관리자로 지정하도록 지시합니다.

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

$_.Url 구문은 사이트 URL을 나타냅니다. **$_.**는 다른 cmdlet이 ForEach-Object cmdlet에 파이핑한 정보를 사용 중임을 나타냅니다.

혼동을 방지하기 위해 간단한 예를 살펴보겠습니다. 다음 URL의 사이트 3개가 있다고 가정하겠습니다.

이 정보를 ForEach-Object에 파이핑하면 cmdlet이 컬렉션의 첫 번째 항목(site1)을 가져온 다음 해당 사이트의 URL을 사용하여 Set-SPOUser cmdlet을 실행합니다. 즉, 다음 명령이 실행됩니다.

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

명령 실행이 완료되면 두 번째 사이트(site2)를 가져와 해당 사이트에 대해 Set-SPOUser를 실행합니다.

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

보시다시피 이제는 컬렉션의 두 번째 사이트 URL이 사용됩니다. 이처럼 ForEach-Object는 컬렉션의 모든 사이트에 대해 실행되어 Ken Myer를 각 사이트의 관리자로 지정합니다.

자세한 내용은 이 문서를 참조하세요. 물론 ForEach-Object는 실제로는 알아두면 편리한 cmdlet입니다. 예를 들어 cmdlet 간에 정보를 파이핑할 때 다음과 같은 오류 메시지가 표시되는 경우가 있습니다.

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.

이러한 오류는 일부 cmdlet이 파이프라인된 입력을 수락하지 않았기 때문입니다. 이 문제를 해결하려면 ForEach-Object를 사용합니다.

참고 항목

Windows PowerShell로 Office 365를 관리하는 최선의 방법