需要Powershell脚本帮助

时间:2015-06-04 15:26:22

标签: powershell

我将文件的内容传递给Select-Object并为每个名称ComputerNameFileExists创建两个属性,其中后一个值是{{的结果1}}

Test-Path

如果每个服务器上都存在该文件夹,我想返回该文件夹的大小。你会怎么做?

尝试添加

Get-Content c:\Users\Admin\Documents\Scripts\Serverlist.txt | `
   Select-Object @{Name='ComputerName';Expression={$_}},@{Name='FolderExist';Expression={ Test-Path "\\$_\c$\Data\Repository"}},
@{Name='Size';Expression={$_.Sum}}

到我的@{Name='Size';Expression={$_.Sum}} ,但不会返回任何值

2 个答案:

答案 0 :(得分:0)

由于至少有一个计算属性取决于另一个,您必须至少执行2个Select-Object语句,但我可能会使用ForEach-ObjectNew-Object代替:

Get-Content c:\Users\Admin\Documents\Scripts\Serverlist.txt | ForEach-Object {
  New-Object psobject -Property @{
    'ComputerName' = $_
    'FileExists' = ($FileExists = Test-Path ($FilePath = "\\$_\c$\Data\repository"))
    'Size' = if($FileExists){ (Get-Item $FilePath).Length } else { $null }
  }
}
如果(Get-Item $FilePath).Length是一个目录,

C:\Data\repository不会让你走得太远,但你可以在if块中替换你自己的语句

为了我未来的同事,我可能会避免像你的例子那样做一个单行,并写下这样的多个语句:

Get-Content c:\Users\Admin\Documents\Scripts\Serverlist.txt | ForEach-Object {

  $ComputerName = $_

  $FilePath = "\\$ComputerName\c$\Data\repository"
  $FileExists = Test-Path $FilePath

  if($FileExists){
    $Size = Get-Item $FilePath | Select-Object -ExpandProperty Length
  } else {
    $Size = $null
  }

  New-Object psobject -Property @{
    'ComputerName' = $ComputerName
    'FileExists'   = $FileExists
    'Size'         = $Size
  }
}

答案 1 :(得分:0)

我认为这就是你要找的东西

  Get-Content c:\Users\Admin\Documents\Scripts\Serverlist.txt | Select-Object @{Name='ComputerName';Expression={$_}},@{Name='FolderExist';Expression={ Test-Path "\\$_\c$\Data\Repository"}}, @{Name='Size';Expression={ "{0:n2}" -f ((gci -path "\\$_\c$\Data\Repository" -recurse | measure-object -property length -sum).sum /1mb) + " mb" }}