次の方法で共有


Copy-Item

項目をある場所から別の場所にコピーします。

構文

Copy-Item
    [-Path] <String[]>
    [[-Destination] <String>]
    [-Container]
    [-Force]
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <PSCredential>]
    [-WhatIf]
    [-Confirm]
    [-FromSession <PSSession>]
    [-ToSession <PSSession>]
    [<CommonParameters>]
Copy-Item
    -LiteralPath <String[]>
    [[-Destination] <String>]
    [-Container]
    [-Force]
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <PSCredential>]
    [-WhatIf]
    [-Confirm]
    [-FromSession <PSSession>]
    [-ToSession <PSSession>]
    [<CommonParameters>]
Copy-Item
    [-Path] <string[]>
    [[-Destination] <string>]
    [-Container]
    [-Force]
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <pscredential>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Copy-Item
    [[-Destination] <string>]
    -LiteralPath <string[]>
    [-Container]
    [-Force]
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <pscredential>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

説明

Copy-Item コマンドレットは、ある場所から同じ名前空間内の別の場所に項目をコピーします。 たとえば、ファイルをフォルダーにコピーすることはできますが、証明書ドライブにファイルをコピーすることはできません。

このコマンドレットは、コピーする項目を切り取ったり削除したりしません。 コマンドレットがコピーできる特定の項目は、アイテムを公開する PowerShell プロバイダーによって異なります。 たとえば、ファイル システム ドライブ内のファイルとディレクトリ、レジストリ ドライブ内のレジストリ キーとエントリをコピーできます。

このコマンドレットは、同じコマンドで項目のコピーと名前の変更を行うことができます。 項目の名前を変更するには、 Destination パラメーターの値に新しい名前を入力します。 アイテムの名前を変更し、コピーしない場合は、 Rename-Item コマンドレットを使用します。

例 1: 指定したディレクトリにファイルをコピーする

次の使用例は、 mar1604.log.txt ファイルを C:\Presentation ディレクトリにコピーします。 元のファイルは削除されません。

Copy-Item "C:\Wabash\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"

例 2: 既存のディレクトリにディレクトリの内容をコピーする

次の使用例は、 C:\Logfiles ディレクトリの内容を既存の C:\Drawings ディレクトリにコピーします。 Logfiles ディレクトリはコピーされません。

Logfiles ディレクトリにサブディレクトリ内のファイルがある場合、それらのサブディレクトリはファイル ツリーはそのままコピーされます。 既定では、 Container パラメーターは True に設定され、ディレクトリ構造が保持されます。

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse

Note

パス C:\Drawings が存在しない場合、コマンドレットは、 Logfiles フォルダーのすべてのファイルを 1 つのファイル C:\Drawingsにコピーします。

例 3: ディレクトリと内容を新しいディレクトリにコピーする

次の使用例は、 C:\Logfiles ソース ディレクトリの内容をコピーし、新しいコピー先ディレクトリを作成します。 \Logs新しい宛先ディレクトリがC:\Drawingsに作成されます。

ソース ディレクトリの名前を含めるには、 Example 2 に示すように、既存のコピー先ディレクトリにコピーします。 または、新しい宛先ディレクトリにソース ディレクトリと同じ名前を付けます。

Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings\Logs" -Recurse

Note

Path\*が含まれている場合、サブディレクトリ ツリーを含むすべてのディレクトリのファイルコンテンツが新しいコピー先ディレクトリにコピーされます。 次に例を示します。

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings\Logs" -Recurse

例 4: 指定したディレクトリにファイルをコピーし、ファイルの名前を変更する

この例では、Copy-Item コマンドレットを使用して、\\Server01\Share ディレクトリから \\Server12\ScriptArchive ディレクトリにGet-Widget.ps1 スクリプトをコピーします。 コピー操作の一環として、このコマンドはアイテム名を Get-Widget.ps1 から Get-Widget.ps1.txt に変更するため、メール メッセージに安全に添付できます。

Copy-Item "\\Server01\Share\Get-Widget.ps1" -Destination "\\Server12\ScriptArchive\Get-Widget.ps1.txt"

例 5: リモート コンピューターにファイルをコピーする

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、D:\Folder001 フォルダーからリモート コンピューター上のC:\Folder001_Copy フォルダーにtest.logをコピーします。 元のファイルは削除されません。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session

