Test netconnection не распознано как имя командлета
Перейти к содержимому

Test netconnection не распознано как имя командлета

  • автор:

Ошибка сервер RPC недоступен, решаем за минуту

the rpc server is unavailable

Настройка серверов windows и linux

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разобрали замечательную утилиту командной строки robocopy, и с ее помощью научились создавать точные копии папок, двигать их в нужное расположение и многое другое. В сегодняшней публикации я покажу вам, как устранять ошибку «Сервер RPC недоступен (The rpc server is unavailable)», покажу примеры, когда ее мониторинг очень важен в работе корпоративных сервисов.

Для чего нужна служба «Удаленный вызов процедур (RPC)»

Удаленный вызов процедур (RPC) — это протокол, который одна программа может использовать для запроса услуги у программы, расположенной на другом компьютере в сети, без необходимости разбираться в деталях сети. RPC используется для вызова других процессов на удаленных системах, таких как локальная система. Вызов процедуры также иногда называют вызовом функции или вызовом подпрограммы .

RPC использует модель клиент-сервер. Запрашивающая программа — это клиент, а программа, предоставляющая услуги, — это сервер. Подобно обычному или локальному вызову процедуры, RPC — это синхронная операция, требующая приостановки запрашивающей программы до тех пор, пока не будут возвращены результаты удаленной процедуры. Однако использование облегченных процессов или потоков, которые совместно используют одно и то же адресное пространство, позволяет одновременно выполнять несколько RPC.

Язык определения интерфейса (IDL) — язык спецификации, используемый для описания интерфейса прикладного программирования (API) программного компонента — обычно используется в программном обеспечении удаленного вызова процедур. В этом случае IDL обеспечивает мост между машинами на обоих концах связи, которые могут использовать разные операционные системы (ОС) и компьютерные языки.

Процедура сообщения RPC

Когда программные операторы, использующие структуру RPC, компилируются в исполняемую программу, в скомпилированный код включается заглушка, которая выступает в качестве представителя кода удаленной процедуры. Когда программа запускается и выполняется вызов процедуры, заглушка получает запрос и пересылает его клиентской программе и времени выполнения на локальном компьютере. При первом вызове клиентской заглушки она связывается с сервером имен, чтобы определить транспортный адрес, по которому находится сервер.

Программа среды выполнения клиента знает, как обращаться к удаленному компьютеру и серверному приложению, и отправляет сообщение по сети, которое запрашивает удаленную процедуру. Точно так же сервер включает исполняющую программу и заглушку, которая взаимодействует с самой удаленной процедурой. Протоколы ответа-запроса возвращаются таким же образом.

Данная служба есть в любой операционной системе Windows, начиная от Windows 7 и заканчивая Windows 11 и в любой из Windows Server редакции.

Как работает RPC?

Когда вызывается служба RPC (удаленный вызов процедуры), вызывающая среда приостанавливается, параметры процедуры передаются по сети в среду, в которой должна выполняться процедура, а затем процедура выполняется в этой среде. Когда процедура завершается, результаты передаются обратно в вызывающую среду, где выполнение возобновляется, как если бы оно возвращалось из обычного вызова процедуры.

Во время RPC выполняются следующие шаги:

  1. Клиент вызывает клиентскую заглушку. Вызов представляет собой вызов локальной процедуры с параметрами, помещенными в стек обычным способом.
  2. Клиентская заглушка упаковывает параметры процедуры в сообщение и выполняет системный вызов для отправки сообщения. Упаковка параметров процедуры называется маршалингом.
  3. Локальная ОС клиента отправляет сообщение с клиентского компьютера на удаленный сервер.
  4. Серверная ОС передает входящие пакеты на серверную заглушку.
  5. Заглушка сервера распаковывает параметры из сообщения — это называется демаршалингом .
  6. Когда серверная процедура завершается, она возвращается к серверной заглушке, которая маршалирует возвращаемые значения в сообщение. Затем заглушка сервера передает сообщение на транспортный уровень.
  7. Транспортный уровень отправляет полученное сообщение обратно на клиентский транспортный уровень, который возвращает сообщение клиентской заглушке.
  8. Клиентская заглушка не упорядочивает возвращаемые параметры, и выполнение возвращается вызывающей стороне.

Клиент RPC по 135 порту подключается к службе RPC Endpoint Mapper (сопоставления конечных точек), а далее уже запрашивает номер порта, где запущено нужное RPC приложение. Служба сопоставления конечных точек вернет клиенту RPC номер динамического RPC порта (диапазон 1024 – 65535), на котором работает нужная служба. Дальше уже все взаимодействие идет по TCP порту

Если вы видите ошибку «Сервер RPC недоступен” (The RPC server is unavailable)», то у вас точно недоступен порт 135. Это может быть критичным для ряда ситуации. Например вы не сможете сохранить настройки RDS фермы, если у одного из хостов RDSH есть проблемы с RPC, то вы будите видеть ошибку » Could not change the connection state for server», вы не сможете перевести его в режим обслуживания ( Drain Mode)

