Powershell 使用变量创建自定义输出

Powershell 使用变量创建自定义输出,powershell,Powershell,我正试图为技术人员和最终用户编写一个脚本 我的脚本就是所谓的“框架”,它调用由其他人以批处理脚本编写的包 长话短说,最初我想获得每个批处理脚本的退出代码,但无法做到这一点。因此,我最终从创建的日志中提取每个批处理文件的返回代码。这让我来到这里 我试图做的(可能是编写方法)是创建一个空数组,并添加、应用程序名称、最终返回代码、日志文件位置和最终返回代码的解释 我的代码很管用。但我无法让表格在新行上显示每个应用程序。相反,它只是在它旁边不断添加 有什么想法吗?或者是我想做的,或者是我最初想做的 提前

我正试图为技术人员和最终用户编写一个脚本

我的脚本就是所谓的“框架”,它调用由其他人以批处理脚本编写的包

长话短说,最初我想获得每个批处理脚本的退出代码,但无法做到这一点。因此,我最终从创建的日志中提取每个批处理文件的返回代码。这让我来到这里

我试图做的(可能是编写方法)是创建一个空数组,并添加、应用程序名称、最终返回代码、日志文件位置和最终返回代码的解释

我的代码很管用。但我无法让表格在新行上显示每个应用程序。相反,它只是在它旁边不断添加

有什么想法吗?或者是我想做的,或者是我最初想做的

提前谢谢大家

$a = new-object psobject -Property 
     @{
        AppName= ""
        FinalReturnCode = ""
        LogFileLocation  = ""
      }

        $APP1 = "Adobe_Reader"
        $a.Appname += $APP1
        $App1Log = "C:\Logs\Adobe_Reader.log"
        $a.LogfileLocation += $App1Log
        $App3LogResult = Get-Content $App1Log | Where{$_ -match "Final Return Code:\s*(\d*)"}
        $App1FinalReturnCode = $App1LogResult.Split("")[-2]
        $a.FinalReturnCode += $App1FinalReturnCode

        $APP2 = "Adobe_FlashPlayer"
        $a.Appname += $APP2
        $App2Log = "C:\Logs\Adobe_Flash.log"
        $a.LogfileLocation += $App2Log
        $App2LogResult = Get-Content $App2Log | Where{$_ -match "Final Return Code:\s*(\d*)"}
        $App2FinalReturnCode = $App2LogResult.Split("")[-2]
        $a.FinalReturnCode += $App2FinalReturnCode



$a | Format-Table  Appname, LogFileLocation, FinalReturnCode -AutoSize
这里,
$a.AppName
是一个字符串,而不是一个数组,这就是为什么它像您所说的那样不断“添加”

重复两个几乎相同的代码块会导致灾难,相反,我会使用哈希表数组存储每个应用程序的信息,如下所示:

$Apps = @(
    @{
        Name = "Adobe_Reader"
        Logfile = "C:\Logs\Adobe_Reader.log"
    },
    @{
        Name = "Adobe_FlashPlayer"
        Logfile = "C:\Logs\Adobe_Flash.log"
    }
)

# Array to store the results
$Results = @()

foreach($App in $Apps){
    $LogResult = Get-Content $App.Logfile |Where-Object { $_ -match "Final Return Code:\s*(\d*)" }
    $ReturnCode = $LogResult.Split("")[-2]
    # Create new object and add it to the array
    $Results += New-Object psobject -Property @{
        AppName = $App.Name
        LogfileLocation = $App.Logfile
        FinalReturnCode = $ReturnCode
    }
}

$Results
现在,您可以轻松添加新应用程序,只需扩展
$Apps
阵列即可

如果您打算将其用作“框架”,您可能希望避免像
Format Table
这样的输出格式化cmdlet—这使得不可能重复使用输出既麻烦又烦人

$Apps = @(
    @{
        Name = "Adobe_Reader"
        Logfile = "C:\Logs\Adobe_Reader.log"
    },
    @{
        Name = "Adobe_FlashPlayer"
        Logfile = "C:\Logs\Adobe_Flash.log"
    }
)

# Array to store the results
$Results = @()

foreach($App in $Apps){
    $LogResult = Get-Content $App.Logfile |Where-Object { $_ -match "Final Return Code:\s*(\d*)" }
    $ReturnCode = $LogResult.Split("")[-2]
    # Create new object and add it to the array
    $Results += New-Object psobject -Property @{
        AppName = $App.Name
        LogfileLocation = $App.Logfile
        FinalReturnCode = $ReturnCode
    }
}

$Results