如何使用Powershell将文件夹从Serverfile同步到客户端计算机?

时间:2019-05-23 11:02:49

标签: powershell sysadmin

自从我将其升级到W10以来,我的计算机上的同步中心存在一些问题,因此我尝试编写一个替代脚本,该脚本比较台式机和我们的ServerFiles上的同步文件夹/文件,并复制每个文件夹/的最新版本。用户计算机上的文件。

感谢社区,我找到了一些代码,但对我来说效果不佳

Help1 Help2

我是使用Powershell 5.1编写脚本的新手。我正在使用WS2008和W10上的桌面。

$SourceFolder = Get-ChildItem -Recurse "\\Srvfiles\USERS\user1\"
#"user1" contains 2 folders and each one have subfolders/files 

$TargetFolder = Get-ChildItem "D:\Doc_Sync"

$Result = Compare-Object $SourceFolder $TargetFolder -Property Name, Length 

foreach ($folder in $Result) {
        if ($folder.SideIndicator -eq "<=") {
            $FullSourceObject = $folder.InputObject.FullName
            $FullTargetObject = $folder.InputObject.FullName.Replace($SourceFolder, $TargetFolder)

            Copy-Item "\\Srvfiles\USERS\user1\$($_.name)" -Destination $Get-ChildItem "D:\Doc_Sync" -Recurse -Force
            }
        }

好消息是它适用于某些文件夹,在D:/ Doc_Sync上它粘贴了大多数文件,但是(不好的新消息),对于其他文件,我遇到了很多错误:

Cannot bind argument to parameter « DifferenceObject » because it is null.
At line:5 char:40
+ $Result = Compare-Object $SourceFolder $TargetFolder -Property Name,  ...
+                                        ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData : (:) [Compare-Object], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObjectCommand

You cannot call a method on a null-valued expression.
At line:10 char:13
+             $FullTargetObject = $folder.InputObject.FullName.Replace( ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

感谢您的未来帮助

1 个答案:

答案 0 :(得分:0)

由于断点,我发现第一个错误出了什么问题。我这样更改了$ TargetFolder:

$TargetFolder = @(Get-ChildItem -Recurse "D:\Doc_Sync")

但是我仍然遇到“ $ FullTargetObject”的第二个错误。知道那条线怎么了...这个周末我会处理。