在 VB.NET 中运行 powershell - 如何访问我的变量的内容 [英] Running powershell in VB.NET - how to access the content of my variable

查看:19
本文介绍了在 VB.NET 中运行 powershell - 如何访问我的变量的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 System.Management.Automation 在 VB 中运行一个简单的脚本,如下所示

I am running a simple script in VB using System.Management.Automation as below

脚本运行良好,但我如何在它运行后访问代码中 $offline 和 $online 的内容?

Script runs fine, but how do I then access content of $offline and $online in my code after it has run?

 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

谢谢

推荐答案

我认为解决方案是不让脚本创建两个单独的数组,而是让它返回一个 PSObjects 数组,其中每个项目都有两个属性:计算机和布尔Online.

I think the solution is to not have the script create two separate arrays, but instead have it return one array of PSObjects where each item has two properties: Computer and a Boolean 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

这篇关于在 VB.NET 中运行 powershell - 如何访问我的变量的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