我有以下脚本将数据从本地文件夹复制到使用当前日期创建的远程文件夹。但是文件正在复制,但文件夹结构不是。
$Date = (Get-Date).ToString("MMddyyyy"),$_.Extension
$Source = "E:\Folder1\\*"
$Dest = "\\Server\Share\Folder2"
$Username = "Username"
$Password = ConvertTo-SecureString "Password" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential($Username, $Password)
Remove-PSDrive -Name T
Start-Sleep -s 1
New-PSDrive -Name T -PSProvider FileSystem -Root $Dest -Credential $mycreds -Persist
if (!(Test-Path "T:\$Date"))
{
md -Path "T:\$Date"
}
Get-ChildItem -Path $Source -Recurse | % { Copy-Item -Path $_ -Destination "T:\$Date" -Container -Force -Verbose }
有人可以告诉我这里哪里出错吗?
谢谢。
答案 0 :(得分:0)
好的剧本,我想我们可以立刻对其进行排序!
这是失败的原因就在这一步:
Get-ChildItem -Path $Source -Recurse
-Recurse
开关让你感到痛苦。为了说明原因,我创建了一个简单的文件夹结构。
单独运行Get-ChildItem -Path $Source -Recurse
时,您将获得$Source
路径中所有文件的递归列表,如下所示:
PS C:\temp\stack> Get-ChildItem -Recurse
Directory: C:\temp\stack
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 8/4/2017 10:50 AM Source
Directory: C:\temp\stack\Source
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 8/4/2017 10:57 AM 1
d----- 8/4/2017 10:57 AM 2
d----- 8/4/2017 10:57 AM 3
d----- 8/4/2017 10:57 AM 4
Directory: C:\temp\stack\Source\1
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 8/4/2017 10:57 AM 20 Archive.rar
-a---- 8/4/2017 10:56 AM 0 File01.bmp
好吧,在脚本的下一步中,您将每个文件的输出传输到Copy-Item
。
你基本上明确地告诉PowerShell'把这个文件夹及其所有的子文件夹和所有东西,并将它们全部转储到这个文件夹中,忽略文件夹结构'
您真正想做的只是将-Recurse
参数移到Copy-Item
,然后就完成了:)
Get-ChildItem -Path $Source |
Copy-Item -Destination "T:\$Date" -Container -Recurse -Force -Verbose
希望有所帮助,祝你有愉快的一天!