编写一个PowerShell脚本来将文件从一个文件夹复制到另一个文件夹

我想编写一个PowerShell脚本获取以下参数作为input:
要从中复制的文件夹,扩展名允许,要复制到的文件夹以及指示是否应该重新启动IIS,用户名和密码的布尔值。
考虑到我正在复制到远程服务器,我应该考虑哪些cmdlet?
如何将参数读入variables?
我如何重新启动IIS?

考虑到我可能想要复制多个文件夹,我该如何编写一个调用powershell脚本的powershell脚本?

Get-ChildItem允许您列出文件和目录,包括recursion地使用文件名filter。 Copy-Item允许您复制文件。

在select文件方面有很多重叠,根据你所需要的细节, Copy-Item往往是足够的(例如你想保留文件夹结构吗?)

要将所有*.foo*.bar从StartFolder复制到DestFolder:

 Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder" 

如果您需要保留文件夹结构,事情会变得更加困难,因为您需要构build目标文件夹名称,如下所示:

 $sourcePath = 'C:\StartFolder' $destPath = 'C:\DestFolder' Get-ChildItem $sourcePath -Recurse -Include '*.foo', '*.bar' | Foreach-Object ` { $destDir = Split-Path ($_.FullName -Replace [regex]::Escape($sourcePath), $destPath) if (!(Test-Path $destDir)) { New-Item -ItemType directory $destDir | Out-Null } Copy-Item $_ -Destination $destDir } 

但是, robocopy可能会更容易:

 robocopy StartFolder DestFolder *.foo *.bar /s 

最后,select的方式将取决于所需的细节。

(在上面我已经避免了别名(例如Copy-Item而不是copy ),并明确地使用参数名称,即使它们是位置的。)

我无法解决IIS部分问题,但是保留目录结构的文件副本比其他答案中显示的要简单得多:

 Copy-Item -path "StartFolder" -Recurse -Include "*.foo","*.bar" -Destination "DestFolder" -Container 

-Container论点是将复制目的地结构的魔法部分,因为它在源代码中。

如果您使用IIS7,则可以使用本机组件在IIS服务器之间复制内容: http : //blog.theplanet.com/2010/05/18/mirroring-server-content-and-configuration-in-iis7/