首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脚本中的PowerShell.exe -ExecutionPolicy旁路头

脚本中的PowerShell.exe -ExecutionPolicy旁路头
EN

Stack Overflow用户
提问于 2020-08-21 20:03:41
回答 2查看 4.4K关注 0票数 0

我试图轻松地ByPass PowerShells ExecutionPolicy。我意识到一个简单的解决方法是创建runme.ps1script.ps1,在runme.ps1中,我可以Bypass ExecutionPolicy并调用script.ps1。是否有方法将其放入脚本的“标头”中,并让它在Bypass执行ExecutionPolicy时调用自己?

runme.ps1:

代码语言:javascript
复制
PowerShell.exe -ExecutionPolicy Bypass -File "C:\tmp\script.ps1"

script.ps1:

代码语言:javascript
复制
Write-Host "Hello World"
PAUSE

我目前正在研究一些if“标志”或"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/

然而,

很重要的一点是要理解设置从来就不是一个安全控制。相反,它的目的是防止管理员朝自己的脚开枪。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-22 03:24:12

TLDR;

代码语言:javascript
复制
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

代码语言:javascript
复制
Write-Host "Calling Scripts? No Problem!"
PAUSE

在重新启动之后,以下内容开始工作:

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
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,但如果文件不存在,并且允许脚本继续执行,则没有任何效果。

票数 0
EN

Stack Overflow用户

发布于 2020-08-22 00:11:13

您可以创建某种类型的可信启动程序(cmd文件或exe文件),它将使用--ExecutionPolicy ByPass标志运行powershell。甚至您也可以更改double-click操作的行为,以始终使用ByPass策略标志运行ByPass。

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

ExecutionPloicy是在4+1级别配置的,优先级从高到低:

代码语言:javascript
复制
> 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,它覆盖CurrentUserLocalMachine设置,但可以在由本地或域组策略管理的UserPolicyMachinePolicy级别上进行强化。

更好的方法是使用组策略组合用户策略,只允许运行AllSignedRemoteSigned脚本,生成一个证书New-SelfSignedCertificate -Type CodeSigning,使用GPO作为每台计算机的Trusted Publisher进行部署,并使用部署给用户的每个脚本都使用Set-AuthenticodeSignature签名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63529433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档