这看起来很简单但是我尝试了一个多小时才让它正常工作,但没有成功。我有一个有效的 PowerShell 命令,我想从 Windows 快捷方式执行它。
命令是:
Start-Process -filepath "C:\Program Files\One Identity\Active Roles\7.3\Console\ActiveRoles.msc" -Verb RunAsUser
这按预期工作。它打开 GUI 提示符以输入用户/密码。
我的期望是我可以创建一个带有目标的快捷方式:
powershell.exe -command '& {Start-Process -filepath "C:\Program Files\One Identity\Active Roles\7.3\Console\ActiveRoles.msc" -Verb RunAsUser}'
这不管用。它闪烁但不执行。
我尝试从 PowerShell 运行命令,它给了我Start-Process : A positional parameter cannot be found that accepts argument 'Identity\Active'
所以我现在使用备用路径来避免空格:
powershell.exe -command '& {Start-Process -filepath "C:\Progra~1\ONEIDE~1\ACTIVE~1\7.3\Console\ActiveRoles.msc" -Verb RunAsUser}'
这仍然不起作用。它不会在 PowerShell 中运行,因此它不会在快捷方式中工作。它只是在 PS 窗口中给我一个新行,没有任何反馈。
跑步就Start-Process -filepath 'C:\Progra~1\ONEIDE~1\ACTIVE~1\7.3\Console\ActiveRoles.msc' -Verb RunAsUser
很好了。
我尝试了很多种方法。我尝试过带引号和不带引号、带空格和不带空格、带 &{} 和不带 &{}。我尝试将单行命令添加到 powershell 脚本并从快捷方式调用它。这仍然不起作用。调用执行时没有错误,但不会启动 .msc。
这样做的目的实际上是要有一个 Windows 快捷方式,可以使用 -RunAsUser 标志启动 .msc,但我对如何从快捷方式运行 pwershell 命令更感兴趣。我在其他帖子中发现的大多数内容都是使用带有命令行提示符的 bash 命令,这不是我想要的。我觉得我肯定错过了一些显而易见的东西。这应该很简单。
答案1
注意事项。根据Start-Process
帮助文档。
-Verb 指定此 cmdlet 启动进程时要使用的动词。可用的动词由进程中运行的文件的文件扩展名决定。
下表显示了一些常见流程文件类型的动词。
文件类型 动词
命令 编辑、打开、打印、运行方式、以用户身份运行
.exe 打开、以...身份运行、以...身份运行
.txt 打开、打印、打印至
.wav 打开,播放
请注意,.msc 不在列表中。
Windows 知道如何处理具有此类目标的快捷方式......
'C:\Program Files\One Identity\Active Roles\7.3\Console\ActiveRoles.msc'
... 带有 .msc 的文件告诉 Windows 启动 msc.exe 来执行 .msc 文件,因为该可执行文件是 Windows 映射的方式。
Windows 不知道如何处理这个问题......
Start-Process 'C:\Program Files\One Identity\Active Roles\7.3\Console\ActiveRoles.msc'
... 因为Start-Process
,不是可执行文件,所以它仅在正在运行/实例化的 PowerShell 会话中可行。
您必须执行以下操作,才能找到快捷方式。
powershell "Start-Process 'C:\Program Files\One Identity\Active Roles\7.3\Console\ActiveRoles.msc'"
必须首先启动 PowerShell,才能运行 PS cmdlet,然后再运行您希望该 cmdlet 执行的任何其他操作的路径。