为 Powershell 脚本找到正确的文件路径
Finding The Correct File Path For a Powershell Script
所以我一直在家里研究这个脚本
Copy-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx" "C:\CommFiles\LogFile_$(get-date -uformat %d-%m-%Y-%H.%M.%S).evtx"
if(-not $?) {
Write-Warning "Copy Failed"
} else {
Remove-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx"
}
我知道它可以工作,因为我在家里使用它,它的文件路径与我在办公室使用的相同,但我不断收到此警告
Copy-Item : Could not find a part of the path 'C:\windows\System32\Winevt\Logs\Security.evtx'.
At line:1 char:1
+ Copy-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx" "C:\Co ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException
+ FullyQualifiedErrorId :
System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand
我怀疑我不在正确的目录中,但由于我对 powershell 的了解有限,我不确定适合我的情况的是什么。我正在使用此脚本将我的事件查看器日志复制到一个新的文件路径以进行组织
可以通过以下步骤找到文件路径:
- 以管理员或有权查看安全日志的用户身份打开事件查看器。
- 右键单击左侧的安全日志对象并打开“属性”。
或者您可以通过检查注册表获取 powershell 的完整路径 - 请注意,这还需要 运行 powershell 作为管理员用户:
PS C:\> (Get-ItemProperty HKLM:\system\CurrentControlSet\Services\EventLog\Security\).file
C:\WINDOWS\System32\winevt\Logs\Security.evtx
由于您的错误明确指出 DirectoryNotFound
,请尝试查找无法打开的目录:
gci C:\
gci C:\windows\
gci C:\windows\System32\
gci C:\windows\System32\Winevt\
gci C:\windows\System32\Winevt\Logs\
并调查其权限:
(get-acl C:\Windows\System32\winevt\).Access | select IdentityReference,FileSystemRights
IdentityReference FileSystemRights
----------------- ----------------
NT AUTHORITY\Authenticated Users Read, Synchronize
NT AUTHORITY\SYSTEM FullControl
BUILTIN\Administrators FullControl
NT SERVICE\EventLog DeleteSubdirectoriesAndFiles, Write, ReadAndExecute, Synchronize
如果那里一切正常,请考虑在另一台 PC 上尝试同样的事情?我遇到过 filesystem/harddrive 个问题,但不太可能
所以我一直在家里研究这个脚本
Copy-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx" "C:\CommFiles\LogFile_$(get-date -uformat %d-%m-%Y-%H.%M.%S).evtx"
if(-not $?) {
Write-Warning "Copy Failed"
} else {
Remove-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx"
}
我知道它可以工作,因为我在家里使用它,它的文件路径与我在办公室使用的相同,但我不断收到此警告
Copy-Item : Could not find a part of the path 'C:\windows\System32\Winevt\Logs\Security.evtx'.
At line:1 char:1
+ Copy-Item "$env:SystemRoot\System32\Winevt\Logs\Security.evtx" "C:\Co ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException
+ FullyQualifiedErrorId :
System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand
我怀疑我不在正确的目录中,但由于我对 powershell 的了解有限,我不确定适合我的情况的是什么。我正在使用此脚本将我的事件查看器日志复制到一个新的文件路径以进行组织
可以通过以下步骤找到文件路径:
- 以管理员或有权查看安全日志的用户身份打开事件查看器。
- 右键单击左侧的安全日志对象并打开“属性”。
或者您可以通过检查注册表获取 powershell 的完整路径 - 请注意,这还需要 运行 powershell 作为管理员用户:
PS C:\> (Get-ItemProperty HKLM:\system\CurrentControlSet\Services\EventLog\Security\).file
C:\WINDOWS\System32\winevt\Logs\Security.evtx
由于您的错误明确指出 DirectoryNotFound
,请尝试查找无法打开的目录:
gci C:\
gci C:\windows\
gci C:\windows\System32\
gci C:\windows\System32\Winevt\
gci C:\windows\System32\Winevt\Logs\
并调查其权限:
(get-acl C:\Windows\System32\winevt\).Access | select IdentityReference,FileSystemRights
IdentityReference FileSystemRights
----------------- ----------------
NT AUTHORITY\Authenticated Users Read, Synchronize
NT AUTHORITY\SYSTEM FullControl
BUILTIN\Administrators FullControl
NT SERVICE\EventLog DeleteSubdirectoriesAndFiles, Write, ReadAndExecute, Synchronize
如果那里一切正常,请考虑在另一台 PC 上尝试同样的事情?我遇到过 filesystem/harddrive 个问题,但不太可能