мне нужно взять под выход из dirquota au l
команды на сервере 2008 R2, перебирать каждую строку, добавьте соответствующие данные для каждого пути авто квот на свой собственный уникальный объект, а затем добавить все объектов к массиву. Смотрите пример ниже:Перебор пунктов, создавать отдельные объекты
Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\E\Dir\SubDir \\SERVER\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log
Например, возьмем любую автоматическую квоту, и я хочу, чтобы изолировать «Auto Apply Квота Путь:» часть, которую я знаю, что я могу сделать с RegEx и Select-String
, добавить, что к объекту под свойством «Имя», затем выделите часть «E: \ Dir \ Subdir» и добавьте это к тому же объекту в свойстве «Значение». Затем я хочу собрать данные из Source Template and Limit, добавив их к одному и тому же объекту. Затем, как только он попадет в пустую строку, добавьте объект, только что созданный в массив, пустую переменную объекта и начните повторение через следующий раздел автоматической квоты, пройдя тот же процесс.
Вот код, я работаю с до сих пор:
$AutoQuota = @()
$AutoQuota = dirquota au l
$AutoQuota = $AutoQuota[2..$AutoQuota.Count]
$obj = New-Object PSObject
$objArr = @()
$AutoQuota | % {
switch -regex ($_) {
"^Auto.*" {
$Name = $_ | Select-String -Pattern "^Auto*: " |
%{$_.Matches} | %{$_.Value}
$Value = $_ | Select-String -Pattern "\w:*" |
%{$_.Matches} | %{$_.Value}
$obj | Add-Member -MemberType NoteProperty -Name $Name -Value $Value
}
"^\s*$" {
$objArr += $obj
$obj = @()
}
}
}
Там будет больше на switch
заявление, очевидно, я просто хочу, чтобы получить первую линию, чтобы работать, как ожидалось, то я добавлю отдых. Если есть более простой/лучший способ сделать это, я открыт для предложений.
Похоже, это ставит меня на правильном пути. Единственная проблема - я получаю результат только от первого блока данных. Я пишу в '(dirquota au l | Out-String) -split '\ n \ n'' в' Where-Object', это правильно? –
@ AshHousewares Да. Разломы строк могут быть закодированы как CR-LF, однако, так что проверьте '-split '\ r \ n \ r \ n''. Также проверьте, сохранены ли пустые строки в захваченном командном выходе и что пустые строки не содержат других пробелов. –
Итак, '-split \ n \ n' на самом деле не разделяет строку, так как вывод содержит только 1 элемент, поэтому он соответствует первой группе и все. Если я разделился на одну новую строку, я получаю 53 элемента, как ожидалось, потому что есть 53 строки вывода. Я подозреваю, что разделение на 2 новые строки не работает по какой-то причине, возможно, из-за формата вывода строки? –