使用变量创建自定义输出

时间:2015-02-12 20:10:53

标签: 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

1 个答案:

答案 0 :(得分:2)

$a = New-Object psobject -Property @{
                                       AppName= ""
                                       FinalReturnCode = ""
                                       LogFileLocation  = ""
                                   }
...
$a.AppName += $APP1
...
$a.AppName += $APP2

在这里,$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数组

即可

如果您打算将其用作“框架”,您可能希望避免输出格式化cmdlet,如Format-Table - 它会重复使用输出不可能繁琐而烦人的