我正在尝试为技术人员和最终用户编写脚本。
我的脚本是“框架”,可以说是调用其他人用批处理脚本编写的包。
长话短说,最初我想获得每个批处理脚本的退出代码,但无法做到这一点。所以我最终从它创建的日志中提取每个批处理文件的返回码。这让我来到这里。
我正在尝试做的事情(也许是这样做的方法)是创建一个空数组,并添加应用程序名称,最终返回代码,日志文件位置和最终返回代码的说明。
我的代码有点工作。但我无法让表格在新行上显示每个应用程序。相反,它只是不断添加它。
有什么想法吗?无论是我正在尝试做什么还是我最初都想做的事情?
提前谢谢大家。
$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
答案 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
- 它会重复使用输出不可能繁琐而烦人的