GMO DevelopersDay
GMO DevelopersDay
2024.11.29Fri - 11.30Sat YouTube Live
イベント開催まであと6

Microsoft365 Tip SharePointファイル操作方法あれこれ

オフィスワーク モダナイズ への道

Microsoft365の中では、SharePointはクラウドストレージとしての役割が大きくなっています。通常、SharePointに保存されたファイルはブラウザやTeamsから操作することが多いと思いますが、Microsoft365では様々なアプローチ方法が提供されています。今回はSharePointに保存されたファイルの操作方法あれこれを紹介します。

Teams

 まずは基本のTeamsから。こちらは説明するまでもないと思います。TeamsのファイルはSharePointのドキュメントフォルダに保存されているので、Teamsからの操作は直接SharePointのファイルを操作していることになります。もちろん表示だけでなく、ダウンロード、コピー、削除など操作可能です。

右上の「i」マークを選択するとファイルの操作履歴も参照可能です。

SharePoint

 TeamsからSharePointを開いてみましょう。メニューから「SharePointで開く」を選択します。

ほぼTeamsと同じように表示されています。SharePointから参照した場合、「ごみ箱」が左メニューで確認できます。ここでファイルを削除してみます。TeamsやSharePointで削除したファイルやフォルダは、一旦ごみ箱に移動しています。

もちろん、削除してごみ箱内に移動したファイルは復元することができます。さらに、ごみ箱から削除すると、「第2段階のごみ箱」へ移動する仕様となっています。

TeamsやSharePointからファイルを完全に削除するためには、この第2段階のごみ箱から削除する必要があります。

ファイルエクスプローラ

 TeamsやSharePointから「同期」を実行するとWindowsのファイルエクスプローラからSharePoint上のファイル操作が可能となります。

ファイルエクスプローラからの操作が一番使いやすいですね。

Power Automate

 Power Automateからは、ターゲットとするサイトやドキュメントフォルダを選択するだけでフォルダ内のファイル情報を取得したり、ファイル操作が出来るようになっています。

さらに、「ファイルが作成されたとき」などをトリガーしての操作はPower Automateならではの機能となります。

こちらのフローではファイル一覧を取得しています。

Power Automate for Desktop

 現在プレビューの機能となりますが、Power Automate for DesktopにもSharePoint関連のアクションが利用できるようになっています。

ファイルのコピーを実行してみました。

簡単にファイルがコピーできました。

PnP PowerShell

 PowerShellを利用してのSharePoint上のファイルへのアプローチ方法はいくつか提供されています。まずは「PnP PowerShell」を利用しての方法です。

参考:PnP PowerShell の概要 | Microsoft Learnhttps://learn.microsoft.com/ja-jp/powershell/sharepoint/sharepoint-pnp/sharepoint-pnp-cmdlets

まずは事前準備と接続です。

Install-Module SharePointPnPPowerShellOnline
Import-Module SharePointPnPPowerShellOnline
$Credential = Get-Credential
$SiteUrl = "https://hj545rkw.sharepoint.com/sites/SPFile"
Connect-PnPOnline -Url $SiteUrl -Credentials $Credential

フォルダ内のファイル一覧を取得します。

Get-PnPFolderItem -FolderSiteRelativeUrl "Shared Documents/General"

Name        Type Items/Size Last Modified     
----        ---- ---------- -------------     
Book.xlsx   File      11547 2023/03/28 0:04:07
ドキュメント.docx File          0 2023/03/28 0:04:16

ファイルをダウンロードします。

$ServerRelativeUrl = (Get-PnPFolderItem -FolderSiteRelativeUrl "Shared Documents/General" | Where {$_.Name -eq "Book.xlsx"}).ServerRelativeUrl 
Get-PnPFile -Url $ServerRelativeUrl -Path c:\ -FileName Book.xlsx -AsFile

ファイルをごみ箱に移動します。

