Сообщество - Лига Сисадминов

Лига Сисадминов

2 411 постов 18 930 подписчиков

Популярные теги в сообществе:

39

Управление питанием сетевого адаптера Wake-on-LAN с PowerShell

@RaiJu, пост для вас.

Подробное руководство по настройке Wake-on-LAN и Magic Packet с помощью PowerShell.

Magic Packet — это специальный сетевой фрейм, посылаемый для пробуждения устройства через Wake-on-LAN. Чтобы WoL работал, сетевой адаптер должен поддерживать Magic Packet и быть настроен на его приём.

Дисклеймер. На пикабу нет редактора кода, поэтому картинками и плохим форматирование. В конце статьи вы найдете ссылку на github, где все нормально отображается.

Шаг 1: Идентификация устройства.

> Get-PnpDevice | Where-Object { $_.FriendlyName -like "*Realtek*" } | Select-Object FriendlyName, Status, Class, InstanceId

Эта команда говорит системе:

"Покажи мне все устройства, в названии которых есть слово «Realtek», и выведи по ним таблицу с четырьмя колонками: полное имя, статус, класс и системный ID."

  1. Get-PnpDevice: Берет полный список всех Plug-and-Play устройств.

  2. | (Конвейер): Передает список дальше.

  3. Where-Object { ... }: Фильтрует список, оставляя устройства, чье имя (FriendlyName) содержит "Realtek".

  4. | (Конвейер): Передает отфильтрованный список.

  5. Select-Object ...: Форматирует вывод, показывая только нужные свойства.

Запоминаем устройство в $device

$device = Get-PnpDevice | Where-Object { $_.FriendlyName -like "*Realtek*" } | Select-Object FriendlyName, Status, Class, InstanceId

Записываем его свойства в переменные
> $DeviceName = $device.FriendlyName
> $InstanceId = $device.InstanceId
> $pmKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$InstanceId\Device Parameters"

Шаг 2: Глобальное разрешение на пробуждение

Команда powercfg дает устройству "официальное" разрешение от Windows на пробуждение системы.
> powercfg -deviceenablewake $DeviceName

Эта команда эквивалентна установке флажка "Разрешить этому устройству выводить компьютер из ждущего режима".

Отключение:
> powercfg -devicedisablewake $DeviceName

Шаг 3: Настройка драйвера.

Настройки WOL находятся в параметрах самого драйвера, которые хранятся в реестре. Чтобы установить флажок "Только разрешать магическому пакету выводить компьютер из ждущего режима", используем команду Set-ItemProperty.

> Set-ItemProperty -Path $pmKey -Name "*WakeOnMagicPacket" -Value 1

Обратное действие — отключение WOL (Value 0):

> Set-ItemProperty -Path $pmKey -Name "*WakeOnMagicPacket" -Value 0

Здесь возникает проблема. Имя этого параметра может отличаться у разных производителей. Например, для Intel это *WakeOnMagicPacket, а для Realtek — WakeOnMagicPacket (без *). Если настройка не применяется, проверьте правильное имя командой Get-ItemProperty -Path $pmKey и используйте его.

Шаг 4: Завершающая настройка через CIM

Для полной уверенности в том, что настройки управления питанием применены корректно, используем современный стандарт CIM (Common Information Model).

Находим CIM-объект, связанный с нашим устройством.
> $adapterCim = Get-CimInstance -Namespace root\wmi -ClassName MSPower_DeviceEnable | Where-Object { $_.InstanceName -like "*$($instanceId.Split('\')[-1])*" }

Применяем к нему изменения.
> if ($adapterCim) { Set-CimInstance -CimInstance $adapterCim -Property @{ Enable = $true } }

Весь процесс

Весь процесс

Готовый скрипт можно скачать отсюда.
Статья здесь

Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀

Другие статьи о PowerShell

Философия PowerShell. Части 0,1 Вступление и первый командлет

Часть 2: Конвейер (Pipeline), переменные, Get-Member, файл .ps1 и экспорт результатов

Часть 3: Навигация и управление файловой системой. Знакомство с операторами логики и функциями

Диагностика и восстановление дисков с помощью PowerShell

Показать полностью 2
8

Новый ноутбук -3 и Hyper-V. Внезапный DHCP и внезапный NAT на Windows 11 24h2

Для ЛЛ: очень интересно, но не понятно

Продолжаю играть в новый ноутбук и Hyper-V. Внезапно для себя, развернул все что надо в виртуальных машинах, играю, никого не трогаю, и вдруг такой думаю – надо бы настроить статику, А СТОП.
Оказалось, что внезапно для меня – Hyper-V под Windows 11 поднял себе маленький DHCP сервер. То есть взял, сделал сам себе виртуальную сетевую карту, назначил туда какой-то IP и сидит себе, слушает 67 и 68 порт, что видно и по старой школе:
netstat -an | findstr ":67"
Или по новой школе, которую писали странные люди, потому что есть
Get-NetTCPConnection -State Listen
А есть
Get-NetUDPEndpoint
где слушается и 67, и 68, и даже 53. ВОТ ЭТО ПОВОРОТ.

