使用驱动器号的通配符启动进程



我有一个文件,它将始终位于用户桌面上,但是,根据机器的设置方式,桌面可以位于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

最新更新