我有一些使用 PowerShell 的经验,当我有问题时,通常谷歌或类似的搜索论坛会产生答案 - 但这次不是。
我正在尝试在远程服务器上的目录中收集 .log 文件的数量,然后我想将位置(驱动器号和文件夹路径)和计数存储在数组列表中以备后用。到目前为止,一切都按我的预期工作,但我在将 PSCustomObjects 添加到数组列表时遇到了麻烦。我不确定是因为我在远程服务器上执行还是其他原因导致了问题。这是我的代码:
$server = Read-Host -Prompt 'Please enter the server name'
[System.Collections.ArrayList]$returnObj = @()
Invoke-Command -ComputerName $server {
$drives = Get-PSDrive -PSProvider FileSystem |
Where-Object {$_.Description -like "ExVol*"} |
Select-Object Root
foreach ($d in $drives) {
Set-Location -Path $d.Root
$folders = Get-ChildItem -Path $d.Root |
Where-Object {$_.Name -like "*.log"} |
Select-Object Name
foreach ($f in $folders) {
$count = (Get-ChildItem -Path $f.Name).Count
$obj = [PSCustomObject]@{
LogFolder = $d.Root.Trim() + $f.Name
LogFileCount = $count
}
Write-Host $obj
$returnObj.Add($obj | Select-Object DatabaseFolder,LogFileCount)
}
}
}
$returnObj
在这种格式中,我在行上得到一个语法错误
$returnObj.Add($obj | Select-Object DatabaseFolder,LogFileCount)
如果我将上面的行更改为$returnObj.Add($obj)
避免语法错误,但我得到一个错误,说我不能在空值表达式上调用方法。
我尝试在内部创建 ArrayListInvoke-Command
并且尝试使用New-Object
而不是PSCustomObject
无济于事。