Задать вопрос
  • Как в Powershell переопределить обработку квадратных скобок в путях?

    TrueBers
    @TrueBers
    Гуглю за еду
    Ответ написан
    Комментировать
  • Как обработать ошибки send-mailmessage (try-catch)?

    @NortheR73
    системный инженер
    Облазил пол интернета
    странный у вас интернет...
    try {
        Send-MailMessage ... -ErrorAction Stop
    }
    catch {
        $errorMessage = $_.Exception.Message
        $errorMessage | Out-File -FilePath C:\temp\MailErrorLog.txt
    }

    З.Ы. Send-MailMessage - выпиливается как устаревший командлет. Вместо него рекомендуется использовать, например, класс System.Net.Mail.SmtpClient
    Ответ написан
    6 комментариев
  • Как лучше организовать подключение 8 СХД к группе серверов vmware?

    @Ava256
    долгий путь в тех. поддержке
    Чтобы работал мультипасинг вам нужны только отдельные подсети для контрллеров А и B на СХД.
    Можно обойтись и одним vlan для изоляции этого трафика.Можно сделать по vlan’у на каждую подсеть, если логически так удобнее.
    В одну подсеть подключаете все контроллеры -А, в другую -B.На esxi настраиваете два vmkernel интерфейса, по одному в каждую подсеть и в принципе все.
    Ну и под этот трафик лучше иметь отдельные сетевухи на сервере, чтобы не бороться с другим сетевым трафиком.Но это все зависит от задачи и сетевой активности.
    Ответ написан
    3 комментария
  • Какие возможные варианты подключения уволенного сотрудника в Exchange другому сотруднику?

    @NortheR73
    системный инженер
    ваш вопрос больше организационный, чем технический...

    Если я сделаю это через "Получатели-Почтовые ящики-Ищем начальника этого сотрудника-проваливаемся в его профиль- Адреса электронной почты и указываем отключенную почту уволенного сотрудника в SMTP" верно?
    так можно сделать, но начальник сможет обратным адресом указать адрес уволенного сотрудника, что с точки зрения ИБ и юристов может быть не очень хорошо.

    Обычно при увольнении у сотрудника есть две недели до окончательного расчета и последнего "прощай". На этот период (или более длительный) можно сделать, например, следующее:
    1. На ящике увольняющегося сотрудника включить автоответ, в котором указать контакты начальника или другого сотрудника, кому передаются дела.
    2. На сервере настроить транспортное правило, которое будет отправлять начальнику (или нужному сотруднику) копии всех входящих сообщений, адресованных увольняющему сотруднику.
    3. Начальнику (или нужному сотруднику) выдать права Full Mailbox Access на ящик увольняющегося сотрудника. В этом случае начальник будет в курсе всей последней переписки и передачи дел (сможет читать почту, но не сможет отвечать/отправлять письма)

    как найти эти отключенные учетные записи в Exchange (2019)
    Get-MailboxStatistics -Database "DATABASE1" | where {($_.DisconnectReason -ne $null) -or ($_.DisconnectDate -ne $null)} | sort DisplayName | ft DisplayName,MailboxGUID,DisconnectDate,DisconnectReason -a
    Ответ написан
    4 комментария
  • Висят процессы powershell, кто их использует?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Висят процессы powershell, кто их использует?

    Adler_lug
    @Adler_lug
    Добавьте колонку "командная строка" и посмотрите полный путь выполнения.
    Ответ написан
    Комментировать
  • Как задать сертификат для SMTP в Exchange?

    @NortheR73
    системный инженер
    Есть официальная документация - Enable and configure IMAP4 on an Exchange server
    Ответ написан
    Комментировать
  • Какая функция y=f(x) может описывать подобный график с ассиметричным распределением?

    @alexalexes
    У функции 3 точки перегиба - значит эквивалент этой функции с некоторой погрешностью - полином 3 порядка.
    У вас есть реперные точки. Берете любой вычислительный метод интерполяции и подбираете коэффициенты этого полинома.
    Ответ написан
    2 комментария
  • От чего зависит время пинга?

    Не надо путать задержку и пропускную способность.

    RTT - это задержка, измеряется в секундах (милли, микро)
    То что измеряется в битах (байтах) в секунду - это пропускная способность.

    Если очень грубыми сантехническими аналогиями, то задержка определяется длинной трубы, а пропускная способность - её шириной.

    В сетях и на то и на другое влияет очень много факторов:
    1. Количество узлов между отправителем и получателем. Больше узлов - больше задержка
    2. Производительность этих узлов. Чем ниже производительность - тем выше минимальная задержка и меньше пропускная способность.
    3. Нагрузка на каналы связи. При высокой нагрузке будет расти задержка, так как данные будут вставать в очередь (а может и не будут вставать в очередь - они вполне могут просто отбрасываться и тогда будет тот самый packet loss)
    4. То, как эти узлы обрабатывают данные, которые через них проходят. Меньше всяких проверок - меньше задержка.
    5. Физическая среда и физическая длина кабелей. Чем длиннее физический путь и чем хуже среда, тем выше задержка.
    Скорость распространения сигнала в оптике, меди, и по беспроводу отличается.

    Как будет влиять замедление от провайдера - сильно зависит от выбранной стратегии.
    Может увеличится rtt, а может будет packet loss.
    Ответ написан
    3 комментария
  • При миграция exchange 2010 на 2016 перенес системные ящики без атрибута -Arbitration что теперь делать?

    @NortheR73
    системный инженер
    Можно что то отыграть или поправить?
    Можно - пересоздать системные ящики...там делов минут на 10-15 с перекурами и кофе-брейком...
    Ответ написан
    Комментировать
  • Как работают переводы на другие языки в играх?

    @Mercury13
    Программист на «си с крестами» и не только
    А теперь расскажу как человек, который давно и плотно интересуется локализацией, но в глаза Unity не видел.
    Локализация ДОЛЖНА храниться в простенькой базе «ключ-значение», это может быть INI, CSV, XML или что-то ещё. А то часто бывают половинчатые решения, когда общие строки локализуются, а прописанные где-то в скриптах — через зад (StarCraft первый). Или одна и та же строка служит и ключом чего-то, и выводимой локализованной строкой (Atreides/Ordos/Harkonnen в Dune II).

    Существуют два основных подхода к локализации.

    1. Есть так называемый «основной» язык, прописанный ПРЯМО в EXE-файле, ПРЯМО в скриптах игры и так далее. Локализация имеет вид
    «Open»,cmd → «Открыть»
    «The door is locked.»,level1 → «Дверь закрыта.»

    Как вы видите, ключ состоит из двух частей: строки-оригинала и уточнения. Если ключ совпадает, а уточнение — нет, берём строку без уточнения, а если и таковой нет — то что угодно. А если и ключ не совпадает — берём непереведённую.

    Адепты этого подхода — Gettext и Qt.

    2. Даже первый язык наравне с остальными.
    Cmd.Open → «Открыть»
    Level1.Locked → «Дверь закрыта.»

    Вариант 2.1: первый язык (обычно английский) используется как резервный, если локализации не нашлось.

    Сам я в пользу второго подхода, но он сложнее.

    САМАЯ простая база ключ-значение, чаще всего использовавшаяся на Java ME, где с памятью швах,— это простой линейный массив.
    [0] Открыть
    [1] Дверь закрыта.
    Всё преобразование из человекочитаемых идентификаторов S_CMD_OPEN в номера происходит на машине разработчика, генерацией файла
    constexpr unsigned S_CMD_OPEN = 0;

    Какой из методов брать?
    1. Насколько много локализации?
    2. Есть ли скрипты, GUI-формы и прочие ресурсы, способные содержать строки локализации?
    3. Насколько много больших текстов?
    4. Если программа параллельно разрабатывается и переводится: насколько тексты стабильны? Первый подход совершенно не выдерживает ситуации, когда исходные тексты меняются.
    5. Возможны ли неофициальные локализации? Метод 2 без уточнения 2.1, если программа «живая», исключает их.
    6. Что поддерживается вашим движком из коробки?
    7. Локализация встроена изначально, или приходится переводить неготовую к этому прогу?
    8. Насколько много интерфейса? У интерфейса есть противная фишка: нужно расщеплять строки, то есть давать одинаковым строкам разный ID (Open=«Открыть», «Открыто» и т.д.), и первый поход по умолчанию объединяет, второй по умолчанию расщепляет.

    И ма-ахонький апдейт. Есть ещё такое понятие, как сегмент — кусок МЕНЬШЕ локализуемого текста. То есть сегменты есть только на уровне комплекта локализации, в экспортированных текстах они склеиваются в единый текст. Обычно предложение или абзац. Сегментация используется в переводе больших текстов, особенно в интерфейсах, с такими целями.
    • Существуют тексты-«козы», которые могут найтись в памяти переводов. Например: «Серп и молот символизирует крестьян и рабочих. Осторожно, в вашем законодательстве эта символика может быть запрещена.»
    • Из-за недостатков интерфейса проги перевода можно пропустить целое предложение. Да, бывает!
    • В «живых» программах — можно помечать плохо переведённым кусок меньший, чем целый текст.
    (Живой я называю программу, которая параллельно разрабатывается и переводится. Благо методика «аджайл» предполагает частые небольшие выпуски.)
    Ответ написан
    Комментировать
  • Как в Powershell добавить файлу группу "Прошедшие проверку" вне зависимости от языка системы?

    @NortheR73
    системный инженер
    использовать SID группы - Известные идентификаторы SID
    скрипт добавления других файлов в группу "Прошедшие проверку"
    только наоборот - группу добавляют в ACL файла
    Ответ написан
    Комментировать
  • Как через GPO сделать так, чтобы приходили уведомления о необходимости перезагрузить пк после обновления системы?

    @NortheR73
    системный инженер
    Не очень понятно зачем вы ждёте до следующего вторника обновлений...Пользователя вообще не надо вмешивать в этот процесс...
    Логика примерно такая: перед обновлением рассылается уведомление, далее как обычно ставите обновления, в третий вторник месяца проверяете перезагрузку по системным журналам. Если перезагрузки не было - перегружает принудительно.

    P.S. ещё можно административный ресурс подключить: не перегрузил в положенное время комп - минус 20% премии...
    Ответ написан
    Комментировать
  • Как использовать ip адреса из файла hosts как переменную Ansible для настройки Mikrotik?

    akelsey
    @akelsey
    Подставить переменную из инвентори вроде {{ ansible_ssh_host }}

    но проверить перед этим сначала в модуле debug что это то что нужно.

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

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

    Т.е. без таких проверок ансиблом сетевые устройства удобно подгототавливать с нуля, а уже настроенное устройство, нужно изворачиваться.
    Ответ написан
    Комментировать
  • Как убрать лишний вывод в консоль?

    @NortheR73
    системный инженер
    В выводе же видно какой WMI-класс его генерирует, соответственно, идете в нужный участок кода и вносите правки:
    $computer_sys.Put() | Out-Null
    ...
    $page_file.Put() | Out-Null

    Можно вообще однострочником обойтись, например:
    Set-WmiInstance -Class Win32_PageFileSetting -Arguments @{name="C:\pagefile.sys"; InitialSize = 4096; MaximumSize = 8192} -EnableAllPrivileges | Out-Null
    Ответ написан
    Комментировать
  • Как работает локальный DNS в домене?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Локальные зоны, далее stub зоны и conditional forwarders, затем запросы через forwarders и если они пустые то к корневым серверам через root hints.
    Вот так и работает и какого черта нельзя было это нагуглить или хотя бы увидеть в настройках dns сервера
    Ответ написан
    Комментировать
  • Почему скрипт запуска виртуальной машины перестал работать?

    @rPman
    какое красивое садамаза, скрипт запускает сам себя на javascript являясь bat, да еще и внутри powershell, как это читать и отлаживать, известно только его разработчику :)

    И самое главное, вам точно нужно GUI для смены даты? И уж точно для этого не требуется ни powershell ни повышение прав доступа (хотя может у вас там так настроено)

    У virtualbox есть соответствующие команды VBoxManage, которые можно было просто прописать в текстовом файлике, назвать blablabla.bat и запускать
    upd. нужно считать разницу в миллисекундах между текущим временим и целевым, на bat это сложно, поэтому лучше сразу писать на чем то типа javascript, не изобретая паровоза (и от туда же запускать vboxmanage)

    p.s. кайфую с современного ИИ, который это сумел разобрать и по полочкам разложить этот кошмар
    anthropic:claude sonnet 3.5
    ...
    проанализируй этот скрипт для windows, почему тут сместь cmd и javascript, и начни описание, что именно делают первые строчки
    Давайте разберем этот интересный гибридный скрипт:

    Первые строки скрипта представляют собой "полиглот" - код, который может быть интерпретирован несколькими языками программирования:

    ```
    set @x=0; /*
    @echo off
    ver |>NUL find /v "5." && if "%~1"=="" cscript.exe //nologo //e:jscript "%~f0"& exit /b
    ```

    Это хитрая конструкция, которая:
    1. Начинается как cmd-скрипт (`@set @x=0;`)
    2. Открывает многострочный комментарий в JavaScript (`/*`)
    3. Выключает вывод команд в cmd (`@echo off`)
    4. Проверяет версию Windows и если скрипт запущен без параметров, перезапускает сам себя через cscript.exe в режиме JavaScript

    Последняя строка скрипта:
    ```javascript
    */new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);
    ```
    закрывает JavaScript-комментарий и содержит код для повышения привилегий - перезапуска скрипта с правами администратора.

    Это техника самоповышения привилегий (UAC bypass), которая позволяет скрипту перезапустить себя с правами администратора, если он был запущен от обычного пользователя.

    Основная часть скрипта написана на PowerShell и использует Windows Forms для создания графического интерфейса. Согласно документации [learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/syste...), скрипт создает форму для ввода даты, которая будет использоваться для настройки BIOS времени виртуальной машины VirtualBox.

    Такая сложная структура используется для:
    1. Обеспечения запуска с правами администратора
    2. Совместимости с разными версиями Windows
    3. Комбинирования возможностей разных языков скриптования Windows

    продолжай дальше анализ, почему там еще и powershell?
    PowerShell используется в этом скрипте для основной функциональности, и его часть начинается после строк:

    ```
    ;@echo off
    ;@Findstr -bv ;@ "%~f0" | powershell -noprofile -command - & goto:eof
    ```

    Эта конструкция особенно интересна, потому что:
    1. Использует Findstr для фильтрации содержимого файла, пропуская строки, начинающиеся с `;@`
    2. Передает отфильтрованное содержимое в PowerShell через пайп (`|`)
    3. Запускает PowerShell без профиля (`-noprofile`) для ускорения загрузки

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

    1. **Объектная модель**: Как отмечается в [thenewandshiny.com](https://thenewandshiny.com/powershell-everywhere/), PowerShell работает с объектами, а не с текстом, что делает его более надежным для работы с системными компонентами.

    2. **Удобство работы с GUI**: PowerShell позволяет легко создавать Windows Forms для пользовательского интерфейса, что используется в функции `CustomInputBox`

    3. **Управление VirtualBox**: PowerShell предоставляет удобные средства для запуска процессов и управления VirtualBox через `VBoxManage`

    4. **Работа с датами**: PowerShell имеет мощные средства для работы с датами и временем, что критично для этого скрипта

    Важно отметить, что в скрипте используется разделение на Windows PowerShell и PowerShell Core. Как упоминается в [get-powershellblog.blogspot.com](https://get-powershellblog.blogspot.com/2017/10/wh...), это важно учитывать при работе с разными версиями PowerShell.

    Скрипт использует стандартный формат командлетов PowerShell `Verb-Noun`, хотя, как отмечается в [scoop-docs.vercel.app](https://scoop-docs.vercel.app/docs/misc/Why-PowerS...), такой формат может казаться излишне многословным, но он обеспечивает четкую структуру и понятность команд.

    Основная функциональность скрипта:
    1. Создает GUI для ввода даты
    2. Проверяет корректность введенной даты
    3. Настраивает время BIOS для виртуальной машины VirtualBox
    4. Запускает виртуальную машину с модифицированными настройками времени

    какими строчками настраивается время
    В скрипте время настраивается несколькими ключевыми командами:

    1. Сначала отключается синхронизация времени с хостом:
    ```powershell
    start-process $VB_MANAGE 'setextradata', $vmname, 'VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled 1' -NoNewWindow
    ```

    2. Затем вычисляется смещение времени в миллисекундах:
    ```powershell
    $timeoffset_milliseconds='{0:0}' -f ([datetime]$date - [datetime]::Now).TotalMilliseconds
    ```

    3. И наконец, применяется смещение времени BIOS:
    ```powershell
    start-process $VB_MANAGE 'modifyvm', $vmname, '--biossystemtimeoffset', $timeoffset_milliseconds -NoNewWindow
    ```

    Здесь важно отметить несколько моментов:
    - Используется VBoxManage - утилита командной строки VirtualBox (путь хранится в переменной `$VB_MANAGE`)
    - Смещение вычисляется как разница между желаемым временем (`$date`) и текущим системным временем
    - Параметр `--biossystemtimeoffset` устанавливает смещение времени BIOS в миллисекундах

    После установки времени виртуальная машина запускается командой:
    ```powershell
    start-process $VB_MANAGE startvm, $vmname
    ```

    Похожий подход используется в проекте [github.com/bitbank2/rtc_setter](https://github.com..., где также реализована настройка времени, но для реального RTC (часов реального времени), а не виртуальной машины.

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

    Ответ написан
    5 комментариев
  • Есть ли утилита для упаковки папки с файлами в несколько архивов, без разделения файлов на части?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Проблема явно высосана из пальца.
    Если нужны "самодостаточные архивы", то и запаковывать надо по файлам/папкам, а не вот это вот мракобесие. В общем случае проходим по папкам и архивируем каждую

    for i in */; do zip -r "${i%/}.zip" "$i"; done

    В данном конкретном случае 99% объема раздачи составляют файлы .db. Вот их и надо заархивировать, по отдельности. А всё остальное оставить как есть. И тогда этим "облаком" можно будет хоть как-то пользоваться, без нанайских национальных плясок, распаковывая по 10 чемоданов, чтобы достать один файл.
    find . -type f -name '*.db' -exec zip -m {}.zip {} \;

    В винде всё это тоже легко пишется.

    Но сначала надо оценить саму необходимость возиться с архивирванием, чтобы сэкономить 30 гигов из 180.
    Ответ написан
    4 комментария
  • Возможно ли переписать это на PowerShell?

    @d-stream
    Готовые решения - не подаю, но...
    вот скормил ии и он даже на cmd сотворил
    for %%F in ("%source_folder%\*") do (
        call rling "%%~fF" "%compare_folder%"
        type result.txt >> %output_file%
        del /q result.txt


    на powershell
    if (!(Test-Path $outputFile)) {
        New-Item -Path $outputFile -Force | Out-Null
    }
    Get-ChildItem -Path $sourceFolder -File | ForEach-Object {
        & rling $_.FullName $compareFolder
        Get-Content -Path '.\result.txt' | Add-Content -Path $outputFile
        Remove-Item -Path '.\result.txt' -ErrorAction SilentlyContinue
    }


    ну и да, если предварить каждую команду в исходном тремя буковками wsl - то тоже будет результат)

    p/s/ кстати интересная логика у ии)
    Ответ написан
    4 комментария
  • Как ускорить выполнение powershell скрипта?

    @FluffyBeaver
    Kekxx, ну, не WMI, а WinRM.
    PowerShell Direct для того, чтобы администрировать виртуальные машины. Использовать его как замену удалённого доступа на стенде или в домашних условиях, конечно, можно. Но причина "по другому не работает" тут, скорее, индикатор, что инструмент выбран неверно.

    Если просто забить в Google ту строку, что возвращает PsExec, то уже на странице поиска будет понятно, что там написано.

    А если сопоставить этот вопрос и прошлый(-лые), то создаётся впечатление, что это попытка наваять что-то мутное на коленке.
    ______________________________
    Что касается вопроса - одновременный запуск проще будет сделать используя планировщик или ожидание нужного времени в самом скрипте
    (разумеется, надо убедиться в синхронизации времени между узла и).
    ______________________________
    Что касается проблемы доступа к ВМ, предположу, что это ПК и виртуальная машина не входят в домен, то есть, используют [разные] локальные учётные записи, а ошибки вызванв попытками использовать учётную запись одного узла в качестве учётной записи для другого узла.
    Ответ написан
    Комментировать