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

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

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

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

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


当前回答

与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

其他回答

创建一个快捷方式,像这样的“目标”:

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"

我在Windows 10和powershell 5.1上使用了这个方法:

右键单击.ps1文件 打开…… 选择另一个应用程序 将powershell.exe的位置复制到地址栏(默认情况下不会显示windows文件夹),即C:\Windows\System32\WindowsPowerShell\v1.0 选择powershell.exe 选择“总是使用此应用程序打开。ps1文件” 单击OK

从http://www.howtogeek.com/204166/how-to-configure-windows-to-work-with-powershell-scripts-more-easily:

为HKEY_CLASSES_ROOT\Microsoft.PowerShellScript设置默认值。1\Shell到0

你可能不想这样做,但一个简单的方法就是创建一个.BAT文件,然后把你的命令放进去:

powershell ./generate-strings-table-en.ps1
powershell ./generate-conjoined-tables-it.ps1

然后双击BAT文件。

我使用了这个(只需要运行一次);还要确保你有执行的权利:

从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会执行它。