温馨提示:本文翻译自stackoverflow.com,查看原文请点击:PowerShell.exe -ExecutionPolicy Bypass - Header in Script
executionpolicy powershell

PowerShell.exe -ExecutionPolicy Bypass - 脚本头

发布于 2021-01-05 04:25:07

我正在尝试轻松地使用ByPassPowerShell ExecutionPolicy我知道一个简单的解决方法是建立runme.ps1script.ps1runme.ps1我可以BypassExecutionPolicy和呼叫script.ps1有什么方法可以将其放在脚本的“标头”中,并让其在Bypassing时自动调用ExecutionPolicy吗?

runme.ps1:

PowerShell.exe -ExecutionPolicy Bypass -File "C:\tmp\script.ps1"

script.ps1:

Write-Host "Hello World"
PAUSE

我目前正在研究某种形式的“标志”或“ tmpfile”逻辑并让脚本本身调用,但我想知道是否有一种已知的/更好的方法,甚至可能的方法来使它成为我所有脚本中的标题因此最终用户可以在没有提示的情况下“运行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/

但是,重要的是要了解该设置绝不是安全控制。相反,其目的是防止管理员用脚射击自己。

查看更多

提问者
FreeSoftwareServers
被浏览
88
FreeSoftwareServers 2020-08-23 00:03

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不存在并允许脚本继续执行,则该脚本无效