И Linux вполне получает какой-то внутренний адрес, и пишет в своем
cat /var/lib/dhcp/dhclient.eth0.leases

Что получил IP у Hyper-V.
НУ И КАК ЭТО ПОНИМАТЬ?

Оно еще и NAT поддерживает. Я, конечно, понимаю заботу Microsoft, но это было .. неожиданно. И средств управления нет, никаких.
Просто работает.

То есть, вот так можно было создать это все руками:
Windows 10 and Windows 11 Hyper-V allows native network address translation (NAT) for a virtual network.

Очень неприятное открытие, потому что статику в таких тестах не настроить без перестройки всей сети.  

Показать полностью
10

Экспертиза уровня B, или высшая школа экономики в 2025 году

Для ЛЛ: Доклад абсолютно игнорирует технологическую базу, и написан в стиле 2015 года.

31.07.2025 Институт статистических исследований и экономики знаний Высшей школы экономики (ИСИЭЗ НИУ ВШЭ) в рамках реализованного при поддержке «Яндекса» форсайт-исследования выделил четыре сценария развития отечественного ИТ-рынка до 2028 года. Результаты изложены в аналитическом докладе «Информационные технологии в России: сценарии развития».

Доклад размером 214 страниц лежит открыто, и на 50% представляет из себя слайды и презентации на половину страницы. Еще часть это просто пустые страницы, без текста и картинок. Воды в остальном тексте и компоновке текста столько, что можно два раза Сахару полить.

Булшит бинго 2015

Булшит бинго 2015

Примечание. Я не хотел писать эту заметку, но очень попросили. Я же, как дегенеративная нейросеть, поддался на обещания «прилететь и устроить мне всякое», в обмен на заметку. ТАК ВОТ МАША! ТРИ РУБЛЯ С ТЕБЯ ПРИЧИТАЕТСЯ.

Выжимки нет, но отдельные моменты стоит разобрать, что понять, какое дно на этот раз пробила ВШЭ. Можно просто читать по некоторым пунктам:

Страница 30.
1.  Россия обладает существенным человеческим потенциалом для развития технологий:

• Высокий уровень технической экспертизы
• Высокий уровень образованности населения

В России нет своего производства ни современных, ни не очень современных электронных компонентов. Вчера зарегистрированные пользователи превозносят как великое достижение – пересборку станка 350 нм из Белоруссии (или Беларуси, или Беларусь это трактор, почти как Dobrynya ?). При этом станок не серийный, имеющееся в России производство микроэлектронных компонентов работает на станках ASML (Нидерланды), и на расходных материалах из Китая и Европы.
Про уровень технической экспертизы невозможно говорить без анализа технического производства. Массового производства нет, производства отдельных компонентов совсем нет, про какую экспертизу речь?

Уровень образованности можно мерять по победителям олимпиад или по индексам цитирования и прочим Хиршам. Победители олимпиад есть. Цитирования и прочих Хиршей нет.

Высокий инновационный потенциал развития технологий на внутреннем  ИТ-рынке:
Уровень технологической конкуренции в настоящее время невысок

В России нет технологической конкуренции ни «внутри» ни «снаружи». Потому что физические основы технологии, все эти чипы, микросхемы, итд, в РФ не просто не производятся, их еще и некуда ставить. В России отсутствуют специализированные дата центры, позволяющие установку современных технологических решений (про это ниже). Да и не современных тоже, текущие массовые нормы проектирования питания в российских ЦОД по 5Квт на ветку питания, и 5-7 киловатт отвода тепла, не позволяют монтировать современную высокоплотную компоновку.

Относительно слабое влияние на развитие технологий таких экономических факторов, как инфляция, курс валют и т.п.

Если 100% технологической базы закупается за рубежом, то как курс может «не влиять»?

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

И это пишет ВШЭ.

В 2025 году в ВШЭ могли бы знать, что в РФ отсутствует даже «своя» массовая и контролируемая операционная система. Есть купленная, и почти не развиваемая Аврора для мобильных устройств, есть разные форки Linux, но ядро ОС при этом все тот же Linux. В итоге уровень контроля и вклада РФ в развитие хотя бы ядра ОС Linux ниже, чем у Huawei, частной организации из Китая. Huawei на днях внес исправления в EXT4, от РФ ничего подобного не поступало. Huawei разрабатывает и поддерживает свою EulerOS и свою  HarmonyOS, в России проектов подобного уровня нет. Kaspersky OS живет в другом сегменте.

