Powershell 如何将默认位置设置为从profile.ps1开始?
我的Powershell 如何将默认位置设置为从profile.ps1开始?,powershell,powershell-5.0,Powershell,Powershell 5.0,我的D:\Documents\WindowsPowerShell\profile.ps1profile文件中有以下行: Set-Location $env:HOMEDRIVE 值得注意的是,$env:HOMEDRIVE等于C:。预期的行为是,每当我打开PS shell时,我都会被放入C:,但这不是我得到的,而是我被放入$env:HOMEPATH,它等于C:\Users\ 为什么会出现这种行为以及如何“修复” 有关我的PS版本的信息: PS C:\Users\...> $PSVersio
D:\Documents\WindowsPowerShell\profile.ps1
profile文件中有以下行:
Set-Location $env:HOMEDRIVE
值得注意的是,$env:HOMEDRIVE
等于C:
。预期的行为是,每当我打开PS shell时,我都会被放入C:
,但这不是我得到的,而是我被放入$env:HOMEPATH
,它等于C:\Users\
为什么会出现这种行为以及如何“修复”
有关我的PS版本的信息:
PS C:\Users\...> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.14393.2068
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14393.2068
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
将位置设置为没有路径的驱动器号(即
C:
)只会切换到该驱动器的位置堆栈,实际上不会更改路径。将其更改为:
Set-Location (Join-Path $env:HOMEDRIVE '\')
测试。我把它放在我的
档案中。ps1
:
Set-Location $env:HOMEDRIVE
Write-Host $env:HOMEDRIVE
输出
C:
PS C:\Users\<my username>>
C:
PS C:\>
输出
C:
PS C:\Users\<my username>>
C:
PS C:\>
要补充背景信息,请执行以下操作:
Set-Location $env:HOMEDRIVE\ # or, with variable name disambiguated: ${env:HOMEDRIVE}\
动力地狱
Set-Location $env:HOMEDRIVE
相当于cmd.exe
:
cd /d %HOMEDRIVE%
- 也就是说,对环境变量
的引用被替换为其值(扩展)-通常是HOMEDRIVE
-并且该驱动器被更改为。请注意,PowerShell不需要模拟C:
开关即可使驱动器更改生效/d
- 但是,在这两个shell中,更改为驱动器规范。仅在没有路径组件的情况下,更改为shell认为该驱动器上当前目录的任何内容,该目录可能是根目录,也可能不是根目录
- 若要更改到特定目录(如根目录),也必须指定其路径
设置位置(连接路径$env:HOMEDRIVE'\')
是构造和将路径传递到驱动器规范的根目录的一种健壮而通用的方法。存储在环境变量HOMEDRIVE
中,PowerShell提供了一种更简洁的替代方法:
Set-Location $env:HOMEDRIVE\ # or, with variable name disambiguated: ${env:HOMEDRIVE}\
上述方法之所以有效,是因为简单地说,PowerShell隐式地解析字符串参数,就像它们是可扩展字符串一样(带有嵌入变量引用的双引号字符串,甚至命令)
也就是说,上述内容等同于以下所有内容:
Set-Location "$env:HOMEDRIVE\" # expandable string
Set-Location "${env:HOMEDRIVE}\" # ditto, variable name disambiguated
Set-Location "$(${env:HOMEDRIVE})\" # $(...) embeds full commands (not necessary here)
除了
连接路径
是连接路径组件的一种更为稳健的方式外,还有与无引号参数方法相关的缺陷,例如无引号参数和双引号参数之间的细微差异(内部空白需要双引号,就像某些shell元字符一样);如果有疑问,请将参数传递给写入输出,查看它扩展到什么;有关详细信息,请参阅我的。我无法在PS 5.1.15063.909上复制它为什么不使用cd c:\
?@gms0ulman,因为(1)我想要一些可伸缩的东西,C:
不是我所有系统中的HOMEDRIVE
,这个配置文件。ps1
用于家庭和工作中的许多系统,即使它们都是C:
我在任何代码中都不会使用静态路径,这只是一种糟糕的做法;和(2)我想使用PS语法,cd
不过是设置位置的别名
。。。