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