我在ps1文件中创建了一个类,它在ps1文件中运行得很好。我可以在同一个文件中使用类和测试运行各种测试。
我的麻烦是我似乎无法找到一种方法将我的Class放在一个文件中,将Class Usage代码放在另一个文件中。
使用函数,您可以点源它们将任何外部ps1文件带入当前脚本。看起来像Powershell的类不能以这种方式工作。
如何组织代码以将类保存在与执行脚本不同的文件中?
我必须使用模块吗?我怎么做?
在文件Hello.psm1
中:
class Hello {
# properties
[string]$person
# Default constructor
Hello(){}
# Constructor
Hello(
[string]$m
){
$this.person=$m
}
# method
[string]Greetings(){
return "Hello {0}" -f $this.person
}
}
在文件main.ps1
中:
using module .\Hello.psm1
$h = New-Object -TypeName Hello
echo $h.Greetings()
#$hh = [Hello]::new("John")
$hh = New-Object -TypeName Hello -ArgumentList @("Mickey")
echo $hh.Greetings()
并运行.\main.ps1
:
Hello
Hello Mickey
这可能不适用于您的情况,但我有使用PowerShell缓存信息的噩梦(在我的情况下,它只是模块)。我在模块中更改的内容未正确加载 - 即使重启后也是如此。
我发现删除存储在C:\Users\<YourUsername>\AppData\Local\Microsoft\Windows\PowerShell
子目录中的缓存解决了我的问题。