Could not change the connection state for server

Или в приложении Terminal Services Manager будет ошибка при попытке получения данных «Сервер RPC недоступен«.

Сервер RPC недоступен

Так же RPC может быть причиной проблемы в репликации контроллеров домена, где в логах Windows будет фигурировать ошибка ID 1722. Это очень не приятный момент, который может привести к большим проблемам.

Типы RPC

Существует пять типов RPC:

  1. Обычный метод работы, при котором клиент выполняет вызов и не продолжает работу до тех пор, пока сервер не вернет ответ.
  2. Клиент звонит и продолжает свою обработку. Сервер не отвечает.
  3. Средство для отправки нескольких клиентских неблокирующих вызовов в одном пакете.
  4. У клиентов RPC есть средство широковещательной рассылки, т. е. Они могут отправлять сообщения на множество серверов, а затем получать все полученные ответы.
  5. Клиент делает неблокирующий вызов клиент/сервер; сервер сигнализирует о завершении вызова путем вызова процедуры, связанной с клиентом.

Почему может не работать служба RPC

  1. Удаленный компьютер с которым идет взаимодействие выключен
  2. На удаленном сервере не запущена или перестала работать служба RPC
  3. Подключение по RPC происходит не к тому серверу (Может быть проблема с DNS или IP адресом)
  4. Есть блокировки между клиентом и сервером на фаэрволе
  5. Используются некорректные настройки сетевого подключение на клиенте или сервере

Преимущества удаленного вызова процедур

К преимуществам удаленного вызова процедур можно отнести следующее:

  • помогает клиентам общаться с серверами посредством традиционного использования вызовов процедур на языках высокого уровня;
  • может использоваться как в распределенной, так и в локальной среде;
  • поддерживает процессно-ориентированные и поточно-ориентированные модели;
  • скрывает внутренний механизм передачи сообщений от пользователя;
  • требует минимальных усилий для переписывания и повторной разработки кода;
  • обеспечивает абстракцию, т. е. характер передачи сообщений по сети скрыт от пользователя;
  • опускает многие уровни протокола для повышения производительности.

Недостатки RPC

Некоторые из недостатков RPC включают следующее:

  • Клиент и сервер используют разные среды выполнения для своих соответствующих подпрограмм, и использование ресурсов, например файлов, также является более сложным. Следовательно, системы RPC не подходят для передачи больших объемов данных.
  • RPC очень уязвим для сбоев, потому что он включает в себя систему связи, другую машину и другой процесс.
  • Единого стандарта для RPC не существует; это может быть реализовано множеством способов.
  • RPC основан только на взаимодействии и, как таковой, не предлагает гибкости, когда дело касается аппаратной архитектуры.

Проверка доступности службы RPC

  • Как я и писал выше, в первую очередь вы должны убедиться, что удаленный компьютер к которому вы делаете проверку RPC доступен по сети. Для этого элементарно откройте командную строку или оболочку PowerShell и воспользуйтесь командой Ping, NSlookup, Test-NetConnection. Я буду производить проверку службы удаленного вызова в PowerShell. Выполним для начала команду Ping. Мой удаленный сервер называется SVT201S01.root.pyatilistnik.org. Пишем команду:

ping SVT201S01.root.pyatilistnik.org

  • Далее выполните Nslookup, чтобы удостовериться, что нужное вам имя компьютера преобразовывается в нужный IP-адрес. Выполните:

nslookup SVT201S01.root.pyatilistnik.org

Небольшой пример из практики, предположим, что вы мигрировали сервер в другую подсеть, в итоге в DNS должна быть изменена соответствующая запись, но Windows это поймет не сразу, так как у нее есть свой локальный кэш, он живет 15 минут, поэтому если при проверке DNS имени вам выдается не тот IP-адрес, вам необходимо произвести очистку кэша DNS.

Проверка доступности службы RPC через nslookup

  • Далее я вам советую проверить отвечает ли порт. Напоминаю, что служба RPC Endpoint Mapper слушает порт под номером 135. В PowerShell введите команду:

Test-NetConnection svt2019s01.root.pyatilistnik.org -Port 135

Если удаленный RPC порт доступен вы в в строке TcpTestSucceeded будет стоять статус «True».

Проверка доступности службы RPC через Test-NetConnection

Если будет порт закрыт или блокируется, то ошибка «Сервер RPC недоступен (The rpc server is unavailable)» вам обеспечена. Поняв, что порт не отвечает, нужно удостовериться, что трафик от клиента до сервера не блокирует фаервол. По умолчанию в любой версии Windows есть встроенный брандмауэр. На время тестирования и поиска причины, я советую его выключить для всех профилей. Сделаем мы это через командную строку:

Netsh Advfirewall set allprofiles state off

Данная команда выключит брандмауэр на всех трех профилях сетевой карты.

Отключение брандмауэра Windows через командную строку

Далее если порт 135 стал доступен, то можно делать правила на удаленном сервере. Напоминаю, что нужно сделать правило для трех служб:

  1. Remote Procedure Call (RPC) — Удаленный вызов процедур (RPC)
  2. RPC Endpoint Mapper — Сопоставитель конечных точек RPC
  3. COM Server Process Launcher — Модуль запуска процессов DCOM-сервера

Подробнее, о том как сделать правила — https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-firewall/create-inbound-rules-to-support-rpc)

Еще хочу отметить, что если у вас есть сторонние антивирусные решения, например Касперский, то там так же есть встроенный сетевой экран, где так же нужно будет создать необходимые, разрешающие правила, которые корректно будут обрабатывать трафик динамических RPC портов.

Проверка работы служб RPC

Следующим шагом является проверка состояния службы на нужном вам сервере или компьютере. Проверять следует три службы:

  1. Remote Procedure Call (RPC) — Удаленный вызов процедур (RPC)
  2. RPC Endpoint Mapper — Сопоставитель конечных точек RPC
  3. COM Server Process Launcher — Модуль запуска процессов DCOM-сервера

В оболочке PowerShell выполните команду:

Для локального сервера — Get-Service RpcSs,RpcEptMapper,DcomLaunch| Select DisplayName,Status,StartType

Для удаленного выполнения Enter-PSSession svt2019s01 далее Get-Service RpcSs,RpcEptMapper,DcomLaunch| Select DisplayName,Status,StartType

Напоминаю, что в команде svt2019s01, это имя удаленного сервера. Как видно из примера, все службы RPC запущены и имею автоматический тип запуска.

Проверка состояния служб RPC

Если службы не запущены, то откройте оснастку » services.msc’, зайдите в свойства службы и выставите автозапуск и попробуйте запустить вручную.

services.msc

Запуск реестра Windows

  • Модуль запуска процессов DCOM-сервера — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DcomLaunch
  • Сопоставитель конечных точек RPC — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcEptMapper
  • Удаленный вызов процедур (RPC) — ветка реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcSs

В каждом из этих расположений есть ключик «Start«, выставите ему значение «2«, это будет означать автоматический запуск службы.

Управление автозапуском службы через реестр

Дополнительные сетевые проверки

В некоторых случаях причиной ошибок с доступностью RPC выступает сбой на сетевых адаптерах. Помогает сброс сетевых настроек и перезагрузка. В сети с Active Directory, старайтесь, чтобы на всех ваших сетевых адаптерах в свойствах были выставлены обе галки IPV4 и IPV6, особенно это актуально для контроллеров домена, где вы легко можете получать ошибку 1722. Еще может помочь отключение протокола Teredo у IPv6. В командной строке выполните:

netsh interface teredo set state disabled

Для включения обратно введите:

netsh interface teredo set state enabled

Еще на сайте Майкрософт пишут, что необходимо на сервере RPC иметь включенную службу «Удаленный реестр«. На этом у меня все, с вами был Иван Сёмин, автор и создатель IP портала Pyatilistnik.org.

Популярные Похожие записи:
  • Ошибка DCOM ID 10036, решаем за минутуОшибка DCOM ID 10036, решаем за минуту
  • Словарь системного администратора
  • Ошибка Cannot initialize SFTP protocol. Is the host running an SFTP server
  • Использование таблиц в качестве шаблонов в базе данных Azure для PostgreSQLИспользование таблиц в качестве шаблонов в базе данных Azure для PostgreSQL
  • Решено: Error 1061 The service cannot accept control messages at this time
  • Как посмотреть логи windowsКак посмотреть логи windows

Фев 15, 2022 12:21 Автор — Сёмин Иван

6 Responses to Ошибка сервер RPC недоступен, решаем за минуту

Опечатка (в конце статьи):
«Для включения обратно введите:» дальше должно быть «netsh interface teredo set state enabled».

Полгода прошло, всем поХ. «Для включения обратно введите:» дальше должно быть «netsh interface teredo set state enabled»

virusik1975 :

netsh interface teredo set state disabled state:
disabled — отключение службы teredo
client — включение клиента teredo
enterpriseclient — пропуск обнаружения управляемой сети
server — включение сервера teredo
default — состояние по умолчанию (клиент)

PS C:\Windows\System32> Test-NetConnection 192.168.0.41 -Port 135
Имя «Test-NetConnection» не распознано как имя командлета, функции, файла скрип
та или выполняемой программы. Проверьте правильность написания имени, а также н
аличие и правильность пути, после чего повторите попытку.
строка:1 знак:19
+ Test-NetConnection + CategoryInfo : ObjectNotFound: (Test-NetConnection:String) [],
CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Спасибо, помогло.

Что нужно разрешить в Касперском, чтобы ушла ошибка «Ошибка сервер RPC недоступен», отключать его каждый раз неудобно.

Test-Connection

Отправляет пакеты эхо-запроса ICMP или pings на один или несколько компьютеров.

Синтаксис

Test-Connection [-TargetName] [-Ping] [-IPv4] [-IPv6] [-ResolveDestination] [-Source ] [-MaxHops ] [-Count ] [-Delay ] [-BufferSize ] [-DontFragment] [-Quiet] [-TimeoutSeconds ] []
Test-Connection [-TargetName] -Repeat [-Ping] [-IPv4] [-IPv6] [-ResolveDestination] [-Source ] [-MaxHops ] [-Delay ] [-BufferSize ] [-DontFragment] [-Quiet] [-TimeoutSeconds ] []
Test-Connection [-TargetName] -Traceroute [-IPv4] [-IPv6] [-ResolveDestination] [-Source ] [-MaxHops ] [-Quiet] [-TimeoutSeconds ] []
Test-Connection [-TargetName] -MtuSize [-IPv4] [-IPv6] [-ResolveDestination] [-Quiet] [-TimeoutSeconds ] []
Test-Connection [-TargetName] -TcpPort [-IPv4] [-IPv6] [-ResolveDestination] [-Source ] [-Count ] [-Delay ] [-Repeat] [-Quiet] [-TimeoutSeconds ] [-Detailed] []

Описание

Командлет Test-Connection отправляет пакеты запросов на эхо-запросы (ICMP) протокола управления Интернетом или pings на один или несколько удаленных компьютеров и возвращает ответы на эхо-ответы. Этот командлет можно использовать для определения того, можно ли связаться с определенным компьютером через IP-сеть.

Параметры можно использовать для указания как отправки Test-Connection , так и для получения компьютеров, для выполнения команды в качестве фонового задания, задания времени ожидания и количества пингов, а также для настройки подключения и проверки подлинности.

В отличие от знакомой команды ping, Test-Connection возвращает объект Test Подключение ionCommand+PingStatus, который можно исследовать в PowerShell. Параметр Quiet возвращает логическое значение в объекте System.Boolean для каждого проверенного подключения. Если тестируются несколько подключений, возвращается массив логических значений.

Примеры

Пример 1. Отправка запросов эхо на удаленный компьютер

Этот пример отправляет пакеты эхо-запроса с локального компьютера на компьютер Server01.

Test-Connection -TargetName Server01 -IPv4 Destination: Server01 Ping Source Address Latency BufferSize Status (ms) (B) ---- ------ ------- ------- ---------- ------ 1 ADMIN1 10.59.137.44 24 32 Success 2 ADMIN1 10.59.137.44 39 32 Success 3 ADMIN1 * * * TimedOut 4 ADMIN1 10.59.137.44 28 32 Success

Test-Connection использует параметр TargetName для указания компьютера Server01. Параметр IPv4 указывает протокол для теста.

Ряд объектов Test Подключение ionCommand+PingStatus отправляются в выходной поток, один объект на ответ ping от целевого компьютера.

Пример 2. Отправка запросов эхо на несколько компьютеров

Этот пример отправляет запросы связи с локального компьютера на несколько удаленных компьютеров.

Test-Connection -TargetName Server01, Server02, Server12

Пример 3. Использование параметров для настройки команды тестирования

В этом примере используются параметры Test-Connection для настройки команды. Локальный компьютер отправляет тест проверки ping на удаленный компьютер.

Test-Connection -TargetName Server01 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256

Test-Connection использует параметр TargetName для указания Server01. Параметр Count указывает три проверки ping отправляются на компьютер Server01 с задержкой 2-секундных интервалов.

Вы можете использовать эти параметры, если ответ на связь, как ожидается, займет больше времени, чем обычно, из-за расширенного количества прыжков или состояния сети с высоким трафиком.

Пример 4. Запуск теста в качестве фонового задания

В этом примере показано, как выполнить Test-Connection команду в качестве фонового задания PowerShell.

$job = Start-Job -ScriptBlock < Test-Connection -TargetName (Get-Content -Path "Servers.txt") >$Results = Receive-Job $job -Wait

Команда Start-Job использует Test-Connection командлет для проверки связи с множеством компьютеров в организации. Значение параметра TargetName — это Get-Content команда, которая считывает список имен компьютеров из Servers.txt файла. Команда использует Start-Job командлет для выполнения команды в качестве фонового задания и сохраняет задание в переменной $job .

Команда Receive-Job будет указана до -Wait завершения задания, а затем получает результаты и сохраняет их в переменной $Results .

Пример 5. Создание сеанса только в случае успешного выполнения теста подключения

В этом примере создается сеанс на компьютере Server01 только в том случае, если по крайней мере один из ping, отправленных на компьютер.

if (Test-Connection -TargetName Server01 -Quiet)

