从批处理文件切换到PowerShell脚本的原因是为了改进进程的错误检查。用于复制的cmdlet在这方面是否有优势?
如果已存在使用xcopy按文件名单独复制文件的批处理文件,将语法转换为copy-item有什么好处?
使用robocopy,xcopy和copy-item有什么好处(相互比较)?例如,当在可靠的网络上处理大量小文件时,robocopy具有优势。如果要在数百台计算机上同时运行此脚本,将数百个文件复制到每个计算机上会影响决策吗?该决定是否应主要关注文件的权限?
答案 0 :(得分:8)
主要优点是您可以通过管道而不是字符串或文件规范将对象发送到Copy-Item
。所以你可以这样做:
Get-ChildItem '\\fileserver\photos\*.jpeg' -File | `
Where-Object { ($_.LastAccessTime -ge (Get-Date).AddDays(-1)) -and ($_.Length -le 500000) } | `
Copy-Item -Destination '\\webserver\photos\'
这是一个糟糕的例子(你可以用Copy-Item -Filter
来做到这一点),但它很容易在飞行中提出。在处理文件以结束来自Get-ChildItem
的管道时,这很常见,而且我个人倾向于仅仅因为-Recurse -Include
Remove-Item
错误导致这种情况。
您还可以获得PowerShell的错误捕获,-Passthru
,-WhatIf
,-UseTransaction
等特殊参数以及所有常见参数。 Copy-Item -Recurse
可以复制一些xcopy的树复制功能,但它很简陋。
现在,如果您需要维护ACL,所有权,审核等,那么xcopy
或robocopy
可能会更容易,因为内置了该功能.I'我不确定Copy-Item
如何处理将加密文件复制到非加密位置(xcopy有能力执行此操作),我不相信Copy-Item
支持直接管理存档属性。
如果您正在寻找它的速度,那么我会怀疑xcopy和robocopy会胜出。托管代码通常具有更高的开销。 Xcopy和robocopy还可以更好地控制它们与网络的协作效果。