Puncte:1

Preluați dimensiunea dosarului părinte pentru fiecare site IIS

drapel cn

Încerc să obțin o listă de site-uri de la IIS (8.5) pentru a include dimensiunea folderului, dar nu reușesc să funcționeze.

Mai jos este codul actual pe care îl am și care funcționează fără dimensiune

Import-Module webAdministration # Necesar pentru Powershell v2 sau o versiune anterioară  

$filepath = C:\sites.csv
$sites = get-site

foreach($site în $sites) {
    $name = $site.name
    $bindings = $site.bindings.collection.bindinginformation.split(":")
    $ip = $bindings[0]
    $port = $bindings[1]
    $hostHeader = $bindings[2]
    „$nume,$hostHeader,$ip,$port” | out-gazdă
    „$nume,$hostHeader,$ip,$port” | out-file $filePath -Adăugați
}

Apoi am încercat să adaug în această linie

$size = Get-ChildItem -Directory -Force|ForEach {"{0,-30} {1,-30} {2:N2}MB" -f $_.Name, $_.LastWriteTime, ((Get-ChildItem $_ -Recurs|Măsura-Obiect -Lungimea proprietății -Suma -EroareAcțiune Stop).Sum/1MB)}

dar nici asta nu a mers.

Am incercat apoi cu

$size = Get-ChildItem $nume + „\folderName\” | Măsură-Obiect -Lungimea proprietății -sumă

care era din ce în ce mai aproape, dar cred că sintaxa mea este greșită $nume + „\folderName\” deoarece primesc o serie de erori. Eu spun că acesta este aproape, deoarece are calea către director, dar nu există. Directorul ar exista dacă aș putea adăuga numele folderului la $nume variabil?

Unde gresesc? Sau cum aș putea prelua dimensiunea fișierului părinte al fiecărui site web?

JosefZ avatar
drapel th
Poate `Get-ChildItem $site.physicalPath`?
Puncte:0
drapel cn

În testarea mea, Calea fizică proprietatea poate conține variabilă formatată cmd.exe %SystemDrive%.

Când se întâmplă acest lucru, puteți lua calea fizică și puteți extrage numele variabilei de mediu și calea rămasă folosind regex. Scoateți valoarea variabilei și construiți calea.

$filepath = 'C:\sites.csv'
$sites = get-site

foreach($site în $sites) {
    if($site.physicalPath -match '^%(.+)%(.+)$'){
        $sitedir = Join-Path (Get-Content "env:$($matches.1)") $match.2
        Get-ChildItem -LiteralPath $sitedir
    }
}

Dacă confirmați că aceasta listează cu exactitate fișierele pentru fiecare site, se pare că ați dat seama de porțiunea de măsurare.

Alte câteva sugestii. În primul rând, recomand Export-Csv în loc de Out-File.

Apoi, în loc să deschideți fișierul și să adăugați din nou și din nou (lent), puteți colecta toate rezultatele și apoi le puteți scrie.

$rezultate = foreach($site în $sitelist){
    ... codul ...
}

$rezultate | Out-File $filepath

Sau poți folosi Pentru fiecare-obiect și profitați de conductă.

$sitelist | Pentru fiecare obiect {
    ... codul ...
} | Out-File $filepath

Un beneficiu secundar al Pentru fiecare-obiect este -OutVariable parametru care vă permite să capturați rezultatul într-o variabilă (adică de tip ArrayList) și vedeți rezultatul (sau direcționați-l către mai multe comenzi.)

Având în vedere recomandările mele, aș încerca asta.

$filepath = 'C:\sites.csv'
$sites = get-site

$site-uri | Pentru fiecare obiect {

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

    $cale = if($_.physicalPath -match '^%(.+)%(.+)$'){
        Join-Path (Get-Content "env:$($match.1)") $match.2
    }
    altfel{
        $_.physicalpath
    }

    $size = (Get-ChildItem $path -Recurse | Măsură-Obiect -Lungimea proprietății -Suma -ErrorAction Stop).Sum / 1MB

    [PSCustomObject]@{
        Nume = $_.nume
        FullPath = $cale
        IP = $ip
        Port = $port
        HostHeader = $hostHeader
        SizeMB = $size
   }
} -OutVariable rezultate

$rezultate | Export-Csv $filepath -NoTypeInformation
drapel cn
Mulțumesc, dar dimensiunea fișierului folosind cele de mai sus nu a apărut. Nu a recuperat nicio valoare?
Doug Maurer avatar
drapel cn
Mi-am actualizat postarea

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.