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

Start process using wildcard for drive letter

我有一个始终位于用户桌面上的文件,但是,根据机器的设置方式,桌面可能位于 C 盘或 D 盘上。

以下是我尝试使用的。就其本身而言,(Get-Location).Drive.Name 将 return 我机器上的 C 驱动器。但是,如果我将它组合成完整的代码行来启动程序,它不起作用。

我做错了什么?

$userName = [Environment]::UserName
Start-Process ((Get-Location).Drive.Name)\Users$($userName)\Desktop\VIPHorizon\Service_Desk.url

您需要在驱动器盘符后紧跟一个冒号 (:):

$userName = [Environment]::UserName
Start-Process ((get-location).Drive.Name):\Users$($userName)\Desktop\VIPHorizon\Service_Desk.url

虽然另一个答案是正确的,您缺少一个冒号,但仅仅添加它是不够的。

如果你用冒号尝试运行它,你会得到另一个错误,如下所示:

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"

即使重新定位,获取当前用户桌面的正确方法是:

[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))
    }
}

全局 Powershell 变量 $HOME 将为您提供活动用户的家庭位置。

Start-Process $HOME\Desktop\VIPHorizon\Service_Desk.url