В 2025 году в ВШЭ могли бы знать, что стоимость разработки в капитализме нужно покрывать прибылью, и что рынок РФ не очень емок и не очень «богат». Поэтому развитие аналоговнетов – это или переклейка этикеток, или доработка интерфейсов. Серьезные проекты есть, но они не то что «не догоняют», они, с их текущей скоростью разработки, опираются на опенсорс решения, а опенсорс решения, в свою очередь, уже несколько лет перестали «догонять коммерческие», а перешли на модель «коммерческого развития».
Все, поколение Столлмана ушло, no money, no parts, no deal.

Бугуртовоз Пингвин

Бугуртовоз Пингвин

Даже основной нагревательный элемент бугуртовоза уже не генерирует пар.

Ожидается усиленная интеграция ИИ в различные сферы жизни, включая здравоохранение, образование и финансы. Мы увидим, как ИИ будет использоваться для диагностики заболеваний..

ИИ для диагностики заболеваний, точнее IBM Watson Health, используется как публичное коммерческое решения с апреля 2015 года. Больше 10 лет.

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

Я понимаю, в ВШЭ новости приходят с опозданием лет на 10, но генерируемый контент, а точнее генерируемые модели с размером 34B - 36C (или, по русски, третий плюс), уже два -три года приносят создателям неплохие деньги. На днях на Байду провели 6 часовой стрим с 100% AI генерацией продаж. Для ВШЭ это «какое-то будущее», для остального мира – ежедневная практика.

И это доклад 2025 года, не 2015, не 2020.

Страница 52.
ИИ становится неотъемлемой частью повседневной жизни: от «умных домов» и автоматизированных систем управления до персонализированных медицинских услуг и образовательных программ. Люди начинают активно полагаться на ИИ для улучшения качества своей жизни

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

Страница 87.
Это большая и пока не решенная проблема:  как часть вычислений перенести на так называемое Edge, то есть конечное пользовательское устройство. Она  периодически обсуждается, и тот, кто решит ее первым, сорвет банк.  Потому что истории с генеративками очень ресурсозатратные. Если мы научимся генерировать условную картинку или  текст на компьютере пользователя, пусть даже с худшим качеством, то это упростит жизнь всем.

Локальные модели крутят дома уже пару лет все, кому не лень. Deep Learning Super Sampling (DLSS) – это 2020 год, решению больше пяти лет, текущая версия – 4.0.

Страница 172.
Однако имеющийся в стране технологический задел позволяет поддерживать определенный уровень независимости в ИТ-сфере

Когда 99.95% % решений используют уже давно «американский» Linux, и прочие решения от Apache Software Foundation, то на какую аудиторию ориентирована фраза «технологический задел» и «уровень независимости»? Или это задел уровня «скачали Windows Wasyan repack with Babushkin antivirus» ?

Страница 173
Тем не менее, из-за невозможности  быстро развивать собственные решения,  Россия рискует оказаться в зависимости  от поставок из «дружественных» стран,  прежде всего — Китая, особенно в сферах, где китайцы имеют конкурентные преимущества: производство электроники и аппаратного обеспечения, 5G, телекоммуникации и ИИ. Создание конкурентоспособных решений на базе собственной микроэлектроники может стать сложной задачей, поскольку быстрое наращивание производственных мощностей в этой области требует больших инвестиций и времени

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

Страница 174
Нехватка инвестиций в образование  и науку, вместе с отсутствием конкурентоспособных зарплат и ограниченными возможностями профессионального роста, также грозят оттоком  высококвалифицированных ИТ-специалистов из России.

Только инвестиции грозят? А больше ничего не грозит, нет? Никаких больше преград точно нет? Как там дела у Тимура Измайлова, нет ли каких-то рисков, которые могли бы с ним реализоваться? Или у Ильи Сачкова не случилось вдруг риска?
И точно ли «грозят»? Может, что-то уже случилось? Просто на Хабре запретили про это писать, потому что одни пишут, а другим неприятно?

Страница 176. Влияние .. слабое.

«Типа эксперты», похоже, что в целом не знакомы с современными системами, ограничиваясь знакомством с технологиями на SOHO уровне.
Но, в то же время в замке шефа уже продают изделие «для корпоративного уровня» -
NVIDIA Grace Blackwell NVLink72.
Только в РФ его, с требованиями 120 киловатт и жидкостным охлаждением,  некуда ставить.

Итого

Меня терзает смутное сомнение, что это доклад 2025 года, а не какая-то переработанная студенческая презентация из года, примерно, 2015. Когда только начинался интернет вещей, массовое компьютерное зрение, итд. Потому что по докладу можно играть в Bullshit bingo 2015 technology 4.0

И это подается как экспертный доклад ВШЭ.

