如何从Powershell启动ExtendScript JSX脚本

时间:2018-10-25 20:37:29

标签: powershell com adobe-illustrator extendscript

我希望能够通过Windows Powershell执行Adobe Illustrator ExtendScript。我相信这应该是有可能的,因为this answer描述了通过COM使用VB。

这是我的Powershell脚本:

string query = "SELECT Movie.Code FROM Movie WHERE Movie.Code = @code";

int i = 0;
i = int.Parse(query);

using (SqlCommand cmd = new SqlCommand(query))
{
    cmd.Connection = con;
    con.Open();

    using (SqlDataReader sdr = cmd.ExecuteReader())
    {
        string R1 = "OK";

        if (sdr.Read())
        {
            if (i > 0)
            {
                Re1 =  "OK";
            }
            else
            {
                 Re1 = "Fail";
            }
        }

        return Re1;
    }
}

这是$illustratorRef = New-Object -ComObject Illustrator.Application $conversionScript = New-Object -ComObject Scripting.FileSystemObject $scriptFile = $conversionScript.OpenTextFile("C:\ws\ArtConversion\alert-test.jsx") $fileContents = $scriptFile.ReadAll() $scriptFile.Close() $fileToRun = $fileContents + "main(arguments)" $args = "line1", "line2" $illustratorRef.DoJavaScript($fileToRun, $args, 1) 脚本:

alert-test.jsx

运行Powershell脚本会打开Illustrator,但是在遇到function main(argv) { alert('message: ' + argv[0]); return argv[0]; } 时会引发以下错误:

$illustratorRef.DoJavaScript

我正在使用Adobe Illustrator 2019 CC(64bit)和Powershell 5.1.16299.666

1 个答案:

答案 0 :(得分:0)

我实现了我的目标,但是Powershell无法100%做到。

2017 Adobe Illustrator Scripting Guide包含第22页的以下语句:

  

在VBScript中,有几种创建Illustrator实例的方法。

但是,当提到JavaScript时,它说:

  

从JavaScript启动Illustrator的信息不在本指南的范围内。

我找不到有关如何使用VB以外的其他语言在Windows上以编程方式启动Illustrator的任何官方文档,因此我最终让我的Powershell脚本处理了目录遍历和日志记录的繁重工作,同时通过以下方式打开了Illustrator一个Visual Basic脚本。

从Powershell到VB的调用看起来像这样:

$convertFile = "cmd /C cscript .\run-illustrator-conversion.vbs $arg1, $arg2"
$output = Invoke-Expression $convertFile

VB脚本最终看起来像这样:

Dim appRef
Dim javaScriptFile
Dim argsArr()

Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject")
Dim jsxFile : Set jsxFile = fsObj.OpenTextFile(".\script-to-run.jsx", 1, False)
Dim fileContents : fileContents = jsxFile.ReadAll
jsxFile.Close
Set jsxFile = Nothing
Set fsObj = Nothing

javascriptFile = fileContents & "main(arguments);"

Set appRef = CreateObject("Illustrator.Application.CS5")
ReDim argsArr(Wscript.Arguments.length - 1)

For i = 0 To Wscript.Arguments.length - 1
    argsArr(i) = Wscript.Arguments(i)
Next

Wscript.Echo appRef.DoJavaScript(javascriptFile, argsArr, 1)

注意:查看脚本指南以获取适用于您的Illustrator版本的正确字符串。