Найти брандмауэр в использовании через Powershell

Я нашел результаты, подобные следующим уродливым:

1 год, 2 месяца, 0 дней, 0 часов, 53 минут и 1 секунда

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

function since($timestamp, $level=6) {
    global $lang;
    $date = new DateTime();
    $date->setTimestamp($timestamp);
    $date = $date->diff(new DateTime());
    // build array
    $since = json_decode($date->format('{"year":%y,"month":%m,"day":%d,"hour":%h,"minute":%i,"second":%s}'), true);
    // remove empty date values
    $since = array_filter($since);
    // output only the first x date values
    $since = array_slice($since, 0, $level);
    // build string
    $last_key = key(array_slice($since, -1, 1, true));
    $string = '';
    foreach ($since as $key => $val) {
        // separator
        if ($string) {
            $string .= $key != $last_key ? ', ' : ' ' . $lang['and'] . ' ';
        }
        // set plural
        $key .= $val > 1 ? 's' : '';
        // add date value
        $string .= $val . ' ' . $lang[ $key ];
    }
    return $string;
}

Выглядит намного лучше:

1 год, 2 месяца, 53 минуты и 1 секунду

При необходимости используйте $level = 2, чтобы сократить его следующим образом:

1 год и 2 месяца

< / blockquote>

Удалите часть $lang, если она вам нужна только на английском языке или отредактируйте этот перевод в соответствии с вашими потребностями:

$lang = array(
    'second' => 'Sekunde',
    'seconds' => 'Sekunden',
    'minute' => 'Minute',
    'minutes' => 'Minuten',
    'hour' => 'Stunde',
    'hours' => 'Stunden',
    'day' => 'Tag',
    'days' => 'Tage',
    'month' => 'Monat',
    'months' => 'Monate',
    'year' => 'Jahr',
    'years' => 'Jahre',
    'and' => 'und',
);
-1
задан Mathias R. Jessen 11 March 2019 в 14:30
поделиться

1 ответ

Следующий скрипт запускается для меня в Windows 10 версии 1809:

$computer   = '.'                                             # $env:COMPUTERNAME
$namespaces = "ROOT\SecurityCenter", "ROOT\SecurityCenter2"
$classname  = "FirewallProduct"
$ActiveFireWall = foreach ($namespace in $namespaces) {
    $aux = Get-WmiObject -Class $classname -Namespace $namespace -ComputerName $computer
    if ($aux) {
        $aux | Select-Object -Property [a-z]* -ExcludeProperty PSComputerName, 
                 Scope, Path, Options, ClassPath, Properties, SystemProperties, 
                 Qualifiers, Site, Container
    }
}
if ( $ActiveFireWall ) { $ActiveFireWall.displayName }
0
ответ дан JosefZ 11 March 2019 в 14:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: