Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
  • Делает правку PATHEXT, которая по умолчанию не содержит .PS1 зато содержит ну прям очень "нужную" .PSC1 (psc1, если есть, заменяется на ps1, иначе ps1 просто добавляется).
  • Разрешает запуск любых скриптов, а не только подписанных.
  • Корректирует Microsoft.PowerShellScript.1 и Microsoft.PowerShellConsole.1 - удаляет ненужные ветки, правит open для нормального выполнения файлов ps1 и psc1 (на всякий случай здесь тоже устанавливается ExecutionPolicy).
    Сохранять как cmd-файл в кодировке UTF8 без BOM. Для запуска потребуются админские права.
     
    PowerShell-Assoc-and-Setup.cmd:
    Код:
    <# : Сохранять в UTF8 без BOM с расширением .CMD
    @echo off
    set "cmdcmdfile=%~f0"
    %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -nol -nop -exe unrestricted -c "&{[ScriptBlock]::Create((gc -lit $env:cmdcmdfile -enc 'UTF8') -join [Char]10).Invoke()}"
    exit /b
    #>
    Set-ExecutionPolicy Unrestricted -Force -Scope LocalMachine
    $hkc = "HKLM:\Software\Classes"
    $ps = Join-Path $PSHome "powershell.exe"
    $ise = Join-Path $PSHome "powershell_ise.exe"
     
    Write-Host "Проверка PATHEXT"
    $pathext = [System.Environment]::GetEnvironmentVariable('PATHEXT','Machine')
    if ($pathext -notmatch '\.PS1') {
        Write-Host "OLD PATHEXT=$pathext"
        $pathext = $(if($pathext.Contains('.PSC1')){$pathext.Replace('.PSC1','.PS1')}else{$pathext+';.PS1'}) -replace ';;+',';'
        $env:pathext = $pathext
        [System.Environment]::SetEnvironmentVariable('PATHEXT',$pathext,'Machine')
        Write-Host "NEW PATHEXT=$pathext"
    }
    else {
        Write-Host "PATHEXT=$pathext"
    }
     
    New-Item "$hkc\.ps1" -Value "Microsoft.PowerShellScript.1" -Force > $null
    New-Item "$hkc\.psc1" -Value "Microsoft.PowerShellConsole.1" -Force > $null
     
    Write-Host "Коррекция Microsoft.PowerShellScript.1"
    New-Item "$hkc\Microsoft.PowerShellScript.1\shell\Open\command" -Force > $null
    New-Item "$hkc\Microsoft.PowerShellScript.1\shell\Edit\command" -Force > $null
    Push-Location "$hkc\Microsoft.PowerShellScript.1\shell"
    Remove-Item "Выполнить с помощью PowerShell" -Recurse -Force
    Remove-Item "Run with PowerShell" -Recurse -Force
    Remove-Item "0" -Recurse -Force
    Clear-Item  "." #Set-Item "." "Open"
    Set-Item "Open\command" ($ps+' -nologo -exe bypass -f "%1" %*')
    Set-Item "Edit\command" ($ise+' "%1"')
    Pop-Location
     
    Write-Host "Коррекция Microsoft.PowerShellConsole.1"
    New-Item "$hkc\Microsoft.PowerShellConsole.1\shell\Open\command" -Force > $null
    Push-Location "$hkc\Microsoft.PowerShellConsole.1\shell"
    Remove-Item "0" -Recurse -Force
    Clear-Item  "." #Set-Item "." "Open"
    Set-Item "Open\command" ($ps+' -nologo -exe bypass -p "%1" %*')
    Pop-Location
     
    Write-Host "Готово"
    Write-Host "Нажмите любую клавишу..." -NoNewLine
    while ($KeyInfo.VirtualKeyCode -eq $Null) {
        $KeyInfo = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
    }
    Write-Host ""

     
    То же, но только для текущего пользователя.
     
    Админские права не требуются. Из глобальных настроек правиться только PATHEXT.
     
    PowerShell-Assoc-and-Setup-UserOnly.cmd:
    Код:
    <# : Сохранять в UTF8 без BOM с расширением .CMD
    @echo off
    set "cmdcmdfile=%~f0"
    %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -nol -nop -exe unrestricted -c "&{[ScriptBlock]::Create((gc -lit $env:cmdcmdfile -enc 'UTF8') -join [Char]10).Invoke()}"
    exit /b
    #>
    Set-ExecutionPolicy Unrestricted -Force -Scope CurrentUser
    $hkc = "HKCU:\Software\Classes"
    $ps = Join-Path $PSHome "powershell.exe"
    $ise = Join-Path $PSHome "powershell_ise.exe"
     
    Write-Host "Проверка PATHEXT"
    $pathext = [System.Environment]::GetEnvironmentVariable('PATHEXT','Machine')
    if ($pathext -notmatch '\.PS1') {
        Write-Host "OLD PATHEXT=$pathext"
        $pathext = $(if($pathext.Contains('.PSC1')){$pathext.Replace('.PSC1','.PS1')}else{$pathext+';.PS1'}) -replace ';;+',';'
        $env:pathext = $pathext
        [System.Environment]::SetEnvironmentVariable('PATHEXT',$pathext,'Machine')
        Write-Host "NEW PATHEXT=$pathext"
    }
    else {
        Write-Host "PATHEXT=$pathext"
    }
     
    New-Item "$hkc\.ps1" -Value "Microsoft.PowerShellScript.1" -Force > $null
    New-Item "$hkc\.psc1" -Value "Microsoft.PowerShellConsole.1" -Force > $null
     
    Write-Host "Коррекция Microsoft.PowerShellScript.1"
    New-Item "$hkc\Microsoft.PowerShellScript.1\shell\Open\command" -Force > $null
    New-Item "$hkc\Microsoft.PowerShellScript.1\shell\Edit\command" -Force > $null
    Push-Location "$hkc\Microsoft.PowerShellScript.1\shell"
    Clear-Item  "." #Set-Item "." "Open"
    Set-Item "Open\command" ($ps+' -nologo -exe bypass -f "%1" %*')
    Set-Item "Edit\command" ($ise+' "%1"')
    Pop-Location
     
    Write-Host "Коррекция Microsoft.PowerShellConsole.1"
    New-Item "$hkc\Microsoft.PowerShellConsole.1\shell\Open\command" -Force > $null
    Push-Location "$hkc\Microsoft.PowerShellConsole.1\shell"
    Remove-Item "0" -Recurse -Force
    Clear-Item  "." #Set-Item "." "Open"
    Set-Item "Open\command" ($ps+' -nologo -exe bypass -p "%1" %*')
    Pop-Location
     
    Write-Host "Готово"
    Write-Host "Нажмите любую клавишу..." -NoNewLine
    while ($KeyInfo.VirtualKeyCode -eq $Null) {
        $KeyInfo = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
    }
    Write-Host ""


  • Всего записей: 9731 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
    Открыть новую тему     Написать ответ в эту тему

    На первую страницук этому сообщениюк последнему сообщению

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru