Как это возможно, запустить скрипт-блок с разными учетными данными и runas? - PullRequest
0 голосов
/ 26 апреля 2020

Мой скрипт должен загружать учетные данные и запускать код с повышением прав. Я пытаюсь включить один скрипт-блок в другой. И запустите Start-Process с различными наборами параметров. У меня ошибка «Эта команда не может быть выполнена из-за ошибки: заглушка получила неверные данные».

$ScriptBlock = {
 Param(
     [datetime] $Start = '04/25/2020 19:52:25',
     [datetime] $End = '04/25/2020 19:52:35',
     [string] $OutputXMLPath = 'C:\DATA\Projects\EventLogsAnalyzer\DATA\ScriptBlockOutput.xml',
     [string] $logFilePath = 'C:\DATA\Projects\EventLogsAnalyzer\LOGS\EventLogsAnalyzer.log'
)                 
$ScriptBlock = {
    Param(
     [datetime] $Start = '04/25/2020 19:52:25',
     [datetime] $End = '04/25/2020 19:52:35',
     [string] $OutputXMLPath = 'C:\DATA\Projects\EventLogsAnalyzer\DATA\ScriptBlockOutput.xml'
    ) 

    $Logs  =  Get-WinEvent -ListLog *
    $Res = @()        
    Foreach($Log in $Logs) {           
        $Log.LogName
        $Filter = @{
            LogName            = $Log.LogName
            StartTime          = $Start
            EndTime            = $End
        }
        $Res += Get-WinEvent -FilterHashTable $Filter -ErrorAction SilentlyContinue
    }      
 } 

$Res = Start-Process -FilePath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PassThru -Verb "RunAs"  -ArgumentList " -NoExit -ExecutionPolicy Bypass –NoProfile -Command & { $ScriptBlock }"

$Res

}

$User = Get-VarFromAESFile $Global:GlobalKey1 $Global:APP_SCRIPT_ADMIN_Login
$Pass = Get-VarFromAESFile $Global:GlobalKey1 $Global:APP_SCRIPT_ADMIN_Pass
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList (Get-VarToString $User), $Pass

Start-Process -FilePath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PassThru -Credential $Credentials  -ArgumentList " -NoExit -ExecutionPolicy Bypass –NoProfile -Command & { $ScriptBlock }"```


1 Ответ

0 голосов
/ 27 апреля 2020

Подобное обсуждение Stackoverflow можно увидеть здесь:

Выполнение блока скриптов с помощью startprocess

Комментарий с размышлениями в Q & A

По какой причине вы не используете Invoke-Command, которая может запускать блок сценария локально или удаленно с указанными учетными данными (см. Пример 2 в его справке)?

См. также как ассоциация с вышеупомянутым:

Все о PowerShell ScriptBlock

Принятый ответ:

Здесь это то, что работает:

Start-Process $PSHOME\powershell.exe -ArgumentList "-NoExit","-Command  `"&{`$outvar1 = 4+4; `"write-output `$outvar1`"}`"" -Wait

-ArgumentList - это массив строк, интерпретируемых $ outvar, поэтому я использую `$ outvar

...