Копирование журналов средства просмотра событий и их удаление при успешном копировании с помощью PowerShell - PullRequest
0 голосов
/ 18 июня 2020

Итак, у меня возникли проблемы с использованием PowerShell, чтобы заставить этот код работать. Проблема, с которой я продолжаю сталкиваться, заключается в том, что я получаю сообщение об ошибке, указывающее, что путь к файлу не существует. может у меня есть синтаксические ошибки или что-то в этом роде? Я новичок в PowerShell, так что есть много возможностей для улучшения для меня, может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 18 июня 2020

Подсказка: попробуйте напечатать "%SystemRoot%\System32\Winevt\Logs\Security.evtx".

PS C:\Users\Neko> Write-Host "%SystemRoot%\System32\Winevt\Logs\Security.evtx"
"%SystemRoot%\System32\Winevt\Logs\Security.evtx"

Переменные среды не раскрываются в Powershell с помощью %%, как в проводнике и cmd. Переменные Powershell расширяются с помощью $, как в bash и некоторых других языках, в дополнение к этому, переменные environemnt хранятся в PowerShell на отдельном PSDrive, который является специальным диском для PowerShell. Вы можете увидеть некоторые из дисков с Get-PSDrive

PS C:\Users\Neko> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                  95.34         22.75 FileSystem    C:\                                                      Users\Kai
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

И вы можете получить переменные с диска alias: следующим образом:

PS C:\Users\Neko> echo "$alias:ac"
Add-Content

И для переменных среды, например %SystemRoot% вы бы приняли это так:

PS C:\Users\Neko> Write-Host "$env:SystemRoot\System32\Winevt\Logs\Security.evtx"
C:\Windows\System32\Winevt\Logs\Security.evtx

Вы можете просмотреть все объекты на каждом из этих дисков, выполнив следующие действия:

Get-ChildItem env:
Get-ChildItem Alias:
#etc.

, и вы можете взаимодействовать с ними так же так, как вы обычно делаете с обычными дисками.


Принимая это во внимание, ваш скрипт будет работать следующим образом:

Copy-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx" "C:\CommFiles\LogFile_$(get-date -uformat %d-%m-%Y-%H.%M.%S).txt"
if(-not $?) { 
    Write-Warning "Copy Failed" 
} else {
    Remove-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...