用户界面;执行简单的 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。
我已经尝试过以下方法:
直接从上述 activity 中调用命令。结果:错误消息:术语 .... 未被识别为 cmdlet、函数的名称,....
只调用“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
设置 - 我猜如果你切换它,它就会起作用! :)
我想从 UIPath 中执行以下简单的 powershell 命令:
(Get-PrintJob -PrinterName '015-pr362318-esr').count()
并从 UIpath 中检索输出。
为了执行 powershell 命令,我目前正在使用来自 UIPath 的调用 Power Shell activity。
我已经尝试过以下方法:
直接从上述 activity 中调用命令。结果:错误消息:术语 .... 未被识别为 cmdlet、函数的名称,....
只调用“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
设置 - 我猜如果你切换它,它就会起作用! :)