Подсказка: попробуйте напечатать "%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"
}