Элементы копирования Powershell не работают при запуске из службы С#C#

Место общения программистов C#
Ответить
Anonymous
 Элементы копирования Powershell не работают при запуске из службы С#

Сообщение Anonymous »

У меня есть служба, которая считывает из базы данных строку, являющуюся сценарием PowerShell. Фрагмент кода службы C#:

Код: Выделить всё

   psi = new ProcessStartInfo(psPath, "-executionpolicy bypass -file c:\\temp\\HeartBeatScript.ps1  -verbose");
psi.CreateNoWindow = false;
psi.UseShellExecute = true;
psi.Verb = "runas";
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(psi);
Сценарий, который запускается, выглядит следующим образом:

Код: Выделить всё

&{
Start-Transcript c:\temp\PSTranscript.txt
Set-PSDebug -Trace 2
$time = Get-Date
write-host "Starting" $time
$ServiceName = 'UsageMonitor'
$UpdateFromPath = '\\FileShare\Test Software\User\Share\*'
$CopyTo = 'C:\temp\'
$arrService = Get-Service -Name $ServiceName

Start-Sleep -seconds 60
$time = Get-Date
write-host "Stopping service" $time
while ($arrService.Status -eq ''Running'')
{
Stop-Service $ServiceName
Start-Sleep -seconds 35
$arrService.Refresh()
}
Start-Sleep -seconds 10

$time = Get-Date
write-host "Copying Files" $time
Copy-Item -force -path $UpdateFromPath -destination $CopyTo
Start-Sleep -seconds 30

$time = Get-Date
write-host "Starting Service" $time
Start-Service $ServiceName
Start-Sleep -seconds 35
$arrService.Refresh()
while ($arrService.Status -ne 'Running')
{
Start-Service $ServiceName
Start-Sleep -seconds 35
$arrService.Refresh()
}
$time = Get-Date
write-host "complete" $time
} *>c:\temp\PSScriptOut.txt
Перенаправленный вывод сценария (PSScriptOut.txt)

Код: Выделить всё

Transcript started, output file is c:\temp\PSTranscript.txt
Starting 7/1/2024 12:24:00 PM
Stopping service 7/1/2024 12:25:01 PM
Copying Files 7/1/2024 12:25:46 PM
Starting Service 7/1/2024 12:26:16 PM
complete 7/1/2024 12:26:51 PM
Вывод, сгенерированный в расшифровке (PSTransscript.txt):

Код: Выделить всё

**********************
Windows PowerShell transcript start
Start time: 20240701122400
Username: domain\SYSTEM
RunAs User: domain\SYSTEM
Configuration Name:
Machine: LD318077 (Microsoft Windows NT 10.0.22631.0)
Host Application: C:\WINDOWS\System32\WindowsPowerShell\v1.0\PowerShell.exe -executionpolicy bypass -file c:\temp\HeartBeatScript.ps1
Process ID: 60924
PSVersion: 5.1.22621.3672
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.22621.3672
BuildVersion: 10.0.22621.3672
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Starting 7/1/2024 12:24:00 PM
Stopping service 7/1/2024 12:25:01 PM
Copying Files 7/1/2024 12:25:46 PM
Starting Service 7/1/2024 12:26:16 PM
complete 7/1/2024 12:26:51 PM
PS>$global:?
True
**********************
Windows PowerShell transcript end
End time: 20240701122651
**********************
Я оставил попытки отладки в коде/скриптах.
Я вижу, что служба останавливается. Я вижу запуск службы.
Чего я не вижу, так это файлов, скопированных посередине.
Если я запускаю тот же сценарий в среде PSE, все работает. Служба останавливается. Файлы копируются. Служба запускается.
У меня есть механизм, с помощью которого я могу предоставить альтернативные учетные данные для запуска сценария PS. Но это было бы неудобно, поскольку для этого потребуется другой отдел.
Идеи, как мне заставить это работать?

Подробнее здесь: https://stackoverflow.com/questions/786 ... rp-service
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»