首页 > 解决方案 > Powershell 从网络共享复制所有子文件夹

问题描述

在谷歌页面 #3 之后我放弃了。
我想将网络共享的所有子目录复制到另一台服务器上。基本上我正在从 QNAP(我知道它是一个 linux 操作系统)到 Windows Server 2016 进行“主文件夹”迁移

$newPath = "D:\Shares"
$dir = Get-ChildItem -Path "\\srv-nas1" -Directory | ?{$_.PSISContainer}
$exceptions = @("some", "folder", "exceptions", "nothing", "important")
$errors = ""

foreach ($d in $dir){
    $d.Name
    Try{
        if(-not ($exceptions -contains $d.Name)){
            $dirData = $d.FullName
            $adUsername = "DOMAIN\"+$d.Name
            $newSharePath = $newPath + "\" + $d.Name
            $newShareName = $d.Name + "$"

            "[!]Initialized migration for: " + $adUserName

            $Acl = Get-Acl $dirData
            $AdminAr = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\admin", "FullControl","ContainerInherit, ObjectInherit","None","Allow")
            $UsrAr = New-Object System.Security.AccessControl.FileSystemAccessRule($adUsername, "FullControl","ContainerInherit, ObjectInherit","None","Allow")
            $Acl.SetAccessRule($AdminAr)
            $Acl.SetAccessRule($UsrAr)
            Copy-Item -Path $dirData -Destination $newPath -recurse -Force

            New-SmbShare -Name $newShareName –Path $newSharePath -FullAccess "DOMAIN\admin", $adUsername
            Set-Acl $newSharePath $Acl

            "[+]" + $adUsername + " successfully migrated"
            exit 1
        }
    }Catch{
        "[-]ERROR WTH USER: " + "DOMAIN\"+$d.Name
        $_.Exception
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        $errors += 'ErrorMessage ' + $ErrorMessage + " FailedItem " + $FailedItem + " User " + $adUsername + " `n"
    }
}

$errors

显然,当我运行代码时,找不到 NAS 的路径。我知道可能存在冲突,因为它是 linux 并且由于我正在浏览共享的根路径。我也试着模仿它

foreach($Share in Get-WmiObject Win32_Share){
    Get-ChildItem "\\$($Share.__SERVER)\$($Share.Name)"
}

但它是Linux,所以它显然不起作用。我有机会让它工作吗?

标签: powershellnetwork-share

解决方案


推荐阅读