我正在向我的团队分发一个PowerShell脚本。该脚本从Vsphere客户端获取一个IP地址,建立一个mstsc连接,并将其记录在共享文件中。
他们一使用脚本就知道了机器的IP地址。在此之后,他们总是倾向于直接使用mstsc,而不是运行PowerShell脚本。 (因为他们正在使用mstsc,我不知道他们是否经常使用VM。)
他们主要告诉我,运行PowerShell并不简单。
我对他们的懒惰感到厌恶。
是否有一种方法可以通过双击.ps1文件来使PowerShell脚本工作?
我正在向我的团队分发一个PowerShell脚本。该脚本从Vsphere客户端获取一个IP地址,建立一个mstsc连接,并将其记录在共享文件中。
他们一使用脚本就知道了机器的IP地址。在此之后,他们总是倾向于直接使用mstsc,而不是运行PowerShell脚本。 (因为他们正在使用mstsc,我不知道他们是否经常使用VM。)
他们主要告诉我,运行PowerShell并不简单。
我对他们的懒惰感到厌恶。
是否有一种方法可以通过双击.ps1文件来使PowerShell脚本工作?
当前回答
在我的子文件夹中放一个简单的.cmd文件和同名的.ps1文件,例如,一个名为“foobar”的脚本会有“foobar. exe”。Ps1”和“foobar.cmd”。所以要运行.ps1,我所要做的就是从资源管理器中单击.cmd文件或从命令提示符中运行.cmd。我使用相同的基本名称,因为.cmd文件将自动使用自己的名称查找.ps1。
::====================================================================
:: Powershell script launcher
::=====================================================================
:MAIN
@echo off
for /f "tokens=*" %%p in ("%~p0") do set SCRIPT_PATH=%%p
pushd "%SCRIPT_PATH%"
powershell.exe -sta -c "& {.\%~n0.ps1 %*}"
popd
set SCRIPT_PATH=
pause
pushd/popd允许您从命令提示符启动.cmd文件,而不必更改到脚本所在的特定目录。它将改变到脚本目录,然后当完成返回到原来的目录。
如果您希望命令窗口在脚本结束时消失,也可以取消暂停。
如果我的.ps1脚本有参数,我会使用. net Forms使用GUI提示来提示它们,但也要使脚本足够灵活,以便在我想要传递参数时接受参数。这样我就可以从资源管理器中双击它,而不必知道参数的详细信息,因为它会用列表框或其他形式询问我需要什么。
其他回答
您需要调整注册表。 首先,为HKEY_CLASSES_ROOT配置一个PSDrive,因为默认情况下没有设置。它的命令是:
New-PSDrive HKCR Registry HKEY_CLASSES_ROOT
现在您可以在HKEY_CLASSES_ROOT中浏览和编辑注册表项和值,就像在常规HKCU和HKLM PSDrives中一样。
配置双击直接启动PowerShell脚本:
Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 0
在PowerShell ISE中配置双击打开PowerShell脚本:
Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Edit'
要恢复默认值(设置双击打开记事本中的PowerShell脚本):
Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'
如果你熟悉高级Windows管理,那么你可以使用这个ADM包(说明包括在那个页面上),并允许通过这个模板和本地GPO双击后运行PowerShell脚本。在此之后,您可以简单地将与.ps1文件类型相关联的默认程序更改为PowerShell .exe(使用搜索,它是相当隐藏的),并且您已经准备好双击运行PowerShell脚本。
否则,我建议坚持使用其他建议,因为使用这些管理工具可能会搞乱整个系统。
我认为默认设置太严格了。如果有人设法在你的计算机上放置一些恶意代码,那么他/她也能够绕过这个限制(将其包装成.cmd文件或.exe,或带有快捷方式的技巧),而它最终所实现的只是阻止你以简单的方式运行你所编写的脚本。
我使用了这个(只需要运行一次);还要确保你有执行的权利:
从PowerShell提升权限:
Set-ExecutionPolicy=RemoteSigned
然后从一个bat文件:
-----------------------------------------
ftype Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -noexit ^&'%%1'
assoc .ps1=Microsoft.PowerShellScript.1
-----------------------------------------
auto exit: remove -noexit
瞧;双击*。Ps1会执行它。
请注意,PowerShell的安全特性之一是用户不能通过双击启动脚本。如果要修改此设置,请务必小心。另一种选择可能是打包脚本。像PrimalScript这样的编辑器可以做到这一点。用户仍然需要安装PowerShell,然后他们可以双击exe。听起来你的团队需要一点教育。
使用简单的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"'