PS. На днях состоялся очередной забег в Параолимпиаде, то есть:
Платформа Basis Dynamix заняла первое место в крупнейшем рейтинге российских решений серверной виртуализации, подготовленном CNews.

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

Что, правда в Basis уже контролируют развитие ядра Linux? Точно точно?

Совместимость с операционными системами (10 баллов)

Очень странный пункт, потому что Astra Linux это Debian, RED OS – это как бы не CentOS, Основа - Debian 10, итд. То есть совместимость проверяли с разными версиями Debian и старой Centos.

Поддержка архитектуры NUMA

Что, правда этот функционал теперь поддерживается на уровне окружения ОС, а не на уровне BIOS, ядра и CPU scheduler?

Тут еще что буквально на днях вышло обновление 6.17:
Earlier this year Linux kernel patches were posted for making SMP support unconditional so the kernel is always built for multi-core capabilities. With uniprocessor core environments being extremely rare especially for those that would be using an up-to-date, upstream Linux kernel, dropping non-SMP support would allow simplifying code paths within the kernel. Well, for Linux 6.17 it's finally happening.

Поэтому возникает вопрос, точно есть связь GUI для KVM и NUMA ?

Показать полностью 2
68

Философия PowerShell. Часть 3: Навигация и управление файловой системой. Знакомство с операторами логики и функциями

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

В предыдущей части мы исследовали конвейеры и абстрактные объекты процессов. Теперь давайте применим наши знания о конвейере и объектах к одной из частых задач пользователя или администратора — работе с файловой системой. В PowerShell эта работа построена на тех же принципах: команды возвращают объекты, которые можно передавать по конвейеру для дальнейшей обработки.


1. Концепция PowerShell Drives (PSDrives)

Прежде чем начать работать с файлами, важно понять концепцию PowerShell-дисков (PSDrives). В отличие от cmd.exe, где диски — это только буквы C:, D: и так далее, в PowerShell "диск" — это абстракция для доступа к любому иерархическому хранилищу данных.

> Get-PSDrive

Результат покажет не только физические диски, но и псевдо-диски:

Эта унификация означает, что вы можете "зайти" в реестр (Set-Location HKLM:) и получить список его ключей той же командой Get-ChildItem, которой получаете список файлов на диске C:. Это невероятно мощная концепция.

Примеры работы с различными провайдерами

  • Хранилище сертификатов (Cert:) Позволяет работать с цифровыми сертификатами так, будто это файлы в папках.

    Задача: Найти все SSL-сертификаты на локальной машине, срок действия которых истекает в ближайшие 30 дней.
    > Set-Location Cert:\LocalMachine\My
    > Get-ChildItem | Where-Object { $_.NotAfter -lt (Get-Date).AddDays(30) } | Select-Object Subject, NotAfter, Thumbprint

Переменные окружения (Env:) Предоставляет доступ к переменным окружения Windows (%PATH%, %windir% и т.д.) как к файлам.

Задача: Получить путь к системной папке Windows и добавить к нему путь к System32.

Получаем значение переменной windir:
> $windowsPath = (Get-Item Env:windir).Value
Собираем полный путь
> $system32Path = Join-Path -Path $windowsPath -ChildPath "System32"
> Write-Host $system32Path

Реестр Windows (HKCU: и HKLM:) Представьте, что реестр — это просто еще одна файловая система. Ветки — это папки, а параметры — свойства этих папок.

Задача: Узнать полное название установленной версии Windows из реестра.
Переходим в нужную ветку реестра:
> Set-Location "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Получаем свойство (параметр реестра) с именем "ProductName"
> Get-ItemProperty -Path . -Name "ProductName"

Переменные сессии (Variable:) Позволяет управлять всеми переменными ($myVar, $PROFILE, $Error и т.д.), определенными в текущей сессии.

Задача: Найти все переменные, связанные с версией PowerShell ($PSVersionTable, $PSHOME и др.).
Находим все переменные, начинающиеся с "PS":
> Get-ChildItem Variable:PS*

Получаем значение конкретной переменной:
> Get-Variable -Name "PSVersionTable"

2. Навигация и анализ

Основы навигации
- Узнать, где мы находимся (возвращает объект PathInfo):
> Get-Location # Псевдонимы: gl, pwd

- Переход в корень диска C:
> Set-Location C:\ # Псевдонимы: sl, cd

- Переход в домашнюю папку текущего пользователя:
> Set-Location ~

Показать содержимое текущей папки (возвращает коллекцию объектов):
> Get-ChildItem # Псевдонимы: gci, ls, dir

- Рекурсивный поиск. Найти файл hosts в системе, игнорируя ошибки "Доступ запрещен":
> Get-ChildItem C:\ -Filter "hosts" -Recurse -ErrorAction SilentlyContinue

Ключ -Recurse (Рекурсивно): Заставляет командлет работать не только с указанным элементом, но и со всем его содержимым.

Ключ -ErrorAction SilentlyContinue: Инструкция игнорировать ошибки и продолжать работу молча.

Анализ дискового пространства

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


Подсказка как вводить длинные команды.

PowerShell позволяет разбивать их на несколько строк для удобства чтения.

  • После оператора конвейера (|): Это самый частый и удобный способ. Просто нажмите Enter после символа |. PowerShell увидит, что команда не завершена, и будет ждать продолжения на следующей строке.

  • В любом другом месте: Используйте символ обратной кавычки (backtick) ` в конце строки, а затем нажмите Enter. Этот символ говорит PowerShell: "Команда продолжится на следующей строке".

  • В редакторах (ISE, VS Code): Сочетание клавиш Shift+Enter обычно автоматически вставляет перенос строки, не запуская команду.

Фильтрация содержимого и операторы логики

- Найти все .exe файлы. Параметр -Filter работает очень быстро:
> Get-ChildItem C:\Windows -Filter "*.exe"

Get-ChildItem возвращает коллекцию объектов. Мы можем передать ее по конвейеру в Where-Object для дальнейшей фильтрации.

> Get-ChildItem C:\Windows | Where-Object { $_.PSIsContainer -eq $false }

Эта команда знакомит нас с одним из фундаментальных понятий в скриптах PowerShell: операторами сравнения.

Операторы сравнения и логики

Это специальные ключи для сравнения значений. Они всегда начинаются с дефиса (-) и являются основой для фильтрации данных в Where-Object и построения логики в if.

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

Примеры использования в файловой системе

  • Найти файл по точному имени (с учетом регистра):

    > Get-ChildItem C:\Windows\System32 -Recurse | Where-Object { $_.Name -eq "kernel32.dll" }

  • Найти все файлы, начинающиеся с "host", но не являющиеся папками:

    > Get-ChildItem C:\Windows\System32\drivers\etc | Where-Object { ($_.Name -like "host*") -and (-not $_.PSIsContainer) }

  • Найти все файлы журналов (.log), размер которых превышает 50 мегабайт:

    > Get-ChildItem C:\Windows\Logs -Filter "*.log" -Recurse | Where-Object { $_.Length -gt 50MB }

  • Найти все временные файлы (.tmp) и файлы бэкапов (.bak) для очистки: Оператор -in здесь гораздо элегантнее, чем несколько условий с -or.

    > $extensionsToDelete = ".tmp", ".bak", ".old" Get-ChildItem C:\Temp -Recurse | Where-Object { > $_.Extension -in $extensionsToDelete }

  • Найти все файлы Word (.docx), созданные за последнюю неделю:

    > $oneWeekAgo = (Get-Date).AddDays(-7) Get-ChildItem C:\Users\MyUser\Documents -Filter "*.docx" -Recurse | Where-Object { $_.CreationTime -ge $oneWeekAgo }

  • Найти пустые файлы (размером 0 байт), которые не являются папками:

    > Get-ChildItem C:\Downloads -Recurse | Where-Object { ($_.Length -eq 0) -and (-not $_.PSIsContainer) }

  • Найти все исполняемые файлы (.exe), которые были изменены в этом году, но НЕ в этом месяце. Этот сложный пример демонстрирует мощь комбинирования операторов.

    > Get-ChildItem C:\Program Files -Filter "*.exe" -Recurse |
    Where-Object {
    ($_.LastWriteTime.Year -eq (Get-Date).Year) -and ($_.LastWriteTime.Month -ne (Get-Date).Month)
    }

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

Будьте внимательны с рекурсией:

  • Если очень много файлов/папок — -Recurse может рекурсивно заходить в десятки тысяч элементов.

  • Символические ссылки / циклические ссылки — могут вызывать бесконечную рекурсию.

  • Файлы без прав доступа — могут блокировать выполнение.

4. Создание, управление и безопасное удаление

Создание, копирование и перемещение:


> New-Item -Path "C:\Temp\MyFolder" -ItemType Directory
> Add-Content -Path "C:\Temp\MyFolder\MyFile.txt" -Value "Первая строка"
> Copy-Item -Path "C:\Temp\MyFolder" -Destination "C:\Temp\MyFolder_Copy" -Recurse

Безопасное удаление

Remove-Item — потенциально опасный командлет, поэтому в PowerShell есть встроенные механизмы защиты. Ключ -WhatIf (Что если?): Ваш лучший друг. Он не выполняет команду, а лишь выводит в консоль сообщение о том, что бы произошло.

> Remove-Item C:\Temp\MyFolder -Recurse -Force -WhatIf

Только убедившись, что все верно, убираем -WhatIf и ВЫПОЛНЯЕМ команду
> Remove-Item C:\Temp\MyFolder -Recurse -Force


Введение в функции

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

Как использовать и сохранять функции

Существует три основных способа сделать ваши функции доступными:

Способ 1: Временный (для тестов) Вы можете набрать в консопли или просто скопировать и вставить весь код функции в консоль PowerShell. Функция будет доступна до закрытия этого окна.

Способ 2: Постоянный, но ручной (через .ps1 файл) Это самый распространенный способ для организации и обмена инструментами. Вы сохраняете функцию в файл .ps1 и загружаете ее в сессию, когда она вам нужна.

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

Что такое профиль PowerShell? Это специальный скрипт .ps1, который PowerShell автоматически запускает каждый раз при старте. Все, что вы поместите в этот файл — псевдонимы, переменные и, конечно, функции — будет доступно в каждой вашей сессии по умолчанию.

Пример 1: Поиск дубликатов файлов

Давайте пройдем все шаги на примере функции Find-DuplicateFiles.

Шаг 1: Определяем код функции

Шаг 2 (Вариант А): Сохраняем в отдельный файл для ручной загрузки

Сохраняем
> Set-Content -Path ".\Find-DuplicateFiles.ps1" -Value $functionCode
Загружаем
> . .\Find-DuplicateFiles.ps1

Dot Sourcing (. .\Find-DuplicateFiles.ps1): Эта специальная команда выполняет скрипт в текущем контексте, делая все его функции и переменные доступными в вашей консоли.

Вызываем:
> Find-DuplicateFiles -Path "C:\Users\$env:USERNAME\Downloads"

  1. Шаг 2 (Вариант Б): Добавляем в профиль для автоматической загрузки Сделаем эту функцию доступной всегда.

    Что такое профиль PowerShell? Это специальный скрипт .ps1, который PowerShell автоматически запускает каждый раз при старте. Все, что вы поместите в этот файл — псевдонимы, переменные и функции — будет доступно в каждой вашей сессии по умолчанию.

  2. Находим путь к файлу профиля. PowerShell хранит его в переменной $PROFILE.

    1. > $PROFILE

    Создаем файл профиля, если он не существует:

    > if (-not (Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force }

  3. Добавляем код нашей функции в конец файла профиля.

    Add-Content -Path $PROFILE -Value $functionCode

  4. Перезапустите PowerShell (или выполните . $PROFILE), и теперь ваша команда Find-DuplicateFiles будет доступна всегда, как и Get-ChildItem.

Пример 2: Создание ZIP-архива с резервной копией

Код для файла Backup-FolderToZip.ps1:

Детальный разбор функций я сделаю следующих частях.


Справочник командлетов для работы с файловой системой

1. Основные командлеты

Нужно прочитать содержимое текстового файла? Используйте Get-Content. Нужно полностью перезаписать файл новым содержимым? Используйте Set-Content. Нужно добавить строчку в лог-файл, не стирая старые данные? Используйте Add-Content. Нужно проверить, существует ли файл перед записью? Используйте Test-Path.

2. Специализированные командлеты для продвинутых задач

Когда базовых командлетов недостаточно, PowerShell предлагает более специализированные инструменты. Они не дублируют базовые, а расширяют ваши возможности.

  • Работа с путями (Path)

    • Join-Path: Безопасно объединяет части пути, автоматически вставляя \.

    • Split-Path: Разбивает путь на части (папка, имя файла, расширение).

    • Resolve-Path: Преобразует относительный путь (например, . или ..\files) в полный, абсолютный.

  • Работа со свойствами и содержимым (Item Properties and Content)

    • Get-ItemProperty: Получает свойства конкретного файла (например, IsReadOnly, CreationTime).

    • Set-ItemProperty: Изменяет свойства файла или папки.

    • Clear-Content: Удаляет всё содержимое из файла, но оставляет сам файл пустым.

  • Продвинутая навигация (Location Stack)

    • Push-Location: "Запоминает" текущую директорию и переходит в новую.

    • Pop-Location: Возвращается в директорию, которую "запомнил" Push-Location.

  • Управление правами доступа (ACL)

    • Get-Acl: Получает список прав доступа (ACL) для файла или папки.

    • Set-Acl: Устанавливает права доступа для файла или папки (сложная операция).

Нужно изменить атрибут файла, например, сделать его «только для чтения»? Используйте Set-ItemProperty. Нужно полностью очистить лог-файл, не удаляя его? Используйте Clear-Content. Нужно временно перейти в другую папку в скрипте, а потом гарантированно вернуться назад? Используйте Push-Location и Pop-Location. Нужно узнать, кто имеет права на доступ к папке? Используйте Get-Acl.

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

Философия PowerShell на github:

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

Часть 2: Конвейер (Pipeline), переменные, Get-Member, файл .ps1 и экспорт результатов. Исходники ко второй части:
system_monitor.ps1

Часть 3: Навигация и управление файловой системой.
Исходники к третьей части:
Find-DuplicateFiles.ps1
Backup-FolderToZip.ps1

Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀

UPD:

Вышла четвертая часть Философия PowerShell. Часть 4. Интерактивная работа: Out-ConsoleGridView

Показать полностью 20
48

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть первая из многих.

Для лиги лени: общеизвестное.

В связи с событиями 2023 года, точнее закрытием сделки по покупке VMware в ноябре 2023 года и переходу на новую (дорогую и избыточную) модель лицензирования, мой текущий работодатель посчитал доходы-расходы, и решил – едем на что-то еще.
Выбор был не так широк.
Во первых, очень хотелось сохранить модель «маленького гиперскейлера» - то есть, держать диски на серверах.

Для тех, кто не очень понимает, в чем проблема.

Если у вас один сервер, то вы можете застраховаться от отказа одного, ну двух дисков, отказа одного блока питания, отказа одного порта или одного SFP модуля сетевой карты (если их всего два), одного порта FC (если их всего два), или и единичной ошибки памяти, которую исправит ECC. И то, нет гарантий что исправит, потому что некоторые базы очень грустят даже при корректируемой одиночной ошибке.
Любой сбой по процессору, RAID контроллеру (если он отдельной картой), материнской платы, единичной сетевой платы или отказ всей стойки по питанию, и все, получаем отказ в обслуживании.

Решений несколько.
Решение первое. Держать данные на отдельной системе хранения данных (СХД), причем на нормально резервированной – два контроллера, по 2-4 порта на каждом контроллере, а еще лучше две СХД, собранные в территориально разнесенный кластер.
Но это достаточно дорого в разовой покупке, и требует кое-каких прочих движений, начиная от поиска на рынке вменяемых сетевых инженеров. Для РФ это нерешаемая задача, у нас (вне РФ) еще так-сяк, хотя тоже с вопросами, дешевые индусики это клиника.
По физическому месту и емкости проблем нет – даже младшие системы хранения данных позволяют поставить 24 – 36 SSD NVME диска на систему с 2 (двумя) контроллерами, и дальше вопросы останутся только к вашей сети. 100G карты и порты на коммутаторе 100G стали дешевые, можно смело ставить.
HPE Mellanox StoreFabric SN2100M 100GbE 8QSFP28 Switch стоит меньше 2000$.
36 дисков по 30 терабайт – это петабайт, причем петабайт без учета встроенной, и нормально работающей дедупликации и компрессии.

Решение второе. Хранить данные на локальных дисках тех же серверов, где выполняется виртуализация.
Это Storage space direct, vSAN,  и, с оговорками, Nutanix и Linstor.
К первым двум нет вопросов по настройке, производительности, спискам совместимого оборудования, программе обучения и кадрам.
К Nutanix есть вопросы по наличию кадров на открытом рынке. Не знаю как в РФ, а в мире эта система вспыхнула, работает, но специалисты не так часты.
К Linstor есть вопросы по совместной работе на нагруженной системе, но про это позже.

Решение третье, это обеспечение отказоустойчивости средствами самого приложения. Для баз данных это отлично делает Oracle RAC, Microsoft SQL, Tibero. Так себе, но сойдет – PostgreSQL,MySQL и все решения вокруг них и их форков. Veritas Infoscale Availabilty и Red Hat Cluster Suite не смотрел.

Решение четвертое – это програмно определяемые системы хранения, как Ceph и подобные.
Проблем с ними полно, но основных две:
Невозможность держать одновременно нагрузку виртуализации и нагрузку хранения на сколько-то нагруженной системе.
Плохая производительность – на том же железе Microsoft и Broadcom «из коробки» дадут в 2-3 раза больше скорости (IOPS), и быстрее запустятся, и без проблем с настройками.
Да, есть лимиты - Storage Spaces Direct сейчас это максимум 4 петабайта на кластер, и 400 терабайт на хост, vSAN Max – 360 терабайт на хост и 8 петабайт на кластер.

5-10 лет назад, если у вас была задача постройки «медленного, но объемного хранилища петабайт на 10-20», то дешевого выбора можно сказать и не было. Сейчас скорости и объемы выросли, цены на SSD упали, поэтому вернулся вопрос что выгоднее – купить систему хранения данных и один раз заплатить за покупку, гарантию, пуско-наладку и сопровождение, или держать штат дорогих и редких специалистов. При оценке совокупной стоимости владения за три года все не так очевидно.
Неочевидная в русскоязычном (да и не только, кроилово не имеет национальности) проблема в том, что последние лет .. 25, идет пропаганда «Linux и любые решения вокруг него дешевле и лучше». Ну ..
BundesTux – Германия, 2001 – 2002. Порекламировали и все.
LiMux – переезд администрации Мюнхена на Linux в 2004 году. Переезд обошелся в 43 миллиона евро, в 2017 переехали обратно на Windows.
Open-Source-Software in öffentlichen Einrichtungen – постоянно идущее движение «давайте переедем».
GendBuntu тоже как-то живет.
В России движение «давайте Linux» началось, в том числе, с подачи представительство IBM в России и его Центра компетенции Linux в 2004 году. Цитата:

Своего апогея идея использования в школах свободного ПО достигла осенью 2007 г., когда Федеральным агентством по образованию был проведен открытый конкурс по выбору подрядчика на разработку и пилотное внедрение пакета свободного программного обеспечения для школ (Школьного Линукса), победителем которого стала группа компаний Армада.

Теория теорией, а практика практикой. Рыночек порешал, и СПО живет там, где живет.
Ничего удивительного –
1) На западе сменилось поколение времен молодого Столлмана,
2) Бесплатная разработка чего-то сложного оказалась не нужна работникам,
3) если «вроде как бесплатный продукт + кадры + железо плюс поддержка» обходятся дороже, чем «платный продукт + кадры + железо + поддержка», то зачем он нужен, такой «бесплатный»?

Отсюда возникает проблема «не говорить про слона в комнате».
С такими вводными коллектив и я и начали проработку идеи «в Бристоль опенсорс, друзья»

Документация.

С базовыми вещами проблем нет, документация в открытом доступе на http://pve.proxmox.com/wiki/

Recommended Hardware: в наличии в очень усеченном виде. Но, есть большой плюс, прямо там и написано:
For Ceph or ZFS additional memory is required, approximately 1 GB memory for every TB used storage.

Проблемы начинаются чуть дальше.
В ESXi ты можешь без проблем включить пересылку логов на внешний syslog в две кнопки. 
В Hyper-v ты можешь сделать хоть пересылку логов, хоть указать размещение логов на другом диске.

В Proxmox ? Цитата:
For pveproxy, taking a look at the source, the log file is hard-coded in line 106 to be written to /var/log/pveproxy/access.log
тред
тред на реддите.

Деление диска.
Аналогично, в ESXi у тебя есть резерв в 138 гигов, и дальше делай с диском что хочешь.
В Proxmox? Не описано, и с разделами на выходе какая-то фигня. Посмотреть я, конечно, могу, но хотелось бы очевидные вещи видеть в документации, да и в мастере установки не помешает.

Сети.

Тот же уровень проблем. Нет, сами сети описаны, но управление ими или недостаточно или избыточно. Например, раздел Linux Bond описывает сценарии:
Round-robin
Active-backup
XOR
Broadcast
IEEE 802.3ad Dynamic link aggregation
Adaptive transmit load balancing
Adaptive load balancing

Режим Round-robin. Ок, случайная балансировка , LB и FT в наличии. Никаких указаний на настройку коммутатора, что хорошо.
Active-backup. Сомнительно, но окей.
XOR. Тоже ок.
LACP. Чем плох – тем, что требует настройки со стороны коммутатора и сложен в отладке при плавающих проблемах.
Adaptive transmit load balancing  и Adaptive load balancing. Все перечисленные там действия вызывают вопрос «зачем».
Рекомендованным является LACP, что довольно странно для 2025 года, когда в Hyper-V и ESXi давно используется простой и понятный Switch Embedded Teaming (SET) или active-active конфигурация.  То есть Linux Bridge как виртуальное устройство поддерживает режимы балансировки, но почему-то тут вот так.
Почему-то не описан аналог режима active-passive для ESXi, когда первая сетевая карта активна в первом коммутаторе, вторая во втором, но в Proxmox аналог сущности Vmkernel еще надо поискать, чтобы такая настройка заработала

Есть SDN - Software-Defined Network, но он какой-то избыточный, чтоли.

Литература.

Storage Spaces Direct hardware requirements in Windows Server
vSAN Max
Исследование российского рынка СПО
Changing the default size of the ESX-OSData volume in ESXi 7.0
Расширение корневого раздела (LVM) в Proxmox
Network Configuration
Software-Defined Network 1.
Software-Defined Network 2
Linux Bridge
Performance Best Practices for VMware vSphere 8.0
Перенос (миграция) виртуальных машин с VMware ESXi на Proxmox
Run Hyper-V in a Virtual Machine with Nested Virtualization

В следующих частях:

Смежные сервисы
Диски локальные и не локальные.

PS.
Рассматривался  переход на какой-то вариант Openstack и Open Nebula. Оба признаны избыточно сложными  на данном этапе. Не в смысле «сложно развернуть», с этим проблем нет. В эксплуатации опыта не так много.

Показать полностью
Отличная работа, все прочитано!