我正在将我的服务器从2003年迁移到2008年并尝试编写一个powershell脚本,该脚本将所有vbs和bat文件从2003服务器复制到2008服务器,同时保持文件夹结构的完整性。对于该计划的运行至关重要。
这是我到目前为止所拥有的。它有点工作。它将在新服务器上创建D:\folder
,但不会复制任何内容。它还会创建log.txt
,其中包含vbs和bat文件的所有名称以及路径。
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
答案 0 :(得分:1)
使用robocopy会更容易。
robocopy source dest *.vbs *.bat /s
答案 1 :(得分:0)
从另一个答案中读取评论,看起来您在过滤某些文件时遇到问题,可以使用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
。无需再次尝试归档。