背景:我想进入PowerShell脚本来自动执行一些工作任务。我不是管理员,并且无法运行提升的powershell进程。我倾向于使用批处理脚本通过命令行实用程序以编程方式执行某些任务,但随着我的能力不断增强,它已经达到了明确的地步,那就是PowerShell会是一个更适合该任务的工具。我玩弄了一下直接的窗口,写了一个基本的脚本来看看我能不能做些什么。什么是PowerShell拒绝加载任何本地ps1脚本的目的,当这是微不足道的绕过?
一旦我掌握了一些测试命令,我将它们保存到一个文件中。
Write-Host "Let's do this"
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Script Successful")
calc.exe
我很惊讶地发现,虽然我可以在即时窗口中执行任何我想要的,加载的.ps1(我猜是PowerShell中相当于一个.BAT的),它必须被签署,我需要成为一名管理员来改变这种行为。
但是,我的第一个想法是“好吧,好吧,我只是将我的命令从.bat发送到即时窗口”。所以,我看着PowerShell的-help,并写在命令提示符下:
type test.ps1 | powershell -
它的工作原理,并从.bat工作过。 我在这里错过了什么吗?如果您只需要一个名为type harmfulscript.ps1 | powershell -
的.bat文件,并且您很好,那么禁止从立即窗口调用.ps1文件有什么意义?
这是一个很好的问题,我很好奇,答案有什么安全边际默认将GPO停止在我的环境中运行脚本(.ps1文件),我们使用的解决方法是使用一些参数创建指向powershell.exe的快捷方式,但它最终会运行脚本。我们桌面工程师觉得非常有用。 – cet51
@CoryEtmund至少我没有疯狂。我只是这样做了,我一直在盯着屏幕思考“这真的*是必要的吗?”一方面和“这是否真的*工作?”在另一! –
PowerShell的执行策略不是安全功能,而是管理员安全功能(类似于枪支上的安全)。你必须明确地说,“是的,我想运行脚本。”如果有人出于安全原因启用了限制性执行策略,那么IMO就会让合法用户烦恼(有点像阻止用户通过策略运行'cmd.exe',这令人恼火和毫无意义)。 –