我正在创建一个 powershell 脚本,用于自动设置新的计算机部署。我的情况是,我想从提升的管理员 powershell 控制台实例以普通非管理员用户身份启动可执行文件。原因是,如果我从提升的提示/脚本启动,可执行文件会生成错误。以下是命令的结构:
Start-Process -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1"
我进行了一些搜索,发现这里与我需要的(非管理员到管理员)相反https://technet.microsoft.com/en-us/library/hh849848.aspx但我只看到RunAs
提升为管理员。
设置:
- Windows 10 教育版
- PS5 的
解决
由于psexec
没有提供抑制登录的解决方案,我最终启动了如下过程:
$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"
它并不能完美地解决问题,但是用户至少可以留在脚本中。
答案1
这取决于问题是什么。如果您根本没有在用户上下文中运行,例如在 SYSTEM 帐户下,那么您可能需要以特定用户身份运行,这通常意味着指定用户名和密码,这通常会带来问题。
如果问题是您当前具有管理员权限,但需要在没有这些管理员权限的情况下运行某些操作,那么可以使用执行程序或类似方法,无需用户名和密码。
psexec -accepteula -l <CMD>
-l
以受限用户身份运行进程(剥夺管理员组并仅允许分配给用户组的权限)。在 Windows Vista 上,进程以低完整性运行。
应该可以在 PowerShell 中调用 PSExec,并让 PSExec 调用原始应用程序。也可以直接通过 PowerShell 执行此操作。
只要目标用户已经登录,也可以使用 PSExec 来执行此操作,而无需通过在目标用户的会话中执行某些操作来输入用户名/密码。
psexec -accepteula -i <session> <CMD>
答案2
在我自己的脚本中我使用执行在那些情况下。
您必须为不同的帐户指定用户名和密码以及以指定用户身份运行的可执行文件。
这不是纯 PowerShell,但对我来说已经足够好了。PowerShell 脚本也许可以做同样的事情psexec
。但除非你发现,否则这应该可以解决你的问题。
答案3
我在以下来源中找到了一种更优雅的方法: https://stackoverflow.com/a/29271474/10875044 我的 ps1 以管理员权限执行,我只是使用 explorer.exe 以正常运行权限启动我的进程,例如:Start-Process explorer.exe -ArgumentList C:\SysJust\XQLite\daqxqlite.exe
即使 ps1 被提升,explorer.exe 也会以非管理员权限启动该程序,这正是我需要的。