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

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

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

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

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


当前回答

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

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

其他回答

这是我默认以admin身份运行的脚本:

Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-File """%1"""'}"

你需要将它作为默认值粘贴到regedit中:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command

或者这里有一个脚本,将为您做:

$hive = [Microsoft.Win32.RegistryKey]::OpenBaseKey('ClassesRoot', 'Default')
$key = $hive.CreateSubKey('Microsoft.PowerShellScript.1\Shell\Open\Command')
$key.SetValue($null, 'Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList ''-File """%1"""''}"')

在我的子文件夹中放一个简单的.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'

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

RunMyPowershellScript.bat

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

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

与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