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