$FileId = (Get-PnPListItem -List "Shared Documents/General" | Where {$_.Fieldvalues["FileLeafRef"] -eq "Book.xlsx"}).Id
Move-PnPListItemToRecycleBin -List "Shared Documents/General" -Identity $FileId -Force

ごみ箱からファイルを復元します。

Get-PnPRecycleBinItem | Where {$_.Title  -eq "Book.xlsx"} | Restore-PnPRecycleBinItem -Force

ごみ箱を空にします。

Clear-PnPRecycleBinItem -Force

Microsoft Graph

 Microsoft365のAPIであるMicrosoft GraphでもPowerShellでファイルの操作が可能です。

参考:Microsoft.Graph.Files Module | Microsoft Learn
(https://learn.microsoft.com/ja-jp/powershell/module/microsoft.graph.files/?view=graph-powershell-1.0)事前準備と接続です。

Import-Module Microsoft.Graph.Files
Import-Module Microsoft.Graph.Sites
Connect-MgGraph

ターゲットとなるSharePointのサイトを特定してドライブIDを取得します。

$SiteId = (Get-MgSite -Search "SPFile").Id
$DriveId = (Get-MgSiteDefaultDrive -SiteId $SiteId).Id

サイトのドキュメントフォルダ内のアイテム一覧を取得します。

Get-MgDriveItemChild -DriveId $DriveId -DriveItemId "root"

特定のフォルダ(General)IDを取得してフォルダ内のファイル一覧を取得します。

$DriveItemId = (Get-MgDriveItemChild -DriveId $DriveId -DriveItemId "root" | Where {$_.Name -eq 'General'}).Id
Get-MgDriveItemChild -DriveId $DriveId -DriveItemId $DriveItemId | Select Name

Name       
----       
Book.xlsx  
ドキュメント.docx

ファイルをダウンロードします。

$FileName = "Book.xlsx"
$HashTable = (Get-MgDriveItemChild -DriveId $DriveId -DriveItemId $DriveItemId | Where {$_.Name -eq $FileName}).AdditionalProperties
$DownloadUrl = $HashTable["@microsoft.graph.downloadUrl"]
Invoke-WebRequest -Uri $DownloadUrl -OutFile ”C:\$FileName”

ファイルを削除します。

$IteamId = (Get-MgDriveItemChild -DriveId $DriveId -DriveItemId $DriveItemId | Where {$_.Name -eq $FileName}).Id
Remove-MgDriveItem -DriveId $DriveId -DriveItemId $IteamId

SharePoint CSOM

SharePointクライアントオブジェクトモデル (CSOM)を利用してもSharePointのファイル操作が可能です。

参考:SharePoint のクライアント ライブラリ コードを使用して基本的な操作を完了する | Microsoft Learnhttps://learn.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/complete-basic-operations-using-sharepoint-client-library-code

事前準備として「Microsoft.SharepointOnline.CSOM」をダウンロード(https://learn.microsoft.com/ja-jp/archive/blogs/sharepoint_support/tips-for-csom-on-powershell)してインストールをしておきます。

参考:PowerShell で SharePoint CSOM を使用する際の Tips | Microsoft Learn

サイトにログインします

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") > $null

$UserName = "アカウント"
$Password = ConvertTo-SecureString 'パスワード -AsPlainText -Force
$SiteURL = "https://hj545rkw.sharepoint.com/sites/SPFile/"
$Credential = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $Password)
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Context.Credentials = $Credential
$objWeb = $Context.Web
$Context.Load($objWeb)
$Context.ExecuteQuery()

サイトのドキュメントフォルダ内のアイテム一覧を取得します。

$ObjList = $Context.Web.Lists.GetByTitle("ドキュメント")
$CamlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery
$CamlQuery.ViewXml = "<View/>"
$ListItems = $ObjList.GetItems($CamlQuery)
$Context.Load($ListItems)
$Context.ExecuteQuery()
$listItems | Where {$_.FileSystemObjectType -eq "File"} | % {
    $_["FileLeafRef"]
}

特定のフォルダ(General)内のファイル一覧を取得します。

$ObjList = $Context.Web.Lists.GetByTitle("ドキュメント")

$Folder = $objWeb.GetFolderByServerRelativeUrl("https://hj545rkw.sharepoint.com/sites/SPFile/Shared%20Documents/General")
$Context.Load($Folder)
$Context.ExecuteQuery()

$CamlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery
$CamlQuery.ViewXml = "<View/>"
$CamlQuery.ViewXml = 
@"
<View Scope='Recursive'>
<Query>
</Query>
</View>
"@
$CamlQuery.FolderServerRelativeUrl = $Folder.ServerRelativeUrl

$ListItems = $ObjList.GetItems($CamlQuery)
$Context.Load($ListItems)
$Context.ExecuteQuery()
$ListItems = $ObjList.GetItems($CamlQuery)
$Context.Load($ListItems)
$Context.ExecuteQuery()
$listItems | % {
    $_["FileLeafRef"]
}

ファイルをダウンロードします。

$RelativeUrl = "/Sites/SPFile/Shared%20Documents/Book.xlsx"
$FilePath = "C:\Book.xlsx"
$FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Context, $RelativeUrl)
$WriteStream = [System.IO.File]::Open($FilePath,[System.IO.FileMode]::Create)
$FileInfo.Stream.CopyTo($WriteStream)
$WriteStream.Close()

ファイルをごみ箱に移動

$objFile = $context.Web.GetFileByServerRelativeUrl("/sites/SPFile/Shared%20Documents/Book1.xlsx")
$Context.Load($objFile)
$Context.ExecuteQuery()
$objFile.Recycle()
$Context.ExecuteQuery()

第二のごみ箱に移動

$objWeb.RecycleBin.MoveAllToSecondStage()
$Context.ExecuteQuery()

ごみ箱からファイルを復元する

$Site = $Context.Site
$RecycleBinCollection = $Site.RecycleBin
$Context.Load($Site)
$Context.Load($RecycleBinCollection)
$Context.ExecuteQuery()
$Id = ($RecycleBinCollection | Where {$_.Title -eq "Book1.xlsx"})[0].Id
$RecycleBinItem = $Context.Web.RecycleBin.GetById($Id)
$RecycleBinItem.Restore()
$Context.ExecuteQuery()

ごみ箱を空にする

$Site.RecycleBin.DeleteAll()
$Context.ExecuteQuery()

ファイルを完全に削除する

$objFile = $objWeb.GetFolderByServerRelativeUrl("/sites/SPFile/Shared%20Documents/Book1.xlsx")
$objFile.DeleteObject()
$Context.ExecuteQuery()

 以上、SharePointに保存されたファイルの操作について様々な方法を紹介しました。ブラウザを利用しての操作はもちろん、Power AutomateやPowerShellなどシステムマチックにアプローチできる方法など、利用シーンによって柔軟に使い分けられるようになっています。バックアップや、ファイルの使用容量のチェックなど使いどころはいくらでもありそうです。

著書の紹介欄

Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!

できるPRO Windows Server 2016 Hyper-V

◇Hyper-Vのさまざまな機能がわかる ◇インストールからの操作手順を解説 ◇チェックポイントやレプリカも活用できる Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。 本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

ブログの著者欄

樋口 勝一

GMOインターネットグループ株式会社

1999年6月GMOインターネットグループ株式会社に入社。Windows Serverをプラットフォームとしたサービス開発から運用・保守まで幅広く担当。講演登壇や出版、ネット記事連載などでマイクロソフト社と強い信頼関係を構築。「マイクロソフトMVPアワード」を15度受賞し、インターネットソリューションのスペシャリストとして活躍。

採用情報

関連記事

KEYWORD

採用情報

SNS FOLLOW

GMOインターネットグループのSNSをフォローして最新情報をチェック