Powershell 从文件副本中排除连接点

Powershell 从文件副本中排除连接点,powershell,copy,filesystems,Powershell,Copy,Filesystems,我要做的是:在删除配置文件之前,将用户配置文件的内容复制到其他位置作为备份 我尝试的方法:将powershell与copy item-recurse-path profileName一起使用 有什么方法可以排除交叉点吗 我当然从交叉点得到奇怪的东西。我想最好的办法是复制所有东西,包括连接点,但即使我必须排除它们以使其工作,我也可以在恢复配置文件时小心地将它们保留在原位,因为我不会经常这样做(希望永远不会)。无论如何,我可以使用-exclude并命名我在概要文件根目录中找到的所有连接点,但是还有一

我要做的是:在删除配置文件之前,将用户配置文件的内容复制到其他位置作为备份

我尝试的方法:将powershell与copy item-recurse-path profileName一起使用

有什么方法可以排除交叉点吗

我当然从交叉点得到奇怪的东西。我想最好的办法是复制所有东西,包括连接点,但即使我必须排除它们以使其工作,我也可以在恢复配置文件时小心地将它们保留在原位,因为我不会经常这样做(希望永远不会)。无论如何,我可以使用-exclude并命名我在概要文件根目录中找到的所有连接点,但是还有一些子文件夹连接点,如appdata\local\application data。这一个实际上会成功地在循环中复制,直到文件夹名称变得太大。大失败。无论如何,如果我能做一些像-filter{$\.attributes-notmatch“ReparsePoint”}这样的事情,那就太棒了,但是filter当然只能处理与文件/文件夹名对应的字符串。如果使用Get-ChildItem-path profileLocation,则必须使用-force,否则将丢失任何隐藏的/系统文件。但这也意味着,我将获得相同的连接点,这些连接点无法使用此命令读取,并且在我可以使用管道Where对象和要复制项目的管道过滤掉它之前,将生成一个错误。而且,我猜这个方法会很慢。因此,无论哪种方式,看起来唯一的选择是使用-exclude并键入所有子文件夹连接点。没有比这更直接的了吗


我是否应该放弃Powershell命令而使用Robocopy.exe?

当然,使用Robocopy会更简单。使用PS可以从win32_卷(搜索没有驱动器号的卷)获取装入点列表。然后,您可以排除任何路径与该名称匹配的文件。 大概是这样的:

$exclude=gwmi win32_volume |?{$_.driveletter -eq $null} |select -expand name 
ls C:\mountpoints\ -Recurse |%{
    if( $_.PSIscontainer -eq $true) {$dir=$_.fullname} 
    else {$dir=$_.directoryname} 
    if ($exclude.trim('\') -notcontains $dir){ #copy here}}

是的,对于这种任务,
robocopy
是更好的工具。好的,我们谈论的不是驱动器装载点。我说的是“c:\users\someuser\appdata\local\application data”和任何类似的文件夹,它们是指向另一个文件夹的连接点,在本例中是“c:\users\someuser\appdata\local”。正如你们建议的,看起来我只是在用机器人镜头。