2015-06-08 130 views
1

我正尝试将C:\驱动器中的用户数据从联网的计算机传输到本地计算机上的C:\驱动器。所以我需要排除所有的系统文件夹和隐藏文件夹。如何从Powershell脚本启动Robocopy

这是我的PowerShell脚本。

$asset = Read-Host "What is the Asset Number?" 
$useraiu = Read-Host "What is the user's AIU?" 

$source = "\\$asset\C$\" 
$dest = "C:\Temp\Dest" 

$excludedFolders = '_SMSTaskSequence','inetpub','Program Files','Program Files (x86)','Swsetup','Users','Windows','CCM','Notes' 

$myFolders = Get-ChildItem -Path "\\$asset\C$\" -Directory | where { $_ -notin $excludedFolders } 

$myFolders | foreach { robocopy $_ $dest /S /Z /MT /XJD /XA:SH /log+:"\\server\path\path\%asset%-to-%computername%-Transfer-Log.log" /NP /FP /V /TEE} 

Read-Host "Press ENTER to quit" 

当我做了一个Write-Output $myFolders它显示我想要复制的正确目录。

看起来像robocopy函数使用本地C:\路径作为源。源应该是\\$asset\C$\列出的文件夹中的文件夹$myFolders

示例。如果此文件夹位于旧计算机上\\computername\C$\Userfolder-Pictures使用Robocopy将该文件夹复制到本地计算机上的C:\Userfolder-Pictures

我在运行脚本后从Robocopy获取此输出。

Log File : \\server\path\path\%asset%-to-%computername%-Transfer-Log.log 

------------------------------------------------------------------------------- 
    ROBOCOPY  ::  Robust File Copy for Windows        
------------------------------------------------------------------------------- 

    Started : Mon Jun 08 11:11:28 2015 

    Source : C:\WINDOWS\system32\Temp\ 
    Dest : C:\Temp\Dest\ 

    Files : *.* 

    Options : *.* /V /FP /TEE /S /COPY:DAT /Z /NP /XJD /XA:SH /MT:8 /R:1000000 /W:30 

------------------------------------------------------------------------------ 

2015/06/08 11:11:28 ERROR 2 (0x00000002) Accessing Source Directory C:\WINDOWS\system32\Temp\ 
The system cannot find the file specified. 
+1

尾随斜线我找到了不受欢迎的来源或路径。 – ssaviers

+0

这甚至不是问题。列出的源代码路径完全是错误的,应该或者我预期会在那里。 – rangerr

+0

你期望在那里?您是否确认'$ asset'不是空或空? –

回答

4

添加Select-Object -ExpandProperty FullName会给你完整的网络路径的文件夹中的字符串数组。您的foreach循环通过$myFolders而不是循环通过DirectoryInfo对象的数组。

$myFolders = Get-ChildItem -Path "\\$asset\C$\" -Directory | where { $_ -notin $excludedFolders } | Select-Object -ExpandProperty FullName 

或者,如果你打算使用其他$myFoldersFullName信息,你可以改变这条线使用$_.FullName

$myFolders | foreach { robocopy $_.FullName $dest /S /Z /MT /XJD /XA:SH /log+:"\\server\path\path\%asset%-to-%computername%-Transfer-Log.log" /NP /FP /V /TEE} 
+0

谢谢! 'Select-Object -ExpandProperty FullName'正在为我工​​作。 – rangerr

+0

其实我有一个问题。 robocopy的源代码正常工作,但我希望目标与源代码相同,但是本地代码为C:\驱动器。示例源:'\\ computername \ Temp-Pictures',则目标是'C:\ Temp-Pictures'。目前这不是那种方式。你能帮忙吗? – rangerr

+0

哦,我陷入了困境。例如,“C:\ Temp-Pictures”是否总是存在于本地,还是我们需要每次都创建它? –

相关问题