我正在向我的团队分发一个PowerShell脚本。该脚本从Vsphere客户端获取一个IP地址,建立一个mstsc连接,并将其记录在共享文件中。

他们一使用脚本就知道了机器的IP地址。在此之后,他们总是倾向于直接使用mstsc,而不是运行PowerShell脚本。 (因为他们正在使用mstsc,我不知道他们是否经常使用VM。)

他们主要告诉我,运行PowerShell并不简单。

我对他们的懒惰感到厌恶。

是否有一种方法可以通过双击.ps1文件来使PowerShell脚本工作?


当前回答

使用简单的PowerShell命令在注册表中设置此参数;

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Set-ItemProperty -Path "HKCR:\Microsoft.PowerShellScript.1\Shell\open\command" -name '(Default)' -Value '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"'

其他回答

请注意,PowerShell的安全特性之一是用户不能通过双击启动脚本。如果要修改此设置,请务必小心。另一种选择可能是打包脚本。像PrimalScript这样的编辑器可以做到这一点。用户仍然需要安装PowerShell,然后他们可以双击exe。听起来你的团队需要一点教育。

我同意设置系统设置可能有点多,但需要硬编码路径的快捷方式并不理想。bat文件实际上很好地解决了这个问题

RunMyPowershellScript.bat

 start powershell -command "& '.\MyPowershellScript.ps1' -MyArguments blah"

现在可以双击此批处理文件,可以轻松地为批处理文件创建快捷方式,并且可以将脚本部署到任何文件夹。

我的解决方案是2022年 安装“PowerShell-7.2.2-win-x64.msi” 右键单击文件。Ps1,用“pwsh”更改为exec

Powershell注册表黑客和策略绕过从未对我起作用。

您可以将ps1文件的默认文件关联设置为powershell.exe,这将允许您通过双击它来执行powershell脚本。

在Windows 10中,

右键单击ps1文件 单击“打开” 点击选择另一个应用程序 在弹出窗口中,选择“更多应用程序” 滚动到底部,选择“在这台PC上寻找另一个应用程序”。 浏览并选择C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe。 列表项

这将改变文件关联,ps1文件将通过双击它们来执行。通过将notepad.exe设置为默认应用程序,您可以将其更改为默认行为。

与UNIX shar (shell存档)具有相同精神的解决方案。

你可以把你的powershell脚本放在一个扩展名为.cmd的文件中(而不是.ps1),并把它放在开头:

@echo off
Rem Make powershell read this file, skip a number of lines, and execute it.
Rem This works around .ps1 bad file association as non executables.
PowerShell -Command "Get-Content '%~dpnx0' | Select-Object -Skip 5 | Out-String | Invoke-Expression"
goto :eof
# Start of PowerShell script here