Файл журнала PowerShell с правами доступа к файлу системы - PullRequest
0 голосов
/ 23 февраля 2019

Я написал функцию, которая записывает файлы журнала для моих сценариев.При первом использовании функции она записывает файл журнала в каталог и имя скрипта.При каждом последующем запуске сообщения журнала прикрепляются к файлу.

Пока все хорошо.Несмотря ни на что, другие люди начинают использовать мои сценарии сейчас!Сценарии в основном используются администраторами с правами локального администратора на серверах.Но все они получают ошибки при записи в файл журнала.Насколько я понимаю, когда вы получаете доступ к файлам с правами, предоставленными группой «Администраторы», вы должны находиться в режиме повышенных привилегий.Но я этого не хочу.Я вручную попытался назначить изменение для группы «Пользователи», но тогда «Администраторы», кажется, имеют преимущество.

Кто-нибудь знает, какие права устанавливать (и / или отзывать) и как этого добиться в PowerShell

1 Ответ

0 голосов
/ 23 февраля 2019

Как комментирует Ансгар Вихер, вам, вероятно, стоит заняться использованием службы журнала событий.

Для журналов событий вам нужны повышенные привилегии только при первом запуске одного из сценариев, чтобы создать журнал и зарегистрировать источник события, после чего любой может написать в него:

function Write-MyLog {
  param(
    [Parameter(Mandatory = $true)]
    [string]$Message,

    [Parameter(Mandatory = $true)]
    [ValidateRange(1,65535)]
    [int]$EventId,

    [Parameter(Mandatory = $false)]
    [System.Diagnostics.EventLogEntryType]$EntryType = 'Information'
  )

  # Prepend PID and script path to message
  $PSBoundParameters['Message'] = '[{0}: {1}]{2}{3}' -f $PID,$MyInvocation.ScriptName,[Environment]::NewLine,$Message

  # Set event log target
  $PSBoundParameters['LogName'] = $logName   = 'LeosEvents'
  $PSBoundParameters['Source']  = $logSource = 'LeosScripts'

  if (-not (Get-WinEvent -ListLog $logName -ErrorAction SilentlyContinue)) {
    # Create event log and source if it doesn't exist already 
    # This is the only step that requires elevation, can be created via GPO if desired
    New-EventLog -LogName $logName -Source $logSource
  }

  # Write event log entry
  Write-EventLog @PSBoundParameters
}
...