Управление приоритетом сетевых адаптеров в Windows 10
В Windows 10, если у вас есть устройство с более чем одним сетевым адаптером (например, Ethernet и Wi-Fi), каждый интерфейс получает значение приоритета автоматически на основе его сетевой метрики, которая определяет основное соединение, которое ваше устройство будет использовать для отправки и получать сетевой трафик.
Хотя, по большей части, Windows 10 делает довольно хорошую работу, выбирая оптимальное соединение для доступа к сети, иногда вам может потребоваться настроить порядок сетевых адаптеров вручную. Например, если вы хотите использовать Wi-Fi через интерфейс Ethernet, когда оба адаптера подключены к сети.
Вы можете отключить те адаптеры, которые вы не используете, но это может быть не лучшее решение, поскольку они могут понадобиться вам в качестве резервных копий. Вместо этого более простым решением является настройка метрики интерфейса, чтобы указать, в каком порядке ваше устройство должно использовать каждый сетевой адаптер, который вы можете использовать с помощью панели управления и PowerShell.
В этом руководстве по Windows 10 мы проверим вас по шагам, чтобы изменить приоритеты сетевого адаптера, чтобы оставаться на связи, используя ваш предпочтительный адаптер при использовании нескольких интерфейсов.
Как изменить приоритеты сетевого адаптера с помощью панели управления
Если вы хотите изменить порядок, в котором Windows 10 использует сетевые адаптеры, выполните следующие действия:
- Откройте настройки.
- Нажмите «Сеть и Интернет».
- Нажмите Статус.
- Нажмите кнопку «Изменить параметры адаптера».
- Щелкните правой кнопкой мыши сетевой адаптер, который вы хотите установить приоритет, и выберите «Свойства».
- Выберите пункт «Протокол Интернета версии 4 (TCP / IPv4)».
- Нажмите кнопку «Свойства».
- На вкладке «Общие» нажмите кнопку «Дополнительно».
- Снимите флажок Автоматическая метрика.
- В поле «Interface metric» укажите значение приоритета для адаптера.
Быстрый совет. Чем ниже показатель метрики, тем выше приоритет, а большее число указывает на более низкий приоритет. - Нажмите кнопку OK.
- Нажмите кнопку OK еще раз.
- Нажмите кнопку «Закрыть».
После того, как вы выполнили эти шаги, Windows 10 будет определять приоритет сетевого трафика в зависимости от вашей конфигурации.
Единственное предостережение, связанное с использованием панели управления, заключается в том, что в зависимости от настройки сети вам может потребоваться настроить метрику для протокола 6 (TCP / IPv6) в Интернете, если это протокол, который вы используете. (Обычно вы будете использовать протокол TCP / IPv4.)
В любое время вы можете отменить изменения, используя те же инструкции, но на шаге 9 обязательно проверьте параметр «Автоматическая метрика».
Как изменить приоритеты сетевого адаптера с помощью PowerShell
В качестве альтернативы вы можете изменить приоритеты сетевых адаптеров на устройстве с несколькими интерфейсами с помощью PowerShell следующими шагами:
- Откройте «Пуск».
- Найдите Windows PowerShell , щелкните правой кнопкой мыши верхний результат, выберите « Запуск от имени администратора».
- Введите следующую команду для идентификации текущего метрика интерфейса и номера индекса интерфейса и нажмите Enter:
Get-NetIPInterface - Введите следующую команду, чтобы изменить порядок приоритета сетевого адаптера и нажмите Enter:
Set-NetIPInterface -InterfaceIndex 21 -InterfaceMetric 10
В команде обязательно измените значение -InterfaceIndex, чтобы отобразить сетевой адаптер, у которого вы хотите установить приоритет, и измените значение -InterfaceMetric, чтобы назначить приоритет. Кроме того, помните, что более низкий метрический номер означает более высокий приоритет, а более высокий метрический номер означает более низкий приоритет. - Введите следующую команду, чтобы увидеть новую метрику, применяемую к сетевому адаптеру, и нажмите Enter:
Get-NetIPInterface
По завершении шагов Windows 10 будет определять приоритет сетевого трафика в зависимости от вашей конфигурации, когда к сети подключаются несколько сетевых адаптеров.
В любое время вы можете вернуться к предыдущему поведению, позволяя Windows 10 определить приоритет сетевого адаптера, используя следующие шаги:
- Откройте «Пуск».
- Найдите Windows PowerShell, щелкните правой кнопкой мыши верхний результат, выберите «Запуск от имени администратора».
- Введите следующую команду для идентификации текущего метрика интерфейса и номера индекса интерфейса и нажмите Enter:
Set-NetIPInterface -InterfaceIndex 21 -AutomaticMetric enabled
В команде обязательно измените значение -InterfaceIndex с правильным номером сетевого адаптера, к которому вы хотите применить автоматическую метрику.
Вопросы о PowerShell
Рекомендации эксперта по работе с PowerShell
Я меняю порядок привязки адаптеров в Windows 10 и Windows Server 2016, но изменения не сохраняются. Как мне изменить порядок?
В Windows 10 и Windows Server 2016 отсутствуют компоненты, которые используют порядок привязки, поэтому изменения и не сохраняются. Если вы хотите изменить приоритет конкретной сетевой карты, то можете сделать это при помощи PowerShell:
- Откройте окно PowerShell с административными правами.
- Просмотрите адаптеры в системе с помощью команды netstat -rn.
- Измените метрику, используя команду Get-NetIPInterface, чтобы просмотреть текущие значения. Затем измените их при помощи команды Set-NetIPInterface. Например:
Как проверить, какой модуль содержит команду PowerShell?
Чтобы проверить, какой именно модуль содержит команду, используйте следующий код:
Выведенное значение — это объект ModuleName, который показывает модуль, содержащий команду.
Каково общее описание, которое помещают в профиль PowerShell?
Заранее заданного описания, необходимого для профиля PowerShell, не существует. Описание должно быть основано на ваших требованиях. Некоторые общие настройки должны настраивать параметры среды, загружать модули, создавать имена-псевдонимы и перенастраивать подсказку. Ниже приведен пример описания:
Как я могу вставить в комментарий большой блок кода в PowerShell?
Обычно строку PowerShell можно сопроводить комментарием с помощью добавления префикса # к строке. Однако если вы хотите указать в качестве комментария несколько строк, то самый простой способ — заключить содержание в пару . Например:
Как мне задать параметры настройки запускаемых команд при открытии экземпляра PowerShell?
Существует ряд способов запуска команд при открытии сессии PowerShell, например назначение «горячих» клавиш. Однако оптимальным вариантом является использование профиля PowerShell, содержащего команды, которые будут выполнены, когда будет запускаться новая сессия PowerShell. Предусмотрено шесть разных профилей PowerShell, но используется, как правило, только один. Все шесть профилей перечислены в таблице, вместе с областями их использования.
Как правило, применяется профиль для текущего пользователя и хоста, который хранится в файле $HOME\Documents\WindowsPowerShell\Microsoft. Ссылка на PowerShell_profile.ps1 идет через переменную $profile. Вот простой способ создать такой профиль:
Мне нужно подсоединиться к целевому серверу через HTTPS при помощи PowerShell, используя имя, отличное от публичного имени сертификата. Могу ли я сделать это?
Да, это возможно, но я рекомендую поступить иначе. Использование HTTPS дает клиенту два преимущества: шифрование и гарантию того, что целевым сервером является тот, который себя таковым называет (взаимная аутентификация). При блокировке проверки имени целевым сервером может назвать себя любой сервер, поскольку имя не обязано соответствовать сертификату. Чтобы пропустить проверку имени, необходимо создать и использовать дополнительный объект сессии:
Теперь можно подсоединиться, используя другое имя, а не серверное имя в сертификате. Шифрование все еще присутствует, но взаимная аутентификация больше не обеспечивается.
Обратите внимание, что есть другой ключ, SkipCACheck, который активирует соединение, даже если сертификат выпущен удостоверяющим центром, которому клиент не доверяет.
Существует ли простой способ создать исключения брандмауэра для Skype for Business Server?
Код, представленный в листинге 1, был создан моим другом Тимом Вилером. Этот код создает исключения брандмауэра, необходимые для различных ролей и компонентов Skype for Business Server.
Могут ли у меня быть разные профили PowerShell для сессии с повышенными привилегиями и сессии с обычными привилегиями?
Желательно иметь разные профили PowerShell в зависимости от того, запускается сессия с повышенными или обычными привилегиями. Специального профиля для сессии с повышенными привилегиями, отличающегося от сессии с обычными привилегиями, не существует. Однако в качестве альтернативы вы можете вставить блок логики в профиль, чтобы проверить, запущена ли сессия с повышенными привилегиями или нет, а затем запускать разные блоки кода.
Самый простой способ проверить, запущена ли сессия с повышенными привилегиями, обеспечивает проверка SID администратора (с повышенными привилегиями):
Затем этот код используется в сценарии. В примере в листинге 2 я настроил окрашивание фона окна сессии в темно-красный цвет. Цвет служит подсказкой: темно-красный означает, что сессия с повышенными привилегиями, и с обычными, если фон стандартного черного цвета.
Как мне активировать CredSSP для хостов с целью обеспечения переключения при удаленной работе в PowerShell?
При использовании обычной аутентификации Kerberos вы не можете переключаться между удаленными серверами. Например, я не могу подсоединиться к серверу А, а затем выполнить действие в удаленном режиме на сервере В. Чтобы активировать такой тип аутентификации, следует использовать CredSSP. Нужно активировать CredSSP на клиентской системе с PowerShell и на системе-посреднике, а способность делегировать новые учетные данные необходимо включить через политику.
- Включите CredSSP для клиента:
- Включите CredSSP для службы на сервере-посреднике (запустите эту команду на всех серверах-посредниках, с которых идет переключение):
- Включите делегирование новых учетных данных для списка целевых серверов. Поскольку вы выполняете это действие для всех серверов, лучше ограничить их набор, например всеми системами в домене. Откройте объект групповой политики Group Policy Object и перейдите по папкам Computer Configuration, Policies, Administrative Templates, System, Credential Delegation, Allow Delegation of Fresh Credentials. Включите политику и задайте значение через кнопку Show, например *.savilltech.net (см. экран 1). Затем нажмите ОК. После изменения GPO потребуется некоторое время, чтобы применить его на всех машинах.
Экран 1. Настройка делегирования учетных данных |
Как можно активировать SSL для управления через WS-Management?
Чтобы активировать SSL для HTTP, основанного на удаленном режиме управления Windows Remote Management, вам потребуется сертификат, который соответствует имени, используемому клиентами при подсоединении. Вы можете применить файл makecert.exe, но это не совсем удачная идея, поскольку ему не доверяют клиенты, которым требуется подсоединение при использовании ключа SkipCNCheck. Последний же удаляет точку взаимной аутентификации, поскольку нет доверия сертификату. Вместо этого используйте сертификат своего внутреннего удостоверяющего центра или какого-либо внешнего удостоверяющего центра. Сертификат должен быть сертификатом SSL, который называется так же, как сертификат веб-сервера. Убедитесь, что общее имя сертификата точно соответствует имени, которое будет использоваться для подсоединения к серверу, например полностью определенному имени домена. Когда у вас есть сертификат и он установлен на локальных системах, выполните следующие действия в сессии PowerShell:
1. Найдите подпись сертификата, который будете использовать. Самый простой способ — обратиться к провайдеру сертификата и посмотреть в папке\LocalMachine\My store. Просмотрите все элементы (с помощью Get-ChildItem) и запишите подпись сертификата или просто сохраните ее в переменной
Вы можете просмотреть подпись при помощи $cert.thumbprint.
2. Создайте нового слушателя HTTP, используя полное имя хоста и подпись сертификата, например:
3. Заключительный шаг — это создание исключения брандмауэра для порта 5986. Данный порт используется для управления по SSL:
Теперь вы сможете подсоединиться к системе, используя SSL, что требует передачи учетных данных, например:
В чем разница между конструкциями ForEach и foreach?
Для PowerShell предусмотрено две разных конструкции ForEach. Одна из них — команда ForEach-Object, которая является частью модуля Microsoft.PowerShell.Core. Эта команда запускает цикл по объекту, выполняет код в блоке сценария и ссылается на перебираемые объекты как на переменную $_. Например:
Обратите внимание, что для ForEach-Object существует два псевдонима; ForEach и % вы также можете встретить на практике. Эквивалентом указанного выше кода могут быть такие команды:
Другим типом конструкции ForEach является оператор foreach, который раз за разом запускает процесс в коллекции и выполняет код в блоке сценария для каждого элемента, но на этот раз используется конкретное имя для ссылки на каждый элемент в коллекции. Приведу пример:
Обратите внимание, что выходные данные такие же: объекты в коллекции перебираются в цикле по одному объекту за раз. Итак, в чем же разница? Обычно оператор foreach работает быстрее, поскольку он составляет одно выражение, тогда как команда ForEach составлена из нескольких выражений. Однако потенциальный недостаток оператора foreach состоит в том, что, поскольку он представляет собой одиночное выражение, всю коллекцию нужно сохранять в памяти, а данные команды ForEach загружаются в память по мере необходимости. Загрузка всех данных в память может в целом происходить быстрее, но при работе будет использоваться все больше и больше памяти.
На практике процесс выглядит так: оператор foreach прежде всего загружает все данные в память в процессе перебора каждого файла в папке Windows. При запуске кода, показанного ниже, наблюдается задержка инициализации, поскольку каждый элемент загружается в память до его вывода на экран.
Этот код отличается от такого же кода, использующего команду ForEach, который активизирует вывод на экран немедленно.
Тем не менее суммарное время обработки меньше в случае применения оператора foreach (хотя он и использует больше памяти).
Где можно получить больше провайдеров PowerShell для настройки желаемого состояния Desired State Configuration?
Существует много сайтов и сообществ, которые создают новых провайдеров настройки DSC. Однако простой способ расширения встроенных двенадцати — это наборы ресурсов DSC Resource Kits, которые во время написания имеют версию 10. Просто загрузите набор ресурсов и разархивируйте подпапки в свои модули, и вы сможете постоянно добавлять сотни новых провайдеров настроек, таких как SQL Server, Exchange, System Center и т. д., в DSC.
Загрузите набор по адресу: https://gallery.technet.microsoft.com/DSC-Resource-Kit-All-c449312d и извлеките содержимое в $env: ProgramFiles\WindowsPowerShell\Modules (то есть C:\Program Files\WindowsPowerShell\Modules). Убедитесь, что вы открываете папку All Resources в загруженном архивном файле, и восстановите подпапки в папку Modules, иначе они не будут работать. Проделав все это, вы сможете увидеть новые провайдеры DSC с помощью команды Get-DscResource.
Как мне модифицировать файл TrustedHosts с помощью PowerShell?
Чтобы модифицировать TrustedHosts, используя PowerShell, задействуйте провайдер WSMan и задайте значение TrustedHosts в localhost\Client. Например, чтобы настроить TrustedHosts в каждой системе в пространстве имен вашего домена, используйте команду:
Чтобы указать, что у вас нет хостов доверия, введите команду:
Чтобы скрыть запрос на ввод данных, внесите изменение, добавив -Force, например:
Существует ли встроенный эквивалент Ping в PowerShell?
Ping — это полезная утилита, которая тестирует базовое соединение между системами, используя протокол ICMP (при условии, что на целевой машине активно исключение брандмауэра для ответов ICMP, которое позволяет откликаться на запрос проверки связи по Ping). В PowerShell доступен файл ping.exe, но есть и команда PowerShell, которая имеет эквивалентную и даже более широкую функциональность; это Test-NetConnection.
Проверка связи по Ping работает с использованием ICMP, а Test-NetConnection может тестировать множество портов TCP, чтобы проверить работоспособность специфического приложения. Базовую функцию запроса ответа можно использовать так:
Другой пример — это тестирование общих портов TCP, например HTTP (порт 80):
Можно также протестировать соединение с другими портами, которые не определены как общие порты, например RDP (порт 3389):
Кроме того, можно выполнить упрощенный тест, который просто вернет двоичный код состояния — значение true или false, в зависимости от успешности выполнения процесса:
Как мне настроить нажатие NumLock в Hyper-V?
В последней версии настройка NumLock была удалена из инструмента управления Hyper-V, но ее параметры все еще можно задать, используя команду Set-VMBios. Например:
Как лучше сослаться на локальные переменные в удаленной сессии PowerShell?
PowerShell версии 3 и выше упрощает этот процесс. До версии 3, для того чтобы использовать переменные в удаленной сессии PowerShell, требовалось передать переменные как аргументы, например так:
Начиная с третьей версии PowerShell вы можете управлять переменной $using:, чтобы получить доступ к локальным переменным, например:
Мне не удается установить Hyper-V в виртуальной машине, запускаемой на Windows Server 2016: появляется сообщение о том, что требуемые свойства процессора отсутствуют. Что делать?
Необходимо изменить настройки виртуальной машины, в которую вы собираетесь установить Hyper-V (для составной виртуализации), чтобы показать нужные функции виртуализации. В документации Microsoft показано, как это сделать с помощью команды PowerShell:
Изучив приведенный в команде код PowerShell, вы сможете увидеть все необходимые изменения:
- во время применения изменений виртуальная машина должна быть выключена;
- любое сохраненное состояние должно быть удалено;
- динамическая память должна быть отключена и виртуальная машина должна иметь объем как минимум 4 Гбайт (точный объем зависит от того, сколько виртуальных машин вы хотите запустить);
- требуется имитация МАС-адреса, если виртуальные машины, запускаемые внутри другой виртуальной машины, нуждаются в соединении по сети;
- самое важное, и это является причиной ошибки, заключается в том, что расширения виртуализации должны быть включены в виртуальной машине. В представленном выше сценарии они включаются с помощью
Проделав все это, вы сможете запускать виртуальные машины, работающие внутри других виртуальных машин, с Hyper-V 2016, (см. экран 2).
Экран 2. Виртуальная машина с Hyper-V 2016, работающая внутри другой виртуальной машины |
Как можно просмотреть регионы Azure, используя PowerShell в AzureRM?
Мне не удалось найти простую команду, с помощью которой можно просмотреть регионы, но есть способ увидеть регионы, доступные для определенных типов ресурса. Указание виртуальных машин (которые доступны во всех регионах) позволяет просмотреть все Azure-регионы. Ниже приведен пример кода. Обратите внимание, что, если вы хотите проверить все регионы для определенного типа ресурса, замените параметр virtualMachines на тип ресурса, который хотите проверить. Вы можете выполнить проверку через портал, обратившись по адресу: https://azure.microsoft.com/en-us/regions/#services.
Как мне просмотреть все типы провайдеров ресурсов Resource Providers, которые доступны в Azure?
Менеджер ресурсов Azure Resource Manager содержит несколько провайдеров ресурсов Resource Providers (RP). Каждый из них обеспечивает различные типы ресурса (соответственно имени). Чтобы просмотреть все доступные типы RP, используйте команду:
Чтобы просмотреть подробную информацию о конкретном провайдере ресурсов, введите команду:
У Microsoft есть хорошая статья, опубликованная по адресу: https://azure.microsoft.com/en-us/documentation/articles/
resource-manager-supported-services/. В ней рассматривается детальная информация о типах ресурсов, а также приводятся дополнительные сведения о них.
Как я могу получить входные данные от пользователя в безопасном режиме с помощью PowerShell?
Принято передавать информацию в виде параметров, однако можно получить входные данные от пользователя и так:
Если данные не следует выводить на экран, добавьте ключ -AsSecureString, например:
Если потом потребуется конвертировать защищенную строку в простой текст, используйте такую команду:
Нужно ли мне вручную добавлять исключения при добавлении роли, используя Windows Defender в Windows Server 2016?
Нет. Windows Defender в Windows Server 2016 назначает исключения автоматически, как описано в статье по адресу: https://technet.microsoft.com/en-us/library/dn913616.aspx. Дело в том, что некоторые роли, которые требуют исключений, автоматически включают исключения на брандмауэре, как только роли активируются. Чтобы блокировать автоматическую активацию исключений, используйте такой код:
Что такое $ConfirmPreference в PowerShell?
Вы могли сталкиваться с тем, что иногда в PowerShell выводится запрос на подтверждение того или иного действия, а иногда нет. Каждая команда имеет уровень воздействия, согласно которому, если он равен или выше, чем $ConfirmPreference, вы получите запрос на подтверждение. Чтобы просмотреть текущее значение $ConfirmPreference, просто откройте переменную, которая должна иметь значение High. Если, например, вы задаете переменной значение Medium, вы получите запрос на подтверждение при остановке процессов, но запроса не будет, если $ConfirmPreference имеет значение по умолчанию High. Обратите внимание, что если вы понизите $ConfirmPreference, то сможете избежать появления запроса на подтверждение посредством добавления ключа -confirm:$false в команде. Кроме того, вы можете настроить переменную $ConfirmPreference на значение None, чтобы никогда не получать запрос на подтверждение.
Я стараюсь использовать методы объекта в рамках рабочего процесса, но они не работают. Почему?
Обычно у объектов есть ряд доступных методов, к которым можно получить доступ с помощью обращения . , то есть $string.ToUpper (). Если вы попытаетесь использовать этот способ в рамках рабочего процесса, то получите сообщение об ошибке, в котором будет сказано, что вызов методов в рабочем процессе не поддерживается. Так происходит потому, что объекты в рабочем процессе десериализированы (то есть преобразованы из последовательной формы в параллельную) и, таким образом, потеряли свои методы. Решение проблемы состоит в том, чтобы выполнять любые методы объекта в рамках блока InlineScript. Приведу пример:
Для того чтобы вы могли получить доступ к любым переменным в рамках InlineScript, они должны иметь префикс $using: учитывая, что InlineScript фактически создает отдельный процесс PowerShell, исполняет код и возвращает управление объектам. Именно поэтому, как правило, доступа к объектам в родительском процессе PowerShell не бывает.