Можно ли в PS в принудительном порядке выставить Language Mode в FullLanguage?

Андрей Владимирович 0 Баллы репутации
2025-10-22T18:47:57.6466667+00:00

В Win я использую политику ограниченного использования программ (SRP), а MS начиная с PowerShell 5 вывела его из владений SRP. Тогда я был вынужден заблокировать использование без повышения прав встроенного PS (SRP у меня не распространяется на администраторов) и использовать портативную версию PS. Но, оказалось, что при его запуске без повышения прав, PS в принудительном порядке переводит Language Mode в режим ConstrainedLanguage. А в этом режиме я даже не могу проиграть аудио файл. Например, строчка кода $obj = New-Object Media.SoundPlayer $Path не выполняется с сообщением «New-Object: Cannot create type. Only core types are supported in this language mode.». И теперь, получается, что мне нужно либо запускать скрипт с повышением прав (что не нужно и опасно), либо вывести скрипты PS1 из защиты SRP. Я пробовал воспользоваться файлом конфигурации (about_PowerShell_Config, файл powershell.config.json), но он не позволяет менять Language Mode. Параметр "__PSLockDownPolicy" в системных переменных среды так же не дал результатов или я не нашёл нужного значения (данных по нему почти нет).

Так можно ли в PS в принудительном порядке выставить Language Mode в FullLanguage?

P.S.

Ситуация, мягко говоря странная. Решение настолько бредовое, что я даже не знаю, как это понять (кроме объяснения, что MS нужна уязвимость). При защите SRP мы лишаемся большой части функционала PS, а без защиты, пожалуйста, выполняй любые скрипты. В чём смысл?

Windows для дома | Windows 10 | Безопасность и конфиденциальность
Комментариев: 0 Без комментариев
Голосов: {count}

Ответы: 3

Сортировать по: Наиболее полезные
  1. Ian-T 5,875 Баллы репутации Внешний персонал Microsoft Модератор
    2025-10-29T14:47:10.6933333+00:00

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


    Здравствуйте Андрей Владимирович,

    Спасибо, что задали вопрос на форуме Microsoft Q&A.

    Основываясь на моем исследовании, я также прочитал о WDAC (Windows Defender Application Control) и Политике ограничения использования программ (SRP). WDAC — это гораздо более глубокая и мощная функция безопасности. Она встроена в ядро Windows. Поскольку WDAC — это функция безопасности системного уровня, обычный пользователь не может изменять ее правила.

    Справочные материалы по WDAC: https://learn.microsoft.com/ru-ru/windows-server/manage/windows-admin-center/use/manage-application-control-infrastructure

    Есть две статьи, которые я проверил и которые могут быть похожи на вашу ситуацию:

    https://community.spiceworks.com/t/allow-scripts-to-run-fulllanguage-in-wdac/1171888

    https://community.spiceworks.com/t/how-to-change-constrained-language-mode-to-full-language-mode-for-users/1168171

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

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

    С моей точки зрения, я могу придумать только два способа, и оба требуют, чтобы вы один раз использовали повышенные права (Администратора) для изменения политики WDAC:

    1.Доверие приложению (Правило хэша / Hash Rule): Администратор должен создать правило политики WDAC, которое "доверяет" вашему портативному файлу powershell.exe.

    2.Доверие скриптам (Правило подписи / Signer Rule):

    • Администратор создает сертификат для подписи кода.
    • Вы подписываете свои скрипты .ps1 этим сертификатом.
    • Администратор создает правило политики WDAC, которое "доверяет" этому конкретному сертификату.

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

    К сожалению, моя тестовая среда также вернула значение "FullLanguageMode" при выполнении этой команды:

    $ExecutionContext.SessionState.LanguageMode в PowerShell. У меня не было возможности провести реальный тест в режиме ConstrainedLanguageMode. Если вы рассматриваете мои предложения, я мог бы попытаться провести исследование и предоставить способ, как это сделать, но для этого также потребуются повышенные права.

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


    Если ответ был полезен, пожалуйста, нажмите "Принять ответ" и проголосуйте за него. Если у вас есть дополнительные вопросы по этому ответу, пожалуйста, нажмите "Комментарий".

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


  2. Андрей Владимирович 0 Баллы репутации
    2025-10-30T22:16:20.85+00:00

    Ian-T, спасибо за ответ. Пока попробую освоить WDAC.


  3. Андрей Владимирович 0 Баллы репутации
    2025-11-03T10:48:39.2333333+00:00

    В общем, всё это закончилось полным провалом. При использовании WDAC без SRP ситуация такая же.

    На данный момент я пришёл только к одному выводу - этим заведует сам PS и никакие настройки тут не помогут. Единственный вариант, это взять исходные коды PS (а они вроде как доступны на GitHub), внести изменение и построить файлы самому. Вот только я эту работу точно не потяну.

    Да, умеет MS испортить жизнь пользователям.

    Комментариев: 0 Без комментариев

Ваш ответ

Автор вопроса может устанавливать для ответов пометку "Принято", а модераторы — пометку "Рекомендуется". Благодаря этому пользователям становится проще понять, какой из ответов помог решить проблему автора.