测试文件夹是否为空非常简单,已经讨论过很多次了。主要使用测试路径或获取子项示例:Powershell test if folder empty
我正在编写一个脚本,用于审核和更正企业环境中SMB共享上的文件NTFS权限。
我遇到了一些起初看起来很简单的事情,但我找不到一个简单的解决方案。我想知道有没有cmdlet可以帮上忙。也就是说,区分给定的文件夹是空的还是我没有访问它的权限。
问题是我看到的所有解决方案都假设您有权访问该文件夹。
我在想,我将不得不编写一个油腻的函数来做多个测试,然后捕获并测试错误代码或其他什么。但我想我应该先问问Stack Overflow的聪明的程序员,然后再走进那个rabbithole。
有没有更优雅的方法来测试这一点?一个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
......发布于 2019-05-02 21:06:34
多亏了@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
}
}https://stackoverflow.com/questions/55938249
复制相似问题