我试图轻松地ByPass PowerShells ExecutionPolicy。我意识到一个简单的解决方法是创建runme.ps1和script.ps1,在runme.ps1中,我可以Bypass ExecutionPolicy并调用script.ps1。是否有方法将其放入脚本的“标头”中,并让它在Bypass执行ExecutionPolicy时调用自己?
runme.ps1:
PowerShell.exe -ExecutionPolicy Bypass -File "C:\tmp\script.ps1"script.ps1:
Write-Host "Hello World"
PAUSE我目前正在研究一些if“标志”或"tmpfile“逻辑,并让脚本调用自己,但我想知道是否有一种已知的/更好的方法,甚至有可能在我的所有脚本中使用这个标题,这样最终用户就可以在没有提示的情况下”运行w/ powershell“。
欢迎在ExecutionPolicy上详细回答增编,但让我们集中讨论这个问题。
关于ExecutionPolicy的讨论应集中在“安全堆栈交换”上,相关帖子在此链接如下:
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
然而,
很重要的一点是要理解设置从来就不是一个安全控制。相反,它的目的是防止管理员朝自己的脚开枪。
发布于 2020-08-22 03:24:12
TLDR;
PowerShell.exe -ExecutionPolicy Bypass -File "C:\circumvent\industry\standard.ps1" 2>&1>$null我想要共享脚本,并且能够说“右键单击并运行w/ powershell”,这已经比批处理脚本更糟糕,我说的是“双击文件”(人们总是会得到那个!)。
这个解决方案是因为我的主脚本中有一个PAUSE来读取控制台输出,并且我注意到在我的主脚本名为script.ps1之后,我收到了来自" main /parent“脚本的一个额外的PAUSE提示符。这让我意识到,在调用子脚本之后,父脚本能够继续。因此,call nonexistent script and pipe output to null! &快乐地继续前进。
示例场景:
在重新启动之后,以下脚本不会通过“右键单击,运行w/ PowerShell”运行,我得到了标准的“执行策略提示”:
script.ps1
Write-Host "Calling Scripts? No Problem!"
PAUSE在重新启动之后,以下内容开始工作:
PowerShell.exe -ExecutionPolicy Bypass -File "C:\circumvent\industry\standard.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:\tmp\script.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...:更新基于@培根的评论,这是真正可能的“运行w/ powershell”通过“上下文菜单”。我尝试将"powershell“设置为.ps1的默认应用程序,它不仅没有工作,而且上下文菜单删除了"run / powershell”选项!
谢天谢地,最终用户将拥有默认设置和/或系统管理员将知道如何解决。
我最初没有测试一些东西,但是想知道这个解决方案是如何“规避”的,那就是尝试在头中使用PowerShell.exe -ExecutionPolicy Bypass。这导致脚本不运行,因此必须为其分配一个-File,但如果文件不存在,并且允许脚本继续执行,则没有任何效果。
发布于 2020-08-22 00:11:13
您可以创建某种类型的可信启动程序(cmd文件或exe文件),它将使用--ExecutionPolicy ByPass标志运行powershell。甚至您也可以更改double-click操作的行为,以始终使用ByPass策略标志运行ByPass。
但是,计算机上的设置可以由系统管理员在MachinePolicy\ExecutionPolicy或UserPolicy\ExecutionPolicy中进行强化,您将无法以正常的方式覆盖它。
ExecutionPloicy是在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标志运行ByPass时,您实际上设置了Process-level ExecutionPolicy,它覆盖CurrentUser和LocalMachine设置,但可以在由本地或域组策略管理的UserPolicy或MachinePolicy级别上进行强化。
更好的方法是使用组策略组合用户策略,只允许运行AllSigned或RemoteSigned脚本,生成一个证书New-SelfSignedCertificate -Type CodeSigning,使用GPO作为每台计算机的Trusted Publisher进行部署,并使用部署给用户的每个脚本都使用Set-AuthenticodeSignature签名。
https://stackoverflow.com/questions/63529433
复制相似问题