ForEach-Object cmdlet 관련 참고 사항

 

마지막으로 수정된 항목: 2014-06-09

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

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개가 있다고 가정하겠습니다.

  • https://litwareinc.sharepoint.com/sites/site1

  • https://litwareinc.sharepoint.com/sites/site2

  • https://litwareinc.sharepoint.com/sites/site3

이 정보를 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을 사용하여 Lync Online 관리

 
표시: