Попытка удалить файл с помощью скрипта Powershell, запущенного службой, но проблемы с UAC
У меня проблемы со скриптом, который удалит файл на C-Drive сервера. скрипт выглядит так:
param(
[Parameter(Mandatory=$true)][string]$hostname
)
$StrFileName = "C:\Program Files\NSClient++\nsclient.log"
$LogLocal="c:\Nagios\naf_delete_nscp_log_file.log"
$Date = Get-Date -Format "yyyy-MM-dd hh:mm:ss"
"$date : NSClient logfile deletion requested on $hostname" | Out-File -filepath $LogLocal -Append
If (Test-Path "$strFileName"){
Remove-Item $strFileName -Force
$Date = Get-Date -Format "yyyy-MM-dd hh:mm:ss"
"$date : NSClient logfile deleted on $hostname" | Out-File -filepath $LogLocal -Append
}
Сценарий запускается быстрым действием Nagios, которое будет использовать nrpe для передачи хоста в качестве параметра и запуска его сервисом nscp, работающим как локальная система. Он отлично работает на серверах, на которых не включен UAC, но я не могу заставить его работать на серверах с UAC. Я пробовал множество вариантов, но ни один из них не работает. Любые советы или рекомендации, чтобы заставить это работать на серверах с включенным UAC высоко ценится.
Благодарю.
Willem
1 ответ
В вашем файле nsclient.ini я думаю, что вам просто нужно настроить либо оболочку для PowerShell, либо определение самого сценария с помощью -Verb RunAs
, В оболочке, например, по умолчанию у вас есть это:
ps1 = cmd /c echo scripts\\%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
Который вы могли бы обновить с этим
ps1 = cmd /c echo scripts\\%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -Verb RunAs -
Обновление из комментариев
Будет ли это определение работать вместо использования оболочки
naf_delete_nscp_log_file=powershell.exe -Verb RunAs -file scripts\naf_delete_nscp_log_file.ps1 "$ARG1$"