Copy-Item not working (as expected)

This topic contains 1 reply, has 1 voice, and was last updated by Profile photo of Mark Brown Mark Brown 1 year, 4 months ago.

  • Author
    Posts
  • #32372
    Profile photo of Mark Brown
    Mark Brown
    Participant

    I have a script that copies files to some remote machines. It's only purpose is to push the files out, but I also want to make it flexible. There is a standard destination folder on the remote machine, and the default source location is the current directory. I have created parameters to change both the source and destination folders, and an option to select the files to be added to the '-Include' option.
    However, the files do not copy, and I get no error message. If I copy and paste the command that is being issued directly into the PS prompt, it does work. What can I be doing wrong?

    Thanks,

     [CmdletBinding()]
        Param(
            [Parameter(valuefrompipeline=$true,Position=0)]
            [alias("cn")]
            [string[]]$ComputerName=($servername.keys | %{if($servername.$_  -eq $env:computername){$_}}),
            [alias("f")]
            [string]$File,
            [string]$From,
            [string]$To
    
            
            )
            Begin
            {
            }
            Process
            {
            foreach($computer in $ComputerName){
                # Push specified software out to listed machines
                # default Destination will Data drive \ GEO_Install -  Option for desination location
                # Source will be current folder location - But option for source location
    
    
                    $geoServer= $($serverName[$($Computer)]) 
                    Write-Host -ForegroundColor Yellow "Processing: $ComputerName  System Name: $geoServer`n"
                    
                    if ($File)
                    { 
                        Write-Verbose "A filter has been specified : $File"
                    }
                    Else
                    {
                        Write-verbose "No filter has been specified - All files will be copied." 
                    }
    
                    if ($From)
                    {
                        Write-Verbose "A source location has been specified  : $From"
                        
                        
                    }
                    Else
                    {
                        Write-Verbose "Using default source location, current directory."
                        $From ="*"
                    }
    
    
                    if ($To)
                    {
                        Write-Verbose "A Destination location has been specified : $To"
                    }
                    Else
                    {
                        Write-Verbose "Using default destination location for specified computer"
                        $destdrive = $loaderHT["$Computer"]
                        $destDrive = $destdrive.substring(0,1) + "$"
                        $To = "\\$geoserver\$destdrive\GEO_Install\"
                        Write-Verbose "Default Destination : $dest"
                    }
    
                    Write-Verbose "---------------------------------------------------------------------------"
                    Write-Verbose "Source Location : $From"
                    Write-Verbose "Destination : $To"
                    Write-Verbose "Include files : $File"
                    Write-Verbose "Copy-Item -Path $From -Destination $To -Include $File -Force -Recurse"
                    
                    Try
                    { 
                        
                        Copy-Item -Path $From -Destination $To -Include $File -force -Recurse -ErrorAction stop
                        #Copy-Item -Path "C:\dev\*" -Destination "C:\Test" -Include *.bat,*.txt -Force -Recurse
                        Write-Verbose "Copy-Item -Path $From -Destination $To -Include $File -Force -Recurse"
                        write-host "Software copied."
                      
                    }
                    Catch
                    {
                        $errorMessage = $_.Exception.Message
                        Write-Error "An error occured copying software to : $Computer ($geoServer) , please check the log file for details"
    
                    }
                  }
            }
            End
            {}
                   
    }
    
  • #32381
    Profile photo of Mark Brown
    Mark Brown
    Participant

    Fixed – I needed to ensure my '\' and '*' are in exactly the right places. Still a little strange that no errors are generated even when I ask the script to perform non-sense copies....

You must be logged in to reply to this topic.