Чтобы проверить собственную командную строку вызова 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'"