以普通用户的PowerShell启动进程

我正在创build一个PowerShell脚本来自动设置新的计算机部署。 我处于这种情况,我想从一个提升的pipe理PowerShell控制台实例作为一个普通的非pipe理员用户启动一个可执行文件。 原因是因为如果我从提升的提示/脚本启动,可执行文件会生成一个错误。 这里是命令的结构:

Start-Process -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1" 

我做了一些search,发现我所需要的(非pipe理员到pipe理员)这里https://technet.microsoft.com/en-us/library/hh849848.aspx但是我只看到RunAs提升到pipe理员的相反。

build立:

  • Windows 10教育
  • PS 5

parsing度

由于psexec没有提供禁止login的解决scheme,所以我最终启动了以下过程:

  $username = Read-Host "Please enter in a valid username " $password = Read-Host "Please enter in a the account password " -AsSecureString Start-Process -Credential (New-Object System.Management.Automation.PSCredential($username, $password)) -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1" 

它不能完美地解决问题,但用户至less可以留在脚本中。

这取决于问题是什么。 如果您没有在用户环境下运行,就像在SYSTEM帐户下一样,那么您可能需要以特定的用户身份运行,这通常意味着指定用户名和密码,这通常是有问题的。

如果问题是您目前拥有pipe理员权限,但需要运行没有这些pipe理员权限的内容,则应该可以使用PSExec或类似的方法,而不需要用户名和密码。

psexec -accepteula -l <CMD>

-l以有限的用户身份运行进程(去除Administrators组并仅允许分配给Users组的权限)。 在Windows Vista上,该进程以低完整性运行。

应该可以在PowerShell中调用PSExec并让PSExec调用原始应用程序。 也可以直接通过PowerShell来做到这一点。


使用PSExec也可以做到这一点,而不需要通过在目标用户的会话中执行某些内容来input用户名/密码,只要他们已经login。

psexec -accepteula -i <session> <CMD>

在我自己的脚本中,我在这些情况下使用psexec 。

您必须为不同的帐户指定用户名和密码以及作为指定用户运行的可执行文件。

这不是纯粹的PowerShell,但对我来说足够好。 PowerShell脚本可能会执行psexec所做的同样的事情。 但是,除非你知道,否则这应该解决你的问题。