Как использовать ". \" В -file в командном файле - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно выполнить командный файл (B.cmd) на компьютере B из сценария Powershell (A.ps1) на компьютере A. Я не хочу статически указывать путь

B.cmdдолжен выполнить C.ps1, который находится в той же папке, что и B.cmd

MACHINE A: A.ps1
MACHINE B: B.cmd, C.ps1 (все в одной папке)

поэтому мой командный файл выглядит так: B.cmd

@echo off
powershell.exe -file ".\C.ps1" -Iterations 10
echo
echo
pause

В файле A.ps1 выдается ошибка, из которой я вызываю файл B.cmd

A.ps1

Invoke-Command -ComputerName $systemName -credential $credentials -ScriptBlock {Invoke-Expression -Command: "cmd.exe /c C:\Temp\Batch\Test\B.cmd"}

A.ps1 выдает ошибку:

**The argument '.\C.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.**
+ CategoryInfo          : NotSpecified: (The argument '....File parameter.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName        : XXX

Как мне сделать. \ Work или есть альтернатива или неправильно использовать. \ Для удаленного выполнения?

Пожалуйста, прости мое невежество в любом месте, так как я очень новичок в PS, спасибо!

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Если вы можете изменить ABC.cmd, вы можете использовать следующее

powershell.exe -file "%~dp0\XYZ.ps1"

Это позволит получить папку, из которой запускается скрипт ABC.cmd.Обратите внимание, что %~dp0 не будет работать в cmd для тестирования, вам необходимо протестировать его из скрипта.

0 голосов
/ 07 марта 2019

Так что не оборачивайте пакетный файл вокруг него. Пустая трата времени и запутывает вопрос.

invoke-command -comp $computername -filepath C:\Temp\Batch\Test\XYZ.ps1 

Если вам нужно что-то запустить 10 раз, делайте это внутри цикла в вашем скрипте PS.

...