Ecriture d'un script powershell pour copyr des files avec une certaine extension d'un dossier à l'autre

Je voudrais écrire un script powershell qui obtient les parameters suivants comme input:
Le dossier à copyr, les extensions le permet, un dossier à copyr et un boolean indiquant si le changement doit redémarrer IIS, nom d'user et mot de passe.
Quelles cmdlets devrais-je envisager de considérer que je copyr sur un server distant?
Comment lire les parameters en variables?
Comment puis-je redémarrer IIS?

En supposant que je pourrais vouloir copyr plusieurs dossiers, comment puis-je écrire un script powershell qui invoque un script powershell?

Get-ChildItem vous permet d'énumérer des files et des directorys, y compris récursivement avec des filters de nom de file. Copy-Item vous permet de copyr un file.

Il y a beaucoup de chevauchement en termes de sélection des files, souvent Copy-Item est suffisant en fonction des détails de ce dont vous avez besoin (par exemple, souhaitez-vous conserver la structure du dossier?)

Pour copyr tout *.foo et *.bar de StartFolder à DestFolder:

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

Si vous devez conserver la structure du dossier, les choses deviennent plus difficiles car vous devez créer le nom du dossier de destination, quelque chose comme:

 $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 } 

Mais le robocopy est susceptible d'être plus facile:

 robocopy StartFolder DestFolder *.foo *.bar /s 

En fin de count, la façon de choisir dépendra des détails de ce qui est nécessaire.

(Dans ce qui précède, j'ai évité les alias (par exemple Copy-Item plutôt que copy ) et utiliser explicitement les noms de parameters même s'ils sont positionnels.)

Je ne peux pas aborder la partie IIS, mais la copy du file tout en préservant la structure du directory peut être beaucoup plus simple que dans les autres réponses:

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

L'argument -Container est la partie magique qui répliquera la structure dans la destination telle qu'elle se trouve dans la source.

Si vous utilisez IIS7, vous pouvez utiliser un composant natif pour répliquer le contenu entre les servers IIS: http://blog.theplanet.com/2010/05/18/mirroring-server-content-and-configuration-in-iis7/