Возможно ли, как вы остановите powershell с помощью некоторых командлетов?

Powershell явно намного лучше, чем cmd, но он скрывает основные функции. Я обычно использую его, чтобы понять, как использовать команды, которые я хочу в сценариях, но это ломает большое количество основных вещей, и я в конечном итоге использую обе бок о бок, если попаду в липкое место.

Сегодня это было удаление каталога - rd или rmdir - оба из которых были повреждены в powershell в пользу одного из недокументированных команд из командной строки Remove-Item. Кажется, я все время сталкиваюсь с этим - sc (за то, что он обманывает сервисы); где для поиска какой программы вызывается при вводе команды и т.д. и т.д.

В самом деле, у меня действительно была проблема с sc, а затем googled, чтобы узнать команду, где только обнаружить, что это тоже не работало в powershell! Это был запутанный день

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

Однако это не относится к rmdir. Хотя интересно ввести "где rmdir" в cmd не работает.

Итак... мой вопрос в том, есть ли способ отключить (желательно все) командлеты в powershell и просто получить нормальный материал вместо этого?

Ответ 1

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

Большинство "нормальных" вещей есть в любом случае, которые вы можете найти с помощью команды get-alias.

C:\> get-alias

CommandType     Name
-----------     ----
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ?? -> Invoke-NullCoalescing
Alias           ac -> Add-Content
Alias           asnp -> Add-PSSnapin
Alias           cat -> Get-Content
Alias           cd -> Set-Location
Alias           chdir -> Set-Location
.....
..... AND A WHOLE LOT MORE!

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

Set-Alias python2 "C:\Python27\python.exe"

Чтобы избежать необходимости делать это каждый раз, вы можете просто добавить это в свой профиль запуска. Просто введите $PROFILE в командной строке, и он покажет вам путь к файлу. Если он не существует, просто создайте его, и любые команды powershell, которые вы добавите в начало, будут автоматически активированы при запуске нового сеанса.

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

Просто введите это в свою командную строку, и вы будете на пути к просветлению Powershell!

get-help get-command

get-command -noun Item
get-command -verb get

Ответ 2

Я только понял, что ответ на мой вопрос был похоронен в комментариях к другому ответу:

Чтобы удалить командлет в powershell, вы запустите

Удалить псевдоним элемента: что-то.

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

По умолчанию вы не можете запускать скрипты в powershell. Вы должны изменить это, используя set-ExecutionPolicy.

Я изменил это, используя admin powershell и набрав

set-executionpolicy bypass

Это позволит вам запускать любой script, который вам нравится

Тогда в моем профиле script у меня есть строки вроде:

Remove-Item -force alias:sc

Вы не увидите ошибки из этого script, когда он запустится, и он ничего не сделает, если у вас нет силы.