用户界面;执行简单的 powershell 命令:“(Get-PrintJob -PrinterName '015-pr362318-esr').count()”

UIPath; execute simple powershell command: "(Get-PrintJob -PrinterName '015-pr362318-esr').count()"

我想从 UIPath 中执行以下简单的 powershell 命令:

(Get-PrintJob -PrinterName '015-pr362318-esr').count()

并从 UIpath 中检索输出。

为了执行 powershell 命令,我目前正在使用来自 UIPath 的调用 Power Shell activity。

我已经尝试过以下方法:

  1. 直接从上述 activity 中调用命令。结果:错误消息:术语 .... 未被识别为 cmdlet、函数的名称,....

  2. 只调用“get-printjob”。来自以上 activity。结果:错误消息:无法将类型 'Microsoft.Management.Infrastructure.CimInstance' 的对象转换为类型 'System.Management.Automation.PSObject'

提示: 我已经通过调用电源的参数部分给出了参数 -PrinterName shell activity.

编辑: 这表明命令:get-printjob 现在已被识别 - 但生成的集合的类型为 ...CimInstance,无法转换为 ...PSObject

问题:如何在 UIpath 中使用 get-printjob Powershell 命令?


更新 - 解决方案(感谢 Mathias R. Jensen)

第一 必须选中复选框“是脚本”。这将识别以下行:“Import-Module PrintManagement; @(Get-PrintJob -PrinterName '015-pr362318-esr').Count” 在 UIPath 的调用能力中 shell activity.

第二 为了提取打印作业计数的 int32 值,将 activity 中的 TypeArgument 设为:Int32

第三 定义您在 UIpath activity 的输出中分配的 UIPath 变量 <yourReturnVariable>,如下所示:Collection<Int32>

第四 使用 assign activity(在调用 Power Shell activity 之后),提取打印作业的数量如下:int_Printjobs = <yourReturnVariable>.First()

完整的错误信息给出提示:

The term 'Import-Module PrintManagement; @(Get-PrintJob -PrinterName '015-pr362318-esr').Count' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

所以它将整个脚本解释为要调用的单个命令的名称——这显然失败了!

如果您习惯于将 PowerShell 作为控制台应用程序以交互方式使用,这可能意义不大,您怎么会尝试调用这样命名的命令?! (提示:&

但是如果你使用底层 API(就像 UiPath 一样),它实际上很漂亮 easy:

PowerShell ps = PowerShell.Create();
ps.AddCommand("<# whole script text goes here#>");
// should have been `ps.AddScript("<# ... #>")`

C# 编译器愉快地编译并执行这段代码,只是您会在 运行时 发现与您遇到的错误类似的错误。

所以我们需要一些方法来指示 UiPath 调用 AddScript() 而不是 AddCommand()。根据 to the UiPath docs,InvokePowerShell 命令元素有一个 IsScript 设置 - 我猜如果你切换它,它就会起作用! :)