メインコンテンツにスキップ

PowerShell で foreach ループ ステートメントと CSV ファイルを使用して複数のコピー先との間でコピーする

注: PowerShell 統合には、ShareGate Migrate の Pro または Enterprise サブスクリプションが必要です。Essentials プランでは利用できません。

foreach ループ ステートメントを使用すると、CSV ファイルに記載された複数の場所との間でコピーできます。

foreach ループ ステートメントは次のような形式です。

foreach ($row in $table) { commands to be repeated for each row in your CSV }

foreach ステートメントの中かっこの間に追加した行は、CSV ファイルの各行に対して繰り返し実行されます。これにより、サイト URL、リスト名、リスト ビューなど、移行の流れを決定するパラメーターのリストを設定できます。

注: 2026 年 1 月末より、Microsoft は IDCRL Cookie の廃止を開始しました。これにより、ほとんどの Microsoft 365 テナントでは、パラメーター -Browser-ModernAuth を使用する Browser および Modern authentication の認証方法のみが機能するようになります。この変更の詳細については、Microsoft 365 の「その他のユーザー」認証に関する重要な変更を参照してください。

Copy-Content を使用して複数のサイトにページをコピーする

この例では、copy-content コマンドを使用して、ソースの Site Pages ライブラリからホーム ページを他の多数の Site Pages ライブラリにコピーします。foreach ループの各パスで変化する変数は、コピー先サイトのみです。

移行用の CSV ガイドを作成する

  1. 新しい Excel ドキュメントを作成します。

  2. 1 番目の列に DestSite という名前を付けます。

  3. ホーム ページのコピー先となるすべてのサイトの URL を記載します。

  4. ファイルを CSV として保存します。

スクリプトを作成する

次のスクリプトを、任意の PowerShell アプリケーションにコピーして貼り付けます。

Import-Module Sharegate

# Define CSV file path
$csvFile = "C:\CSVfile.csv"

# Import CSV data into a table
$table = Import-Csv $csvFile -Delimiter ","

# Connect to the source site and get the source list
$srcSite = Connect-Site -Url "https://sourcetenant.sharepoint.com/sites/sitecollection" -Browser
$srcList = Get-List -Site $srcSite -Name "Site Pages"

# Define the destination connection
$dstSiteConnection = Connect-Site -Url "https://destinationtenantname-admin.sharepoint.com/" -Browser

# Loop through each row in the CSV
foreach ($row in $table) {
# Clear previous variables for the destination site and list
Clear-Variable -Name dstSite -ErrorAction SilentlyContinue
Clear-Variable -Name dstList -ErrorAction SilentlyContinue

# Connect to the destination site and get the destination list
$dstSite = Connect-Site -Url $row.DestSite -UseCredentialsFrom $dstSiteConnection
$dstList = Get-List -Name "Site Pages" -Site $dstSite

# Copy content from source list to destination list
Copy-Content -SourceList $srcList -DestinationList $dstList -SourceFilePath "Home.aspx"
}

スクリプトを実際の環境に合わせて調整します。以下にいくつかのガイドラインを示します。

  • $csvFile: 先ほど保存した CSV ファイルを指すようにパスを調整します。

  • $table: 区切り記号は、CSV が列項目を区切るために使用する記号です。スクリプトがファイルと同じ区切り記号を使用していることを確認してください (これは、CSV をメモ帳で開くと簡単に確認できます)。

  • Connect-site: この例では、-ModernAuth ではなく -Browser を使用して Microsoft 365 に接続しています。-ModernAuth にはクラシック ページやクラシック Web パーツに関する制限があるためです。認証方法を変更するには、Connect Siteの記事を参照してください。

  • $srcSite、$srcList: ソース サイトとソース リストの変数は foreach ループの外側にあります。これは、foreach ループの各パスで同じ Site Pages ライブラリから Home.aspx ページを取得するためです。

  • $dstSiteConnection: URL を SharePoint 管理センターのアドレスに変更します。

  • Set-Variable と Clear-Variable: これらのコマンドは、接続の失敗によってデータが誤ったコピー先に送信されてしまう問題を防ぐのに役立ちます。

  • foreach: CSV ファイルの各行に対して、中かっこの間のコマンドをループ実行します。この場合、Sitecollection1 に対して Home.aspx ファイルのコピーを実行し、次に Sitecollection2 に対して同じファイル移行を実行する、という流れになります。

  • Copy-Content: -SourceFilePath は、コピーするファイルを指定するために使用します。この場合は Home.aspx で、Site Pages ライブラリのルートにある必要があります。フォルダー内の別のファイルをコピーしたい場合は、ライブラリからの相対パスを指定する必要があります (folder/custompage.aspx)。

  • -UseCredentialsFrom: このスクリプトは、-UseCredentialsFrom パラメーターを指定した Browser 認証を使用して、単一の接続を再利用します。このスクリプトを開始すると、Microsoft 365 の資格情報の入力を求められます。詳細の確認や変更方法については、Connect-Siteブラウザーおよびモダン接続方法で資格情報の再入力を回避するを参照してください。

スクリプトを適切に調整してテストしたら、実行します。

スクリプトを変更する

