Невозможно обновить свойство в PSCustomObject, так как свойство не может быть найдено

Мне немного не хватает базовых знаний, и я совершенно не понимаю, в чем заключается проблема, поэтому я действительно хотел бы прибить мое понимание. Что действительно расстраивает, так это то, что он должен быть очень простым (вероятно, есть), и у меня есть этот точный синтаксис / функциональность, прекрасно работающий в том же сценарии в другом месте... Я думаю, проблема в том, что я могу запутать / смешать хеш-таблицы, объекты и массивы? (Не так просто, как PHP...)

Я просто пытаюсь обновить значение свойства заметки PSObject, используя $Config.Bookmarks.EventLog = $CollectionTime, Я также пытался использовать $Config.Bookmarks | Add-member... без удачи

Я получаю ошибку:

PS C:\Windows\system32> $Config.Bookmarks.EventLog = $CollectionTime
The property 'EventLog' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:1
+ $Config.Bookmarks.EventLog = $CollectionTime
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

Тем не менее я вижу, что EventLog находится в объекте $Config:

PS C:\Windows\system32> $Config |%{$_|gm -m noteproperty}

   TypeName: System.Management.Automation.PSCustomObject

Name           MemberType   Definition                                                                                                                                                                                                                           
----           ----------   ----------                                                                                                                                                                                                                           
Authentication NoteProperty System.Management.Automation.PSCustomObject Authentication=@{token=ey.....
Bookmarks      NoteProperty System.Management.Automation.PSCustomObject Bookmarks=@{EventLog=25 January 2019 11:54:07} 

PS C:\Windows\system32> $Config.Bookmarks

EventLog                
--------                
25 January 2019 11:54:07

PS C:\Windows\system32> $Config.Bookmarks.EventLog
25 January 2019 11:54:07

Код:

$Config = Get-Content -Path "$ProgramDataPath\config.json" -Raw -Force | ConvertFrom-Json
if (!$Config.Bookmarks) { 
    # No timestamp found for last event log upload, making one up to get the last 14 days of logs.
    $Config += @{ "Bookmarks" = @{"EventLog"=([string](get-date).AddDays(-14).DateTime)}}
}
if(!$Config.Bookmarks.EventLog){
    $Config.Bookmarks = @{"EventLog"=((get-date).AddDays(-14).DateTime)}
}
# Keep date as string so it stays pretty in JSON
$CollectionTime = [string](get-date).DateTime
$LogData = Get-WinEvent -LogName 'System', 'Application', 'Setup' -ErrorAction SilentlyContinue | Select-Object ContainerLog, Message, Id, RecordId, Level, ProviderName, ProviderId, @{label='TimeCreated';expression={$_.TimeCreated.ToString("d MMMM yyyy HH:mm:ss")}}  | Where-Object {$_.TimeCreated -ge $Config.Bookmarks.EventLog} | ConvertTo-JSON

#This line isn't working, says object cannot be found
$Config.Bookmarks.EventLog = $CollectionTime
$Config | ConvertTo-Json -Depth 5 | Set-Content -Path "$ProgramDataPath\config.json" -Force

0 ответов

Другие вопросы по тегам