Why can't Powershell Copy-Item -Source -Destination to a UNC path known as a Variable see below

1.9k Views Asked by At
#VARIABLES
$Source = Read-host "Please provide DIR location you wish to copy its contents from.   
ie.  (UNC, Absolute paths, etc)"
$Serverlist = Read-Host "Please provide the location of the server list. (UNC, Absolute   
paths, etc)"
$Servers = Get-Content -Path $Serverlist
#$Destination1 = \\$Server\c$\inetpub\wwwroot\'
#$Destination2 = \\$Server\c$\wmpub\wmroot\'
#EXECUTION
$Servers | foreach-object      {                            
    Copy-Item -Path $Source*.wsx -Destination $Server\c$\inetpub\wwwroot\ -  
force
    Copy-Item -Path $Source*.nsc -Destination $Server\c$\wmpub\wmroot\ -force
                           }
#EVENTVWR LOGGING
$EventLog = New-Object System.Diagnostics.EventLog('Application')
$EventLog.MachineName = "."
$EventLog.Source = "Streaming Media Engineering"
$EventLog.WriteEntry('Copy Successful',"Information", 200)
#VIEWING OVERLOADS
($myevent.WriteEntry).OverloadDefinitions
Add-Type -AssemblyName System.Speech
$synthesizer = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
$synthesizer.Speak('Files have been moved over successfully...')

I can't seem to get the script to Read the $Server variable out in the $Destination1 and $Destination2 paths when trying to do a Copy-Item loop. Please help have spent a couple days on this...

1

There are 1 best solutions below

0
On

variable $Server is not set inside pipeline. You have to assign it to the current pipeline object from $Servers:

# For PS2 and above:
$Servers | ForEach-Object {
$Server = $_
...

# If you are sure that you will always use PS3 or above
$Servers | ForEach-Object {
$Server = $PSItem
...

Hope that this helps.

P.S. I've notice that this question was posted 2 years ago, I'm a grave digger now :P