背景:我想進入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',這令人惱火和毫無意義)。 –