【问题标题】:PowerShell log file file-sytem rightsPowerShell 日志文件文件系统权限
【发布时间】:2019-07-17 13:00:20
【问题描述】:

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

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

有人知道设置(和/或撤销)什么权限以及如何在 PowerShell 中实现这一点吗?

【问题讨论】:

  • 记录到事件日志。这就是它的用途。
  • 如果 EventLog 不是一个选项,那么我建议创建一个服务器共享来放置集中式日志文件。确保“经过身份验证的用户”有权访问此共享并对文件本身具有修改权限。
  • 数据库比共享文件夹中的文件更好,因为后者不能很好地处理并发。

标签: powershell file logging permissions rights


【解决方案1】:

作为 Ansgar Wiecher cmets,您可能应该考虑改用事件日志服务。

使用事件日志,您只需要在脚本第一次运行时提升权限,以便创建日志并注册事件源,之后任何人都可以写入:

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
}

【讨论】:

  • 我在某些情况下使用事件日志,但正如您所提到的,您需要提升权限一次,这并不总是需要的。有时,脚本在共享的不同机器上使用,因此日志会分布在不同的机器上。
  • @Leo.ps1 你可以通过使用已经存在的事件源(如EventSystemWSH)来回避这个问题。不过,这并不是真正推荐的。
猜你喜欢
  • 2014-08-28
  • 2023-03-16
  • 1970-01-01
  • 2014-04-22
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多