По умолчанию Windows PowerShell не загружает команды из текущего местоположения

Обновлено: 03.07.2024

Командлет Get-Location получает объект, представляющий текущий каталог, подобно команде печати рабочего каталога (pwd).

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

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

Этот командлет также можно использовать для отображения местоположений в стеке местоположений. Дополнительные сведения см. в примечаниях и описаниях параметров Stack и StackName.

Параметры

Указывает текущее расположение на указанном диске Windows PowerShell, которое этот командлет получает в ходе операции.

Например, если вы находитесь на диске Certificate:, вы можете использовать этот параметр, чтобы найти свое текущее местоположение на диске C:.

Указывает текущее расположение на диске, поддерживаемом поставщиком Windows PowerShell, которое этот командлет получает в ходе операции.

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

Например, если вы находитесь на диске C:, вы можете использовать этот параметр, чтобы найти свое текущее местоположение на дисках поставщика Windows PowerShellRegistry.

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

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

Указывает в виде массива строк стеки именованных местоположений. Введите одно или несколько имен стека местоположений.

Чтобы отобразить местоположения в текущем стеке местоположений, используйте параметр Stack. Чтобы сделать стек местоположений текущим стеком местоположений, используйте параметр Set-Location. Информацию о стеках местоположений см. в примечаниях.

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

Включает команду в активную транзакцию. Этот параметр действителен только во время выполнения транзакции.

Этот командлет поддерживает общие параметры: Verbose, Debug,ErrorAction, ErrorVariable, WarningAction, WarningVariable,OutBuffer, PipelineVariable и OutVariable.

Входные данные
Выходные данные

Если вы используете параметры Stack или StackName, этот командлет возвращает объект StackInfo. В противном случае он возвращает объект PathInfo.

Примеры

Эта команда отображает ваше местоположение на текущем диске Windows PowerShell.

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

    Первая команда использует командлет **Set-Location**, чтобы установить текущее местоположение в подкаталог Windows на диске C::

Первая команда использует командлет **Set-Location**, чтобы установить текущее местоположение в подкаталог Windows на диске C:.

При изменении местоположения на диске HKLM: Windows PowerShell сохраняет ваше местоположение на диске C:.

Для указания диска используется параметр *PSDrive*.

Несмотря на то, что в команде не указан подкаталог, Windows PowerShell возвращает вас в сохраненное местоположение.

**Get-Location** возвращает расположение диска реестра, к которому последний раз обращались, HKCU. В этом примере демонстрируется использование Get-Location для отображения вашего текущего местоположения на разных дисках Windows PowerShell.

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

Если стек Stack2 не существует, **Push-Location** создает его.

По умолчанию текущим стеком является безымянный стек расположения по умолчанию.

В этом примере показано, как использовать параметры Stack и StackName командлета Get-Location для получения списка местоположений в текущем стеке местоположений и альтернативных стеках местоположений. Дополнительные сведения о стеках местоположений см. в примечаниях.

В этом примере показано, как настроить приглашение Windows PowerShell. Функция, определяющая подсказку, включает команду Get-Location, которая запускается всякий раз, когда подсказка появляется в консоли.

Формат приглашения Windows PowerShell по умолчанию определяется специальной функцией под названием prompt. Вы можете изменить приглашение в консоли, создав новую функцию с именем prompt.

Чтобы просмотреть текущую функцию приглашения, введите следующую команду: `Get-Content Function:prompt`

Команда начинается с ключевого слова function, за которым следует имя функции, prompt. Тело функции отображается в фигурных скобках ( <> ).

Эта команда определяет новое приглашение, начинающееся со строки PowerShell: .Чтобы добавить текущее местоположение, он использует команду Get-Location, которая запускается при вызове функции приглашения. Подсказка заканчивается строкой ">".

Дополнительные примечания

Эта работа находится под лицензией Creative Commons Attribution 4.0 International. Он принадлежит корпорации Microsoft, и его можно найти здесь.

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

вот функция, которую мне нужно ввести в powershell:

и строка, которую я использую после этого,

Закрепить приложение "Microsoft Store", "Microsoft Edge"

Кто-нибудь может помочь мне с этим, пожалуйста?

fluffydestroyer

Этот человек является проверенным специалистом

пушистый разрушитель

Популярные темы в Windows 10

Big Green Человек

Этот человек является проверенным специалистом

Большой зеленый человек

  • отметить 119 лучших ответов
  • thumb_up – 540 благодарностей.
  • format_list_bulleted 1 Инструкции

Или, поскольку он уже задан как параметр, сохраните его как ps1 и используйте параметр.

15 ответов

Big Green Человек

Этот человек является проверенным специалистом

Большой зеленый человек

  • отметить 119 лучших ответов
  • thumb_up – 540 благодарностей.
  • format_list_bulleted 1 Инструкции