例 6: リモート コンピューターにフォルダーをコピーする

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、リモート コンピューター上のC:\Folder002_Copy ディレクトリにD:\Folder002 フォルダーをコピーします。 Recurse スイッチを使用しないと、サブフォルダーまたはファイルはコピーされません。 この操作では、 Folder002_Copy フォルダーがまだ存在しない場合は作成されます。

$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session

例 7: フォルダーの内容全体をリモート コンピューターに再帰的にコピーする

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、D:\Folder003 フォルダーからリモート コンピューター上のC:\Folder003_Copy ディレクトリにコンテンツ全体をコピーします。 サブフォルダーは、ファイル ツリーはそのままコピーされます。 この操作では、 Folder003_Copy フォルダーがまだ存在しない場合は作成されます。

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder003\" -Destination "C:\Folder003_Copy\" -ToSession $Session -Recurse

例 8: リモート コンピューターにファイルをコピーし、ファイルの名前を変更する

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、D:\Folder004 フォルダーからリモート コンピューター上のC:\Folder004_Copy フォルダーにscriptingexample.ps1をコピーします。 元のファイルは削除されません。

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder004\scriptingexample.ps1" -Destination "C:\Folder004_Copy\scriptingexample_copy.ps1" -ToSession $Session

例 9: リモート ファイルをローカル コンピューターにコピーする

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、リモート C:\MyRemoteData\からローカル D:\MyLocalData フォルダーにtest.logをコピーします。 元のファイルは削除されません。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session

例 10: リモート フォルダーの内容全体をローカル コンピューターにコピーする

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、リモート C:\MyRemoteData\scripts フォルダーからローカル D:\MyLocalData フォルダーにコンテンツ全体をコピーします。 scripts フォルダーにサブフォルダー内のファイルがある場合、それらのサブフォルダーはファイル ツリーはそのままコピーされます。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\" -FromSession $Session

例 11: リモート フォルダーの内容全体をローカル コンピューターに再帰的にコピーする

Contoso\User01の資格情報を使用して Server01 という名前のリモート コンピューターにセッションが作成され、結果が $Session という名前の変数に格納されます。

Copy-Item コマンドレットは、$Session変数に格納されているセッション情報を使用して、リモート C:\MyRemoteData\scripts フォルダーからローカル D:\MyLocalData\scripts フォルダーにコンテンツ全体をコピーします。 Recurse パラメーターが使用されるため、スクリプト フォルダーがまだ存在しない場合は作成されます。 scripts フォルダーにサブフォルダー内のファイルがある場合、それらのサブフォルダーはファイル ツリーはそのままコピーされます。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\scripts" -FromSession $Session -Recurse

例 12: フォルダー ツリーから現在のフォルダーにファイルを再帰的にコピーする

この例では、複数レベルのフォルダー構造から 1 つのフラット フォルダーにファイルをコピーする方法を示します。 最初の 3 つのコマンドは、既存のフォルダー構造と 2 つのファイルの内容 (両方の名前 file3.txt) を示しています。

PS C:\temp\test> (Get-ChildItem C:\temp\tree -Recurse).FullName
C:\temp\tree\subfolder
C:\temp\tree\file1.txt
C:\temp\tree\file2.txt
C:\temp\tree\file3.txt
C:\temp\tree\subfolder\file3.txt
C:\temp\tree\subfolder\file4.txt
C:\temp\tree\subfolder\file5.txt

PS C:\temp\test> Get-Content C:\temp\tree\file3.txt
This is file3.txt in the root folder

PS C:\temp\test> Get-Content C:\temp\tree\subfolder\file3.txt
This is file3.txt in the subfolder

PS C:\temp\test> Copy-Item -Path C:\temp\tree -Filter *.txt -Recurse -Container:$false
PS C:\temp\test> (Get-ChildItem . -Recurse).FullName
C:\temp\test\subfolder
C:\temp\test\file1.txt
C:\temp\test\file2.txt
C:\temp\test\file3.txt
C:\temp\test\file4.txt
C:\temp\test\file5.txt

PS C:\temp\test> Get-Content .\file3.txt
This is file3.txt in the subfolder

