Задача проверить сервера в сети на доступность smb и admin$
# Путь к файлу с серверами $csvPath = "C:\Temp\not client.csv" # Импорт данных из CSV $servers = Import-Csv -Path $csvPath # Проход по каждому серверу из списка foreach ($server in $servers) { # Извлекаем имя сервера из колонки "Name" $serverName = $server.Name # Инициализируем переменные $ipAddress = "" $smbPortStatus = "Порт SMB недоступен" $adminShareStatus = "Шара admin$ недоступна" # Получаем IP-адрес try { $ipAddress = (Resolve-DnsName -Name $serverName -ErrorAction Stop).IPAddress } catch { $ipAddress = "IP не найден" } # Проверяем доступность сервера if (Test-Connection -ComputerName $serverName -Count 1 -Quiet) { # Проверяем порт SMB (445) try { $tcpClient = New-Object System.Net.Sockets.TcpClient $tcpClient.Connect($serverName, 445) $smbPortStatus = "Порт SMB доступен" $tcpClient.Close() } catch { $smbPortStatus = "Порт SMB недоступен" } # Проверяем доступность шары admin$ if (Test-Path "\\$serverName\admin$") { $adminShareStatus = "Шара admin$ доступна" } else { $adminShareStatus = "Шара admin$ недоступна" } Write-Output "$serverName ($ipAddress): доступен, $smbPortStatus, $adminShareStatus" } else { Write-Output "$serverName ($ipAddress): недоступен" } }
Для powesrshell 7
# Путь к файлу с серверами $csvPath = "C:\Temp\not client.csv" # Путь для сохранения результата $outputPath = "C:\Temp\ServerCheckResults.csv" # Импорт данных из CSV $servers = Import-Csv -Path $csvPath # Список результатов $results = @() # Параллельная обработка $results = $servers | ForEach-Object -Parallel { # Переменные внутри блока - изолированы $serverName = $_.Name $ipAddress = "" $smbPortStatus = "Порт SMB недоступен" $adminShareStatus = "Шара admin$ недоступна" # Получаем IP-адрес try { $ipAddress = (Resolve-DnsName -Name $serverName -ErrorAction Stop).IPAddress } catch { $ipAddress = "IP не найден" } # Проверяем доступность сервера if (Test-Connection -ComputerName $serverName -Count 1 -Quiet) { # Проверяем порт SMB (445) try { $tcpClient = New-Object System.Net.Sockets.TcpClient $tcpClient.Connect($serverName, 445) $smbPortStatus = "Порт SMB доступен" $tcpClient.Close() } catch { $smbPortStatus = "Порт SMB недоступен" } # Проверяем доступность шары admin$ if (Test-Path "\\$serverName\admin$") { $adminShareStatus = "Шара admin$ доступна" } else { $adminShareStatus = "Шара admin$ недоступна" } } else { $smbPortStatus = "Сервер недоступен" $adminShareStatus = "Сервер недоступен" } # Возвращаем результат как объект [PSCustomObject]@{ ServerName = $serverName IPAddress = $ipAddress SMBPortStatus = $smbPortStatus AdminShareStatus = $adminShareStatus } } -ThrottleLimit 10 -AsJob # Ожидание завершения всех задач $results | Wait-Job | Receive-Job | Export-Csv -Path $outputPath -Delimiter ';' -Encoding UTF8 -NoTypeInformation Write-Output "Результаты проверки сохранены в $outputPath"
Similar Posts:
- Как провести адудит паролей в windows ad
- Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.
- Как посмотреть кто залогинен на серверах в сети powershell
- Как завершить сессию на всех серверах в локальной сети.
- Как найти где в AD на серверах включен smbv1 и smbv2