Мониторинг доступности сетевой папки через power shell

Командлет Invoke-WebRequest в PowerShell — удобный инструмент для отправки HTTP-запросов на веб-сайты. Если вы уже пользуетесь прокси-сервисами Bright Data, вы можете использовать этот командлет с прокси-сервером, указав параметр -Proxy, а затем сведения о прокси-сервере.

4 min read

Bright Data favicon

Invoke-Webrequest With a Proxy

Ознакомившись с этим руководством по прокси-серверу Invoke-WebRequest PowerShell, вы узнаете:

Давайте узнаем подробности! 

Администратор файлового сервера Windows может вывести список открытых файлов в общей сетевой папке и принудительно закрыть заблокированные файлы, открытые пользователями в монопольном режиме. Если пользователь открыт файл в общей сетевой SMB папке на сервере на чтение и запись и забыл его закрыть (ушел домой, в отпуск), другие пользователи не смогут внести изменения в файл.

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

Monitoring DFS

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik. В прошлый раз мы с вами создали и разобрали скрипт PowerShell, который позволяет отслеживать переезды ролей файлового кластера между нодами. В сегодняшней статье я хочу пополнить свою коллекцию сценариев, которые могут вам быть полезны в вашей повседневной жизни. Задача заключается в том, чтобы отслеживать ряд файловых сетевых папок, которые опубликованы в DFS шаре на предмет их доступности по сети, данная необходимость появилась после интересного случая с зависание узла файлового кластера, который повесил всю систему распределения.

При подключении к новой сети Windows предлагает вам выбрать ее тип (профиль или сетевое расположение): Public network (общедоступная) или Private (частная). Сетевые профили Windows являются частью Microsoft Defender Firewall и позволяют применять различные правила брандмауэра в зависимости от типа сети, к которой подключен компьютер. В зависимости от примененного профиля для вашего сетевого подключения, другие компьютеры могут видеть или не видеть ваш компьютер в сети (настройки сетевого обнаружения), использовать общие папки и сетевые принтеры.

В этой статье мы рассмотрим, как в Windows (и Windows Server) изменить назначенный профиль сети с “общедоступной” на “частную” и наоборот.

Что такое PowerShell Invoke-WebRequest?

Invoke-WebRequest — это командлет PowerShell для отправки запросов HTTP, HTTPS и FTP веб-серверам и веб-службам. По умолчанию он автоматически анализирует ответ, полученный от сервера, и возвращает подборки форм, ссылок, изображений и других важных элементов HTML. 

Обычно он используется для доступа к интерфейсам REST API, загрузки файлов из Интернета или взаимодействия с веб-службами. Ниже приведен базовый синтаксис запроса Invoke-WebRequest:

Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]

Ключевые параметры, которые следует запомнить:

  • – Uri: URI веб-ресурса, на который отправлен запрос.
  • – Method: HTTP-метод для использования в запросе (например, GET, POST, PUT, DELETE). Invoke-WebRequest по умолчанию отправляет запросы GET.
  • – Headers — дополнительные HTTP-заголовки, которые необходимо включить в запрос.
  • – Body — тело запроса для отправки на сервер.

Как видите, единственный обязательный аргумент — это . Таким образом, вкратце, самый простой синтаксис для выполнения запроса GET к заданному URI:

Invoke-WebRequest <Uri>

Этот командлет был добавлен в PowerShell 3.0 в 2012 году. 

Предварительные требования для начала работы с прокси-сервером в PowerShell

Чтобы начать использовать прокси-сервер PowerShell с Invoke-WebRequest, вам необходимо понять, как выглядит URL-адрес прокси-сервера. 

Вот URL-адрес прокси-сервера PowerShell Invoke-WebRequest:

<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

Он включает следующее:

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

Обратите внимание, что часть URL-адреса :// необходима для Invoke-WebRequest. Если вы не укажете ее, выполнение запроса завершится со следующей ошибкой:

Invoke-WebRequest: эта операция не поддерживается для относительного URI.

Что касается протоколов прокси-серверов, то наиболее популярными являются HTTP, HTTPS и SOCKS. В PowerShell 5.1 Invoke-WebRequest поддерживает только HTTP, а в PowerShell 7.x — также HTTPS и SOCKS.

Пора получить действительный прокси-сервер HTTP!

Вы можете найти его бесплатно в Интернете, как показано ниже:

Protocol: HTTP; IP Address: 190.6.23.219; Port: 999

Подготовьте эту информацию, чтобы получить следующий URL-адрес прокси-сервера:

http://190.6.23.219:999

Предупреждение

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

Каково решение? Прокси-серверы премиум-класса от Bright Data — лучшего поставщика данных услуг на рынке. Подпишитесь и попробуйте наши надежные прокси-серверы бесплатно.

http://admin-4521:@rUuH3tJqf45.103.203.109:9571

Принудительно закрыть открытый файл на сервере Windows

Можно закрыть открытый файл через консоль Computer Management. Найдите файл в списке секции Open Files, выберите в контекстном меню пункт “Close Open File”.

Закрыть открытые файлы в сетевой папке

Если на сервере по сети открыты сотни файлов, то найти нужный файл в графической консоли довольно сложно. Лучше использовать инструменты командной строки.

Закрыть файл можно, указав ID его SMB сессии. Получить ID сессии файла:

команда openfiles найти кем открыт файл

Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:

Openfiles /Disconnect /ID 3489847304

openfiles disconnect - закрыть открытый файл на сервере

SUCCESS: The connection to the open file "D:\path\REPORT2023.XLSX" has been terminated.

Вы разблокировали открытый файл и теперь его могут открыть другие пользователи.

Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:
openfiles /disconnect /s mskfs01 /u corp\aivanova /id *

Можно закрыть открытый файл по ID сессии с помощью PowerShell командлета Close-SmbOpenFile.

Close-SmbOpenFile - SessionId 3489847304

Найти и закрыть открытый файл одной командой:

powershell закрыть открытый файл на сервере

Для подтверждения сброса сессии и освобождения отрытого файла нажмите
Y
->
Enter
.

Чтобы закрыть файл без предупреждения, добавьте параметр
-Force
в последнюю команду.

С помощью Out-GridView можно сделать простую графическую форму для поиска и закрытия файлов. Следующий скрипт выведет список открытых файлов. Администратору нужно с помощью фильтров в таблице Out-GridView найти и выделить нужные файлы, а затем нажать ОК. В результате выбранные файлы будут принудительно закрыты.

Get-SmbOpenFile вместе с out-gridview - powershell скрипт с графическим интерефейсом по выбору и принудительному закрыттию заблокированных (открытых) файлов в windows

Принудительное закрытие открытого файла на файловом сервере, вызывает потерю несохраненных пользователем данных. Поэтому команды openfiles /disconnect и
Close-SMBOpenFile
нужно использовать с осторожностью.

Установка Invoke-WebRequest

Чтобы использовать Invoke-WebRequest, вам понадобится PowerShell. Итак, давайте узнаем, как установить PowerShell и получить доступ к командлету Invoke-WebRequest!

Windows

Во-первых, вы должны понять, что Windows PowerShell и PowerShell — это две разных программы. Windows PowerShell — это версия PowerShell, поставляемая вместе с Windows, и ее последняя версия — 5.1. Windows PowerShell содержит командлет Invoke-WebRequest. Это означает, что если вы используете современную версию Windows, вы готовы сразу же приступить к делу! При наличии более старых версий следуйте указаниям в официальном руководстве по установке PowerShell.

В то же время некоторые функции Invoke-WebRequest доступны только в версии PowerShell 7.x и более поздних версиях. Дополнительные сведения о том, как установить PowerShell 7.x, приводятся в официальном руководстве по миграции с Windows PowerShell 5.1 на PowerShell 7. Обратите внимание, что PowerShell 7.x устанавливается в новый каталог и работает параллельно с Windows PowerShell 5.1.

Вы можете узнать, какая версия PowerShell установлена на вашем компьютере под управлением ОС Windows, с помощью следующей команды:

$PSVersionTable

В PowerShell 7.x нужно ввести что-то вроде этого:

PSVersion                      7.4.1
PSEdition                      Core
GitCommitId                    7.4.1
OS                             Microsoft Windows 10.0.22631
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

macOS и Linux

Какой прокси-сервер PowerShell следует использовать?