Copy-Item コマンドレットには、Container パラメーターが $false に設定されています。 これにより、ソース フォルダーの内容がコピーされますが、フォルダー構造は保持されません。 同じ名前のファイルがコピー先フォルダーに上書きされていることに注意してください。

例 13: フィルターを使用して再帰なしでアイテムをコピーする

この例では、 Include パラメーターを使用してコピーする項目を選択した結果を示します。

この例では、コピーするファイルを含む次のフォルダー構造を使用します。

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

この例では、 Copy-Item は、 PathInclude パラメーターの両方にワイルドカードを使用して呼び出されます。 Path パラメーターにワイルドカードを指定すると、D:\temp\tree\*に一致するすべてのファイルとフォルダーが処理されます。 Include パラメーターは、処理する項目の一覧をフィルター処理し、操作をexで始まるパスのみに制限します。

PS D:\temp\test\out> Copy-Item -Path D:\temp\tree\* -Include ex*
PS D:\temp\test\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt

Include パラメーターは、ex*に一致するすべてのアイテムD:\temp\treeコピーするフォルダーの内容に適用されます。 再帰を行わないと、 D:\temp\out\examples フォルダーはコピーされますが、その内容はコピーされません。

例 14: フィルターを使用して再帰のある項目をコピーする

この例では、 Include パラメーターを使用してコピーする項目を選択した結果を示します。

この例では、コピーするファイルを含む次のフォルダー構造を使用します。

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

この例では、 Copy-Item は、 PathInclude パラメーターの両方にワイルドカードを使用して呼び出されます。 Path パラメーターにワイルドカードを指定すると、D:\temp\tree\*に一致するすべてのファイルとフォルダーが確実に処理されます。 Include パラメーターは、処理する項目の一覧をフィルター処理し、操作をexで始まるパスのみに制限します。

D:\temp\out> Copy-Item -Path D:\temp\tree\* -Include ex* -Recurse
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt
D:\temp\out\examples\subfolder
D:\temp\out\examples\example_1.txt
D:\temp\out\examples\example_2.txt
D:\temp\out\examples\subfolder\test.txt

Include パラメーターは、ex*に一致するすべてのアイテムD:\temp\treeコピーするフォルダーの内容に適用されます。 再帰では、 D:\temp\out\examples フォルダーがすべてのファイルとサブフォルダーと共にコピーされます。 コピーには、インクルード フィルター 一致しないファイル 含まれます。 Copy-Itemを使用する場合、フィルターは、Path パラメーターで指定された最上位レベルにのみ適用されます。 その後、一致する項目に再帰が適用されます。

Note

Exclude パラメーターの動作は、パターンに一致しないパスのみに操作を制限する点を除き、この例で説明した動作と同じです。

例 15: ワイルドカードで指定されたパスから再帰的にコピーするようにファイルを制限する

この例では、ワイルドカード一致パスから別のフォルダーに再帰的にコピーされるファイルを制限する方法を示します。 例 13 は、 Include パラメーターがワイルドカード指定の Path で解決されたパスのみをフィルター処理するため、 Include パラメーターを使用して、フォルダーから再帰的にコピーされるファイルを制限できないことを示しています。 代わりに、 Get-ChildItem を使用して、コピーする項目を検索し、それらの項目を Copy-Itemに渡すことができます。

この例では、コピーするファイルを含む次のフォルダー構造を使用します。

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

ex*で始まるすべての項目をコピーするには、Recurse パラメーターと Filter パラメーターでGet-ChildItemを使用し結果をパイプしてCopy-Itemします。

D:\temp\out> Get-ChildItem -Path D:\temp\tree -Recurse -Filter ex* | Copy-Item
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example_1.txt
D:\temp\out\example_2.txt
D:\temp\out\example.ps1
D:\temp\out\example.txt

Copy-Itemとは異なり、Get-ChildItemFilter パラメーターは、再帰中に検出された項目に適用されます。 これにより、項目を再帰的に検索、フィルター処理、コピーできます。

パラメーター

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

型:SwitchParameter
Aliases:cf
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Container

このコマンドレットがコピー操作中にコンテナー オブジェクトを保持することを示します。 既定では、 Container パラメーターは True に設定されます。

型:SwitchParameter
配置:Named
規定値:True
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Credential

Note

