Рейтинг:1

Получить размер родительской папки для каждого сайта IIS

флаг cn

Я пытаюсь получить список сайтов из IIS (8.5), чтобы включить размер папки, но не могу заставить это работать.

Ниже приведен текущий код, который работает без размера.

Import-Module webAdministration # Требуется для Powershell v2 или ниже  

$filepath = C:\sites.csv
$sites = получить-веб-сайт

foreach ($ сайт в $ сайтах) {
    $имя = $сайт.название
    $bindings = $site.bindings.collection.bindinginformation.split(":")
    $ip = $bindings[0]
    $ порт = $ привязки [1]
    $ hostHeader = $ привязки [2]
    "$name,$hostHeader,$ip,$port" | чужой
    "$name,$hostHeader,$ip,$port" | выходной файл $filePath -Append
}

Затем я попытался добавить в эту строку

$size = Get-ChildItem -Directory -Force|ForEach {"{0,-30} {1,-30} {2:N2} МБ" -f $_.Name, $_.LastWriteTime, ((Get-ChildItem $_ -Recurse|Measure-Object -Property Length -Sum -ErrorAction Stop).Sum/1MB)}

но и это не сработало.

Затем я попытался с

$size = Get-ChildItem $name + "\folderName\" | Измерение-Объект-Свойство Длина-сумма

который приближался, но я думаю, что мой синтаксис неверен с $имя + "\имя_папки\" так как я получаю серию ошибок. Я говорю, что это близко, так как у него есть путь к каталогу, но он не существует. Каталог будет существовать, если я смогу добавить имя папки в $имя переменная?

Где я ошибаюсь? Или как я могу получить родительский размер папки каждого веб-сайта?

JosefZ avatar
флаг th
Может быть, `Get-ChildItem $site.physicalPath`?
Рейтинг:0
флаг cn

В моем тестировании Физический путь свойство может содержать переменную в формате cmd.exe %системдрайв%.

Когда это происходит, вы можете выбрать физический путь и извлечь имя переменной среды и оставшийся путь, используя регулярное выражение. Вытащите значение переменной и постройте путь.

$filepath = 'C:\sites.csv'
$sites = получить-веб-сайт

foreach ($ сайт в $ сайтах) {
    if($site.physicalPath -match '^%(.+)%(.+)$'){
        $sitedir = путь присоединения (Get-Content "env:$($matches.1)") $matches.2
        Get-ChildItem -LiteralPath $sitedir
    }
}

Если вы подтвердите, что это действительно точный список файлов для каждого сайта, кажется, вы выяснили часть измерения.

Еще пара предложений. Во-первых, я рекомендую Экспорт-CSV вместо вне файла.

Далее, вместо того, чтобы открывать файл и добавлять его снова и снова (медленно), вы можете собрать все результаты, а затем записать их.

$results = foreach($site в $sitelist){
    ... код ...
}

$ результаты | Выходной файл $filepath

Или вы можете использовать ForEach-Object и воспользоваться конвейером.

$сайтлист | ForEach-Object {
    ... код ...
} | Выходной файл $filepath

Побочное преимущество ForEach-Object это -OutVariable параметр, который позволяет записывать выходные данные в переменную (типа ArrayList) и просмотреть вывод (или передать его другим командам).

Учитывая мои рекомендации, я бы попробовал.

$filepath = 'C:\sites.csv'
$sites = получить-веб-сайт

$сайты | ForEach-Object {

    $ip, $port, $hostHeader = $_.bindings.collection.bindinginformation.split(":")

    $path = if($_.physicalPath -match '^%(.+)%(.+)$'){
        Путь присоединения (Get-Content "env:$($matches.1)") $matches.2
    }
    еще{
        $_.физический путь
    }

    $size = (Get-ChildItem $path -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB

    [PSCustomObject]@{
        Имя = $_.имя
        Полный путь = $путь
        IP = $IP
        Порт = $порт
        Заголовок хоста = $ Заголовок хоста
        Размер МБ = $размер
   }
} -OutVariable результаты

$ результаты | Export-Csv $filepath-NoTypeInformation
флаг cn
Спасибо, но размер файла с использованием вышеизложенного не прошел. Он не получил никакого значения?
Doug Maurer avatar
флаг cn
я обновил свой пост

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.