我正在尝试轻松地使用ByPass
PowerShell ExecutionPolicy
。我知道一个简单的解决方法是建立runme.ps1
和script.ps1
和runme.ps1
我可以Bypass
在ExecutionPolicy
和呼叫script.ps1
。有什么方法可以将其放在脚本的“标头”中,并让其在Bypass
ing时自动调用ExecutionPolicy
吗?
runme.ps1:
PowerShell.exe -ExecutionPolicy Bypass -File "C:\tmp\script.ps1"
script.ps1:
Write-Host "Hello World"
PAUSE
我目前正在研究某种形式的“标志”或“ tmpfile”逻辑并让脚本本身调用,但我想知道是否有一种已知的/更好的方法,甚至可能的方法来使它成为我所有脚本中的标题因此最终用户可以在没有提示的情况下“运行Powershell”。
ExecutionPolicy
欢迎进行详细说明的附录回答,但让我们集中讨论这个问题。
有关的讨论ExecutionPolicy
应集中在“安全堆栈交换”上,并且相关链接在此处链接:
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/:
但是,重要的是要了解该设置绝不是安全控制。相反,其目的是防止管理员用脚射击自己。
TLDR;
PowerShell.exe -ExecutionPolicy Bypass -File "C:\circumvent\industry\standard.ps1" 2>&1>$null
我想共享脚本并能够说“右键单击并运行w / powershell”,这已经比批处理脚本(我总是说“双击文件”)糟糕得多(人们总是会得到那个!)。
解决方案之所以出现,是因为PAUSE
我的主脚本中有一个来读取控制台输出,并且我注意到在主脚本调用后script.ps1
,我收到了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...:
根据@BACON的评论进行更新,这只有通过“上下文菜单”通过“运行w / powershell”才能真正实现。我尝试将“ powershell”设置为默认应用程序,.ps1
不仅不起作用,而且上下文菜单删除了“ run w / powershell”选项!
幸运的是,最终用户将拥有默认设置,并且/或者系统管理员将已经知道如何解决。
我最初没有进行测试,但是想知道此解决方案实际上是如何“规避”的是尝试仅PowerShell.exe -ExecutionPolicy Bypass
在标头中使用。这导致脚本无法运行,因此必须为其分配一个,-File
但如果File不存在并允许脚本继续执行,则该脚本无效。
但是运行该
PowerShell.exe
命令的是什么?尾随$null
提出一个PS脚本,所以怎么说跑?执行策略的全部要点是要求用户/管理员确认他们对“您确定要执行吗?”的回答。通过沿着路线的某个地方进行故意的,有意识的行为。可能是交互执行脚本的内容,更改策略或覆盖策略,就像处理新PowerShell.exe
实例一样。这里没有“被规避”或“被绕过”的东西;这只是在执行策略的工作规则之内。是的...除了我规避了整个过程“您确定要执行那个吗?” 提示。我很困惑,您怎么能想象这没有规避任何事情。
但是什么运行该PowerShell.exe命令?=“右键单击并使用Powershell运行” @BACON
我没有说这是一个字面意思:“您确定要执行吗?” 提示。请参阅
help about_Run_With_PowerShell
和价值,HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\0\Command
以了解其工作原理。这Run with PowerShell
不是.ps1
文件的默认操作,需要上下文菜单与我已经说过的内容相符:用户的“故意的,有意识的操作”。之所以没有规避任何原因,是因为特权没有升级,这些都是已记录的功能,并且“规避”并不意味着“事物完全按照设计工作”。@BACON static.skaip.org/img/emoticons/180x180/f6fcff/headbang.gif