Ответ на этот вопрос меняется в зависимости от того, чего вы хотите достичь с помощью запроса Invoke-WebRequest. Чтобы найти подходящий прокси-сервер PowerShell для ваших нужд, ознакомьтесь с различными типами доступных прокси-серверов:

  • Прокси-серверы центров обработки данных: они быстрые и дешевые, но сайты могут легко обнаружить и заблокировать их из-за их идентифицируемых диапазонов IP-адресов.
  • Резидентные прокси-серверы: они предлагают ротацию подлинных IP-адресов с реальных устройств в определенных местах. Это означает, что они могут гарантировать высокий уровень анонимности. Резидентные прокси-серверы идеально подходят для доступа к сайтам, использующим географические ограничения, или для обхода мер по борьбе с ботами.
  • Прокси-серверы интернет-провайдеров (ISP): они безопасны, быстры и очень надежны, поскольку предоставляют статические IP-адреса устройств, зарегистрированных у интернет-провайдеров. Прокси-серверы ISP также называют резидентными статическими прокси-серверами, и они являются идеальным решением для мониторинга оптимизации поисковых систем (SEO) и исследования рынка.
  • Мобильные прокси-серверы: они предоставляют IP-адреса с реальных мобильных устройств для обеспечения высокого уровня анонимности. Они полезны для доступа к приложениям, сайтам или контенту, специально разработанному для мобильных устройств.
:/>  Как добавить пользователя в windows 11

Кто открыл файл в общей сетевой папке на сервере Windows?

Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:

Ключ /i используется, чтобы выполнялся поиск без учета регистра в имени файла.

Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:

С помощью PowerShell также можно получить информацию о пользователе, который открыл файл. Например:

Вывести все открытые по сети exe файлы:

Найти открытые файлы по части имени:

Вывести все файлы, открытые определенным пользователем:

Найти файлы, которые открыли с указанного компьютера:

Слетает доменный профиль сети на частную в Windows Server

В новых версиях Windows Server 2022/2019 периодически встречается глюк, когда на доменном сервере (или даже контроллере домена) тип сети сам меняется с доменной на частную после перезагрузки.

Для решения проблемы достаточно перезапустить службу Network Location Awareness (из консоли
services.msc
) или командой:

Чтобы служба Network Location Awareness при загрузке компьютера загружалась немного позже, можно задать для нее отложенный тип запуска. Для этого в свойствах службы нужно выбрать опцию Automatic (Delayed Start).

служба Network Location Awareness используется для определения типа сети

Проверьте, что после перезагрузки тип сети в Windows Server всегда определяется как доменный (вместо private).

Если проблема возникает на контроллере домена Active Directory, нужно изменить зависимости службу NlaSvc, чтобы она запускалась после службы DNS Server:

sc config nlasvc depend=DNS

Также в некоторых случаях вам может помочь принудительное указание DNS суффикса вашего домена в настройках сетевого адаптера (сетевой адаптера -> TCP/IPv4 -> Advanced -> DNS, укажите имя вашего домена в поле DNS suffix for this connection и проверьте, что включена опция «Use this connection’s suffix in DNS registration».

задать DNS суффикс для сетевого подключения

Изменить тип сети с Public на Private с помощью PowerShell

В Windows 10/11 и Windows Server 2022/2019/2016 вы можете управлять профилями сетевых подключений из PowerShell. Запустите консоль PowerShell с правами администратора.

Выведите список сетевых интерфейсов Windows и применённые к ним сетевых профилей:

Get-NetConnectionProfile

Чтобы изменить профиль сети, нужно указать номер сетевого интерфейса, назначанный сетевому адаптеру (InterfaceIndex). В этом примере InterfaceIndex = 19.

Name : Неопознанная сеть
InterfaceAlias : Ethernet 3
InterfaceIndex : 19
NetworkCategory : Public
IPv4Connectivity : NoTraffic
IPv6Connectivity : NoTraffic

Чтобы изменить тип сети для сетевого интерфейса с индексом 19 на Private, выполните команду:

Set-NetConnectionProfile -InterfaceIndex 19 -NetworkCategory Private

Проверим, что профиль сети изменился:

Get-NetConnectionProfile -InterfaceIndex 19

Set-NetConnectionProfile изменить профиль сети с public на private в powershell

Windows Defender Firewall автоматически применит к сетевому подключению правила в соответствии с назначенным профилем без перезагрузки.

По аналогии вы можете изменить местоположение сети на Public:

Set-NetConnectionProfile -InterfaceIndex 19  -NetworkCategory Public

Set-NetConnectionProfile -InterfaceIndex 19 -NetworkCategory DomainAuthenticated

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

На компьютерах в домене вы не сможете изменить профиль сетевого подключения с доменного на частный или публичный. Проверьте, что ваш компьютер добавлен в домен AD:

Get-CimInstance -ClassName Win32_ComputerSystem).PartOfDomain

