powershell 查询共享文件夹属性主要用 get-smbshare 和 get-ciminstance;前者查本地共享基本信息及权限(配合 get-smbshareaccess、get-acl),后者支持远程查询;结果可导出 csv 分析。
powershell 提供了多种方式查询共享文件夹的属性,最常用的是 get-smbshare 和 get-wmiobject(或 get-ciminstance)命令。它们能快速获取共享名、路径、描述、访问权限、客户端连接数等关键信息。
使用 Get-SmbShare 查看本地共享基本信息
该命令适用于 Windows Server 2012 及以上或启用了 SMB 功能的 Windows 客户端(需管理员权限运行 PowerShell):
- 执行 Get-SmbShare 列出所有共享(含隐藏共享如 C$、ADMIN$)
- 加参数 -Name "ShareName" 可精确查询某个共享,例如:
Get-SmbShare -Name "Public" - 用 Select-Object 筛选常用字段:
Get-SmbShare | Select-Object Name, Path, Description, ShareState, ContinuouslyAvailable - 添加 -IncludeHidden 可显式包含系统隐藏共享(默认已显示)
获取共享的实际 NTFS 权限与共享权限
Get-SmbShare 不显示权限细节,需结合其他命令:
- 查共享级权限(谁可以连接、读/写):
Get-SmbShareAccess -Name "Public" - 查文件系统级(NTFS)权限(更细粒度控制):
Get-Acl -Path "D:\Shares\Public" | Select-Object -ExpandProperty Access - 两者结果需对照理解:用户最终权限 = 共享权限 ∩ NTFS 权限(取交集,更严格者生效)
远程查询其他计算机的共享信息
使用 CimSession 实现跨主机查询(目标需启用 WinRM 或防火墙允许 SMB/WMI):
- 先创建会话:
$session = New-CimSession -ComputerName "Server01" - 再执行远程查询:
Get-SmbShare -CimSession $session - 也可用 WMI/CIM 替代(兼容性更好):
Get-CimInstance -ClassName Win32_Share -CimSession $session - 注意:普通用户需有远程管理权限,建议使用域账户并提前测试连接
导出结果为 CSV 方便分析
批量检查多台服务器时,可将结果结构化保存:
- 本地共享导出示例:
Get-SmbShare | Select-Object Name, Path, Description, ShareState | Export-Csv -Path "C:\shares.csv" -NoTypeInformation - 带远程主机名的导出(配合循环):
Invoke-Command -ComputerName Srv01,Srv02 -ScriptBlock { Get-SmbShare } | Select-Object PSComputerName, Name, Path, Description | Export-Csv ... - 导出后可用 Excel 或 Import-Csv 进一步筛选,比如找未设置描述的共享:
Import-Csv shares.csv | Where-Object { $_.Description -eq "" }











