我最近用PS类编写了一个脚本。要获取状态信息,请使用Write-Information。出于某种原因,使用InformationVariable无法捕获此消息。下面是一个测试脚本,用于演示会发生什么。
Class Test1
{
Test1()
{
Write-Information "Entering Test1()"
}
}
Class Test2
{
Test2()
{
Write-Information "Entering Test2()"
}
}
Function Start-Test
{
[CmdLetBinding()]
Param()
Write-Information "Going to create objects"
$objF1 = [Test1]::new()
$objF2 = [Test2]::new()
Write-Information "Leaving Start-Test"
}
Start-Test -InformationAction Continue -InformationVariable iv
现在执行脚本
PS C:> C:\ LocalData \类Information.ps1
要创建对象
输入Test1()
输入Test2()
离开开始测试
所有使用写信息生成的消息都显示在屏幕上,如上所示。
我希望在信息变量$ iv中也有相同的输出,因为使用-InformationVariable iv捕获流
PS C:> $ IV
要创建对象
离开开始测试
但令人惊讶的是,只有函数中生成的消息存储在变量$ iv中,类构造函数中生成的所有消息都丢失了???
如果我以这种方式启动相同的脚本,则可以在信息流中找到所有消息。
$ps = [Powershell]::Create()
$null = $ps.AddCommand("C:\LocalData\Class-Information.ps1", $false)
$null = $ps.Invoke()
$ps.Streams.Information | ForEach-Object { ("{0} {1}" -f $_.Timegenerated,$_.MessageData) }
10.01.2018 09:27:55 Going to create objects
10.01.2018 09:27:55 Entering Test1()
10.01.2018 09:27:55 Entering Test2()
10.01.2018 09:27:55 Leaving Start-Test
如何使用-InformationVariable获取所有消息。