2015-09-04 2 views
1

Я пытаюсь получить структуру папок и размер каждой папки на пути удаленного компьютера. Я могу получить структуру папок, но размер папки возвращает стандартный номер 901.00 KB независимо от любого пути к папке, который я указываю. Я вижу, что скрипт способен правильно установить путь к удаленной папке, но не размер файла/папки.Получить размер папки на удаленном сервере с помощью Powershell

Вот код, который я придумал до сих пор.

param(
    [Parameter(ValueFromPipeline=$True, Mandatory=$True)] 
    [System.String] $ComputerName, 
    [Parameter(ValueFromPipeline=$True, Mandatory=$True, ValueFromPipelineByPropertyName=$true)] 
    [ValidateNotNullOrEmpty()] 
    [System.String] $Path 
) 

function Get-FolderSize ($_ = (get-item .)) { 
Process { 
$RemoteServer = @($ComputerName) 
ForEach($Computer in $ComputerName) { 
$ErrorActionPreference = "SilentlyContinue" 
$length = Invoke-Command -ComputerName $ComputerName { (Get-ChildItem $_.fullname -recurse | Measure-Object -property length -sum).sum 
} -ArgumentList $Path 
$obj = New-Object PSObject 
$obj | Add-Member NoteProperty Folder ($_.FullName) 
$obj | Add-Member NoteProperty Length ($length) 
Write-Output $obj 

    } 
} 
} 

Function Class-Size($size) 
{ 
IF($size -ge 1GB) 
{ 
    "{0:n2}" -f ($size/1GB) + " GB" 
} 
ELSEIF($size -ge 1MB) 
{ 
    "{0:n2}" -f ($size/1MB) + " MB" 
} 
ELSE 
{ 
    "{0:n2}" -f ($size/1KB) + " KB" 
} 
} 

Get-ChildItem $Path | Get-FolderSize | Sort-Object -Property Length -Descending | Select-Object -Property Folder, Length | 
Format-Table -Property Folder, @{ Label="Size of Folder" ; Expression = {Class-Size($_.Length)} } 

enter image description here

Спасибо заранее !!

ответ

3
  1. ИмяКомпьютер Параметр является [System.String] он должен быть массивом
  2. Вы назвали Invoke-Command с $ ComputerName, вы должны вызвать только один компьютер в цикле Еогеаспа -ComputerName $Computer
  3. Также вы звоните $_.FullName, что тоже неправильно
  4. Размер класса на самом деле не нужен, вы можете использовать форматирование непосредственно из команды invoke, но это зависит от вас.
  5. и многие другие, проверить обновление скрипта

    Param(
    [Parameter(ValueFromPipeline=$True, Mandatory=$True)] 
    [Array] $Computers, 
    [Parameter(ValueFromPipeline=$True, Mandatory=$True, ValueFromPipelineByPropertyName=$true)] 
    [ValidateNotNullOrEmpty()] 
    [System.String] $Path 
    ) 
    
    Function Class-Size($size) 
    { 
    IF($size -ge 1GB) 
    { 
    "{0:n2}" -f ($size/1GB) + " GB" 
    } 
    ELSEIF($size -ge 1MB) 
    { 
    "{0:n2}" -f ($size/1MB) + " MB" 
    } 
    ELSE 
    { 
    "{0:n2}" -f ($size/1KB) + " KB" 
    } 
    } 
    
    function Get-FolderSize 
    { 
    Param(
    $Path, [Array]$Computers 
    ) 
    $Array = @() 
    Foreach($Computer in $Computers) 
        { 
        $ErrorActionPreference = "SilentlyContinue" 
    
    $Length = Invoke-Command -ComputerName $Computer -ScriptBlock { 
    (Get-ChildItem $args[0] -Recurse | Measure-Object -Property Length -Sum).Sum 
    
    } -ArgumentList $Path 
    
    $Result = "" | Select Computer,Folder,Length 
    $Result.Computer = $Computer 
    $Result.Folder = $Path 
    $Result.Length = Class-Size $length 
    $array += $Result 
    
    } 
    
    return $array 
    } 
    
    Get-FolderSize -Computers $Computers -Path $Path 
    

Чтобы запустить его:

.\Get-Size.ps1 -Computers Computer1,Computer2 -Path c:\windows\system32 

Computer  Folder    Length 
--------  ------    ------ 
Computer1 c:\windows\system32 2.96 GB 
Computer2 c:\windows\system32 3.43 GB 
+0

Perfect !! Спасибо. Однако, как я могу изменить, чтобы возвращать размер каждого файла в указанном мной пути к папке? Например, если я передаю путь только как «C: \», как я могу получить список папок внутри C: \ и их размер? – kay5

+0

вы приветствуете, модификация, которую вы запрашиваете, требует больше кода, а затем несколько строк, а SO - не служба написания кода. Сначала вы должны попробовать сделать это самостоятельно, если у вас есть проблема, которую мы здесь, чтобы помочь. – Avshalom

+0

Спасибо, Авшалом, я смог получить скрипт в соответствии с моими требованиями. Но ваш вклад очень помог мне в завершении этого. Отмечен ваш ответ. – kay5

Смежные вопросы