1

第一次提问所以请多多包涵

我遇到了似乎是 PowerShell 3 Add-Type cmdlet 中的错误。

我有一个使用 add-type 几次的脚本,该脚本设置为每 2 分钟通过任务调度程序运行一次,并且该任务有 5 个实例,并且都在不同的用户上下文下运行。

该脚本是在 PowerShell 2 出现时编写的,并且此设置运行良好,我们还没有将我们的机器升级到 PowerShell 3,并且已经开始出现许多错误,如下所示。

Error Cannot bind parameter 'Path' to the target. Exception setting "Path": "Cannot find path 'C:\libs\htmlagility\HtmlAgilityPack.dll' because it does not exist."
Generated by: Add-Type -Path $dllPath 
At C:\temp\hpsm-wintel-mbx.ps1:509 char:18 + Add-Type -Path $dllPath + ~~~~~~~~
Stack trace at System.Management.Automation.LocationGlobber.ExpandMshGlobPath(String path, Boolean allowNonexistingPaths, PSDriveInfo drive, ContainerCmdletProvider provider, CmdletProviderContext context) at System.Management.Automation.LocationGlobber.ResolveDriveQualifiedPath(String path, CmdletProviderContext context, Boolean allowNonexistingPaths, CmdletProvider& providerInstance) at System.Management.Automation.LocationGlobber.GetGlobbedMonadPathsFromMonadPath(String path, Boolean allowNonexistingPaths, CmdletProviderContext context, CmdletProvider& providerInstance) at System.Management.Automation.LocationGlobber.GetGlobbedProviderPathsFromMonadPath(String path, Boolean allowNonexistingPaths, CmdletProviderContext context, ProviderInfo& provider, CmdletProvider& providerInstance) at System.Management.Automation.LocationGlobber.GetGlobbedProviderPathsFromMonadPath(String path, Boolean allowNonexistingPaths, ProviderInfo& provider, CmdletProvider& providerInstance) at Microsoft.PowerShell.Commands.AddTypeCommand.set_Path(String[] value) at System.Management.Automation.ReflectionParameterBinder.BindParameter(String name, Object value)

当我禁用 4 个实例并让一个实例自行运行时,我可以确认此方法有效,并且它会继续运行而没有问题,但是一旦启动另一个实例,就会引发相同的错误。

从我所做的各种测试中,我得出的结论是 add-type 几乎同时被调用时的工作方式存在错误,我发现这非常奇怪,尤其是当每个脚本都在运行时不同的用户上下文。

为了解决这个问题,我设置了任务调度程序以随机​​执行并且不再出现任何错误。

有没有其他人遇到过这个或知道我做错了什么?

4

0 回答 0