PowerShell日志文件文件系统权限

时间:2019-02-23 17:01:40

标签: powershell file logging permissions rights

我编写了一个为脚本编写日志文件的功能。第一次使用该功能时,它将在目录和脚本名称中写入一个日志文件。以后每次运行时,日志消息都将附加到该文件。

到目前为止,太好了。千方百计,其他人现在开始使用我的脚本!脚本主要由具有服务器本地管理员权限的管理员使用。但是它们在写入日志文件时都会出错。据我了解,当您访问具有“管理员”组提供的权限的文件时,您必须处于提升特权模式。但是我不要我手动尝试将修改分配给“用户”组,但随后“管理员”似乎优先。

任何人都知道在PowerShell中设置(和/或撤销)什么权限以及如何实现此权限吗?

1 个答案:

答案 0 :(得分:0)

正如Ansgar Wiecher所说,您可能应该考虑使用事件日志服务。

对于事件日志,仅在其中一个脚本第一次运行时才需要提升的特权,以便创建日志并注册事件源,之后任何人都可以对其进行写入:

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
}