Score:1

ดึงขนาดโฟลเดอร์หลักสำหรับแต่ละไซต์ IIS

ธง cn

ฉันพยายามรับรายชื่อไซต์จาก IIS (8.5) เพื่อรวมขนาดโฟลเดอร์ แต่ไม่สามารถใช้งานได้

ด้านล่างนี้เป็นรหัสปัจจุบันที่ฉันมีซึ่งใช้งานได้โดยไม่มีขนาด

นำเข้าโมดูลการดูแลระบบเว็บ # จำเป็นสำหรับ Powershell v2 หรือต่ำกว่า  

$filepath = C:\sites.csv
$sites = รับเว็บไซต์

foreach($site ใน $sites) {
    $name = $site.name
    $bindings = $site.bindings.collection.bindinginformation.split(":")
    $ip = $การโยง[0]
    $port = $bindings[1]
    $hostHeader = $การโยง[2]
    "$ชื่อ,$hostHeader,$ip,$port" | นอกโฮสต์
    "$ชื่อ,$hostHeader,$ip,$port" | ออกจากไฟล์ $filePath - ต่อท้าย
}

ฉันพยายามเพิ่มในบรรทัดนี้แล้ว

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

แต่นั่นก็ไม่ได้ผลเช่นกัน

จากนั้นฉันก็พยายามด้วย

$size = Get-ChildItem $name + "\folderName\" | วัดวัตถุ - ความยาวคุณสมบัติ - ผลรวม

ซึ่งใกล้เข้ามามากขึ้น แต่ฉันคิดว่าไวยากรณ์ของฉันผิดด้วย $ชื่อ + "\ชื่อโฟลเดอร์\" เนื่องจากฉันได้รับข้อผิดพลาดหลายอย่าง ฉันบอกว่ามันใกล้เพราะมีเส้นทางไปยังไดเร็กทอรี แต่ไม่มีอยู่ ไดเร็กทอรีจะมีอยู่หากฉันสามารถเพิ่มชื่อโฟลเดอร์ไปยัง $ชื่อ ตัวแปร?

ฉันไปผิดที่ไหน หรือฉันจะดึงพาเรนต์ของโฟลเดอร์เว็บไซต์แต่ละขนาดได้อย่างไร

JosefZ avatar
th flag
อาจจะเป็น `Get-ChildItem $site.physicalPath`?
Score:0
ธง cn

ในการทดสอบของฉัน เส้นทางทางกายภาพ คุณสมบัติสามารถมีตัวแปรที่จัดรูปแบบ cmd.exe %ไดรฟ์ระบบ%.

เมื่อสิ่งนี้เกิดขึ้น คุณสามารถใช้เส้นทางทางกายภาพและแยกชื่อตัวแปรสภาพแวดล้อมและเส้นทางที่เหลือโดยใช้ regex ดึงค่าของตัวแปรออกมาและสร้างเส้นทาง

$filepath = 'C:\sites.csv'
$sites = รับเว็บไซต์

foreach($site ใน $sites) {
    if($site.physicalPath -match '^%(.+)%(.+)$'){
        $sitedir = เส้นทางเข้าร่วม (รับเนื้อหา "env:$($matches.1)") $matches.2
        Get-ChildItem -LiteralPath $sitedir
    }
}

หากคุณยืนยันว่านี่แสดงรายการไฟล์สำหรับแต่ละไซต์ได้อย่างถูกต้อง ดูเหมือนว่าคุณได้ทราบส่วนการวัดแล้ว

คำแนะนำอื่น ๆ อีกสองสามข้อ ก่อนอื่นฉันขอแนะนำ ส่งออก Csv แทน ไฟล์ออก.

ต่อไป แทนที่จะเปิดไฟล์แล้วต่อท้ายซ้ำแล้วซ้ำเล่า (ช้า) คุณสามารถรวบรวมผลลัพธ์ทั้งหมดแล้วเขียนได้

$results = foreach($site ใน $sitelist){
    ...รหัส...
}

ผลลัพธ์ $ | ไฟล์นอกไฟล์ $filepath

หรือคุณสามารถใช้ สำหรับแต่ละวัตถุ และใช้ประโยชน์จากท่อ

$sitelist | สำหรับแต่ละวัตถุ {
    ...รหัส...
} | ไฟล์นอกไฟล์ $filepath

ประโยชน์ด้าน สำหรับแต่ละวัตถุ คือ -OutVariable พารามิเตอร์ที่ให้คุณจับเอาต์พุตในตัวแปร (ซึ่งเป็นประเภท รายการอาร์เรย์) และดูผลลัพธ์ (หรือไพพ์ไปยังคำสั่งเพิ่มเติม)

เมื่อพิจารณาจากคำแนะนำของฉัน ฉันจะลองดู

$filepath = 'C:\sites.csv'
$sites = รับเว็บไซต์

$ไซต์ | สำหรับแต่ละวัตถุ {

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

    $path = if($_.physicalPath -match '^%(.+)%(.+)$'){
        เส้นทางเข้าร่วม (รับเนื้อหา "env:$($matches.1)") $matches.2
    }
    อื่น{
        $_.เส้นทางกายภาพ
    }

    $size = (เส้นทาง Get-ChildItem -Recurse | วัดวัตถุ -ความยาวคุณสมบัติ -ผลรวม -ErrorAction Stop)ผลรวม / 1MB

    [PSCustomObject]@{
        ชื่อ = $_.name
        เส้นทางเต็ม = เส้นทาง $
        ไอพี = $ไอพี
        พอร์ต = $พอร์ต
        HostHeader = $โฮสต์เฮดเดอร์
        SizeMB = ขนาด $
   }
} -OutVariable ผลลัพธ์

ผลลัพธ์ $ | ส่งออก Csv $filepath -NoTypeInformation
cn flag
ขอบคุณ แต่ขนาดไฟล์ที่ใช้ข้างต้นไม่ผ่าน มันดึงค่าไม่ได้?
Doug Maurer avatar
cn flag
ฉันอัปเดตโพสต์ของฉัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา