Add-Member if you want to effectively “object” all things and possess their property.

I thought I would clarify this as most articles don’t simplify this to easily wrap you head around.

Add-member is what I would use to add a new member to a group of properties on an object

  1. I create the object
  2.  Add a noteproperty that translate to text
  3. create a scriptmethod that can do things based on a scriptblock when called.
  4. create a scriptproperty that runs each time you call the $x object to display the results of it’s script block.
Here is the code:
$x=new-object psobject
$x| add-member -name ID – value “smithx” -membertype Noteproperty
$x| add-member -name ADlookup -value { get-aduser $x.name } -membertype scriptmethod
$x|add–member -name ADinfo -value {$x.adlookup()} -membertype Scriptproperty

if you want you can overwrite a member with the -force command.

Try & Catching Errors so you can relax Finally.

Sometimes you gotta Try…. okay enough pep talk.

using the Try Command will allow you to catch any terminating errors. unless you specify for some commands you will not catch the errors and may not want to actually.

example:

 Try{ get-childitem c:\incorrectlyspelledfolder\  -erroraction Stop -recurse -errorvariable ErrorCity}

#for every Try there must be a catch

Catch {write-host "Error: $($errorCity.gettype().fullname)"}

I wrote this to have the error show the  expression needed to catch specific errors you actually care about.

so you can to catches or specific instructions to go with specific errors. lie write this to one file and email the results on another catch instance.

Example:

  Try{ 
$folder="c:\windows"
get-childitem $folder -erroraction Stop -recurse -errorvariable ErrorCity -OutVariable Results 
}
 #for every Try there must be a catch #specific to error records now it will write the line.
catch [System.Management.Automation.ErrorRecord]{Write-host "Typo?"} #this catch will catch any other error like permission denied, etc. 
Catch {write-host "Error: $($errorCity.gettype().fullname)" -ForegroundColor Red} 


Finally{write-host "finished processing $folder " -ForegroundColor Green
        write-host "Sub Folders are :"
        $Results.fullname
        }
#finally is optional to do a set of command regardless of error on the object being processed.
Good Luck Trying & catching errors and finally understanding.

Robocopy is PowerShell’s Robust-tool.

See the source image

So lets create a scenario,  and say that they were having difficulty using Robocopy commands within or with PowerShell. Here’s a demonstration of how to use PowerShell to be able to deliver seamless and accurate commands that will ensure that you will have your data copied and have your PowerShell script.

The best part of PowerShell is the ability to manipulate objects of different types in the same way regardless of data type.

let’s start with planning out the end product and work towards constructing our objects.

 

Import your file with source and destination or you can wing it into a function. For demonstration purposes we will cover both.

 

Example 1: Scripted with external file input 

$data=import-csv data.csv

$count=0

$total=$data.count

foreach($item in $data)

{

$count+=1 #some people use $count++

$source= $item.source

$destination=$item.Destination

Write-Progress -Activity “Copying $source to $destination” -PercentComplete ($count/$total*100)

Robocopy $source $destination /mir /mt:8 /r:1 /w:1

} #end foreach statement in script

 

This one s a little tricky due to the possibility of quotation exceptions;  Folders with spaces that require quotes.

 Example 2: Interactive PowerShell session

set-location c:\rootoftargetfolders

get-childitem  |foreach-object {
$source= $_.fullname
$destination=”d:\destinationfolder\$($_.basename)”
Robocopy “$source” “$destination” /mir /mt:8 /r:1 /w:1
} #end foreach-object

 

Example 3: Function best saved in $profile (PowerShell Profile) 

function RoboCopy-Item ($Source,$destination)

{

Robocopy $Source” “$Destination /mir /mt:8 /r:1 /w:1

} #end function

#now to try it

RoboCopy-item  -Source c:\files -destination D:\usb_documents

 

Conclusion:

I know sometimes dealing with syntax can be a headache but when you take the time to experiment with the shell it is a good path to accumulate lessons learned.

RoboCopy and PowerShell can play nice, of course adding in some try/catch to control your logging output to a text, html or csv or installing a module that can output logs directly to Microsoft Excel or take the old-school approach and use the /log file switch for RoboCopy.