我将文件的内容传递给Select-Object并为每个名称ComputerName
和FileExists
创建两个属性,其中后一个值是{{的结果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}}
,但不会返回任何值
答案 0 :(得分:0)
由于至少有一个计算属性取决于另一个,您必须至少执行2个Select-Object
语句,但我可能会使用ForEach-Object
和New-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" }}