Командлет Test-Connection отправляет Server01 связь с компьютером с предоставленным параметром Quiet . Результирующее значение равно $True , если любой из четырех pings успешно выполнен. Если ни одна из ping не выполнена успешно, значение равно $False .

Test-Connection Если команда возвращает значение $True , команда использует New-PSSession командлет для создания PSSession.

Пример 6. Использование параметра Traceroute

В PowerShell 6.0 параметр Traceroute сопоставляет маршрут между локальным компьютером и удаленным назначением, указанным с параметром TargetName .

Test-Connection -TargetName www.google.com -Traceroute Target: google.com Hop Hostname Ping Latency Status Source TargetAddress (ms) --- -------- ---- ------- ------ ------ ------------- 1 172.20.0.1 1 4 Success Lira 172.217.9.174 1 172.20.0.1 2 3 Success Lira 172.217.9.174 1 172.20.0.1 3 2 Success Lira 172.217.9.174 2 12.108.153.193 1 3 Success Lira 172.217.9.174 2 12.108.153.193 2 3 Success Lira 172.217.9.174 2 12.108.153.193 3 2 Success Lira 172.217.9.174 3 12.244.85.177 1 11 Success Lira 172.217.9.174 3 12.244.85.177 2 12 Success Lira 172.217.9.174 3 12.244.85.177 3 12 Success Lira 172.217.9.174 4 * 1 14 DestinationNetw… Lira 172.217.9.174 4 * 2 * TimedOut Lira 172.217.9.174 4 * 3 20 DestinationNetw… Lira 172.217.9.174 5 * 1 * TimedOut Lira 172.217.9.174 5 * 2 15 DestinationNetw… Lira 172.217.9.174 5 * 3 * TimedOut Lira 172.217.9.174 6 * 1 18 DestinationNetw… Lira 172.217.9.174 6 * 2 * TimedOut Lira 172.217.9.174 6 * 3 16 DestinationNetw… Lira 172.217.9.174 7 * 1 * TimedOut Lira 172.217.9.174 7 * 2 * TimedOut Lira 172.217.9.174 7 * 3 * TimedOut Lira 172.217.9.174 8 * 1 * TimedOut Lira 172.217.9.174 8 * 2 * TimedOut Lira 172.217.9.174 8 * 3 * TimedOut Lira 172.217.9.174 9 * 1 * TimedOut Lira 172.217.9.174 9 * 2 * TimedOut Lira 172.217.9.174 9 * 3 * TimedOut Lira 172.217.9.174 10 * 1 * TimedOut Lira 172.217.9.174 10 * 2 * TimedOut Lira 172.217.9.174 10 * 3 * TimedOut Lira 172.217.9.174 11 172.217.9.174 1 23 Success Lira 172.217.9.174 11 172.217.9.174 2 21 Success Lira 172.217.9.174 11 172.217.9.174 3 22 Success Lira 172.217.9.174

Команда Test-Connection вызывается с параметром Traceroute . Результаты, являющиеся [Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatus] объектами, являются выходными данными в поток выходных данных Success .

Пример 7. Получение подробных выходных данных для теста TCP-подключения

При использовании подробного параметра этот командлет возвращает подробные сведения о состоянии попыток ПОДКЛЮЧЕНИЯ TCP.

Test-Connection bing.com -TCPPort 443 -Detailed -Count 4 Target: bing.com Id Source Address Port Latency(ms) Connected Status -- ------ ------- ---- ----------- --------- ------ 1 circumflex 2620:1ec:c11::200 443 12 True Success 2 circumflex 2620:1ec:c11::200 443 14 True Success 3 circumflex 2620:1ec:c11::200 443 17 True Success 4 circumflex 2620:1ec:c11::200 443 17 True Success

Параметры

-BufferSize

Указывает размер (в байтах) буфера, отправленного с помощью этой команды. Значение по умолчанию: 32.

Type: Int32
Aliases: Size, Bytes, BS
Position: Named
Default value: 32
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Count

Указывает число отправляемых запросов проверки связи. Значение по умолчанию — 4.

Type: Int32
Position: Named
Default value: 4
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Delay

Задает интервал между проверками связи в секундах.

Type: Int32
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Detailed

При использовании подробного параметра этот командлет возвращает подробные сведения о состоянии попыток ПОДКЛЮЧЕНИЯ TCP.

Этот параметр добавлен в PowerShell 7.4.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-DontFragment

Этот параметр задает флаг «Не фрагментировать » в заголовке IP- адреса. Этот параметр можно использовать с параметром BufferSize для проверки размера MTU пути. Дополнительные сведения о Path MTU см . в статье «Обнаружение пути MTU » в википедии.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-IPv4

Заставляет командлет использовать протокол IPv4 для теста.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-IPv6

Заставляет командлет использовать протокол IPv6 для теста.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-MaxHops

Задает максимальное количество прыжков, которое может быть отправлено сообщение запроса ICMP. Значение по умолчанию контролируется операционной системой. Значение по умолчанию для Windows 10 и выше — 128 прыжков.

