无法使用powershell

时间:2018-06-19 07:31:35

标签: powershell powershell-v3.0 powershell-v4.0 icacls

当我想要删除网络共享上的配置文件文件夹时,我遇到了问题。某些文件夹似乎无法删除。

这是代码,可以在大多数文件夹中正常工作:

Import-Module -Name 'C:\Users\mkz\Documents\powershell\modules\AlphaFS.2.1.3.0\Lib\Net452\AlphaFS.dll'

$folder = "\\filsrvm\MDrev\folderName"

#Function to take ownership and grant permissions
function takeOwnership($path)
{
    if(Test-Path $path)
    {
        $server = ($path).Split("\\",5)[2]+".adm.domain.dk"
        takeown.exe /S $server /F $path /r /d Y
        icacls $path /grant 'GroupAdm_GL:(CI)(OI)F' /t /c /q
        icacls "$path\*" /reset /t /c /q
    }
}

#Function to delete folders
function deleteFolder($path)
{

    if(Test-Path $path)
    {
        [Alphaleonis.Win32.Filesystem.Directory]::Delete($path, $true, $true)
    }

}

takeOwnership($folder)
deleteFolder($folder)

我收到以下错误:

<red>Exception calling "Delete" with "3" argument(s): "(145) The directory is not empty: [\\?\UNC\filsrvm\MDrev\folderName\Ctx]"
At C:\Users\mkz\Documents\powershell\singleDelete.ps1:24 char:9
+         [Alphaleonis.Win32.Filesystem.Directory]::Delete($path, $true ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DirectoryNotEmptyException</red>

我尝试使用Remove-Item $path -force -Recurse代替“Alphaleonis”,但它会导致相同的错误。

1 个答案:

答案 0 :(得分:0)

我还没有找到在PowerShell中执行此操作的方法。 This solution在Windows Server 2012 R2上为我工作。大致将其翻译为PS:

$pathToDelete = "TROUBLESOME_PATH_ROOT"
$tmpDir = [System.IO.Path]::GetRandomFileName()
mkdir $tmpDir
& robocopy.exe /S /MIR $tmpDir "$pathToDelete"
rmdir $tmpDir
rmdir "$pathToDelete"

这会递归地将一个空目录镜像到目标目录,从而有效地将其删除。

另请参阅How to delete directories with path/names too long for normal delete

相关问题