Ale*_*zzi 6 windows psexec runas github-api github-actions
我正在 Windows 运行器上使用 GitHub 操作步骤。我尝试运行的可执行文件的要求之一是它不能以管理员身份运行。
有什么方法可以创建并成为 Windows 运行者上操作使用的默认管理员帐户的不同用户吗?
受到 VonC答案中的链接的启发,我在过去的几天里陷入了一些兔子洞。总而言之:
paexec使用SysInternals 的开源版本的选项psexec可以有效地完成在另一个用户登录下执行程序的任务。程序本身需要输出到日志以供稍后读取,因为没有从paexec命令本身接收到程序输出。它可能psexec也会起作用;查看两者的 EULA/许可证来决定您更喜欢哪一个。此答案不检查退出代码,失败时需要退出代码来读取输出文件。VonC 的回答为这部分过程提供了一些替代方案。
以下是使用 PAExec 在我的项目上运行“mvnw test”的工作 GHA 步骤:
- name: Download PaExec
run: |
choco install wget --no-progress
wget -q https://www.poweradmin.com/paexec/paexec.exe -P C:\Windows\System32
- name: Create new user
run: |
net user foo p@ssw0rd /add
- name: Test with Maven
run: |
paexec -u foo -p p@ssw0rd -lo $pwd\output.txt -w $pwd $pwd\mvnw.cmd test -l $pwd\mvntest.txt
cat output.txt
cat mvntest.txt
Run Code Online (Sandbox Code Playgroud)
我怀疑它也可以与 psexec 一起使用(没有开关-lo,但有-accepteula开关)。
保留调查步骤的早期答案:
我确信这样的事情是可能的,但难以捉摸。我已经确定,如果不需要 stdout/stderr 的输出,则可以降低权限并执行命令,但在我的用例(CI 测试)中,我需要该输出。
引用的内容Start-Process -Verb Runas 'yourUser' -Wait是一项长期调查的有趣开始。Windows 运行器上的 GitHub Actions 实际上是在 PowerShell 环境中执行的,因此可以直接调用。然而,一些注意事项:
Runas实际上提升了一个过程,相应的RunasUser降低了标高,本次练习的目标RunasUser管理员身份运行时,权限限制根本不适用,因此以其他用户身份运行基本上是唯一的方法选项。
$process = Start-Process -FilePath mvnw.cmd -ArgumentList "clean test -B" -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
cat stderr.txt
cat stdout.txt
$process.ExitCode
Run Code Online (Sandbox Code Playgroud)
但是,添加-Verb RunasUser会导致错误消息:
无法使用指定的命名参数解析参数集。发出的一个或多个参数不能一起使用或提供的参数数量不足。
我无法同时将该动词和输出打印结合起来。 这个问题的答案概述了我未能成功应用的各种其他选项。似乎在禁用 UAC 的情况下,在不分配给其他用户的情况下进行降级是行不通的。
VonC 的答案中的链接中的另一个选项建议使用psexecWindows Sysinternals。这也让我非常接近解决方案,但由于缺乏输出而失败了。(请注意,我后来发现我可以在内部输出并稍后收集日志。)
我能够通过 github 操作下载并安装 psexec 并尝试使用它,如下所示:
$process = Start-Process -FilePath mvnw.cmd -ArgumentList "clean test -B" -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
cat stderr.txt
cat stdout.txt
$process.ExitCode
Run Code Online (Sandbox Code Playgroud)
我认为我能够以较低的权限执行(并且可以轻松地以另一个用户的身份执行),但只能不访问程序输出。
目前似乎不支持这一点。
正如本次讨论(2022 年 10 月)所示:
这是我们在运行器上面临的一个问题
windows-latest,其中所有命令都运行为admin.正确的使用方法似乎是:
Run Code Online (Sandbox Code Playgroud)net user "username" "<password>" /add runas /user:username ".\bin\program.bat"但
runas旨在提示输入密码,并且无法提供密码。也不支持无密码。
您可以尝试“在 Windows 中以不同用户身份运行且无需密码的提升提示符”中提出的方法之一,例如:
Start-Process -Verb Runas 'yourUser' -Wait
Run Code Online (Sandbox Code Playgroud)
来自Daniel Widdis的回答来看,这可以工作,但不会提供退出状态。
为此,我要确保执行的命令 ( mvnw.cmd) 是一个包装器,其中:
您可以使用action/core为您的操作设置退出代码。
或者检查上一步的结果,并在单独的步骤中设置最终退出状态。
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |