获取网络中所有可访问文件服务器域名的PowerShell命令或工具求助
看起来你遇到的情况挺棘手的——明明能访问部分文件服务器,却没法找到所有的域名,而且常规的net view、Get-PSDrives这些命令都不管用对吧?我帮你整理几个更针对性的方法,你可以挨个试试:
查看已建立的SMB连接
试试Get-SmbConnection这个命令,它会列出你当前已经通过SMB连接过的所有服务器,包括它们的完整名称。如果只想看服务器名,可以再加个筛选:Get-SmbConnection | Select-Object -Unique ServerName。说不定能从中发现你没注意到的服务器域名。用NetBIOS扫描网络设备
如果你的网络里还在用NetBIOS协议,可以试试nbtstat命令。比如你知道某个服务器的IP,运行nbtstat -a [服务器IP]就能获取它的NetBIOS名称;要是想扫描整个网段,可以用一段PowerShell循环来实现:# 获取本地IPv4地址对应的网段 $localIP = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "以太网").IPAddress $subnetPrefix = $localIP.Substring(0, $localIP.LastIndexOf('.')) # 扫描网段内所有IP的NetBIOS信息 for ($i=1; $i -le 254; $i++) { $targetIP = "$subnetPrefix.$i" # 尝试获取目标IP的NetBIOS信息 $nbtOutput = nbtstat -a $targetIP 2>&1 if ($LASTEXITCODE -eq 0) { $serverName = ($nbtOutput | Select-String "NetBIOS Remote Machine Name").Line.Split(':')[-1].Trim() Write-Host "找到文件服务器:\\$serverName\ (IP: $targetIP)" } }不过要注意,这个扫描速度可能有点慢,而且如果服务器禁用了NetBIOS,就没法被探测到。
查询域内的服务器(如果是域环境)
要是你的网络是域环境,而且你有域权限,可以先查已知服务器所在的域:Get-CimInstance Win32_ComputerSystem -ComputerName [已知服务器名] | Select-Object Name, Domain
拿到域名后,再用Get-ADComputer -Filter {OperatingSystem -like "*Server*"}来列出域内所有服务器,这样就能找到所有文件服务器的名称了。不过这个方法需要你安装Active Directory模块。用第三方扫描工具
如果不想折腾命令,可以试试像Advanced IP Scanner这样的工具,它能快速扫描整个网段,显示所有在线设备的名称、IP和共享资源,操作起来很直观,说不定能帮你找到所有隐藏的文件服务器。
另外,你之前试过的那些命令效果有限的原因也很明确:net view依赖网络浏览服务,很多现代网络会禁用这个服务;Get-PSDrives只显示已经映射的驱动器;Get-SmbShare和Get-SmbMapping也只针对已连接的共享或本地共享,所以看不到未连接的服务器。
备注:内容来源于stack exchange,提问作者otf4

