Настройка сценария PowerShell для автоматического выполнения
У меня есть несколько строк кода PowerShell, которые я хотел бы использовать в качестве автоматического скрипта. Я хотел бы, чтобы он мог работать, чтобы иметь возможность вызывать его, используя один из следующих вариантов:
- одна командная строка, которая открывает PowerShell, выполняет скрипт и закрывает PowerShell (это будет использоваться для глобальной процедуры сборки)
- файл, который я могу дважды щелкнуть, чтобы запустить выше (я бы использовал этот метод при ручном тестировании компонентов моей сборки процесс)
Я просматривал документацию PowerShell в интернете, и хотя я могу найти много сценариев, я не смог найти инструкции о том, как сделать то, что мне нужно. Спасибо за помощь.
5 ответов
сохраните скрипт как a .ps1 файл и запустить его с помощью powershell.exe-файла, как это:
powershell.exe .\foo.ps1
убедитесь, что вы указали полный путь к скрипту и установили уровень политики выполнения по крайней мере "RemoteSigned", чтобы можно было запускать неподписанные локальные скрипты.
от http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx
Если вы хотите запятнать свой красивый сценарий PowerShell небольшим CMD, вы можете использовать трюк полиглота PowerShell-CMD. Сохраните сценарий PowerShell как .CMD-файл и поместите эту строку вверху:
@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF
Если вам нужно поддерживать приведенные аргументы, есть более длинная версия, которая также позволяет комментировать. (обратите внимание на необычный трюк комментирования CMD double @).
@@:: This prolog allows a PowerShell script to be embedded in a .CMD file. @@:: Any non-PowerShell content must be preceeded by "@@" @@setlocal @@set POWERSHELL_BAT_ARGS=%* @@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"% @@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF
источник для ответа Мэтта.
Я могу запустить его, дважды щелкнув файл, создав пакетный файл со следующим:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File
запустить скрипт автоматически из другого скрипта (например, пакетный файл)
как предложил Мэтт Гамильтон, просто создайте свой PowerShell .PS1 скрипт и вызовите его с помощью:
PowerShell C:\Path\To\YourPowerShellScript.ps1
или если рабочий каталог вашего пакетного файла является тем же каталогом, что и сценарий PowerShell, вы можете использовать относительный путь:
PowerShell .\YourPowerShellScript.ps1
и прежде чем это будет работать, вам нужно будет установить политику выполнения ПК, которую я покажу, как это сделать под.
Запустить Скрипт Вручную Методом 1
вы можете см. мой пост в блоге для получения дополнительной информации, но по существу создайте свой PowerShell .ps1 файл сценария, чтобы сделать то, что вы хотите, а затем создать.cmd пакетный файл в том же каталоге и использовать следующее для содержимого файла:
@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"
замена MyPowerShellScript.ps1 в 3-й строке с именем файла сценария PowerShell.
это позволит вы просто дважды щелкните пакетный файл для запуска сценария PowerShell и избежите необходимости изменять политику выполнения PowerShell.
в моем блоге также показано, как запустить сценарий PowerShell в качестве администратора, если это то, что вам нужно сделать.
Запустить Скрипт Вручную Методом 2
кроме того, если вы не хотите создавать пакетный файл для каждого скрипта PowerShell, вы можете изменить поведение скрипта PowerShell по умолчанию с Edit на Беги, позволяя дважды щелкните .файлы PS1, чтобы запустить их.
существует дополнительный параметр реестра, который вы хотите изменить, чтобы вы могли запускать скрипты, путь к файлу которых содержит пробелы. Я показываю, как делать обе эти вещи на этом блоге.
однако с помощью этого метода вам сначала нужно будет установить политику выполнения, чтобы разрешить запуск сценариев. Вам нужно сделать это только один раз на ПК, и это можно сделать, запустив эту строку в Командной строки PowerShell.
Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs
Установить-Параметра ExecutionPolicy RemoteSigned С Силой - это команда, которая фактически изменяет политику выполнения; это устанавливает ее в RemoteSigned, поэтому вы можете изменить это на что-то еще, если вам нужно. Кроме того, эта строка автоматически запускает PowerShell в качестве администратора, что необходимо для изменения политики выполнения.