Имя: Пароль:
1C
1С v8
Как правильно задать команду для PowerShell
0 ShultzMAN
 
28.06.23
14:05
Всем привет!
Не закидывайте помидорами, я правда искал))
Вопрос несложный)
Требуется прочитать данные о контейнерах сертификатов средствами 1С
есть команда:
Команда = Start-Process "C:\Program Files\Crypto Pro\CSP\certmgr.exe" -ArgumentList "-list", "-store mmy" -RedirectStandardOutput "c:\Temp\result.txt"
данные команда вручную через консоль PS выполняется, файлик ("c:\Temp\result.txt") создается
Затем
WshShell = Новый COMОбъект("WScript.Shell");    
Рез = WshShell.Exec("powershell " + Команда);
Ошибка

Рез = WshShell.Exec("powershell -Command " + Команда);
Ошибка

Подскажите как надо то))
1 vde69
 
28.06.23
14:28
что за ошибка?
2 ShultzMAN
 
28.06.23
14:58
Start-Process : Не удается найти позиционный параметр, принимающий аргумент "Files\Crypto".

строка:1 знак:1

+ Start-Process C:\Program Files\Crypto Pro\CSP\certmgr.exe -ArgumentLi ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException

    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
3 lEvGl
 
28.06.23
15:00
в кавычках надо писать путь
4 lEvGl
 
28.06.23
15:01
в котором есть пробелы
5 ShultzMAN
 
28.06.23
15:05
сделал с кавычками. опять ругается, но уже другое
строка:1 знак:78

+ ... Program Files\Crypto Pro\CSP\certmgr.exe -ArgumentList -list, -store  ...

+                                                                 ~

Отсутствует аргумент в списке параметров.

    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException

    + FullyQualifiedErrorId : MissingArgument
6 lEvGl
 
28.06.23
15:06
дайте дословно как в 1С написано
7 ShultzMAN
 
28.06.23
15:07
Какой синтаксис из этих правильный?

Рез = WshShell.Exec("powershell " + Команда);
или
Рез = WshShell.Exec("powershell -Command " + Команда);
8 lEvGl
 
28.06.23
15:09
там много кавычек, они все должны быть, когда в 1С пишете, кавычек будет намного больше, чтобы получить итоговую строку с кавычками в пути, в  "-list", "-store mmy" и т д.
то есть в отладке вы должны увидеть передаваемую строку именно в таком виде, как она пишется в повершелл
9 ShultzMAN
 
28.06.23
15:10
СтрокаСкрипт = "Start-Process ""C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -ArgumentList ""-list"", ""-store mmy"" -RedirectStandardOutput ""c:\TEMP\Alarm.txt""";
    
    Команда = "powershell " + СтрокаСкрипт;
        
    WshShell = Новый COMОбъект("WScript.Shell");    
    
    ОшибкаСтрока = WshShell.Exec(Команда).StdErr.ReadAll()
10 ShultzMAN
 
28.06.23
15:13
это строка без лишних кавычек
powershell Start-Process "C:\Program Files\Crypto Pro\CSP\certmgr.exe" -ArgumentList "-list", "-store mmy" -RedirectStandardOutput "c:\TEMP\Alarm.txt"
11 ShultzMAN
 
28.06.23
15:15
если строку
Start-Process "C:\Program Files\Crypto Pro\CSP\certmgr.exe" -ArgumentList "-list", "-store mmy" -RedirectStandardOutput "c:\TEMP\Alarm.txt"
выполнить в power shell е
то всё отрабатывает отлично
12 lEvGl
 
28.06.23
15:28
ну теперь с кавычками все нормально
через КомандаСистемы не пробовали?
13 lEvGl
 
28.06.23
15:32
-ArgumentList -list, -store
вот это как то странно выглядит
что говрит СП по этому менеджеру криптопро, как там задаются параметры и аргументы
14 ShultzMAN
 
28.06.23
16:06
Спасибо за наводку
1. Работает так:
СтрокаСкрипт = "Start-Process -NoNewWindow -FilePath 'C:\Program Files\Crypto Pro\CSP\certmgr.exe' -ArgumentList '-list -store mMy' -RedirectStandardOutput c:\TEMP\Alarm.txt";
    
Команда = "powershell " + СтрокаСкрипт;
        
WshShell = Новый COMОбъект("WScript.Shell");    
    
ОшибкаСтрока = WshShell.Exec(Команда).StdErr.ReadAll();
2. Рез = WshShell.Exec("powershell " + Команда);
или
Рез = WshShell.Exec("powershell -Command " + Команда);
Разницы нет
15 ShultzMAN
 
28.06.23
16:07
"внутри" кавычки одинарные
16 Garykom
 
28.06.23
16:26
17 eklmn
 
29.06.23
09:46
чем не устатраивает просто?
КомандаСистемы("""""C:\Program Files\Crypto Pro\CSP\certmgr"""" -list > C:\temp\certout.txt");
18 lEvGl
 
29.06.23
10:00
эта неинтересна
Независимо от того, куда вы едете — это в гору и против ветра!