Получить аргументы, переданные powershell.exe - PullRequest
2 голосов
/ 21 октября 2019

Есть ли способ определить в сценарии профиля, какие аргументы были переданы в исполняемый файл powershell?

Вариант использования

Я хотел бы проверить, был ли параметр WorkingDirectoryустановить, прежде чем переопределить его своим собственным cd в моем профиле пользователя.

Попытки

Я сделал несколько беспомощных попыток получить значения переменных из скрипта профиля, но безуспешно,Ни один из них, кажется, не дает мне никакой информации о том, был ли pwsh.exe вызван с параметром -wd или нет:

echo $PSBoundParameters
echo $ArgumentList
echo (Get-Variable MyInvocation -Scope 0).Value;

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Как насчет (powershell.exe или pwsh.exe?):

get-ciminstance win32_process | where name -match 'powershell.exe|pwsh.exe' | 
  select name,commandline
1 голос
/ 22 октября 2019

Чтобы проверить собственную командную строку вызова PowerShell , вы можете использовать:

  • [Environment]::CommandLine (одна строка)

  • или [Environment]::GetCommandLineArgs() (массив аргументов, включая исполняемый файл в качестве первого аргумента).

Эти методы также работают на Unix-подобных платформах.

Предупреждение : Начиная с PowerShell Core 7 (.NET Core 3.0), в качестве исполняемого файла указывается pwsh.dll, а не pwsh[.exe].


Для регистрацииВаш файл $PROFILE, если при запуске был указан рабочий каталог , может выглядеть так, хотя обратите внимание, что решение не является надежным:

$workingDirSpecified =
  ($PSVersionTable.PSEdition -ne 'Desktop' -and
   [Environment]::GetCommandLineArgs() -match '^-(WorkingDirectory|wd|wo|wor|work|worki|workin|working|workingd|workingdi|workingdir|workingdire|workingdirec|workingdirect|workingdirecto|workingdirector)') -or
  [Environment]::CommandLine -match
    '\b(Set-Location|sl|cd|chdir|Push-Location|pushd|pul)\b'
  • В PowerShell Core,рабочий каталог мог быть указан с параметром -WorkingDirectory / -wd (который не поддерживается в Windows PowerShell);например,
    pwsh -WorkingDirectory /

    • Примечание: Учитывая, что достаточно указать только префикс имени параметра, если этот префикс однозначно идентифицирует параметр,необходимо также протестировать wo, wor , work`, ...
  • И в PowerShell Core, и в Windows PowerShell рабочий каталог мог бытьустанавливается с помощью вызова командлета (возможно, через встроенный псевдоним) как часть аргумента -c / -Command (например,
    pwsh -NoExit -c "Set-Location /")

    • Примечание. В этом сценариив отличие от -WorkingDirectory, рабочий каталог не еще не был изменен во время загрузки файла $PROFILE.

Возможно, но вряд ли приведенное выше приведет к ложным срабатываниям;использовать надуманный пример:
pwsh -NoExit -c "'Set-Location inside a string literal'"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...