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 "" | | Всего записей: 11063 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021 |
|