Powershell закрывается мгновенно

Я просмотрел весь Интернет и не нашел никакой информации, относящейся к этой ситуации.

Powershell закрывается сразу после запуска. Когда я запускаю его в командной строке, я получаю следующее:

Windows PowerShell terminated with the following error:
 Unable to cast object of type 'System.String' to type 'System.String[]'.

Я проверил следующие папки, но профилей не существует:

c: \ users \ me \ appdata \ microsoft \ windows \ powershell

c: \ windows \ system32 \ windowspowershell \ v1.0 \

c: \ окна \ systwow64 \ windowspowershell \ v1.0 \

Я попытался запустить следующие команды, и мне не повезло:

powershell -noexit

powershell -noprofile

Я выполнил следующие команды, и мне не повезло:

sfc.exe /scannow

DISM.exe /Online /Cleanup-image /Restorehealth

Я также зашел в Панель управления - ›Удаление программы -› Затем включите или выключите функции Windows, удалил Powershell, перезагрузил и переустановил.

После выполнения всех этих шагов я все еще не могу запустить Powershell. ISE тоже не работает.


person David Kehoe    schedule 12.02.2020    source источник
comment
[1] работает ли ISE? [2] вы можете запустить простой скрипт в консоли? [3] для powershell.exe нет параметра -NoClose. есть параметр -NoExit, хотя. [ухмылка]   -  person Lee_Dailey    schedule 12.02.2020
comment
Я обновил его, чтобы ответить на эти вопросы. -NoExit - вот что я хотел сказать, хороший улов. ISE не работает.   -  person David Kehoe    schedule 13.02.2020
comment
Вы также не можете удалить Powershell в Windows. Эта функция предназначена для PowerShell v2. Который действительно должен быть отключен в наши дни, судя по всем объявлениям MS. Если вы используете Win 10, PSVersion - v4 - 5x. Если вы установили PowerShell v7 (Powershell Core), вы можете установить и удалить его по своему желанию. Однако Windows PowerShell является частью ОС. У вас есть точка восстановления, к которой вы можете вернуться, когда она работала?   -  person postanote    schedule 13.02.2020


Ответы (2)


Это может быть связано с настройками ведения журнала Powershell. У меня была точно такая же проблема после реализации ведения журнала модуля Powershell с использованием неправильного пути для ModuleNames.

Проверьте значения, установленные в HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging

В моем случае я допустил ошибку, добавив значение ModuleNames, установленное на *, не осознавая, что это должен быть КЛЮЧ с именем ModuleNames, что привело к ошибке.

Windows PowerShell terminated with the following error:
Unable to cast object of type 'System.String' to type 'System.String[]'.

Добавив правильный путь HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames\ со значением REG_SZ с именем * и значением *, я снова заставил Powershell работать.

Образ реестра

Обратите внимание, что если этот параметр исходит из объекта групповой политики (GPO) в домене, его необходимо исправить там, а не в реестре. В противном случае объект групповой политики просто перезапишет локальные настройки при следующем применении.

person user15478373    schedule 25.03.2021

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

Не зная ничего о модулях, которые у вас есть в каталоге, расположенном по адресу: C: \ windows \ system32 \ windowspowershell \ v1.0 \ Modules, было бы трудно кому-либо сказать вам решение.

Рекомендация

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

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

ПРИМЕЧАНИЕ: запишите пути в блокнот, прежде чем расчищать его.

Из-за ошибки кажется, что класс библиотеки .net (dll) написан неправильно.

person Jawad    schedule 12.02.2020
comment
У меня нет кастомных модулей. - person David Kehoe; 12.02.2020
comment
Удалите PSModulePath из переменной среды вашей системы и попробуйте запустить powreshell.exe и посмотрите, работает ли это. Запишите значение, чтобы можно было вернуться назад - person Jawad; 12.02.2020
comment
Есть ли способ полностью выдернуть Powershell и снова вставить? - person David Kehoe; 12.02.2020
comment
Удалите последние обновления .NET Framework, которые вы можете, и переустановите их. Кроме того, я мало о чем могу думать. - person Jawad; 13.02.2020
comment
Вы не можете полностью удалить и переустановить Windows PowerShell, как я отмечал выше. Если это не обновление версии (обновление .Net, на которое намекает Jawad) с v3 - v5x, которое вы установили вручную, или, как указано, если это был PowerShell Core, который вы можете установить параллельно с устаревшей оболочкой Windows PowerShell. - person postanote; 13.02.2020