删除所有人权限并添加对网络共享文件夹进行身份验证的用户权限

删除所有人权限并添加对网络共享文件夹进行身份验证的用户权限

我已经编写了一个脚本来删除每个人权限并添加已认证用户网络共享的权限。

但是我的脚本正在删除它并添加已认证用户,但它仅对根文件夹执行操作,而不对根文件夹内的子文件夹执行操作,并且我需要作为继承的表单父级获取该权限。

我只想知道我的脚本是否排除了(“远程管理”,“默认共享”,“远程 IPC”,“打印机驱动程序”)的共享

如果有人能帮助我实现这个目标就太好了......

$ScriptBlock = {
     "Executing on {0}" -f $env:COMPUTERNAME
     $ExclusionList = 'ADMIN\$','IPC\$' -join '|'
     $Shares = Get-SmbShare  | Where-Object -Property Name -notmatch $ExclusionList | Where-Object -Property Path -notmatch '^\w:\\$' 
     "Analyzing these shares...."
     $Shares
     foreach ($Share in $Shares) {    
         $Everyone = Get-SmbShareAccess $Share.Name | Where-Object -Property AccountName -eq Everyone
         if ($Everyone) {  
             Revoke-SmbShareAccess $Share.Name -AccountName 'Everyone' -Force
             Grant-SmbShareAccess $Share.Name -AccountName 'Authenticated Users' -AccessRight FullControl -Force
             "Share {0} has been updated." -f $Share.Name 
         }
     }
     "Complete"
 }
    
    
  $ComputerList = Get-Content "C:\users\a-lchandrakanthredd\Desktop\Test\Servers.txt"
        
  Invoke-Command -ComputerName $ComputerList -ScriptBlock $ScriptBlock

提前致谢。

答案1

看起来您想要排除“特殊”系统共享,我猜非文件共享类型(例如打印机)也是如此。请尝试以下操作:

# Get the local smb share folder objects and permissions
$Shares = Get-SmbShare -Special $false | 
  Where {$_.ShareType -eq 'FileSystemDirectory' -and $_.Name -notin 'print$','prnproc$'}

正如 Frank 在评论中提到的那样,与 SMB 打交道时要小心谨慎分享权限与 NTFS文件系统权限。

SMB 共享权限仅针对共享对象本身设置,而不针对子文件夹。访问权限适用于连接到该共享的用户执行的所有操作,并与文件系统权限结合形成最低许可模型。

如果您检查文件夹的属性或执行 ,则不会显示 SMB 共享权限Get-ACL。原因之一是文件夹可以通过多种方式共享。例如,您可以c:\shared\通过 以只读权限共享\\Server\Share\,但仍可以使用 以管理员权限访问它\\Server\C$\shared\

如果您确实想要设置文件系统权限,那么您需要查看Get-ACL/Set-ACL命令。

相关内容