我不是一个先进的文学家,但我有一个任务,我需要完成的工作。任务是创建一个脚本,它从包含在目录中的每个报表文件中查看两条信息(日期和字节中使用的容量)。这两项资料在每一份报告中都位于同一地点。然后,使用日期值,脚本可以报告每个月容量利用率最高的值。我正在考虑最后的输出是HTML格式的。
获取日期值有两个选项。报告在文本的第3行中包含mm/dd/yyyy格式的日期,时间作为Epoch时间包含在文件名中。
到目前为止,我已经编写了一个PowerShell脚本,它解析了从报告正文中使用的日期和容量。然后将此信息添加到数组中。
我正在寻找更好地使用哪个日期值的指导(文件名中的Epoch时间或报告正文中的日期),以及用于查看每个月的数据并报告每月最高容量利用率的最佳方法。
到目前为止,这是我的剧本:
#Construct an array to use for data export
$fileDirectory = "c:\Temp"
$Array1 = @()
foreach ($file in Get-ChildItem $fileDirectory)
{
#Obtain path to each file in directory
$filePath = $fileDirectory + "\" + $file
#Get content of each file during the loop
$data = Get-Content $filePath
#Create object to enter data into Array1
$myobj = "" | Select "Date","Capacity"
$dateStr = ($data[2].Split(" "))[3]
[long]$capacityStr = ($data[19].Split(","))[2]
[single]$CapacityConv = $capacityStr
$capacityConv = ($capacityConv /= 1099511627776)
#Fill the object myobj
$myobj.date = $dateStr
$myobj.capacity = $capacityConv
#Add the object to Array1
$Array1 += $myobj
#Wipe the object
$myobj = $null
}
#After the loop, export the array to CSV file
$Array1 | export-csv "c:\Scripts\test-output.csv"
$Array1
pause
发布于 2015-10-09 23:37:16
日期的事,真的要看你了。如果它们同样准确,那就取决于人们的看法。
对于容量,我假设这些是每日报告,给定日期格式,并且您希望达到给定月份的最高容量。
由于要为每个报表创建一个包含Date
和Capacity
属性的对象,使用所有这些值的返回数组,您应该能够获得如下所需的信息:
$Array1 | Group-Object {([DateTime]$_.Date).ToString('MMMM')} | Select-Object Name,@{Name='MaxCap';Expression={ $_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum }}
现在这是很多,所以让我们把它分解。
Group-Object
基于属性对数组进行分组。在本例中,我们希望按月分组,但您没有month属性,因此,我们要传入一个脚本块来动态计算属性,而不是属性名称:
([DateTime]$_.Date).ToString('MMMM')
这会将您的Date
属性(即[String]
)转换为[DateTime]
对象。然后我们使用.ToString('MMMM')
将其格式化为一个月名。
结果将是一个组对象数组,其中Name
属性是组的名称(在本例中是月份名称),Group
属性将包含属于该组的所有原始对象。
将其导入Select-Object
,我们需要Name
(月份),然后动态创建一个名为MaxCap
的新属性
$_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
因此,我们接受当前的Group
(那个月所有对象的数组),然后展开它的Capacity
属性,所以现在我们有了这个组的所有容量的数组。
将其导入Measure-Object -Maximum
以获得最大值,然后是Select-Object -ExpandProperty Maximum
(因为Measure-Object
返回一个带有Maximum
属性的对象,我们只需要这个值)。
最终结果是一个具有月份和该月份最大容量的对象。
https://stackoverflow.com/questions/33048333
复制相似问题