foreach ループ ステートメントを使用してスクリプトに変数を追加する例として、同じスクリプトを使用してサイトごとに異なるページをコピーする方法を次に示します。

  1. CSV に新しい SrcPage 列を追加します。

  2. リスト内の各サイトについて、ソースの Site Pages ライブラリから移行したいページの名前を入力します。

  3. 変更した CSV ファイルを保存します。

  4. Copy-Content の行にある "Home.aspx"$row.SrcPage に置き換えて、スクリプトを変更します。

    Copy-Content -SourceList $srcList -DestinationList $dstList -SourceFilePath $row.SrcPage
  5. スクリプトを実行すると、指定したページがすべてのサイトのコピー先 Site Pages ライブラリに反映されます。

SharePoint ファームから Microsoft 365 テナントに複数のサイト コレクションをマージする

この例では、copy-site コマンドを使用して、SharePoint ファームのサイト コレクションを Microsoft 365 の新しいサイト コレクションにマージします。foreach ループの各パスで変化する変数は、ソースとコピー先のサイトの URL です。

移行用の CSV ガイドを作成する

  1. 新しい Excel ドキュメントを作成します。

  2. 1 番目の列に SourceSite という名前を付けます。

  3. 2 番目の列に DestSite という名前を付けます。

  4. 適切なソースとコピー先のサイト コレクションの URL を記載します。

    mceclip1.png

    : サイト コレクション レポートを使用すると、サイト コレクションの一覧を取得できます。

  5. ファイルを CSV として保存します。

スクリプトを作成する

次のスクリプトを、任意の PowerShell アプリケーションにコピーして貼り付けます。

Import-Module Sharegate

# Define CSV file path
$csvFile = "C:\CSVfile.csv"

# Import CSV data into a table
$table = Import-Csv $csvFile -Delimiter ","

# Source credentials
$srcUsername = "sourceusername"
$srcPassword = ConvertTo-SecureString 'sourcepassword' -AsPlainText -Force

# Destination connection
$dstSiteConnection = Connect-Site -Url "https://destinationtenantname-admin.sharepoint.com" -ModernAuth

# Set variables for source and destination sites
Set-Variable -Name srcSite, dstSite

# Loop through each row in the CSV
foreach ($row in $table) {
# Clear previous variables for source and destination sites
Clear-Variable -Name srcSite -ErrorAction SilentlyContinue
Clear-Variable -Name dstSite -ErrorAction SilentlyContinue

# Connect to the source and destination sites
$srcSite = Connect-Site -Url $row.SourceSite -Username $srcUsername -Password $srcPassword
$dstSite = Connect-Site -Url $row.DestSite -UseCredentialsFrom $dstSiteConnection

# Copy site from source to destination
Copy-Site -Site $srcSite -DestinationSite $dstSite -Merge -Subsites
}

スクリプトを実際の環境に合わせて調整します。以下にいくつかのガイドラインを示します。

  • $csvFile: 先ほど保存した CSV ファイルを指すようにパスを調整します。

  • $table: 区切り記号は、CSV が列項目を区切るために使用する記号です。スクリプトがファイルと同じ区切り記号を使用していることを確認してください (これは、CSV をメモ帳で開くと簡単に確認できます)。

  • $srcUsername、$srcPassword: "sourceusername" と 'sourcepassword' を、SharePoint の資格情報に置き換えます。

  • $dstSiteConnection: URL を、コピー先テナントの SharePoint 管理センターのアドレスに置き換えます。

  • Connect-site: SharePoint サイトに接続するためのコマンドです。認証方法を変更する必要がある場合は、Connect Siteを参照してください。

  • Set-Variable と Clear-Variable: これらのコマンドは、接続の失敗によってデータが誤ったコピー先に送信されてしまう問題を防ぐのに役立ちます。

  • foreach: CSV ファイルの各行に対して、中かっこの間のコマンドをループ実行します。この場合、ソースの sitecollection1 をコピー先の sitecollection1 にマージし、次に sitecollection2sitecollection2 に、という流れでマージします。

  • -UseCredentialsFrom: このスクリプトは、-UseCredentialsFrom パラメーターを指定した Modern authentication を使用して、単一の接続を再利用します。このスクリプトを開始すると、Microsoft 365 の資格情報の入力を求められます。テナントで MFA が強制されていない場合は、無人スケジュール実行のためにユーザー名とパスワードを使用するようにスクリプトを設定できます。Modern authentication にはいくつかのコピーの制限事項があります。詳細については、Connect-Siteブラウザーおよびモダン接続方法で資格情報の再入力を回避するを参照してください。

  • Copy-Site: -Merge-Subsites パラメーターを指定しない場合、スクリプトはソースのサイト コレクションをコピー先のサイト コレクションのサブサイトとしてコピーし、ソース自体のサブサイトは含まれません。

スクリプトを適切に調整してテストしたら、実行します。

考慮事項

移行レポート

移行レポートは自動的に生成され、Tasks で確認できます。スクリプト内で Export-Report を使用してレポートをエクスポートすることもできます。

スケジュール設定

移行をスケジュール設定することで、業務時間外に実行し、パフォーマンスを最適化できます。

増分移行

PowerShell では既定で Copy & Replace が使用されます。スクリプトを増分移行用に調整する方法については、PowerShell を使用した増分更新の記事を参照してください。

パフォーマンス

移行するデータが数百ギガバイトに及ぶ場合は、複数の CSV ファイルを作成し、より小さなバッチで移行を実行することをお勧めします。

この記事はAIによって翻訳されています。ご不明な点がある場合は、英語の原文をご確認ください。

こちらの回答で解決しましたか?