【问题标题】:How its possible, to run scriptblock with different credentials and runas?如何使用不同的凭据和 runas 运行 scriptblock?
【发布时间】:2020-04-26 08:00:01
【问题描述】:

我的脚本应该加载凭据和具有提升的运行代码。 我尝试将一个脚本块包含到另一个脚本块中。并使用不同的参数集运行 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 }"```


【问题讨论】:

    标签: powershell credentials runas scriptblock


    【解决方案1】:

    可以在这里看到关于 Stackoverflow 的类似讨论:

    Executing a scriptblock via startprocess

    Q&A中有思考的评论

    您不使用可以运行脚本的 Invoke-Command 的任何原因 使用指定的凭据在本地或远程阻止(参见示例 2 它的帮助)?

    也可将其视为与上述内容的关联:

    All about PowerShell ScriptBlock

    接受的答案:

    以下是有效的方法:

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

    -ArgumentList 是一个字符串数组 $outvar 被解释所以我使用 `$outvar

    【讨论】:

    • 感谢您的回答。我可以毫无问题地运行启动进程。问题是使用凭证和 runas 运行它。
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多