C#:
// Подключаем пространства имён
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net.NetworkInformation;
namespace PingSystemAndCheckAdminShare
{
class Program
{
// данная коллекция будет содержать имена рабочих станций
private static List<string> hosts = new List<string>();
public static void Main()
{
// В переменную hosts записываем все рабочие станции из файла
hosts = getComputersListFromTxtFile("D:\\computersList.txt");
// Создаём Action типизированный string, данный Action будет запускать функцию Pinger
Action<string> asyn = new Action<string>(Pinger);
// Для каждой рабочей станции запускаем Pinger'а
hosts.ForEach(e =>
{
asyn.Invoke(e);
});
Console.ReadKey();
}
// Функция получения списка рабочих станций из файла
private static List<string> getComputersListFromTxtFile(string pathToFile)
{
List<string> computersList = new List<string>();
using (StreamReader sr = new StreamReader(pathToFile, Encoding.Default))
{
string line = "";
while ((line = sr.ReadLine()) != null)
{
computersList.Add(line);
}
}
return computersList;
}
// Функция записи проблемных рабочих станций в файл
private static void writeProblemComputersToFile(string fullPathToFile, List<string> problemComputersList)
{
using (StreamWriter sw = new StreamWriter(fullPathToFile, true, Encoding.Default))
{
problemComputersList.ForEach(e => {sw.WriteLine(e);});
}
}
// Проверяем доступна ли папка admin$
private static bool checkAdminShare(string computerName)
{
if (Directory.Exists("\\\\" + computerName + "\\admin$"))
{
return true;
}
else
{
return false;
}
}
// Наш основной класс, который будет отправлять команду ping
async private static void Pinger(string hostAdress)
{
// Создаём экземпляр класса Ping
Ping png = new Ping();
try
{
// Пингуем рабочую станцию hostAdress
PingReply pr = await png.SendPingAsync(hostAdress);
List<string> problemComputersList = new List<string>();
Console.WriteLine(string.Format("Status for {0} = {1}, ip-адрес: {2}", hostAdress, pr.Status, pr.Address));
// Если рабочая станция пингуется и папка admin$ недоступна,
// то такую машину заносим в список
if (pr.Status == IPStatus.Success && !checkAdminShare(hostAdress))
{
problemComputersList.Add(hostAdress);
}
// Записываем в файл все проблемные машины
writeProblemComputersToFile("D:\\problemsWithAdminShare.txt", problemComputersList);
}
catch
{
Console.WriteLine("Возникла ошибка! " + hostAdress);
}
}
}
}