我有一个文件,该文件将始终位于用户桌面上,但是,根据计算机的设置方式,桌面可以位于C驱动器或D驱动器上。
以下是我尝试使用的内容。 (Get-Location).Drive.Name
将独自返回我计算机上的C驱动器。但是,如果我将其合并到完整的代码行中以启动程序,它将无法正常工作。
我在做什么错了?
$userName = [Environment]::UserName
Start-Process ((Get-Location).Drive.Name)\Users\$($userName)\Desktop\VIPHorizon\Service_Desk.url
答案 0 :(得分:3)
您需要在驱动器号后加上一个冒号(:)
$userName = [Environment]::UserName
Start-Process ((get-location).Drive.Name):\Users\$($userName)\Desktop\VIPHorizon\Service_Desk.url
答案 1 :(得分:2)
虽然其他答案是正确的,但您缺少一个冒号,仅添加一个是不够的。
如果尝试使用冒号运行它,则会收到另一个错误,如下所示:
Unexpected token ':\Users' in expression or statement.
要解决此问题,您需要将整个内容用引号引起来。
"((get-location).Drive.Name):\Users\$($userName)\Desktop\VIPHorizon\Service_Desk.url"
然后,您会发现((get-location).Drive.Name)
被直接写入字符串,而不是被替换。可以通过在呼叫前加一个美元符号来解决此问题,就像您已经对userName所做的那样。
"$((get-location).Drive.Name):\Users\$($userName)\Desktop\VIPHorizon\Service_Desk.url"
答案 2 :(得分:1)
即使已重定位,获取当前用户桌面的正确方法是:
[Environment]::GetFolderPath('Desktop')
因此使用:
Start-Process (Join-Path [Environment]::GetFolderPath('Desktop') "VIPHorizon\Service_Desk.url")
要枚举所有特殊文件夹和当前设置:
$SpecialFolders = [Environment+SpecialFolder]::GetNames([Environment+SpecialFolder])|Sort
ForEach ($SpecialFolder in $SpecialFolders) {
[PSCustomObject]@{
SpecialFolderName = $SpecialFolder
SpecialFolderLocation = ([Environment]::GetFolderPath($SpecialFolder))
}
}
答案 3 :(得分:0)
全局Powershell变量$HOME
将为您提供活动用户的家庭位置。
Start-Process $HOME\Desktop\VIPHorizon\Service_Desk.url