如何解决在 VB.NET 中运行 powershell - 如何访问我的变量的内容
我正在使用 System.Management.Automation 在 VB 中运行一个简单的脚本,如下所示
脚本运行良好,但我如何在它运行后访问代码中 $offline 和 $online 的内容?
Dim scriptContents = New StringBuilder()
scriptContents.AppendLine("$computers = @(""PC-1"",""PC-2"",""PC-3"")")
scriptContents.AppendLine("$online = @()")
scriptContents.AppendLine("$offline = @()")
scriptContents.AppendLine("Foreach ($computer in $computers) {")
scriptContents.AppendLine("If (Test-Connection -ComputerName $computer -Count 2 -Quiet -ErrorAction SilentlyContinue) {")
scriptContents.AppendLine("$online += $computer")
scriptContents.AppendLine("}")
scriptContents.AppendLine("Else {")
scriptContents.AppendLine("$offline += $computer")
scriptContents.AppendLine("}")
scriptContents.AppendLine("}")
Using ps As PowerShell = PowerShell.Create()
ps.AddScript(scriptContents.ToString)
Dim results1 As PSDataCollection(Of PSObject) = Await Task.Run(Function() ps.InvokeAsync)
Stop
End Using
谢谢
解决方法
我认为解决方案是不让脚本创建两个单独的数组,而是让它返回一个 PSObject 数组,其中每个项目都有两个属性:Computer
和一个布尔值 Online
。>
大概是这样的:
Dim scriptContents = New StringBuilder()
scriptContents.AppendLine("$computers = @(""PC-1"",""PC-2"",""PC-2"")")
scriptContents.AppendLine("Foreach ($computer in $computers) {")
scriptContents.AppendLine("If (Test-Connection -ComputerName $computer -Count 2 -Quiet -ErrorAction SilentlyContinue) {")
scriptContents.AppendLine(" [PsCustomObject]@{Computer = $computer; Online = $true}")
scriptContents.AppendLine("}")
scriptContents.AppendLine("Else {")
scriptContents.AppendLine(" [PsCustomObject]@{Computer = $computer; Online = $false}")
scriptContents.AppendLine("}")
scriptContents.AppendLine("}")
Using ps As PowerShell = PowerShell.Create()
ps.AddScript(scriptContents.ToString)
Dim results1 As Collection(Of PSObject) = ps.Invoke()
End Using
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。