.net 加载powershell脚本时出现看似随机的错误

.net 加载powershell脚本时出现看似随机的错误,.net,powershell,.net,Powershell,我有一个脚本,我在过去几个月里一直在工作,它可以自动化我们所工作的系统的配置过程。主脚本导入其他必需的“实用程序”脚本并运行主循环。它导入的脚本之一是一个表单脚本,用于处理表单创建、显示等。该脚本有两个版本-一个用于笔记本电脑,另一个用于我们指定为服务器的桌面。在为笔记本电脑版本开发时,我没有遇到与我将要描述的问题相关的问题。然而,当第一次在我们的测试机器上测试服务器版本时,我开始出现一些奇怪的错误。奇怪的是,它总是前后不一致。有时没有错误,有时有2到4个错误。我认为还需要注意的是,从power

我有一个脚本,我在过去几个月里一直在工作,它可以自动化我们所工作的系统的配置过程。主脚本导入其他必需的“实用程序”脚本并运行主循环。它导入的脚本之一是一个表单脚本,用于处理表单创建、显示等。该脚本有两个版本-一个用于笔记本电脑,另一个用于我们指定为服务器的桌面。在为笔记本电脑版本开发时,我没有遇到与我将要描述的问题相关的问题。然而,当第一次在我们的测试机器上测试服务器版本时,我开始出现一些奇怪的错误。奇怪的是,它总是前后不一致。有时没有错误,有时有2到4个错误。我认为还需要注意的是,从powershell ISE运行脚本时不会出现这些错误,只有通过加载脚本的批处理文件运行时才会出现这些错误

我收到的一些错误如下:

异常设置“大小”:“无法将“System.Drawing.Size get_MinimumSize()”类型的“System.Reflection.RuntimeMethodInfo”值转换为“System.Drawing.Size”。

异常设置“Margin”:“无法将“System.Management.Automation.Language.TypeName”类型的“System.Drawing.Size”值转换为“System.Windows.Forms.Padding”。

这些特定错误来自更改
System.Windows.Forms.ComboBox
对象(大小和边距值)设置的行

凭借我在Powershell方面的有限经验,我将范围缩小到我认为正在发生的事情。在脚本的开头,添加了
System.Windows.Forms
System.Drawing
类以及
addtype-AssemblyName…
行。这就是我在一些教程中看到的能够实际创建和使用.NET表单的要点。基于大部分猜测,我刚刚添加了一个5秒的
Start Sleep
命令,看看会发生什么。瞧,这似乎纠正了错误。至少,当我尝试从.bat文件运行大约10-20次时,我没有得到错误


我的主要问题是到底发生了什么?我想确保这些错误不会再次出现,我不相信我实施的“修复”能确保这一点。这样做似乎没有意义,因为如果类没有加载确实有问题,我会假设/希望Powershell会生成某种错误。我还想知道为什么在笔记本电脑版本上运行脚本时从未看到这些错误。我不知道从何处开始了解这两者之间的差异会导致此错误,但我仍然感兴趣

如果可能,请共享代码(或部分代码),到目前为止,我们必须假设很多可能不正确的情况

无论如何,这是我的想法“无法转换…”错误作为我的经验。我在尝试为一个特定的变量赋值时也遇到了这个错误,但它是另一种类型的

我的解决方案是:在分配新值之前,我删除了变量,如
删除变量大小
(注意:变量名称前面没有
$


另一个解决方案可能是在赋值时指定类型,如
[System.Reflection.RuntimeMethodInfo]$Size=yourcode是什么

您要做什么。在
$form.ShowDialog()之后完成时,Dispose()处理表单,不是吗?否则,重复显示表单而不处理表单将导致问题。开发工作会导致类似的问题,因为表单中定义的大多数变量将持续到ISE关闭。为了确保不会发生这种情况,您可以每隔一个小时左右打开一个新的ISE窗口,尝试更早地发现类似这样的错误<代码>添加类型
命令是同步的。PowerShell在
添加类型
完成之前不会移动到下一行。延迟听起来像是在转移注意力(不是真正的错误)@Theo是的,我知道。请给我们看看你代码的相关部分。您显示的错误可能有各种原因,但如果没有代码,就不可能精确定位。我在原始帖子中提到的出现错误的行非常简单。其中之一是
$cbovoidable.Size=$cboSize
。由于经常使用,
$cboSize
被设置为
System.Drawing.Size
对象。当窗体被清理时,窗体本身及其所有字段都将被处理。我得试试你的方法