Вопрос по – Есть ли способ заставить скрипт powershell работать двойным щелчком по файлу .ps1?

96

Я распространяю сценарий Powershell среди своей команды. Сценарий должен получить IP-адрес от клиента Vsphere, установить соединение mstsc и записать его в общий файл.

В тот момент, когда они использовали скрипт, они узнали IP-адрес компьютера. После этого они всегда склонны использовать mstsc напрямую вместо запуска сценария powershell. (Поскольку они используют mstsc, я не могу знать, часто ли они используют виртуальную машину или нет)

Главным образом они говорят мне, что запуск PowerShell не является прямым.

Меня тошнит от их лени.

Есть ли способ заставить скрипт powershell работать двойным щелчком по файлу .ps1?

Компиляция сценария PS с использованием студии Powershellsapien.com/software/powershell_studio Root Loop
Error: User Rate Limit Exceeded bdares
Error: User Rate Limit Exceededhowtogeek.com/204166/… Michael Freidgeim

Ваш Ответ

17   ответов
2

этот пакет ADMpowershell.exe

Error: User Rate Limit Exceeded
9

right click on the .ps1 file Open with... Choose another app Copy the location of powershell.exe to the address bar (by default it won't show windows folder) i.e. C:\Windows\System32\WindowsPowerShell\v1.0 select powershell.exe select "Always use this app to open .ps1 files" click OK
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededSet-ExecutionPolicy).
Error: User Rate Limit Exceeded
3

::====================================================================
:: 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 из командной строки, не переходя в конкретный каталог, в котором находятся скрипты. Он перейдет в каталог сценариев, а затем по завершении вернется в исходный каталог.

Error: User Rate Limit Exceeded
2

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

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"""''}"')
12

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Чтобы настроить двойной щелчок для запуска сценариев PowerShell напрямую:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 0

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Edit'

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'
Error: User Rate Limit Exceeded
12

что установка системных настроек может быть немного сложной, но ярлык, требующий жестко закодированного пути, не идеален. Файл bat на самом деле хорошо решает проблему

RunMyPowershellScript.bat

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

Теперь можно дважды щелкнуть этот пакетный файл, быстро создать ярлыки для пакетного файла и развернуть сценарий в любой папке.

Error: User Rate Limit Exceeded
96

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Samselvaprabu
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstart powershell -command "& '.\MyPowershellScript.ps1' -MyArguments blah"
Error: User Rate Limit Exceeded-NoProfileError: User Rate Limit Exceeded
60

если вы хотите, чтобы все файлы PS1 работали так же, как файлы VBS, вы можете отредактировать реестр следующим образом:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command

Измените значение по умолчанию, чтобы оно было примерно таким ...

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"

Затем вы можете просто дважды щелкнуть все ваши файлы .PS1, как вы хотели бы. по моему скромному мнению, можно из коробки.

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -File "%1"%*Error: User Rate Limit Exceeded-ExecutionPolicy unrestrictedError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededandError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
17

что одной из функций безопасности PowerShell является то, что пользователи НЕ могут запускать сценарии двойным щелчком мыши. Будьте очень осторожны, если вы измените этот параметр. Альтернативой может быть упаковка вашего скрипта. Некоторые редакторы, такие как PrimalScript, могут это сделать. Пользователям по-прежнему необходимо установить PowerShell, но затем они могут дважды щелкнуть исполняемый файл. И, похоже, ваша команда нуждается в небольшом образовании.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededat leastError: User Rate Limit Exceeded
6
Navigate REGEDIT to HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell On the right pane, double-click "(Default)" Delete existing value of "Open" (which launches Notepad) and type "0" (being zero, which launches Powershell directly).

если хотите снова использовать Блокнот по умолчанию.

1

@echo off
pushd "%~d0"
pushd "%~dp0"
powershell.exe -sta -c "& {.\%~n0.ps1 %*}"
popd
popd

-1

:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell0

8

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"'
Error: User Rate Limit ExceededExecutionPolicy RemoteSignedError: User Rate Limit Exceeded
2

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.
Error: User Rate Limit Exceeded
1

из PowerShell с повышенными правами:

Set-ExecutionPolicy=RemoteSigned

-----------------------------------------

 ftype Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -noexit ^&'%%1'

 assoc .ps1=Microsoft.PowerShellScript.1

-----------------------------------------
auto exit: remove -noexit 

Error: User Rate Limit ExceededassocError: User Rate Limit Exceeded
The term '%1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
15

<#  
.SYNOPSIS  
    Change the registry key in order that double-clicking on a file with .PS1 extension
    start its execution with PowerShell.
.DESCRIPTION
    This operation bring (partly) .PS1 files to the level of .VBS as far as execution
    through Explorer.exe is concern.
    This operation is not advised by Microsoft.
.NOTES  
    File Name   : ModifyExplorer.ps1  
    Author      : J.P. Blanc - [email protected]
    Prerequisite: PowerShell V2 on Vista and later versions.
    Copyright 2010 - Jean Paul Blanc/Silogix    
.LINK  
    Script posted on:  
    http://www.silogix.fr  
.EXAMPLE  
    PS C:\silogix> Set-PowAsDefault -On
    Call Powershell for .PS1 files.
    Done !
.EXAMPLE    
    PS C:\silogix> Set-PowAsDefault
    Tries to go back  
    Done !
#>  
function Set-PowAsDefault
{
  [CmdletBinding()]
  Param
  (
    [Parameter(mandatory=$false,ValueFromPipeline=$false)]
    [Alias("Active")]
    [switch]
    [bool]$On
  )

  begin 
  {
    if ($On.IsPresent)
    {
      Write-Host "Call Powershell for .PS1 files."
    }
    else
    {
      Write-Host "Try to go back."
    }
  }

  Process 
  {
    # Text Menu
    [string]$TexteMenu = "Go inside PowerShell"

    # Text of the program to create
    [string] $TexteCommande = "%systemroot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command ""&'%1'"""

    # Key to create
    [String] $clefAModifier = "HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\Open\Command"

    try
    {
      $oldCmdKey = $null
      $oldCmdKey = Get-Item $clefAModifier -ErrorAction SilentlyContinue
      $oldCmdValue = $oldCmdKey.getvalue("")

      if ($oldCmdValue -ne $null)
      {
        if ($On.IsPresent)
        {
          $slxOldValue = $null
          $slxOldValue = Get-ItemProperty $clefAModifier -Name "slxOldValue" -ErrorAction SilentlyContinue
          if ($slxOldValue -eq $null)
          {
            New-ItemProperty $clefAModifier -Name "slxOldValue" -Value $oldCmdValue  -PropertyType "String" | Out-Null
            New-ItemProperty $clefAModifier -Name "(default)" -Value $TexteCommande  -PropertyType "ExpandString" | Out-Null
            Write-Host "Done !"
          }
          else
          {
            Write-Host "Already done !"          
          }

        }
        else
        {
          $slxOldValue = $null
          $slxOldValue = Get-ItemProperty $clefAModifier -Name "slxOldValue" -ErrorAction SilentlyContinue 
          if ($slxOldValue -ne $null)
          {
            New-ItemProperty $clefAModifier -Name "(default)" -Value $slxOldValue."slxOldValue"  -PropertyType "String" | Out-Null
            Remove-ItemProperty $clefAModifier -Name "slxOldValue" 
            Write-Host "Done !"
          }
          else
          {
            Write-Host "No former value !"          
          }
        }
      }
    }
    catch
    {
      $_.exception.message
    }
  }
  end {}
}
Error: User Rate Limit Exceeded
0

ps1powershell.exe

Right click on a ps1 file Click Open with Click Choose another app In the popup window, select More apps Scroll to the bottom and select Look for another app on this PC. Browse to and select C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe. List item

ps1notepad.exe

Error: User Rate Limit Exceeded

Похожие вопросы