测试文件夹是否为空非常简单,并且已经讨论了很多次。主要使用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
......
答案 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
}
}