Как запустить скрипт PowerShell из пакетного файла



Я пытаюсь запустить этот скрипт в PowerShell. Я сохранил ниже скрипт как ps.ps1 на моем рабочем столе.



$query = "SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"
Register-WMIEvent -Query $query -Action { invoke-item "C:Program Filesabc.exe"}


Я сделал пакетный скрипт для запуска этого скрипта PowerShell



@echo off
Powershell.exe set-executionpolicy remotesigned -File C:UsersSEDesktopps.ps1
pause


, но я получаю эту ошибку:



Enter image description here

1428   6  

6 ответов:

вам нужно :

Powershell.exe -executionpolicy remotesigned -File  C:\Users\SE\Desktop\ps.ps1

в противном случае PowerShell считает аргументы строкой для выполнения и while Set-ExecutionPolicyи командлет, он не имеет

я объясню, почему вы хотите вызвать скрипт PowerShell из пакетного файла и как это сделать на моем блоге здесь.

это в основном то, что вы ищете:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\Users\SE\Desktop\ps.ps1'"

и если вам нужно запустить сценарий PowerShell в качестве администратора, используйте это:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\Users\SE\Desktop\ps.ps1""' -Verb RunAs}"

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

Если вы запускаете пакетный файл, вызывающий PowerShell от имени администратора, вам лучше запустить его следующим образом, избавив вас от всех проблем:

powershell.exe -ExecutionPolicy Bypass -Command "Path\xxx.ps1"

лучше использовать Bypass...

Если вы хотите запускать из текущего каталога без полного пути, вы можете использовать:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './ps.ps1'"

Если ваш сценарий входа PowerShell выполняется через 5 минут (как и мой) на сервере 2012 года, на сервере есть параметр GPO - "настроить задержку сценария входа" параметр по умолчанию "не настроен" это оставит 5-минутную задержку перед запуском сценария входа.

Если вы хотите запустить несколько скриптов, Вы можете использовать Set-executionpolicy -ExecutionPolicy Unrestricted а затем сбросить с Set-executionpolicy -ExecutionPolicy Default.

обратите внимание, что политика выполнения проверяется только при запуске ее выполнения (или так кажется), и поэтому вы можете запускать задания в фоновом режиме и немедленно сбрасывать политику выполнения.

# Check current setting
Get-ExecutionPolicy

# Disable policy
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
# Choose [Y]es

Start-Job { cd c:\working\directory\with\script\ ; ./ping_batch.ps1 example.com | tee ping__example.com.txt }
Start-Job { cd c:\working\directory\with\script\ ; ./ping_batch.ps1 google.com  | tee ping__google.com.txt  }

# Can be run immediately
Set-ExecutionPolicy -ExecutionPolicy Default
# [Y]es

Comments

    Ничего не найдено.