Сохраните его как ps1, а затем импортируйте с помощью Import-Module.

Big Green Человек

Этот человек является проверенным специалистом

Большой зеленый человек

  • отметить 119 лучших ответов
  • thumb_up – 540 благодарностей.
  • format_list_bulleted 1 Инструкции

Или, поскольку он уже задан как параметр, сохраните его как ps1 и используйте параметр.

Григорий для Майкрософт

Этот человек является проверенным специалистом

Грегори для Microsoft

Представитель бренда Microsoft

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

fluffydestroyer

Этот человек является проверенным специалистом

ОП пушистый разрушитель

поэтому, если я хочу открепить его, я могу сделать c:\temp\pin-app.ps1 -appname "Mail" -unpin, чтобы он откреплялся от меню "Пуск"?

потому что, когда я это делаю, я получаю следующее: pin-app.ps1 -appname "Mail"
pin-app.ps1 : Термин "pin-app.ps1" не распознается как имя командлета. , функция, файл сценария или работающая
программа.Проверьте правильность написания имени или, если был указан путь, проверьте правильность пути и повторите попытку.
В строке:1 char:1
+ pin-app.ps1 -appname "Mail"
+ ~~~~~~~~~~~
+ Информация о категории : ObjectNotFound: (pin-app.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Предложение [3, общее]: команда pin-app.ps1 не найдена, но существует в текущем местоположении. Windows PowerShell по умолчанию не загружает команды из текущего расположения. Если вы доверяете этой команде, вместо этого введите: ".\pin-app.ps1". Дополнительные сведения см. в разделе "get-help about_Command_Precedence".

Big Green Человек

Этот человек является проверенным специалистом

Большой зеленый человек

  • отметить 119 лучших ответов
  • thumb_up – 540 благодарностей.
  • format_list_bulleted 1 Инструкции

fluffydestroyer написал:

поэтому, если я хочу открепить его, я могу сделать c:\temp\pin-app.ps1 -appname "Mail" -unpin, чтобы он откреплялся от стартовое меню ?

У вас есть параметр под названием "открепить", так что да. Это работает, если вы вставите свою функцию, а затем запустите

JitenSh

Этот человек является проверенным специалистом

ДжитэнШ

хорошо, сохраните как pin.ps1

вы можете запустить его как

.\pin.ps1 -имя приложения mail

Big Green Человек

Этот человек является проверенным специалистом

Большой зеленый человек

  • отметить 119 лучших ответов
  • thumb_up – 540 благодарностей.
  • format_list_bulleted 1 Инструкции

fluffydestroyer написал:

поэтому, если я хочу открепить его, я могу сделать c:\temp\pin-app.ps1 -appname "Mail" -unpin, чтобы он откреплялся от меню "Пуск"?

потому что, когда я это делаю, я получаю следующее: pin-app.ps1 -appname "Mail"
pin-app.ps1 : термин "pin-app.ps1" не распознается как имя командлета, функции, файла сценария или работающей
программы. Проверьте правильность написания имени или, если был указан путь, проверьте правильность пути и повторите попытку.
В строке:1 char:1
+ pin-app.ps1 -appname "Mail"
+ ~~~~~~~~~~~
+ Информация о категории : ObjectNotFound: (pin-app.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Предложение [3, общее]: команда pin-app.ps1 не найдена, но существует в текущем местоположении. Windows PowerShell по умолчанию не загружает команды из текущего местоположения. Если вы доверяете этой команде, вместо этого введите: ".\pin-app.ps1". Дополнительные сведения см. в разделе "get-help about_Command_Precedence".

Вы не можете запустить .ps1 из своего рабочего каталога, используя полный путь. Вы должны сделать это как.\pin-app.ps1, если он находится в вашем рабочем каталоге. Это для безопасности. См. нижнюю часть сообщения об ошибке.

fluffydestroyer

Этот человек является проверенным специалистом

ОП пушистый разрушитель

поэтому сначала я взял функцию, которую я разместил выше, сделал pin-app.ps1 и сохранил ее.
затем мне пришлось сделать

Set-ExecutionPolicy -ExecutionPolicy без ограничений

потому что он не позволял мне запустить скрипт.

затем я ввел

.\pin-app.ps1 -имя приложения "почта" -открепить

это переводит меня на следующую строку, и ничего не происходит. значок почты для примера все еще находится в меню «Пуск». Так что, думаю, я что-то здесь упускаю.
Я знаю, что могу вставить приведенную выше функцию и ввести

Pin-App "Mail" - unpin, и оно удалит его и скажет мне, что удалило его, но, как я уже сказал, я пытаюсь автоматизировать некоторые задачи и сэкономить время на наборе текста здесь и там. и учиться в процессе.

fluffydestroyer

Этот человек является проверенным специалистом

ОП пушистый разрушитель

Я даже попробовал модуль импорта, но он не работает. значок почты по-прежнему находится в меню «Пуск»

PS D:\xxx\documents> import-module .\pin-app.ps1
PS D:\xxx\documents> .\pin-app.ps1 -appname "mail" -unpin
PS D:\xxx\documents>

Этот человек является проверенным специалистом

aspire2inspire

Несколько замечаний по этому поводу: я ни в коем случае не являюсь экспертом по powershell, увидел это и подумал, что с ним будет интересно поиграть! У вас есть скрипт для закрепления на панели задач вместо меню Пуск?

<р>1. Насколько я понимаю, для запуска сценария powershell из командной строки вам нужно ввести путь через точку. примеры:

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

<р>2. Когда вы запускаете этот сценарий, все, что он делает, это создает функцию в вашей среде, а не запускает функцию. Таким образом, вы не можете использовать параметры сразу. Вам нужно запустить вторую команду, вызвав фактическую команду Pin-App «mail».

За ней следует фактическая команда Pin-App "mail".

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

Big Green Человек

Этот человек является проверенным специалистом

Большой зеленый человек

  • отметить 119 лучших ответов
  • thumb_up – 540 благодарностей.
  • format_list_bulleted 1 Инструкции

aspire2inspire написал:

2. Когда вы запускаете этот сценарий, все, что он делает, это создает функцию в вашей среде, а не запускает функцию. Таким образом, вы не можете использовать параметры сразу. Вам нужно запустить вторую команду, вызвав фактическую команду Pin-App «mail».

Да, вы правы. Глядя на предыдущие сценарии, в которых я определял параметры, я не делал этого внутри функции. Это позволяет мне запускать прямо из CLI без предварительного импорта.

fluffydestroyer

Этот человек является проверенным специалистом

ОП пушистый разрушитель

Запустите сеанс PowerShell и/или запустите сценарий PowerShell.

Стандартные псевдонимы для Powershell_ISE.exe: ise

При запуске сценария .ps1 вы можете указать -noprofile, чтобы убедиться, что сценарий работает в среде PowerShell по умолчанию и не загружает какие-либо сценарии профилей.

В Проводнике Windows вы можете ввести "powershell" в адресной строке, чтобы открыть приглашение PowerShell в текущем местоположении.

Из оболочки CMD вместо запуска PowerShell в командной строке вы можете открыть отдельное окно PowerShell, поэтому используйте START POWERSHELL .

При запуске PowerShell.exe -Command script-block вам не нужно добавлять кавычки вокруг script-block.
Например: PowerShell.exe -Команда Get-Service wuaauserv все после -Команда передается в PowerShell,
Однако при вызове Powershell.exe из оболочки CMD.exe (обычное требование) вам потребуется экранировать некоторые символы, которые имеют особое значение в CMD:

  • Двойные кавычки '"' должны быть экранированы обратной косой чертой. \"
  • символы процента ' % ' можно избежать, удвоив их: %%

Запуск двойным щелчком

Чтобы создать значок/ярлык, который может запускать PowerShell и выполнять скрипт, вы можете использовать простой пакетный скрипт, который вызывает PowerShell.exe:

Установите цель как:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
и укажите параметр C:\path to\your-script.ps1

При необходимости включите параметр -windowstyle Hidden to подавлять вывод/ошибки скрипта.

64-битная и 32-битная

По умолчанию при запуске PowerShell запускается 64-битный процесс C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

если вы запускаете 64-битную оболочку (обычно C :\windows\system32\cmd.exe ), а затем запустите PowerShell, он запустит 64-битную оболочку PowerShell.

Однако, если вы запустите 32-битную оболочку ( C:\windows\syswow64\cmd.exe ) и затем запустите PowerShell, вы запустите 32-разрядную версию PowerShell ( C:\Windows\SysWOW64\WindowsPowerShell\v1.0\PowerShell.exe )

Чтобы запустить 64-разрядную версию (которая поддерживается syswow64 ) из 32-битного процесса используйте системный путь:
%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe

При запуске одного сеанса PowerShell из другого этот скрипт будет проверять работающая версия PowerShell и перезапустится как 64-разрядная, если вы используете 32-разрядную версию.

Запуск скрипта от имени администратора

Чтобы запустить PowerShell и запустить скрипт

Это запустит powershell.exe -Command, а затем командлет powershell
Обратите внимание, что первый вызов PowerShell не повышен. Командлет, который мы запускаем, называется Start-Process, и мы используем его для запуска второй копии PowerShell, на этот раз с повышенными правами с помощью параметра -verb runas.

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

Параметры Start-Process -NoNewWindow и -Verb RunAs нельзя комбинировать, так как это приведет к повышению уровня уже запущенного сценария. сеанс.

Подробнее см. на странице повышения прав, которая включает в себя скрипт PowerShell с самоповышением прав.

Длинные имена файлов

Если вы вызываете один сеанс PowerShell из другого, это не проблема, но если вы вызываете PowerShell из пакетного файла CMD и команда содержит двойные кавычки, их необходимо экранировать: " становится \"
\ — это escape-символ, который требуется из-за того, что PowerShell использует CommandLineToArgvW для разбора входных аргументов. [x]

Расширение вышеизложенного для передачи аргументов в кавычках сценарию:

В качестве альтернативы можно использовать одинарные кавычки, где это возможно, или использовать тройные кавычки """Arg1""

В дополнение к экранированию кавычек вам также может потребоваться экранировать любые символы PowerShell, которые имеют значение в оболочке CMD,
например, замените ) на ^) знак вставки здесь является escape-символом CMD.

Закодированная команда

Параметр -EncodedCommand для powershell.exe позволяет передавать код PowerShell в виде строки в кодировке base-64.

Сначала поместите свой код в переменную:

Затем закодируйте переменную:

Теперь мы можем запустить Powershell.exe и передать закодированные команды:

Коды выхода

В PowerShell код выхода хранится в автоматической переменной $LASTEXITCODE .

Чтобы прочитать коды выхода (отличные от 0 или 1), запустите сценарий PowerShell и верните $LASTEXITCODE в одном строка вида:

powershell.exe -noprofile C:\scripts\script.ps1; выход $LASTEXITCODE

Запустить скрипт (без повышенных прав):

Запустите скрипт (без повышенных прав) в локальной области сеанса PowerShell:

PowerShell.exe -file "C:\demo\MyScript.ps1"
или более кратко:
PowerShell.exe C:\demo\MyScript.ps1

Загрузите консоль и запустите скрипт:

PowerShell.exe -PSConsoleFile "C:\scripting\MyShell.psc1" -Command ". 'MyScript.ps1'"

Выполните команду для отображения журнала событий безопасности:

powershell.exe -command

Или то же самое, но с вызовом PowerShell из CMD-оболочки:

powershell.exe -command "& "

Выполнить простой расчет и вернуть результат (поддерживает длинные числа):

PS.cmd — простой пакетный файл для запуска PowerShell с меньшим количеством ввода:
@echo off
Powershell.exe %*

«Если вы хотите спустить на воду большие корабли, вам нужно идти туда, где вода глубокая» ~ Анон

Вы хотите взаимодействовать с переменными среды вашей системы.

Решение

Чтобы взаимодействовать с переменными среды, обращайтесь к ним почти так же, как к обычным переменным PowerShell. Единственное отличие состоит в том, что вы помещаете env: между знаком доллара ($) и именем переменной:

Таким же образом можно изменять и переменные среды. Например, чтобы временно добавить текущий каталог к ​​пути:

Обсуждение

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

PowerShell предоставляет доступ к переменным среды через своего поставщика среды: контейнер, который позволяет вам работать с переменными среды так же, как с элементами файловой системы или поставщиками реестра. По умолчанию PowerShell определяет диск env: (очень похожий на c: или d:), который обеспечивает доступ к этой информации:

Поскольку это обычный диск PowerShell, полный способ получения значения переменной среды выглядит следующим образом:

Однако когда дело доходит до переменных среды, этот синтаксис вам почти никогда не понадобится, поскольку PowerShell поддерживает синтаксис переменных Get-Content и Set-Content, который сокращается до:

Этот синтаксис работает для всех дисков, но чаще всего используется для доступа к переменным среды. Дополнительные сведения об этом синтаксисе см. в рецепте 16.3.

Некоторые переменные среды на самом деле получают свои значения из комбинации двух мест: общемашинных настроек и настроек текущего пользователя. Если вы хотите получить доступ к значениям переменных среды, специально настроенным на уровне компьютера или пользователя, используйте метод [Environment]::GetEnvironmentVariable(). Например, если вы определили каталог tools в своем пути, вы можете увидеть:

Чтобы установить эти машинные или пользовательские переменные среды на постоянной основе, используйте метод [Environment]::SetEnvironmentVariable():

Параметр target определяет, где должна храниться эта переменная: User для текущего пользователя и Machine для всех пользователей на машине. Например, чтобы навсегда добавить каталог tools к вашему пути:

Дополнительную информацию об изменении системного пути см. в рецепте 16.2.

Дополнительную информацию о синтаксисе переменных Get-Content и Set-Content см. в разделе «Переменные». Чтобы получить дополнительные сведения о поставщике среды, введите Get-Help about_Environment_Provider .

Читайте также: