none
Свободное место и размер папок Program Files\Program Files (x86) и Windows RRS feed

  • Вопрос

  • Добрый день, коллеги!

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

    Наваял такой скрипт:

    cls
    $userpc = Get-ADComputer -SearchBase "OU=Workstations,OU=NSK,DC=nsk,DC=com,DC=ru"  -Filter {enabled -eq "True"} -prop *| 
    ?{$_.enabled -eq "true" -and ([DateTime]::FromFileTime($_.LastLogonTimestamp) -ge (get-date).adddays(-31))} 
    
    foreach ($computers in $userpc)
    {
       Get-WmiObject Win32_logicaldisk -ComputerName $computers.name | Format-Table DeviceID, MediaType, `
        @{Name="Size(GB)";Expression={[decimal]("{0:N0}" -f($_.size/1gb))}}, `
        @{Name="Free Space(GB)";Expression={[decimal]("{0:N0}" -f($_.freespace/1gb))}}, `
        @{Name="Free (%)";Expression={"{0,6:P0}" -f(($_.freespace/1gb) / ($_.size/1gb))}} -AutoSize     
    }

    Вопрос, что в него добавить, чтобы выполнялась ещё проверка объема папок Program Files и Windows, а так же, чтобы это все выводилось в csv?

    Заранее спасибо


    • Изменено eclegolas 23 мая 2017 г. 14:19 добавление

Ответы

  • Добрый день!

    Помог такой вариант скрипта, если кому надо:

    <#Создание функции размера папки #>
    "###################################################" >> \\nsk-serv32\ldlogon\disks\get_folder.txt
    function Get-FolderSize {
    [CmdletBinding()]
    Param (
    [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
    $Path,
    [ValidateSet("KB","MB","GB")]
    $Units = "MB"
    )
      if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
        $Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
        $Sum = $Measure.Sum / "1$Units"
        [PSCustomObject]@{
          "Path" = $Path
          "Size($Units)" = $Sum
        }
      }
    }
    
    <#Проверка места на дисках#>
    $env:COMPUTERNAME >> \\nsk-serv32\ldlogon\disks\get_folder.txt
    $disk = Get-WmiObject Win32_logicaldisk -ComputerName $env:COMPUTERNAME | Format-Table DeviceID, MediaType, `
        @{Name="Size(GB)";Expression={[decimal]("{0:N0}" -f($_.size/1gb))}}, `
        @{Name="Free Space(GB)";Expression={[decimal]("{0:N0}" -f($_.freespace/1gb))}}, `
        @{Name="Free (%)";Expression={"{0,6:P0}" -f(($_.freespace/1gb) / ($_.size/1gb))}} -AutoSize 
    $disk >> \\nsk-serv32\ldlogon\disks\get_folder.txt
    
    <#Проверка объема папок#>
    Get-FolderSize 'C:\Program Files' -Units GB >> \\nsk-serv32\ldlogon\disks\get_folder.txt
    Get-FolderSize 'C:\Windows' -Units GB >> \\nsk-serv32\ldlogon\disks\get_folder.txt

    • Помечено в качестве ответа eclegolas 24 мая 2017 г. 11:16