Solved

Powershell Arguements

Posted on 2014-12-18
6
115 Views
Last Modified: 2014-12-19
I am trying to utilize a powershell plugin for amazon s3 to schedule synchronizations of backup files from a local folder to s3.

I can make it work if I make a script for each folder I want to sync but what I'd like to do is pass an argument from the command line to select the local and remote folders that the job should sync.

I'm sure this is pretty basic, but my scripting abilities are minimal.

Here is what I have, but does not work:

*********************************************************
$server=$args[0]
Set-Logging -LogPath S:\ps-log -LogLevel info
Add-PSSnapin CloudBerryLab.Explorer.PSSnapIn
$s3 = Get-CloudS3Connection -Key XXXXXXXX -Secret XXXXXXXXX
$dest = $s3 | Select-CloudFolder -Path "phxbackup02/VMbackups/" + $server + "@10.99.0.25"
$src = Get-CloudFilesystemConnection | Select-CloudFolder "S:\Local_Backup\" + $server + "@10.99.0.25\"
Set-CloudOption -UseChunks 1 -ChunkSizeKB 1024000
$src | Copy-CloudSyncFolders $dest -IncludeSubfolders -DeleteOnTarget
*********************************************************************

My problems are on lines 5-6

I just want to be able to change 1 piece of both paths as the $server variable, for example, if I use the command .\script.ps1 "DC01"

Do I need to create 2 more variables for the source and destination paths?
Something like $s3path = "phxbackup02/VMbackups/" + $server + "@10.99.0.25" ?
0
Comment
Question by:bts86
  • 3
  • 2
6 Comments
 
LVL 69

Expert Comment

by:Qlemo
ID: 40507571
It should already work that way. Source and destination path both contain the server name provided as a parameter to the script as you showed.
.\script.ps1 "DC01"  will backup "S:\Local_Backup\DC01@10.99.0.25\" to "phxbackup02/VMbackups/DC01@10.99.0.25"
0
 
LVL 39

Accepted Solution

by:
footech earned 250 total points
ID: 40507581
You could create more variables, but I think the following will work.
$dest = $s3 | Select-CloudFolder -Path "phxbackup02/VMbackups/$server@10.99.0.25"
$src = Get-CloudFilesystemConnection | Select-CloudFolder "S:\Local_Backup\$server@10.99.0.25\"

Open in new window


When using concatenation, this might work as well.
$dest = $s3 | Select-CloudFolder -Path ("phxbackup02/VMbackups/" + $server + "@10.99.0.25")

Open in new window

0
 
LVL 1

Author Comment

by:bts86
ID: 40508014
Ive tried both suggested ways and still have the same result.

Here is the error I receive:

Select-CloudFolder : The path specified doesn't exist.
At C:\backupsyncs3.ps1:6 char:40
+ $src = Get-CloudFilesystemConnection | Select-CloudFolder "S:\Local_Backup\$serv ...
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (S:\Local_Backup\@10.99.0.25\:String) [Select-CloudFolder], Exception
    + FullyQualifiedErrorId : The path specified doesn't exist.,CloudBerryLab.Explorer.PSSnapIn.Commands.SelectCloudFo
   lder


It doesn't seem to be inserting the variable.


Would it be correct syntax if I used this:
$s3path = ("phxbackup02/VMbackups/" + $server + "@10.99.0.25")
$localpath = ("S:\Local_Backup\" + $server + "@10.99.0.25\")
$dest = $s3 | Select-CloudFolder -Path $s3path
$src = Get-CloudFilesystemConnection | Select-CloudFolder $localpath

Open in new window

0
Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 
LVL 69

Expert Comment

by:Qlemo
ID: 40508034
It does insert the variable, otherwise you would see the var name literally in the path string. $server just is empty.
0
 
LVL 69

Assisted Solution

by:Qlemo
Qlemo earned 250 total points
ID: 40508303
I've rewritten the script to be a function with parameters now. Import the function definition with
   . c:\pathToScript\Script.ps1
and then you can use it like this
   S3Sync DC01
or
  S3Sync 'DC01'
The name of the function is arbitrary, but of course it needs to be the same in the script and if you call it. The .PS1 file containing the function can have any name, even the same as the function. It is only used for the import (first line above).
Add-PSSnapin CloudBerryLab.Explorer.PSSnapIn

function S3Sync([String] $server)
{
  Set-Logging -LogPath S:\ps-log -LogLevel info
  $s3 = Get-CloudS3Connection -Key XXXXXXXX -Secret XXXXXXXXX
  $dest = $s3 | Select-CloudFolder -Path "phxbackup02/VMbackups/$server@10.99.0.25"
  $src = Get-CloudFilesystemConnection | Select-CloudFolder "S:\Local_Backup\$server@10.99.0.25\"
  Set-CloudOption -UseChunks 1 -ChunkSizeKB 1024000
  $src | Copy-CloudSyncFolders $dest -IncludeSubfolders -DeleteOnTarget
}

Open in new window

0
 
LVL 1

Author Comment

by:bts86
ID: 40509275
Ive got it working using variables for the paths. Maybe the PS snapin does not like concatenation.

Here is what I used to make it work:
$server=$args[0]
Add-PSSnapin CloudBerryLab.Explorer.PSSnapIn
Set-Logging -LogPath S:\ps-log\cloudberry.log -LogLevel info
$s3 = Get-CloudS3Connection -Key xxxxxxxxxxxxxxxxx -Secret xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$s3path = ("phxbackup02/VMbackups/" + $server + "@10.99.0.25")
$localpath = ("S:\Local_Backup\" + $server + "@10.99.0.25\")
$dest = $s3 | Select-CloudFolder -Path $s3path
$src = Get-CloudFilesystemConnection | Select-CloudFolder $localpath
Set-CloudOption -UseChunks 1 -ChunkSizeKB 1024000
$src | Copy-CloudSyncFolders $dest -IncludeSubfolders -DeleteOnTarget

Open in new window


Thanks for the help, will split the credit.
0

Featured Post

Is Your AD Toolbox Looking More Like a Toybox?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to filter result in PowerShell 10 58
Rename multiple files in folder from list in table/excel. 4 37
Never expired checked 2 19
Cant remote powershell into server 3 24
This is a PowerShell web interface I use to manage some task as a network administrator. Clicking an action button on the left frame will display a form in the middle frame to input some data in textboxes, process this data in PowerShell and display…
The following article is intended as a guide to using PowerShell as a more versatile and reliable form of application detection in SCCM.

822 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question