使用通配符为驱动器号启动过程

时间:2018-07-24 13:47:57

标签: powershell powershell-v3.0

我有一个文件,该文件将始终位于用户桌面上,但是,根据计算机的设置方式,桌面可以位于C驱动器或D驱动器上。

以下是我尝试使用的内容。 (Get-Location).Drive.Name将独自返回我计算机上的C驱动器。但是,如果我将其合并到完整的代码行中以启动程序,它将无法正常工作。

我在做什么错了?

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

4 个答案:

答案 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