Попробуйте изменить сетевой профиль:

Set-NetConnectionProfile -InterfaceIndex 19  -NetworkCategory Public –Verbose

Set-NetConnectionProfile : Unable to set the NetworkCategory due to one of the following possible reasons: not running PowerShell elevated; the NetworkCategory cannot be changed from 'DomainAuthenticated'; user initiated changes to NetworkCategory are being prevented due to the Group Policy setting 'Network List Manager Policies'.

Set-NetConnectionProfile - нельзя сменить тип для доменной сети

Скрипт PowerShell проверяющий доступность сетевой шары с оповещением в Телеграм

# Функция для получения текущей даты и времени в формате MM.dd.yyyy HH:mm:ss

# Определение пути к папке для логов, используя переменную $PSScriptRoot и имя скрипта

$log_folder = “$PSScriptRoot\Logs\” + $($MyInvocation.MyCommand.Name -replace (“.ps1”, “”))

# Создание имени файла лога в формате “yyyy_MM_dd_HH_mm_ss.txt”
$log = “$log_folder\$(Get-Date -Format “yyyy_MM_dd_HH_mm_ss”).txt”

# Проверка наличия папки для логов, если нет – создание папки

# Запись в лог текущей даты и времени с сообщением “Start Processing”

# Получение имени текущего пользователя

# Запись в лог текущей даты и времени с сообщением о начале обработки папок в указанном пути

# Проверка наличия пути к папке

# Действия при успешном обнаружении пути

# Подсчет количества ошибок

# Проверка наличия ошибок

# Формирование данных для отправки в Telegram

# Установка протокола безопасности для запроса

# Отправка запроса на сервер Telegram для отправки сообщения

# Запись в лог текущей даты и времени с сообщением о завершении обработки

В результате если сетевая шара из списка будет недоступна вы получите вот такое сообщение в ваш канал:

Сообщение о недоступности папки в телеграм

Теперь можно оперативно проверить в чем дело, чтобы устранить причину. Надеюсь, что было полезно. На этом у меня все, с вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.

Как удаленно закрыть открытые по сети файлы с помощью PowerShell?

Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:

$sessn = New-CIMSession –Computername mskfs01

Также вы можете подключаться к удаленному серверам для запуска команд через командлеты PSRemoting: Enter-PSSession или Invoke-Command .

Следующая команда найдет сессию для открытого файла
*pubs.docx
и завершит ее.

Подтвердите закрытие файла, нажав
Y
. В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.

Get-SMBOpenFile - удаленное управление открытых файлов

С помощью PowerShell вы можете закрыть и осведомить на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:

Типы (профили) сети в Windows

Сетевому подключению в Windows (будь то Ethernet или Wi-Fi) можно назначить один из трех сетевых профилей.

  • Частная или домашняя сеть (Private) – профиль для доверенной сети (домашняя или рабочая сеть в офисе). В такой сети компьютер будет доступен для обнаружения другими устройствами, на нем можно использовать службы общего доступа к сетевым файлам и принтерам;
  • Общедоступная (общественная) сеть (Public / Guest) – профиль для недоверенной сети (кафе, публичная Wi-Fi сеть в метро, аэропорту). Вы не доверяете другим устройствам в такой сети, ваш компьютер будет скрыт для других устройств, нельзя получить удаленный доступ к опубликованным у вас сетевым папкам и принтерам;
  • Доменная сеть (Domain) – сетевой профиль для компьютеров, которые присоединены в домен Active Directory. Применяется автоматически после добавления Windows в домен. Для этого профиля вы можете применять доменные политики брандмауэра.
:/>  Компьютер не видит жесткий диск: причины и варианты решения | Жесткие диски | Блог | Клуб DNS

