Я пытаюсь написать и выполнить сценарий .cmd в powershell. Код у меня есть для этого:Запуск сценария .cmd/.bat в Powershell
$script = @'
@echo off
SETLOCAL
CALL something here
'@
Invoke-Expression -Command: $script
Это базируется this link, объясняющую here string
в PowerShell. Он находится внизу ссылки. Вот the related msdn.
Это another related link человеку, который пытается сделать то же самое.
я получаю сообщение об ошибке, что связано с включением оператора «@» в строке:
Invoke-Expression : At line:1 char:7
+ @echo off
+ ~~~
Unexpected token 'off' in expression or statement.
At line:1 char:1
+ @echo off
+ ~~~~~
The splatting operator '@' cannot be used to reference variables in an expression. '@echo' can be used only as an argument to a command. To reference variables in an expression use '$echo'.
Я пытался уйти от символа «@», и множество других вещей. Я хотел бы знать, почему он, похоже, работал на них в третьей ссылке, но бросает эту ошибку в моем случае.
Edit: Записи в BAT-файл затем запустить файл летучей мыши в результате те же ошибки:
$batchFileContent = @'
@echo off
c:\windows\system32\ntbackup.exe backup "C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\chameme.bks" /n "1file.bkf1 created 06/09/2013 at 09:36" /d "Set created 06/09/2013 at 09:36" /v:no /r:no /rs:no /hc:off /m normal /j chameme /l:s /f "\\fs1\Exchange Backups$\1file.bkf"
'@
$batchFileContent | Out-File -LiteralPath:"$env:TEMP\backup.cmd" -Force
Invoke-Expression -Command:"$env:TEMP\backup.cmd"
Remove-Item -LiteralPath:"$env:TEMP\backup.cmd" -Force
Как Билл Стюарт отметил, что я должен написать содержание CMD-скрипта в Powershell.
Edit: Это
$script = @'
cmd.exe /C "@echo off"
cmd.exe /C "SETLOCAL"
cmd.exe /C "CALL something here"
'@
Invoke-Expression -Command: $script
Кажется, работает.
Почему вы должны сделать это? Просто делайте то, что вам нужно сделать в PowerShell напрямую. –
Invoke-Expression будет вызывать команды ** Powershell **. Чтобы выполнить пакетные команды, сохраните их в пакетном файле и выполните cmd.exe с этим файлом в качестве параметра. В качестве альтернативы вы можете ввести сеанс cmd.exe в powershell, а затем выполнить отдельные команды. – EBGreen
@Bill_Stewart. Я был так настойчив в поиске способа запуска скрипта, что я не думал, что у меня есть полномочия. На данный момент мне любопытно, почему это не работает для меня, хотя я, вероятно, в конечном итоге использую powershell вместо этого. – Speerian