通过networking复制batch file和vbs脚本文件的文件和文件夹

我正在把我的服务器从2003年迁移到2008年,并试图编写一个PowerShell脚本,将所有文件从vbs和bat从2003服务器复制到2008年服务器,并保持文件夹结构的机智,因为这是至关重要的该程序运行。

这是我到目前为止。 它工作挺好。 它将在新服务器上创buildD:\folder ,但不会复制任何内容。 它还创build了具有所有vbs和bat文件的名称以及path的log.txt

 New-PSDrive -name source -PSProvider FileSystem -root "\\servername\d$\folder" |Out-Null $targetdirectory = "d:\folder" $sourcedirectory = "\\servername\d$\folder" Get-ChildItem -Path $sourcedirectory -filter "*.bat","*.vbs" -Recurse| Out-File D:\log.txt if ( -Not (Test-Path $targetdirectory)) {New-Item -path $targetdirectory -Type Directory | out-null } Copy-Item -Path $sourcedirectory -filter "*.bat","*.vbs" -Destination $targetdirectory -recurse -force remove-psdrive -name source 

不工作的部分是这个

 Copy-Item -Path $sourcedirectory -filter "*.bat","*.vbs" -Destination $targetdirectory -recurse -force 

我只是改变了

 Get-ChildItem -Path $sourcedirectory -Include "*.bat","*.vbs" -Recurse| Out-File D:\log.txt if ( -Not (Test-Path $targetdirectory)) {New-Item -path $targetdirectory -Type Directory | out-null } Copy-Item -Path $sourcedirectory -Include *.bat, *.vbs -Destination $targetdirectory -recurse -force 

使用robocopy会更容易。

 robocopy source dest *.vbs *.bat /s 

从另一个答案阅读评论它看起来像你有问题筛选某些文件与Copy-Item是的? 在大多数情况下,您会看到使用Get-ChildItem将您想要的文件和管道隔离到Copy-Item 。 你几乎已经这样做了。

 $files = Get-ChildItem -Path $sourcedirectory -filter "*.bat","*.vbs" -Recurse $files | Out-File D:\log.txt $files | Copy-Item -Destination $targetdirectory -Force 

$files包含你想要隔离哪些文件(你可以将它管入到Where-Object来获得一定大小的文件,如果需要的话)。 获取文件并将结果输出到外部txt文件(使用Export-CSV可以使对象FYI的输出更清晰)。 然后我们简单地将它管入Copy-Item 。 无需再次尝试文件。