Пути в журналах событий с пробелами

Я использую Write-EventLogдля регистрации некоторые файлы не найдены ошибки, где текст ошибки включает путь. И он отлично работает, кроме автоматического создания ссылок, похоже, застрял в 90-х. Таким образом, любой путь, который имеет пробел, нарушается, когда вы смотрите на него в средстве просмотра событий. Есть ли способ заставить создание ссылок работать с современными путями? Или даже заставить конкретное событие не создавать ссылки автоматически? Или мне нужно просто не включать пути?
FWIW я должен иметь дело с PS2.0, а также позже.

EDIT: вот немного заглушка кода, который я только что проверил показывает это поведение в Windows 7/PS2.0

$eventParameters = @{
    logName = 'Application'
    source = 'Test'
    entryType = 'Error'
    eventID = 1
    message = "This is broken C:Folder Name"
}

New-EventLog –logName:'Application' –source:'Test'
Write-EventLog @eventParameters

И они тоже сломаны

message = 'This is broken "C:Folder Name"'
message = 'This is broken ServerFolder Name'

Но это «работает», в том, что не создается связь, поэтому пространство не может ее разорвать.

message = 'This is not broken C:Folder Name'

То есть проблема только в том, что Средство просмотра событий не может справиться с UNC-путями?

1 ответ

  1. Заменить все spaceна %20

    Префикс local file path with file:///(если вы используете только file://гиперссылку будет охватывать весь текст, но Просмотр событий не будет правильно вызывать его)

    "This is working file:///C:\Temp\file%20with%20space.txt"
    

    Заменить UNC путь начать \с file://

    "This also works file://MACHINE\SHARE\file%20with%20space.txt"
    

    Вы можете достигнуть результата с одиночной линией c#

    new Uri(Path.GetFullPath(local_or_unc_path)).AbsoluteUri
    

    Или powershell

    (New-Object System.Uri ([System.IO.Path]::GetFullPath($local_or_unc_path))).AbsoluteUri