このパラメーターは、PowerShell でインストールされているプロバイダーではサポートされていません。 別のユーザーを偽装したり、このコマンドレットの実行時に資格情報を昇格したりするには、 Invoke-Command を使用します。

型:PSCredential
配置:Named
規定値:Current user
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Destination

新しい場所のパスを指定します。 既定値は、現在のディレクトリです。

コピーする項目の名前を変更するには、 Destination パラメーターの値に新しい名前を指定します。

型:String
配置:1
規定値:Current directory
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Exclude

このコマンドレットの操作を制限するために、 "*.txt"などの 1 つ以上のパス要素またはパターンを指定します。 このパラメーターの値は、最終的な結果ではなく、 Path パラメーターのワイルドカード照合結果に対してフィルター処理されます。 このパラメーターは、 Path が 1 つ以上のワイルドカードで指定されている場合にのみ有効です。 このパラメーターは、 Path パラメーターで解決されたパスのみをフィルター処理するため、 Recurse パラメーターを使用して子フォルダーを繰り返すときに検出された項目はフィルター処理されません。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Filter

Path パラメーターを修飾するフィルターを指定します。 FileSystem プロバイダーは、フィルターの使用をサポートする唯一のインストール済み PowerShell プロバイダーです。 FileSystem フィルター言語の構文は、about_Wildcardsにあります。 フィルターは、取得後に PowerShell でオブジェクトをフィルター処理するのではなく、コマンドレットがオブジェクトを取得するときにプロバイダーによって適用されるため、他のパラメーターよりも効率的です。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Force

このコマンドレットは、読み取り専用ファイルまたはエイリアスをコピーするなど、変更できない項目をコピーすることを示します。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-FromSession

これは、 FileSystem プロバイダーによって使用できる動的パラメーターです。

リモート・ファイルのコピー元の PSSession オブジェクトを指定します。 このパラメーターを使用する場合、 Path パラメーターと LiteralPath パラメーターは、リモート コンピューター上のローカル パスを参照します。

詳細については、「 about_FileSystem_Provider」を参照してください。

型:PSSession
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Include

このコマンドレットの操作を制限するために、 "*.txt"などの 1 つ以上のパス要素またはパターンを指定します。 このパラメーターの値は、最終的な結果ではなく、 Path パラメーターのワイルドカード照合結果に対してフィルター処理されます。 このパラメーターは、 Path が 1 つ以上のワイルドカードで指定されている場合にのみ有効です。 このパラメーターは、 Path パラメーターで解決されたパスのみをフィルター処理するため、 Recurse パラメーターを使用して子フォルダーを繰り返すときに検出された項目はフィルター処理されません。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-LiteralPath

1 つ以上の場所へのパスを指定します。 LiteralPath の値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

詳細については、「 about_Quoting_Rules」を参照してください。

型:String[]
Aliases:PSPath, LP
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-PassThru

作業中のアイテムを表すオブジェクトを返します。 既定では、このコマンドレットは出力を生成しません。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

文字列配列として、コピーする項目へのパスを指定します。 ワイルドカード文字を使用できます。

型:String[]
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:True

-Recurse

このコマンドレットが再帰的コピーを実行することを示します。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ToSession

これは、 FileSystem プロバイダーによって使用できる動的パラメーターです。

リモート・ファイルのコピー先の PSSession オブジェクトを指定します。 このパラメーターを使用すると、 Destination パラメーターはリモート コンピューター上のローカル パスを参照します。

詳細については、「 about_FileSystem_Provider」を参照してください。

型:PSSession
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 コマンドレットは実行されません。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

String

このコマンドレットへのパスを含む文字列をパイプ処理できます。

出力

None

既定では、このコマンドレットは出力を返しません。

PSObject

PassThru パラメーターを使用すると、このコマンドレットは、コピーされたアイテムを表すオブジェクトを返します。

メモ

PowerShell には、 Copy-Itemの次のエイリアスが含まれています。

  • すべてのプラットフォーム:
    • copy
    • cpi
  • Windows:
    • cp

このコマンドレットは、任意のプロバイダーによって公開されるデータを操作するように設計されています。 セッションで使用可能なプロバイダーを一覧表示するには、「 Get-PSProvider」と入力します。 詳細については、「 about_Providers」を参照してください。