PowerShell.exe -ExecutionPolicy Bypass - 脚本中的标头



我正在尝试轻松ByPassPowerShellsExecutionPolicy。我意识到一个简单的解决方法是创建runme.ps1script.ps1runme.ps1我可以BypassExecutionPolicy并调用script.ps1。有没有办法把它放在脚本的"标题"中,让它在BypassExecutionPolicy时调用自己?

运行.ps1:

PowerShell.exe -ExecutionPolicy Bypass -File "C:tmpscript.ps1"

脚本.ps1:

Write-Host "Hello World"
PAUSE

我目前正在研究某种"标志"或"tmpfile"逻辑并具有脚本调用本身,但我想知道是否有一种已知/更好的方法,甚至可能的方法可以将其作为我所有脚本中的标头,以便最终用户可以在没有提示的情况下"运行w/powershell"。

欢迎对回答的附录以及对ExecutionPolicy的详细说明,但让我们专注于这个问题。

关于ExecutionPolicy的讨论应集中在"安全堆栈交换"上,相关帖子链接如下:

https://security.stackexchange.com/questions/118553/whats-the-purpose-of-executionpolicy-settings-in-powershell-if-the-bypass

https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/:

但是,重要的是要了解该设置从来都不是故意的 成为安全控制。相反,它旨在防止 管理员不要搬起石头砸自己的脚。

您可以创建某种受信任的启动器(cmd 文件或 exe 文件),它将运行带有--ExecutionPolicy ByPass标志的 powershell。或者,甚至可以更改double-click操作的行为,以始终使用绕过策略标志运行PowerShell。

但是,系统管理员可以在MachinePolicyExecutionPolicyUserPolicyExecutionPolicy中强化计算机上的设置,您将无法以正常方式覆盖它。

执行Ploicy配置为4 + 1级别,优先级从高到低:

> Get-ExecutionPolicy -List
MachinePolicy (Group Policy)
UserPolicy (Group Policy)
Process (Configured using powershell -ExecutionPolicy flag for new process only)
CurrentUser (User settings)
LocalMachine (Computer settings)

使用绕过标志运行 PowerShell 时,实际上设置了Process级别的执行策略,该策略覆盖CurrentUserLocalMachine设置,但可以在由本地或域组策略管理的UserPolicyMachinePolicy级别进行强化。


更好的方法是使用组策略来构建用户策略,以仅允许运行AllSignedRemoteSigned脚本,生成 100 年的证书New-SelfSignedCertificate -Type CodeSigning,使用 GPO 将其部署为每台计算机的Trusted Publisher,并使用部署到用户的每个脚本进行签名Set-AuthenticodeSignature

TLDR;

PowerShell.exe -ExecutionPolicy Bypass -File "C:circumventindustrystandard.ps1" 2>&1>$null

我想共享脚本并能够说"右键单击并运行 w/powershell",这已经比我说"双击文件"的批处理脚本更糟糕(人们总是得到那个!

解决方案之所以出现,是因为我的主脚本中有一个PAUSE来读取控制台输出,并且我注意到在我的主脚本调用script.ps1之后,我收到了来自"主/父"脚本的额外PAUSE提示。这让我意识到,父脚本在调用子脚本后能够继续。因此,call nonexistent script and pipe output to null!继续愉快地继续下去。

示例场景:

重新启动后,以下脚本不会通过"右键单击,使用 PowerShell 运行"运行,并且我得到了标准的"执行策略提示":

脚本.ps1

Write-Host "Calling Scripts? No Problem!"
PAUSE

重新启动后,以下内容正常工作:

PowerShell.exe -ExecutionPolicy Bypass -File "C:circumventindustrystandard.ps1" 2>&1>$null
ECHO "This Script Won't Run Without Line 1" 
ECHO "I had fun to try to circumvent an industry standard" 
ECHO "I Learned a lot about PowerShell ExecutionPolicy"
C:tmpscript.ps1
PAUSE

结果:

This Script Won't Run Without Line 1
I had fun to try to circumvent an industry standard
I Learned a lot about PowerShell ExecutionPolicy
Calling Scripts? No Problem!
Press Enter to continue...:

根据@BACON的评论进行更新,这确实只能通过"上下文菜单"通过"运行w/Powershell"。我尝试将"powershell"设置为.ps1的默认应用程序,不仅不起作用,而且上下文菜单删除了"运行w/powershell"选项!

值得庆幸的是,最终用户将具有默认设置和/或系统管理员已经知道如何解决。

我最初没有测试的东西,但想知道这个解决方案到底有多"规避",就是尝试在标题中只使用PowerShell.exe -ExecutionPolicy Bypass。这导致脚本无法运行,因此必须为其分配一个-File但如果 File 不存在并允许脚本继续执行,则不起作用。

相关内容

  • 没有找到相关文章

最新更新