Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing Shortcuts in Powershell

I have some code which is trying to make a copy of a directory which contains shortcuts:

 # Create a directory to store the files in
 mkdir "D:\backup-temp\website.com files\"

 # Search for shortcuts so that we can exclude them from the copy
 $DirLinks = Get-ChildItem "\\web1\c$\Web Sites\website\" -Recurse | ? { $_.Attributes -like "*ReparsePoint*" } | % { $_.FullName } 

 # Execute the copy
 cp -recurse -Exclude $DirLinks "\\web1\c$\Web Sites\website\*" "D:\backup-temp\website.com files\"

But when I execute the script I get the following error:

 Copy-Item : The symbolic link cannot be followed because its type is disabled.
 At C:\scripts\backup.ps1:16 char:3
 + cp <<<<  -recurse "\\web1\c$\Web Sites\website\*" "D:\backup-temp\website.com files\"
     + CategoryInfo          : NotSpecified: (:) [Copy-Item], IOException
     + FullyQualifiedErrorId :          
 System.IO.IOException,Microsoft.PowerShell.Commands.CopyItemCommand

It seems the script is getting hung up on a symbolic link (I'm assuming the shortcut) that I'm trying to exclude in the fourth line of the script.

How can I tell powershell to ignore/exclude shortcuts?

Thanks, Brad

like image 786
Brad Avatar asked Nov 26 '25 13:11

Brad


2 Answers

If you are on V3 or higher you can eliminate the reparse points like so:

Get-ChildItem "\\web1\c$\Web Sites\website" -Recurse -Attributes !ReparsePoint | 
    Copy-Item -Dest "D:\backup-temp\website.com files"

On V1/V2 you can do this:

Get-ChildItem "\\web1\c$\Web Sites\website" |
    Where {!($_.Attributes -bor [IO.FileAttributes]::ReparsePoint)} |
    Copy-Item -Dest "D:\backup-temp\website.com files" -Recurse
like image 87
Keith Hill Avatar answered Nov 28 '25 07:11

Keith Hill


So it turns out that the issue I faces is explained in this Microsoft Blog Post: http://blogs.msdn.com/b/junfeng/archive/2012/05/07/the-symbolic-link-cannot-be-followed-because-its-type-is-disabled.aspx

Essentially on the server I am running the powershell script from I needed to run the following command: fsutil behavior set SymlinkEvaluation R2R:1

This allows Remote to remote symbolic links. Once this is in place the above powershell commands run as expected without errors.

like image 23
Brad Avatar answered Nov 28 '25 06:11

Brad