Type: Int32
Aliases: Ttl, TimeToLive, Hops
Position: Named
Default value: 128
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-MtuSize

Этот параметр используется для обнаружения размера MTU пути. Командлет возвращает объект PingReply#MTUSize , содержащий размер MTU пути к целевому объекту. Дополнительные сведения о Path MTU см . в статье «Обнаружение пути MTU » в википедии.

Type: SwitchParameter
Aliases: MtuSizeDetect
Position: Named
Default value: False
Required: True
Accept pipeline input: False
Accept wildcard characters: False

-Ping

Вызывает командлет для выполнения теста проверки ping. Это режим по умолчанию для командлета Test-Connection .

Type: SwitchParameter
Position: Named
Default value: True
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Quiet

Параметр Quiet возвращает логическое значение. Использование этого параметра подавляет все ошибки.

Каждое проверенное соединение возвращает логическое значение. Если параметр TargetName указывает несколько компьютеров, возвращается массив логических значений.

Если любая связь с заданным целевым объектом успешно выполнена, $True возвращается.

Если возвращается сбой $False всех пингов к заданному целевому объекту.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Repeat

Вызывает непрерывное отправку запросов связи командлетом. Если значение TargetName является массивом целевых объектов, командлет повторяет запросы связи только для первого целевого объекта. Он игнорирует оставшиеся целевые объекты. Этот параметр нельзя использовать с параметром Count .

Type: SwitchParameter
Aliases: Continuous
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-ResolveDestination

Вызывает попытку командлета разрешить DNS-имя целевого объекта. При использовании в сочетании с параметром Traceroute DNS-имена всех промежуточных узлов также будут извлечены, если это возможно.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Source

Указывает имена компьютеров, на которых создается проверка связи. Введите разделенный запятыми список имен компьютеров. По умолчанию используется локальный компьютер.

Этот параметр не поддерживается в PowerShell версии 6 и более поздних версий. При предоставлении этого параметра возникает ошибка.

Type: String
Position: Named
Default value: Local computer
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-TargetName

Указывает компьютеры для тестирования. Введите имена компьютеров или IP-адреса в формате IPv4 или IPv6.

Type: String [ ]
Aliases: ComputerName
Position: 0
Default value: None
Required: True
Accept pipeline input: True
Accept wildcard characters: False

-TcpPort

Указывает номер TCP-порта в целевом объекте, который будет использоваться в тесте TCP-подключения.

Командлет пытается сделать TCP-подключение к указанному порту в целевом объекте.

  • Командлет возвращается $True , если подключение выполнено.
  • Командлет возвращается $False , если соединение не сделано.
Type: Int32
Position: Named
Default value: None
Required: True
Accept pipeline input: False
Accept wildcard characters: False

-TimeoutSeconds

Задает значение времени ожидания для теста. Тест завершается ошибкой, если ответ не получен до истечения срока ожидания. Значение по умолчанию — пять секунд.

Этот параметр появился в PowerShell 6.0.

Type: Int32
Position: Named
Default value: 5 seconds
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Traceroute

Приводит к тому, что командлет выполняет проверку трассировки. При использовании этого параметра командлет возвращает TestConnectionCommand+TraceStatus объект.

Type: SwitchParameter
Position: Named
Default value: False
Required: True
Accept pipeline input: False
Accept wildcard characters: False

Входные данные

None

Невозможно передать объекты в этот командлет.

Выходные данные

Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatus

По умолчанию этот командлет возвращает объект Test Подключение ionCommand+PingStatus для каждого ответа проверки связи.

Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatus

При использовании параметра Traceroute этот командлет возвращает объект Test Подключение ionCommand+TraceStatus для каждого ответа связи по маршруту.

При использовании параметров Quiet или TcpPort этот командлет возвращает логическое значение. Если командлет проверяет несколько подключений, он возвращает массив логических значений.

Microsoft.PowerShell.Commands.TestConnectionCommand+PingMtuStatus

При использовании параметра MtuSize этот командлет возвращает объект Test Подключение ionCommand+PingMtuStatus для каждого ответа связи.

Microsoft.PowerShell.Commands.TestConnectionCommand+TcpPortStatus

При использовании подробного параметра этот командлет возвращает объект Test Подключение ionCommand+TcpPortStatus, показывающий состояние TCP-подключения.

Примечания

В Linux с помощью параметра BufferSize или любого сочетания параметров с набором параметров MtuSizeDetect , который приводит к тому, что размер буфера, не относящийся к умолчанию, может потребоваться sudo 32 байта. В этих случаях Test-Command вызывает исключение с сообщением, указывающим, что sudo это необходимо.

Связанные ссылки

  • Restart-Computer
  • Stop-Computer

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

CMD или PowerShell ?

Командная строка долгое время является неотъемлемой частью Windows, и за это время для нее было создано множество различных утилит. PowerShell задумывался в том числе и как альтернатива командной строке, однако сможет ли он полностью заменить ее ?