В зависимости от типа сети, к сетевому интерфейсу применяются разные правила брандмауэра Windows.

В Windows 10 и 11 вы можете увидеть текущий профиль, который назначен сетевому подключению, в меню Settings -> Network and Internet (команда быстрого доступа
ms-settings:network
). Сетевому интерфейсу Ethernet0 в моем примере назначен профиль Public.

просмотр назначенного типа сети в Windows

В классической панели управления Windows тип сети для активных сетевых подключений отображается здесь: Control Panel\All Control Panel Items\Network and Sharing Center.

профиль сети public в настройках панели управления windows 10

Профиль сети в Windows 10 выбирается пользователем при первом подключении к новой сети. Появляется запрос:

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

windows 10: Вы хотите разрешить другим компьютерам и устройствам в этой сети обнаруживать ваш ПК.

Если выбрать “Да”, сети присваивается профиль Private (домашняя), если “Нет” – public (общедоступная). При следующем подключении к этой же самой LAN или WiFi сети автоматически назначается выбранный ранее профиль.

Вы можете скрыть мастер подключения к новым сетям (Network Location wizard) в Windows. Для этого откройте редактор реестра и создайте раздел HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Network\NewNetworkWindowOff. После этого все новые сети при подключении будут определяться как общедоступные (Public).

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f

В Windows вы можете сбросить все настройки и профили для всех сохраненных сетей, выбрав Параметры -> Сеть и Интернет -> Состояние -> Сброс сети. Перезагрузите компьютер.

сброс сети Windows 10

Теперь при подключении к сети опять появится запрос о включении сетевого обнаружения.

Сменить профиль сети через политику безопасности

Еще один способ смены типа сети — редактор локальной политики безопасности (Local Security Policy).

Network List Manager Policies задать тип сети в windows 10 через политику безопасности

Примечание. Если сервер или компьютер включены в домен, изменить тип сети на другой нельзя, при перезагрузке тип все равно сменится на Domain Network.

Как указать прокси-сервер HTTP в Invoke-WebRequest

Прежде чем начать, запустите следующую команду в PowerShell:

Invoke-WebRequest "https://httpbin.org/ip"
That should print something like:
StatusCode        : 200
StatusDescription : OK
Content           : {
                      "origin": "194.34.233.12"
                    }
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Credentials: true
                    Content-Length: 32
                    Content-Type: application/json
                    Date: Thu, 01 Feb 2024 10:46:14 GMT...
Forms             : {}
Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
                    true], [Content-Length, 32]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 32

Если вы хотите получить доступ только к полю «Контент», вы можете сделать это следующим образом:

$response = Invoke-WebRequest "https://httpbin.org/ip"
$response.Content
This would print:
{
  "origin": "194.34.233.12"
}

Использование параметра командной строки

Invoke-WebRequest предлагает флаг -Proxy для указания URL-адреса прокси-сервера для запроса.

Итак, синтаксис использования Invoke-WebRequest на прокси-сервере выглядит следующим образом:

Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

Если теперь вы выполните эту команду PowerShell:

Invoke-WebRequest -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"
Invoke-WebRequest -Uri "http://httpbin.org/ip" -Proxy "http://brd.superproxy.io:22225" -ProxyCredential (New-Object System.Management.Automation.PSCredential("brd-customer-CUSTOMER_ID-zone-ZONE’S_NAME", ("ZONE’S_PASSWORD" | ConvertTo-SecureString -AsPlainText -Force)))
The result should be:
StatusCode        : 200
StatusDescription : OK
Content           : {
                      "origin": "190.6.23.219"
                    }
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Credentials: true
                    Content-Length: 31
                    Content-Type: application/json
                    Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms             : {}
Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
                    true], [Content-Length, 31]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 31

Примечание: не забывайте, что бесплатные прокси-серверы недолговечны! К тому времени, когда вы прочитаете это руководство, маловероятно, что вышеуказанный сервер все еще будет работать. В случае ошибки замените его новым прокси-сервером.

Использование переменных окружения

Начиная с версии PowerShell 7.0, Invoke-WebRequest поддерживает конфигурацию прокси-сервера с помощью переменных окружения

Таким образом, другой способ использования прокси-сервера PowerShell в Invoke-WebRequest заключается в установке следующих двух окружений:

  • HTTP_PROXY — это URL-адрес прокси-сервера, используемый для HTTP-запросов;
  • HTTPS_PROXY — это URL-адрес прокси-сервера, используемый для HTTPS-запросов.

В Windows можно задать две переменные окружения, используя следующий синтаксис PowerShell:

$env:HTTP_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
$env:HTTPS_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

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

$env:HTTP_PROXY = "http://190.6.23.219:999"
$env:HTTPS_PROXY = "http://190.6.23.219:999"

В macOS и Linux вам необходимо использовать следующий синтаксис:

export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Итак, две команды будут следующими:

export http_proxy="http://190.6.23.219:999"
export https_proxy="http://190.6.23.219:999"

Отныне каждый запрос Invoke-WebRequest будет проходить через указанные прокси-серверы без необходимости добавлять опцию -Proxy. После настройки envs запустите следующую команду:

Invoke-WebRequest "https://httpbin.org/ip"
You will get the same result as before:
StatusCode        : 200
StatusDescription : OK
Content           : {
                      "origin": "190.6.23.219"
                    }
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Credentials: true
                    Content-Length: 31
                    Content-Type: application/json
                    Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms             : {}
Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
                    true], [Content-Length, 31]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 31

Чтобы отключить прокси-серверы Invoke-WebRequest, отключите переменные окружения с помощью:

$env:HTTP_PROXY = ""
$env:HTTPS_PROXY = ""
Or on macOS and Linux:
unset HTTP_PROXY
unset HTTPS_PROXY

Как изменить профиль для сетевого подключения в Windows?

Вы можете изменить тип сети в Windows из современной панели управления Параметры: перейдите в раздел «Сеть и Интернет» -> «Состояние» -> Откройте свойства вашего сетевого подключения.

:/>  Создание локальной сети через Wi-Fi-роутер

Здесь можно переключить сетевой профиль с Public на Private и наоборот.

изменить общедоступную сеть на частную в Windows 10

В Windows Server 2022/2019 опция Properties отсутствует на вкладке Status. Поэтому нужно в секции Network and Internet выбрать раздел Ethernet (или раздел Wi-Fi если в Windows Server включена поддержка беспроводных сетей). Выберите ваше подключение к сети.

сменить тип сетевого подключения в windows server

В классической панели управления Windows отсутствуют настройки для смены типа профиля сетевого подключения.

Также вы не можете сменить профиль на компьютере в домене AD. Для сетевого подключения к домену всегда будет использоваться профиль Domain.

Постановка задачи

В инфраструктуре есть домен Active Directory в его периметре есть DFS корень в котором опубликованы файловые шары.

Список DFS шар

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

  • Делаем учетную запись в ADUC под данную задачу
  • Назначаем в ACL или на файловых серверах права для этой учетной записи
  • Делаем проверку через PowerShell
  • В случае недоступности отправляем сообщение в чат мониторинга в Телеграм.

Как использовать прокси HTTPS и SOCKS в PowerShell

Если вам требуется использовать прокси-сервер HTTPS или SOCKS, необходимо обновить PowerShell до версии 7.x и выше. В противном случае Invoke-WebRequest завершится ошибкой:

Invoke-WebRequest: ServicePointManager не поддерживает прокси-серверы со схемой https.

Или в случае прокси-сервера SOCKS:

Invoke-WebRequest: ServicePointManager не поддерживает прокси-серверы со схемой socks.

При работе с прокси-серверами HTTPS или SOCKS в PowerShell 7.x структура команд Invoke-WebRequest остается прежней:

Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

Отличия заключаются в том, что будет использовать https, socks4, socks4a, socks5 или socks5a вместо http.

Если вы попытаетесь вызвать запрос через прокси-сервер, использующий протокол, отличный от указанного выше, вы получите следующую ошибку:

Invoke-WebRequest: Only the 'http', 'https', 'socks4', 'socks4a' and 'socks5' schemes are allowed for proxies.

Таким образом, полный пример прокси-запроса Invoke-WebRequest SOCKS выглядит так:

Invoke-WebRequest -Proxy "socks5://94.14.109.54:3567" "http://httpbin.org/ip"
As you can expect, the result will be:
StatusCode        : 200
StatusDescription : OK
Content           : {
                      "origin": "94.14.109.54"
                    }
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Credentials: true
                    Content-Length: 31
                    Content-Type: application/json
                    Date: Thu, 01 Feb 2024 12:47:56 GMT...
Forms             : {}
Headers           : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
                    true], [Content-Length, 31]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 31

Изменить тип сети в реестре Windows

Чтобы найти нужную вам сеть, нужно просмотреть все ветки реестра и найти раздел, в котором указано имя нужной вам сети из панели управления (или значение Name из команды Get-NetConnectionProfile). В нашем случае компьютер подключен к сети Network 4.

изменить тип сети в windows с public на private через реестр

Имя сети указано в строковом параметре реестра ProfileName. Тип сети задается в параметре Category. Доступны следующие значения этого ключа:

  • 0 — Общественная сеть (Public Network)
  • 1 — Частная сеть (Private Network)
  • 2 — Доменная сеть (Domain Network)

Чтобы изменить тип сети, просто вручную изменить значение параметра Category. Перезагрузить компьютер чтобы применить изменения.

Необходимые советы и рекомендации

Ознакомьтесь с полезными уловками и ценными советами по работе с прокси-сервером PowerShell Invoke-WebRequest на профессиональном уровне.

Игнорирование конфигурации прокси-сервера PowerShell

Если вы хотите запретить Invoke-WebRequest использовать настроенный прокси-сервер PowerShell для чтения из переменных окружения, вы можете воспользоваться параметром -NoProxy следующим образом:

Invoke-WebRequest -NoProxy <Uri>

Эта команда предписывает Invoke-WebRequest связаться с без использования прокси-сервера.

Чтобы убедиться в работоспособности данного подхода, настройте прокси-сервер в envs и запустите его:

Invoke-WebRequest -NoProxy "https://httpbin.org/ip"
Avoid SSL Certificate Errors

При использовании прокси-сервера HTTP ваши запросы могут не выполняться из-за ошибок SSL-сертификата. Чтобы избежать этого, задайте параметр -SkipCertificateCheck:

Invoke-WebRequest -SkipCertificateCheck -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

– SkipCertificateCheck помогает избежать ошибок сертификатов, разрешая небезопасные подключения к серверу. Имейте в виду, что использование этого параметра небезопасно. Задавайте его только при работе с известными хостами.

Например, вы можете связываться с HTTPBin через прокси-сервер, обходя проблемы с SSL, с помощью следующего:

Invoke-WebRequest -SkipCertificateCheck -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"

Вывод списка открытых файлов в сетевой папке Windows

Список открытых по сети файлов в Windows можно получить с помощью графической консоли Computer Management (Управление компьютером).

  1. Откройте консоль
    compmgmt.msc
    и перейдите в раздел System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы);
  2. В правой части окна отображается список открытых файлов. Здесь указаны локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).Открыты файлы на файловом сервере Windows

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

Openfiles /Query /fo csv

Команда возвращает номер сессии, имя пользователя, количество блокировок и полный путь к файлу.

Openfiles /Query

Cо списком открытых файлов на сервере удобнее работать с помощью PowerShell командлета Get-SmbOpenFile:

В выводе команда содержится имя пользователя, имя (IP адрес) удаленного компьютера, с которого открыт файл), имя файла и ID файловой сессии.

poweshell вывод список пользователей, которые открыли файлы в сетевой папке windows

Заключение

Из этого руководства по прокси-серверу PowerShell вы узнали, что представляет собой инструмент Invoke-WebRequest, как он работает и как его использовать с прокси-сервером HTTP/HTTPS/SOCKS. Как оказалось, нельзя полагаться на прокси-серверы от бесплатных поставщиков. Поэтому единственное решение, которое необходимо принять, — это выбор поставщика услуг прокси-серверов. Экономьте время и энергию и обращайтесь непосредственно к Bright Data — лучшей компании на рынке в этой области.

Bright Data управляет лучшими прокси-серверами в мире, обслуживая компании из списка Fortune 500 и более 20 000 клиентов. Ее всемирная сеть прокси-серверов включает в себя:

В целом, это одна из крупнейших и самых надежных на рынке прокси-сетей, ориентированных на скрейпинг. 

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

Кредитная карта не требуется