Как избежать "в знак" (@) в Invoke-Expression -Command? - PullRequest
0 голосов
/ 17 января 2019

Когда я запускаю эту команду в командной строке, она работает как положено:

C:\>p4 changes @2019/01/16,@now
...

Но когда я использую его в сценарии powershell, я не могу заставить его работать.

Первая попытка:

PS C:\> Invoke-Expression -Command "p4 changes @2018/01/16, @now"
Invoke-Expression : At line:1 char:25
+ p4 changes @2018/01/16, @now
+                         ~~~~
Splatted variables like '@now' cannot be part of a comma-separated list of arguments.
At line:1 char:1
+ Invoke-Expression -Command "p4 changes @2018/01/16, @now"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : SplattingNotPermittedInArgumentList,Microsoft.PowerShell.Commands.InvokeExpressionCommand

Выход из запятой (успешно):

PS C:\> Invoke-Expression -Command "p4 changes @2018/01/16',' @now"
p4 : Unintelligible revision specification '2018/01/16'.
At line:1 char:1
+ p4 changes @2018/01/16',' @now
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Unintelligible ...n '2018/01/16'.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Теперь я думаю, что проблема в том, что "в символе" ("@") интерпретируется на каком-то уровне. Но мне не удалось избежать этого, используя несколько методов. Как этого добиться?

UPD Проверка ваших идей:

Могильный Акцент:

PS C:\> Invoke-Expression -Command "p4 changes `@2018/01/16',' `@now"
p4 : Unintelligible revision specification '2018/01/16'.
At line:1 char:1
+ p4 changes @2018/01/16',' @now
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Unintelligible ...n '2018/01/16'.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Одиночная кавычка (проблема с запятой):

PS C:\> Invoke-Expression -Command 'p4 changes @2018/01/16, @now'
Invoke-Expression : At line:1 char:25
+ p4 changes @2018/01/16, @now
+                         ~~~~
Splatted variables like '@now' cannot be part of a comma-separated list of arguments.
At line:1 char:1
+ Invoke-Expression -Command 'p4 changes @2018/01/16, @now'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : SplattingNotPermittedInArgumentList,Microsoft.PowerShell.Commands.InvokeExpressionCommand

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Рабочий раствор:

$cmd = @'
p4 changes @2018/01/16','@now
'@;    
Invoke-Expression $cmd
0 голосов
/ 17 января 2019

Прекратите использовать двойные кавычки, если у вас нет расширяемого содержимого, используйте одинарные кавычки. См. Документацию для about_quoting_rules

В противном случае, как говорили другие, используйте обратную галочку.

...