Я написал простой командный файл в виде сценария PowerShell, и при его запуске возникают ошибки.
Он находится в каталоге сценариев на моем пути. Это ошибка, которую я получаю:
Cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about-signing".
Я заглянул в справку, но она мне не помогла.





Это может быть уровень безопасности PowerShell по умолчанию, который (IIRC) будет запускать только подписанные сценарии.
Попробуйте ввести это:
set-executionpolicy remotesigned
Это укажет PowerShell разрешить выполнение локальных (то есть на локальном диске) неподписанных сценариев.
Затем попробуйте снова выполнить свой сценарий.
И вы также должны запустить сценарий PowerShell с правами администратора под Windows 7.
Хотя беспокойство Сесила по поводу некоторых слабых мест в ответе справедливо, я хотел указать на несколько вещей. 1) Две его ссылки открывают для меня одну и ту же страницу. 2) Если вы хотите, чтобы сценарии просто запускались, установка политики выполнения, вероятно, по-прежнему является подходящим вариантом и, возможно, не связана с OP: 3) кажется, что лучшая политика - для сценариев запуска, укажите политику выполнения и область действия в командной строке запустив сценарий, и для входа в систему установите необходимую конфигурацию сеанса. Если вы хотите обеспечить высокий уровень безопасности во время сеанса Windows, но ограниченный для входа в систему, вам следует уточнить порядок выполнения сценариев.
Для однократных попыток наиболее полезным я считаю Ответ Анкура ниже, определяющий временное исключение для работающего экземпляра PowerShell.
Также стоит знать, что вам может потребоваться включить .\ перед именем скрипта. Например:
.\scriptname.ps1
Команда set-executionpolicy unrestricted позволит запускать любой созданный вами сценарий от имени вошедшего в систему пользователя. Просто не забудьте установить для параметра «Executionpolicy» значение «подписано» с помощью команды set-executionpolicy signed перед выходом из системы.
set-executionpolicy signed дает Cannot bind parameter 'ExecutionPolicy' и т. д.
Использовать:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Всегда используйте указанную выше команду, чтобы разрешить выполнение PowerShell в текущем сеансе.
this + superuser.com/questions/612409/… + ссылка на ярлык = совершенство
Вам нужно запустить Set-ExecutionPolicy:
Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run. Only individual commands may be run.
Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.
Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.
Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run. Warns before running downloaded scripts.
Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.
Какое значение ExecutionPolicy по умолчанию, которое Windows устанавливает для новой установки?
@MatthewLock Restricted - это политика по умолчанию. Прочитайте больше
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Вышеупомянутая команда работала у меня, даже когда произошла следующая ошибка:
Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell' is denied.
Мне удалось обойти эту ошибку, вызвав PowerShell следующим образом:
powershell -executionpolicy bypass -File .\MYSCRIPT.ps1
То есть я добавил -executionpolicy bypass к способу вызова сценария.
Это работало с пакетом обновления 1 для Windows 7. Я новичок в PowerShell, поэтому могут быть предостережения, о которых я не знаю.
[Edit 2017-06-26] Я без проблем продолжал использовать эту технику в других системах, включая Windows 10 и Windows 2012 R2.
Вот что я сейчас использую. Это предохраняет меня от случайного запуска скрипта, щелкнув по нему. Когда я запускаю его в планировщике, я добавляю один аргумент: «планировщик», и это обходит приглашение.
Это также приостанавливает окно в конце, чтобы я мог видеть вывод PowerShell.
if NOT "%1" == "scheduler" (
@echo looks like you started the script by clicking on it.
@echo press space to continue or control C to exit.
pause
)
C:
cd \Scripts
powershell -executionpolicy bypass -File .\rundps.ps1
set psexitcode=%errorlevel%
if NOT "%1" == "scheduler" (
@echo Powershell finished. Press space to exit.
pause
)
exit /b %psexitcode%
Это то, что шоколадный использует для загрузки и установки шоколадного
Я попытался запустить команду Set-ExecutionPolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1 и получил сообщение об ошибке. Для этой команды нет опции -File.
А ну понятно. Вы должны создать ярлык, содержащий команду powershell -executionpolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1. Затем команда test.ps1 запускается, даже если задана безопасная глобальная команда Set-ExecutionPolicy Restricted. Надеюсь, эта основная информация кому-то поможет.
В Windows 10: Щелкните изменить свойство безопасности myfile.ps1 и измените "разрешить доступ", щелкнув правой кнопкой мыши / свойства на myfile.ps1.
Мы можем обойти политику выполнения красивым способом (внутри командной строки):
type file.ps1 | powershell -command -
Или внутри powershell:
gc file.ps1|powershell -c -
import-module IISAdministration;
function StartSite{
param($sitename)
try{
Start-IISSite -Name $sitename;
Write-Host "Site was started";
}
catch{
Write-Error "Error while staring the IISSite";
}
}
function StopSite{
param($sitename)
try{
Stop-IISSite -Name $sitename -confirm:$False; # Supress interaction inputs
Write-Host "Site was stopped";
}
catch{
Write-Error "Error while stopping the IISSite";
}
}
function ReplaceSiteFiles{
try{
Get-ChildItem -Path A:\APPS\CreditApp -Recurse | Foreach-Object {Remove-Item -Recurse -Path $_.FullName} # Remove file from AppPool Directory
Expand-Archive A:\Staging\LTA\Installers\CreditApp\CreditApp.zip -DestinationPath A:\APPS\ # Extract files from zip
Write-Host "Site files replaced successfully!";
}
catch [System.SystemException]{
Write-Host "Error while replacing the site files";
Write-Host $_
}
}
## Start Here
$site=Get-IISSite -Name "Default Web Site";
Write-Host $site
if ($site.length -eq 1){
$siteState = $site.state;
Write-Host "The Site Exists with state: ${siteState}";
switch ($siteState)
{
'started' {
StopSite -sitename $site.name;
ReplaceSiteFiles;
StartSite -sitename $site.name;
}
'stopped' {
ReplaceSiteFiles;
StartSite -sitename $site.name;
}
default { "Deployment failed! Site state could not be determined.";}
}
}
else{
Write-Error "Invalid! Site does not exists";
}
## End Here
Вы должны запустить Powershell с правами администратора, по крайней мере, под Windows 8!