У нас есть программа, которая контролирует доступ к двери в наших помещениях. Всякий раз, когда человек открывает дверь со своим тегом, событие регистрируется в базе данных программ. Эти события можно прочитать, включив интеграцию HTTP, что позволяет просматривать их в веб-браузере localhost.
Мы хотим экспортировать просмотренные события из HTTP-URL в Splunk. Для этого я написал сценарий PowerShell, который использует Invoke-RestMethod
для извлечения данных из URL-адреса в файл на C:\Scripts
, который затем отслеживает Splunk.
Вот сценарий PowerShell, который у меня есть на данный момент:
$getRestMethodParams = @{
Uri = 'http://localhost:5004/eventexport?end_date=keep'
Method = 'Get'
Credential = $Creds
OutFile = 'C:\Scripts\SplunkOutput.xml'
}
Invoke-RestMethod @getRestMethodParams
Используемый URI будет поддерживать соединение открытым с пульсом с end_date=keep
, поэтому мы отслеживаем события в режиме реального времени. Сценарий также выведет результаты в файл 'C:\Scripts\SplunkOutput.xml'
. Пока все хорошо.
Тем не менее, код также всегда будет держать файл в открытом / использованном состоянии (из-за параметра heartbeat), что не позволяет Splunk читать из файла, пока я не завершу сценарий, что мы не хотим делать (ну, в какой-то момент нам нужно будет предотвратить слишком большой рост файла, но это будет сделано позже).
Коллега предложил мне попытаться использовать [System.IO.File]
чтобы манипулировать потоками файлов, но я только дошел до этого. Это код, который я использовал:
$file = [System.IO.File]::Open('C:\Scripts\SplunkOutput.xml')
$getRestMethodParams = @{
Uri = 'http://localhost:5004/eventexport?end_date=keep'
Method = 'Get'
Credential = $Creds
OutFile = $file
}
Invoke-RestMethod @getRestMethodParams
К сожалению, это дало мне вывод:
Cannot find an overload for "Open" and the argument count: "1".
At C:\Scripts\SplunkPoller1.ps1:12 char:1
+ $file = [System.IO.File]::Open('C:\Scripts\SplunkOutput.xml')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
, который я также пробовал (из PowerShell Closing FileStream ) :
$inFile = 'C:\Scripts\SplunkOutput.xml'
$inFS = New-Object FileStream($inFile, [FileMode]::Open)
$getRestMethodParams = @{
Uri = 'http://localhost:5004/eventexport?end_date=keep'
Method = 'Get'
Credential = $Creds
OutFile = $inFS
}
Invoke-RestMethod @getRestMethodParams
Что дало мне:
Unable to find type [FileMode].
At C:\Scripts\SplunkPoller1.ps1:11 char:40
+ $inFS = New-Object FileStream($inFile, [FileMode]::Open)
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (FileMode:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
Буду признателен за все советы о том, как подойти к этому вопросу! Спасибо.