我试图搜索 AD 网络中所有机器上的所有驱动器,但我的方法效率不高。基本上,我想出了一个这样的脚本,它的作用如下:
- 从 AD 获取所有计算机。
- 检查是否存在 WMI 连接,记录机器,以便我查看。
- 获取计算机上的所有物理驱动器。
- 搜索远程共享上的文件
$computers = Get-ADComputer -filter * | Select -Exp Name
$computers.Count
$i = 0
foreach ($computer in $computers) {
$i++
Write-Host "Checking Computer Number " $i " with the hostname " $computer
if (Test-Connection $computer -Quiet )
{
$drives = get-wmiobject -computer $computer win32_logicaldisk -filter "drivetype=3" | select -Exp DeviceID
foreach ($drive in $drives)
{
$drive = $drive.Substring(0,$drive.Length-1) + "$"
Get-ChildItem -Recurse -Force \\$computer\$drive -ErrorAction SilentlyContinue | Where-Object { ($_.PSIsContainer -eq $false) -and ( $_.Extension -eq ".crypt") } | Select-Object Name,Directory| Export-Csv C:\FoundFiles.csv -nti -append
}
}
else
{
$computer >> C:\OfflineComputers.txt
}
}
问题在于,这样做效率很低,速度很慢。在拥有 150 多个服务器和 50 多个客户端的网络上,可能需要数周时间才能完成。
您认为我该如何让它运行得更快?使用“调用命令”向每个服务器发送命令是否可行?我不需要实际的代码来执行此操作,只要有一个方向就足够了。