【问题标题】:Adding "non-standard" value to iterated ArrayList向迭代的 ArrayList 添加“非标准”值
【发布时间】:2018-05-22 07:39:17
【问题描述】:

我目前正在编写一个脚本来从远程服务器列表中检索注册表项并导出为 CSV。

我得到了这个,它可以工作(我稍后会清理错误处理),但输出不是我想要产生的,因为它不能很好地导出到 CSV。

$DataList = New-Object System.Collections.ArrayList
foreach ($Target in $ImportData) {
    Write-Host "Scanning" $Target.ComputerName ":" -NoNewline
    $RegData = Get-RegValue -ComputerName $($Target.ComputerName) -Hive $RegHive -Key $KeyName
    if (!$RegData) {
        Write-Host "No data found for" $Target.ComputerName
        [void]$DataList.Add([PSCustomObject]@{
            ComputerName = $Target.ComputerName
            Hive ="No Data"
            Key = ""
            Value = ""
            Data = ""
            Type = ""
        })
    } else {
        $DataList.Add($RegData)
        Write-Host "Done"
    }
}
$DataList

输出如下:

ComputerName Hive 键值数据 ------------ ---- --- ----- --- SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... AssetNumber 987 SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... BuildDate 04/ SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... iLODefaultPwd NA SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... OwnerContactDetails S G SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... OwnerName MS SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... OwnerPhone 643 SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... PatchAutoManual Aut SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... ServerRole Man SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... ServerType Vir SERVER1 LocalMachine SOFTWARE\CUSTOM\Serv... WarrantyExpires NA 价值 : 钥匙 : 数据 : 蜂巢:未找到 类型 : 计算机名称:SERVER2 SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... buildDate 15/ SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... OperatingSystem Win SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... OwnerContactDetails M/S SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... OwnerName GM SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... OwnerPhone 131 SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... PatchAutoManual - SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... ServerRole SNB SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... ServerType Phy SERVER3 LocalMachine SOFTWARE\CUSTOM\Serv... WarrantyExpires -

我怀疑这两种对象类型是不同的,但我编写的脚本不多,并且对于如何让我的自定义条目与自动检索的条目相适应有一个完整的心理障碍。

【问题讨论】:

  • Get-RegValue 是做什么的?它不是标准的 cmdlet。
  • @arco444 大概来自RemoteRegistry 模块。

标签: powershell


【解决方案1】:

Get-RegValue(假设您使用来自RemoteRegistry module 的cmdlet)返回RegistryValue 对象,而PSCustomObject 类型加速器显然会生成PSCustomObject 对象。例如,您可以使用 Get-Member cmdlet 检查类型。

您可以通过Select-Object 传递列表来避免此问题。我也不会首先使用ArrayList。只需将循环输出收集到一个变量中即可。

$DataList = foreach ($Target in $ImportData) {
    $RegData = Get-RegValue ...
    if ($RegData) {
        $RegData
    } else {
        [PSCustomObject]@{
            ComputerName = $Target.ComputerName
            Hive         = 'No Data'
            Key          = ''
            Value        = ''
            Data         = ''
            Type         = ''
        }
    }
}

$DataList |
    Select-Object ComputerName, Hive, Key, Value, Data, Type |
    Export-Csv ...

Select-Object 步骤将所有输入对象转换为具有选定属性的自定义对象。

【讨论】:

  • 非常感谢 - 我的失败之一 - 我试图让事情变得不必要地复杂化!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2017-06-12
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多