Невозможно обновить свойство в 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