我有一个模块设置就像一个其他脚本的库.我无法弄清楚如何在脚本范围调用中获取类声明Import-Module.我试着Export-Module用一个-class参数安排,比如-function,但是没有-class可用的.我只需要在每个脚本中声明该类吗?
设置:
import-module holidays这是这个类的样子:
Class data_block
{
$array
$rows
$cols
data_block($a,$r,$c)
{
$this.array = $a
$this.rows = $r
$this.cols = $c
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 PowerShell 的类,这是一种非常方便的将相关数据分组在一起的方法,并且在处理行为方面非常繁琐。简化方案:一个定义类的 PS 脚本和另一个使用该类的脚本。
通用.ps1
class X
{
[string] $A
}
Run Code Online (Sandbox Code Playgroud)
脚本1.ps1
. $PSScriptRoot\Common.ps1
[X] $v = New-Object X
Run Code Online (Sandbox Code Playgroud)
一切都很好-你可以运行Script1.ps1没有问题的次任意数量的-直到你做出任何的改变Common.ps1。您将面临以下错误。
无法将“X”类型的“X”值转换为“X”类型。
在 D:\temp\PSIssue\Script1.ps1:3 字符:1
+ [X] $v = 新对象 X
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullQualifiedErrorId:运行时异常
可以想象,PS 文件中的任何更改(即使您只是添加了空格)都会强制其重新编译,因此该类型X变得与以前不同X- 临时容器程序集已更改(同样的问题在 .NET 中很容易重现 - 类型与只要“完全限定的程序集名称”相同)。变化Script1.ps1使事情恢复正常。
有没有办法克服这类问题?