Для примера я взял наиболее распространенные утилиты командной строки, применяемые в администрировании, и попробовал подобрать им замену в PowerShell. Вот что из этого получилось.

Ping

На замену утилите ping в PowerShell пришел командлет Test-Connection, входящий в состав модуля Microsoft.PowerShell.Management. Для примера пропингуем сервер SRV3 командой:

Test-Connection -ComputerName SRV3

Можно указать для проверки сразу несколько серверов, например перечислив их через запятую:

Test-Connection -ComputerName SRV3, SRV4

или считав из файла:

Test-Connection -ComputerName (Get-Content serverlist.txt)

Еще командлет умеет запускать проверку сразу с нескольких точек. Например, для проверки сервера SRV4 с локального компьютера и с сервера SRV3 воспользуемся следующей командой:

Test-Connection -Source localhost, SRV3 -ComputerName SRV4

Параметр -Source появился только в PS 3.0. В некоторых случаях очень удобно, однако при его использовании может понадобится ввести учетные данные:

Test-Connection -Source localhost, SRV3 -ComputerName SRV4 -Credential Contoso\administrator

командлет Test-Connection

Примечание. Командлет использует класс Win32_PingStatus, поэтому для проверки соединения можно воспользоваться командой Get-WmiObject Win32_PingStatus, ее действие аналогично команде Test-Connection.

Tracert

Следующее средство, обычно применяемое после ping — это трассировка с помощью утилиты tracert. В PowerShell для этих целей можно задействовать командлет Test-NetConnection из модуля NetTCPIP. Не смотря на похожее название, по функционалу он довольно сильно отличается от предыдущего командлета, хотя включает в себя и его возможности. Кроме проверки TCP соединения вывод может включать в себя список IP интерфейсов, разрешение DNS-имен (DNS lookup), правила IPsec и проверку возможности установления соединения. В самом простом варианте команда выглядит так:

Test-NetConnection -ComputerName ya.ru

Для пошагового вывода в стиле tracert можно сделать так:

Test-NetConnection -ComputerName ya.ru -TraceRoute

Также можно указать определенный порт и сделать детализованный вывод:

Test-NetConnection -ComputerName ya.ru -Port 80 -InformationLevel Detailed

командлет Test-NetConnection

IPConfiig

Первое, для чего используют Ipconfig — это просмотр сетевых настроек. В PowerShell для этих целей можно воспользоваться командлетом Get-NetIPConfiguration. Так для подробного вывода настроек для всех сетевых интерфейсов (аналог ipconfig /all) введем команду:

Get-NetIPConfiguration -All -Detailed

командлет Get-NetIPConfiguration

Для операций с клиентом DNS воспользуется командлетами PowerShell из модуля DNSClient. Для очистки содержимого локального кеша DNS вместо ipconfig /flushdns выполним команду Clear-DnsClientCache, для перерегистрации вместо ipconfig /registerdns — команду Register-DnsClient. Вывести содержимое кеша (ipconfig /displaydns) можно командой Get-DnsClientCache. Также можно выводить не все содержимое кеша, а посмотреть только определенную запись, например:

Get-DnsClientCache -Entry www.bing.ru

командлет Get-DNSClientCache

Nslookup

Для проверки DNS имен вместо nslookup можно воспользоваться командлетом Resolve-DnsName, входящий в состав модуля DNSClient. Синтаксис у них похожий, например:

Resolve-DnsName -Name SRV3

Можно указать тип записи (A, PTR, SRV), указать, откуда брать данные и выбрать определенный DNS-сервер, отличный от дефолтного:

Resolve-DnsName -Name SRV3 -Type A -DNSOnly -Server 192.168.0.1

командлет Resolve-DNSName

Netstat

Утилита Netstat — еще один инструмент сетевой диагностики, показывающий сетевые подключения. Заменим ее командлетом Get-NetTCPConnection. Следующая команда выведет все подключения к интернету, имеющие статус установленных (Established):

Get-NetTCPConnection -State Established -AppliedSettings Internet | ft -auto

командлет Get-NetTcpConnection

Route

Для управления маршрутизацией вместо утилиты Route воспользуемся несколькими командлетами из модуля NetTCPIP. Для примера попробуем добавить новый постоянный маршрут до сети 172.16.0.0 с маской 255.255.0.0 и шлюзом 192.168.0.1 для интерфейса с номером 3. Вот так это можно сделать с помощью Route:

Route -p add 172.16.0.0 mask 255.255.0.0 192.168.0.1 -if 3

А вот так при использовании PowerShell:

New-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1

Для просмотра таблицы маршрутизации вместо route print возьмем командлет Get-NetRoute. Выведем все маршруты для протокола IPv4 командой:

Get-NetRoute -AddressFamily IPv4 | ft -auto

New-NetRoute и Get-NetRoute

В PS 4.0 появился интересный командлет Find-NetRoute, с помощью которого можно вывести маршрут для одного конкретного IP-адреса, например:

Find-NetRoute -RemoteAddress 10.0.0.1

Для удаления маршрута (вместо route delete) также есть отдельный командлет Remove-NetRoute, например:

Remove-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1 -Confirm:$false

Для изменения уже созданного маршрута вместо route change можно воспользоваться связкой Remove-NetRoute&New-NetRoute.

Netsh

Утилита Netsh (Network shell) предназначена для выполнения различных задач по настройке сети. Поскольку функционал ее достаточно широк, для сравнения возьмем одну из типичных задач по настройке сетевого интерфейса. Предположим, нам необходимо проверить настройки сетевого интерфейса, и если включен DHCP — отключить его и настроить статическую адресацию. С помощью netsh это будет выглядеть следующим образом:

Netsh interface IPv4 show addresses
Netsh interface IP set address ″Ethernet″ static 192.168.0.11 255.255.255.0 192.168.0.1
Netsh interface IP add DNSServers ″Ethernet″ 8.8.8.8

И тоже самое, но уже с помощью PowerShell:

Get-NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4
Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabled
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1
Set-DNSClientServerAddress -InterfaceIndex3 -ServerAddresses (″8.8.8.8″)

изменение сетевых настроек из PowerShell

Что интересно, для изменения сетевых настроек придется их удалить и создать заново. Например IP-адрес можно изменить так:

Remove-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.12 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false

изменение IP-адреса из powerShell

Примечание. Для изменения IP-адреса логично было бы воспользоваться специально предназначенным для этого командлетом Set-NetIPAddress, но не тут-то было �� При попытке изменить настройки этот командлет стабильно выдает ошибку. Как выяснилось, этот командлет не может изменить сам IP-адрес, а только некоторые его свойства.

Gpupdate и Gpresult

Для обновления групповых политик вместо Gpupdate в модуле GroupPolicy есть командлет Invoke-GPUpdate. Синтаксис у них практически один и тот же, например принудительное обновление политик пользователя выполняется командой:

Gpupdate /target:user /force
Invoke-GPUpdate -Target user -force

Ну и посмотреть результирующие политики вместо Gpresult можно командлетом Get-GPResultantSetOfPolicy. Осуществить вывод результатов в HTML-файл можно командой:

Get-GPResultantSetOfPolicy -ReportType Html -Path C:\gpo.html

командлет Invoke-GPUpdate

CMD vs PowerShell

Как видите, PowerShell вполне в состоянии заменить большинство утилит командной строки. Однако остается еще один вопрос — зачем это нужно.

В достоинства PowerShell, на мой взгляд, можно записать более структурированный вывод результатов, которые к тому-же можно обрабатывать — фильтровать, сортировать и изменять формат вывода. Кроме того, результатом выполнения команд PowerShell являются объекты, которые можно сохранять в переменные, передавать по конвейеру и т.п. Это очень удобно при написании скриптов.

Из недостатков — большинство описанных в статье команд требуют PowerShell 3.0, а некоторые вообще есть только в четвертой версии. Также некоторые командлеты (напр. Set-NetIPAddress) работают криво не совсем так, как должны.

Ну а на стороне CMD проверенный временем функционал, который есть в любой версии Windows. Кроме того, для простых задач администрирования cmd использовать привычнее, а где-то и удобнее.

Итак, что же лучше — CMD или PowerShell ? Не знаю как вы, а я не готов однозначно ответить на этот вопрос. Впрочем, ничто не мешает нам пользоваться и тем и другим.

Почему Power Shell не видит функцию?

Имя «getMyPing» не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.

5eb9ec82be550642150927.png

Вопрос: что, в коде, я делаю не так?

  • Вопрос задан более трёх лет назад
  • 677 просмотров

Комментировать
Решения вопроса 1
MaxKozlov @MaxKozlov Куратор тега PowerShell

Всё по той же причине — Job — это отдельный процесс, он не знает о ваших функциях.
Возможны три варианта:
1. функцию надо разместить прямо внутри вашего скриптблока
2. функцию надо выносить в модуль
3. использовать альтернативу — PoshRSJob, которому можно указать какие функции импортировать

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1
В меру опытный никто

у меня вот так получилось заставить это работать:

$hostname = "ya.ru" $funcs = > Start-Job -InitializationScript $funcs -ScriptBlock

Ответ написан более трёх лет назад
MaxKozlov @MaxKozlov Куратор тега PowerShell
ну по сути это и есть встраивание внутрь 🙂 только визуально типа в другом месте
в принципе, да.
Ваш ответ на вопрос

Войдите, чтобы написать ответ

powershell

  • PowerShell

Как занести в таблицу БД наименование компьютера, наименование ОС сопоставимому IP-адресу компьютера?

  • 2 подписчика
  • 18 янв.
  • 232 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *