寻找一种简单的方法来测试文件夹是否为空vs无法访问/访问被拒绝

时间:2019-05-01 14:58:31

标签: powershell

测试文件夹是否为空非常简单,并且已经讨论了很多次。主要使用test-path或get-childitem 示例:Powershell test if folder empty

我正在使用一个脚本来审核和更正企业环境中SMB共享上的文件NTFS权限。

我遇到了起初看起来很简单的问题,但是我找不到简单的解决方案。我想知道是否有一个cmdlet会有所帮助。 也就是说,区分给定文件夹是空还是我无权访问它。

问题是我看到的所有解决方案都假定您有权访问该文件夹。

我当时以为我将不得不编写一个油腻的函数来进行多个测试,然后捕获并测试错误代码等。 但是我想我应该先在Stack Overflow上问一下聪明的编码员,然后再去找那个兔子洞。

是否有更优雅的方法来测试?一个Test-MyAccess cmdlet还是什么?

对于空白文件夹和无权访问的文件夹,Test-Path返回相同的结果。 对于空文件夹和无权访问的文件夹,Get-childitem返回null / empty。除非无权访问文件夹有错误。

PS H:\PowerShell\NTFS> Test-Path $EmptyFolder
True

PS H:\PowerShell\NTFS> Test-Path $EmptyFolder\*
False

PS H:\PowerShell\NTFS> Test-Path $NoAccessFolder
True

PS H:\PowerShell\NTFS> Test-Path $NoAccessFolder\*
False

PS H:\PowerShell\NTFS> Get-ChildItem -Path $EmptyFolder

PS H:\PowerShell\NTFS> Get-ChildItem -Path $NoAccessFolder
Get-ChildItem : The specified network name is no longer available.
At line:1 char:1
+ Get-ChildItem -Path $NoAccessFolder
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\server.domain....\Sufolder1\Sub3:String) [Get-ChildItem], IOException
......

1 个答案:

答案 0 :(得分:0)

由于@Lee_Dailey,我似乎一直走在正确的道路上。看来方法是检查Get-ChildItem是否存在错误。

似乎应该有一个cmdlet可以执行此操作,但是我想我会写一个函数。 我想像这样。

Function Get-FolderProperties ($Path){
    $ErrOut = $Null
    $Folder = Get-ChildItem -Path $Path -ErrorAction SilentlyContinue -ErrorVariable ErrOut
    If($ErrOut) { 
    # There was an error accessing $path. Do something with $ErrOut

    }

}