我编写了一个为脚本编写日志文件的功能。第一次使用该功能时,它将在目录和脚本名称中写入一个日志文件。以后每次运行时,日志消息都将附加到该文件。
到目前为止,太好了。千方百计,其他人现在开始使用我的脚本!脚本主要由具有服务器本地管理员权限的管理员使用。但是它们在写入日志文件时都会出错。据我了解,当您访问具有“管理员”组提供的权限的文件时,您必须处于提升特权模式。但是我不要我手动尝试将修改分配给“用户”组,但随后“管理员”似乎优先。
任何人都知道在PowerShell中设置(和/或撤销)什么权限以及如何实现此权限吗?
答案 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
}