Powershell Sample: Looping Through a List of Servers and Copying Files


I'm new to Windows Powershell and have been wanting to learn it for some time now.  I finally had a situation come up the other day that I thought might be a good excuse to sit down and write my first Powershell script.

The scenario:
I have three different servers running the same application.  There is application data on each server that needs to be backed up and stored in a folder named in a date format but it is not necessarily the date the script is run.  The folder structure is exactly the same on each server.  I needed a script that could make a new folder to store the backed up data.  I prompt the user to name the new folder defined on 3 different servers and copy files from another folder to this new folder, essentially creating a backup of data from a root folder to the new folder.

#  Script name:    Backup_Data.ps1
# Created on: 2010-05-14
# Author: Rick Cable
# Purpose: Backup Files


#new folder name in date format mm-dd-yy
$NewFolderName = "" #Stores the name of the folder
#Create array of Servers
$Servers = @("Server1","Server2","Server3")
$ServerName = @("Server 1 Description","Server 2 Description","Server 3 Description")

#Prompt user to enter the new folder name
$NewFolderName = read-Host "Enter the name of the new folder in date format mm-dd-yy"


#Function to process the files for each server in the array list.
Function Backup {

#Loop throug each of the servers
for ($i = 0; $i -le $Servers.length -1; $i++)
{
write-Host $Servers[$i]
$BasePath = "\\" + $Servers[$i] + "\Share\"
$DonePath = $BasePath + "\Backup\" + $NewFolderName + "\"

if (test-Path $DonePath) 'if folder already exists
{
write-Host "Copying files for" $ServerName[$i]
$FilePath = $BasePath + "*.dfm"
Copy-Item $FilePath $DonePath
write-Host "Copying log files"
$FilePath = $BasePath + "*.log"
Copy-Item $FilePath $DonePath
write-Host "Copying txt files"
$FilePath = $BasePath + "*.txt"
Copy-Item $FilePath $DonePath

write-Host "Files Copied"
}
else
{
[IO.Directory]::CreateDirectory($DonePath)

write-Host "Copying files for" $ServerName[$i]
$FilePath = $BasePath + "*.dfm"
Copy-Item $FilePath $DonePath
write-Host "Copying log files"
$FilePath = $BasePath + "*.log"
Copy-Item $FilePath $DonePath
write-Host "Copying txt files"
$FilePath = $BasePath + "*.txt"
Copy-Item $FilePath $DonePath

write-Host "Folder Created and Files Copied"
}

}
}

#Run the function
Backup

Comments

There have been no comments made on this article. Why not be the first and add your own comment using the form below.

Leave a comment

Commenting is restricted to registered users only. Please register or login now to submit a comment.