web-dev-qa-db-ja.com

ネットワークドライブからのPowershell Copy-Itemのヘルプが必要

次のコマンドを使用して、リモートマシンから別のリモートマシンにCopy-Itemを使用しようとしています。

Copy-Item -Path "\\machine1\abc\123\log 1.Zip" -Destination "\\machine2\\c$\Logs\"

常にエラー「Cannot find Path "\\machine1\abc\123\log 1.Zip」が発生します

そのパスにアクセスして、そこから手動でコピーできます。

PowerCLIを管理者として開き、このスクリプトを実行しています...私は完全にここで立ち往生しており、それを解決する方法がわかりません。

18
Geeth

これはPowerShell v3でそのまま機能するようです。私はテストするのに便利なv2を持っていませんが、私が知っている2つのオプションがあり、それらは動作するはずです。最初に、PSDriveをマップできます。

New-PSDrive -Name source -PSProvider FileSystem -Root \\machine1\abc\123 | Out-Null
New-PSDrive -Name target -PSProvider FileSystem -Root \\machine2\c$\Logs | Out-Null
Copy-Item -Path source:\log_1.Zip -Destination target:
Remove-PSDrive source
Remove-PSDrive target

これがあなたがたくさんやろうとしていることなら、これを関数にラップすることもできます:

Function Copy-ItemUNC($SourcePath, $TargetPath, $FileName)
{
   New-PSDrive -Name source -PSProvider FileSystem -Root $SourcePath | Out-Null
   New-PSDrive -Name target -PSProvider FileSystem -Root $TargetPath | Out-Null
   Copy-Item -Path source:\$FileName -Destination target:
   Remove-PSDrive source
   Remove-PSDrive target
}

または、各パスでプロバイダーを明示的に指定できます。

Copy-Item -Path "Microsoft.PowerShell.Core\FileSystem::\\machine1\abc\123\log 1.Zip" -Destination "Microsoft.PowerShell.Core\FileSystem::\\machine2\\c$\Logs\"
23
KevinD

これは私にとって一日中機能します:

$strLFpath = "\\compname\e$\folder"
$strLFpath2 = "\\Remotecomputer\networkshare\remotefolder"  #this is a second option that also will work
$StrRLPath = "E:\localfolder"  
Copy-Item -Path "$StrRLPath\*" -Destination "$strLFpath" -Recurse -force -Verbose

注意事項:Copy-itemは、最後のアイテムをオブジェクトとして定義します。\*が必要なフォルダの内容をコピーするには

フォルダー自体を新しい場所にコピーする場合は、コンテンツを宣言する必要はありません。

2
Kelly Davis