2015-10-09 2 views
0

Я не продвинутый скриптер любыми способами, но у меня есть задача, которую мне нужно выполнить для работы. Задача состоит в создании сценария, который рассматривает две части информации (дату и емкость, используемые в байтах) из каждого файла отчета, который содержится в каталоге. Эти две части информации расположены в одном месте в каждом отчете. Затем, используя значение даты, сценарий может сообщать, какое значение было наивысшей емкости для каждого месяца. Я думаю, что конечный результат будет в формате HTML.Руководство с развивающимся сценарием PowerShell

Существует два варианта получения значения даты. Отчет содержит дату в формате 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 

ответ

0

На дату, это действительно до вас. Если они одинаково точны, то это вопрос мнения.

Для емкости я предполагаю, что это ежедневные отчеты с учетом формата даты, и вы хотите максимальную емкость для данного месяца.

Поскольку вы создаете объект, содержащий в Capacity свойства для каждого отчета Date и, используя возвращаемый массив всех этих значений, вы должны быть в состоянии получить необходимую информацию, как это:

$Array1 | Group-Object {([DateTime]$_.Date).ToString('MMMM')} | Select-Object Name,@{Name='MaxCap';Expression={ $_.Group.Capacity | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum }} 

Теперь это довольно много, поэтому давайте разложим его.

Group-Object группирует ваш массив на основе свойства. В этом случае, мы хотим, чтобы сгруппировать по месяцам, но вы не имеете месяц собственность, поэтому вместо имени свойства мы передаем в блоке сценария для вычисления свойства на лету:

([DateTime]$_.Date).ToString('MMMM') 

Это отбрасывает ваше имущество Date (которое является [String]) в объект [DateTime]. Затем мы используем .ToString('MMMM'), чтобы отформатировать его в виде месяца.

Результатом будет массив объектов группы, где свойство Name - это имя группы (в данном случае это будет имя месяца), а свойство Group будет содержать все исходные объекты, принадлежащие этому группа.

Piping это в 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 собственности и мы просто хотим, значение).

Конечный результат - это объект с месяцем и максимальной емкостью за этот месяц.

+0

Блестящий! Большое спасибо!! Это делает то, что мне нужно, и намного проще, чем я думал, что это будет, но, конечно же, это результат вашего опыта. – richardw