使用驱动器号通配符启动进程
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
我有一个始终位于用户桌面上的文件,但是,根据机器的设置方式,桌面可能位于 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