我正在向我的团队分发一个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提示来提示它们,但也要使脚本足够灵活,以便在我想要传递参数时接受参数。这样我就可以从资源管理器中双击它,而不必知道参数的详细信息,因为它会用列表框或其他形式询问我需要什么。
其他回答
您可以使用Windows的“SendTo”功能,使运行PS1脚本更容易。使用此方法,您可以右键单击 一个PS1脚本并执行。这并没有完全回答OP问题,但已经很接近了。希望这对其他人有用。顺便说一句. .这对 各种各样的其他任务。
Locate / Search for Powershell.exe Right click on Powershell.exe and choose Open File Location Right click on Powershell.exe and choose Create Shortcut. Temporarily save some place like your desktop You might want to open as Admin by default. Select Shortcut > Properties > Advanced > Open As Admin Open the Sendto folder. Start > Run > Shell:Sendto Move the Powershell.exe shortcut to the Sendto folder You should now be able to right click on a PS1 script. Right Click on a PS1 file, Select the SendTo context option > Select the Powershell shortcut Your PS1 script should execute.
我的解决方案是2022年 安装“PowerShell-7.2.2-win-x64.msi” 右键单击文件。Ps1,用“pwsh”更改为exec
Powershell注册表黑客和策略绕过从未对我起作用。
你可能不想这样做,但一个简单的方法就是创建一个.BAT文件,然后把你的命令放进去:
powershell ./generate-strings-table-en.ps1
powershell ./generate-conjoined-tables-it.ps1
然后双击BAT文件。
使用简单的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"'
与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