«ОШИБКА: система не может найти указанный файл» при попытке загрузить скрипт powershell через файл bat - PullRequest
0 голосов
/ 16 мая 2019

TLDR;

Я получаю

powershell.exe -executionpolicy bypass -file "c:\folder\psscript.ps1"
ERROR: the system cannot find the file specified.

когда я пытаюсь вызвать .ps1 из файла bat, несмотря на файл, существующий в указанном месте.


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

Для этого мы создали сценарий powershell, который вызывает запланированное задание на нужном сервере (вызов приложения), поэтому все это уже задано и готово к работе. Наша идея заключалась в том, чтобы просто вызвать этот файл .ps1 в файле .bat, который будет запущен с помощью ярлыка на рабочем столе, просто супер. Однако всякий раз, когда мы пытаемся вызвать .ps1, мы получаем;

ERROR: the system cannot find the file specified.

... за исключением того, что файл существует, поскольку test-path возвращается как True и вы можете завершить вкладку в файл.

Содержимое файла .bat является вашим стандартным

powershell.exe -executionpolicy bypass -file "c:\folder\psscript.ps1"

Я пытался предоставить полные пути к каталогам powershell.exe, ps1, а также перемещал их по различным локальным и сетевым путям каталогов, чтобы увидеть, если это имеет значение, и ... нет.

Открытие или запуск ps1 непосредственно в powershell работает абсолютно нормально. Но мы требуем, чтобы «нажми и иди» из ярлыка на рабочем столе. Ниже приведен кастрированный скрипт ps1 (скрипт доступен для файла PW.txt);

#$key is to decrypt a stored Password for secure credential passing
$key = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)
$password = get-content "\\full\network\location\PW.txt" | ConvertTo-SecureString -key $key
$securecredentials = new-object -typename System.Management.Automation.PSCredential -ArgumentList "domain\adminuser", $password
# Then create a remote session on server job is set up to run on
$session = new-pssession -computername SERVER -credential $securecredentials
Enter-PSSession -Session $session
schtasks /run /TN "Print Job"
#Then to tidy things up we remove sessions and variables from locally run script
Exit-PSSession
Remove-PSSession -ComputerName SERVER
Clear-Variable password
Clear-Variable key
Clear-Variable session

Царапая мою голову в этом, помощь оценена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...