2

PowerShellプロセスがあり、Start-ProcessまたはSystem.Diagnostic.Processを呼び出して、別のユーザーとして子プロセスを開始します(他のユーザーの環境変数を取得するため)

redirectoutputを試してみましたが、機能しません。以下はコードです

    $process = New-Object System.Diagnostics.Process
    $startinfo = New-Object "System.Diagnostics.ProcessStartInfo"

    $startinfo.FileName = "powershell"
    $startinfo.UserName = $user
    $startinfo.Password = $pass
    $startinfo.Arguments = $arguments        
    $startinfo.UseShellExecute = $False
    $startinfo.RedirectStandardInput = $True

    $process.StartInfo = $startinfo
    $process.Start() | Out-Null
    $process.WaitForExist()
    $output = $process.StandardOutput.ReadToEnd()        

また、このプロセスを最小化または非表示として実行しようとしていますが、機能しません。

どんな助けでも本当に感謝されますよろしくAjax

4

1 に答える 1

4

これがあなたが望むことをする関数です:

function Invoke-PSCommandAsUser
{
    param(
        [System.Management.Automation.PSCredential]$cred, 
        [System.String]$command
    );

    $psi = New-Object System.Diagnostics.ProcessStartInfo

    $psi.RedirectStandardError = $True
    $psi.RedirectStandardOutput = $True

    $psi.UseShellExecute = $False
    $psi.UserName = $cred.UserName
    $psi.Password = $cred.Password

    $psi.FileName = (Get-Command Powershell).Definition
    $psi.Arguments = "-Command $command"

    $p = [Diagnostics.Process]::Start($psi)
    $p.WaitForExit()

    Write-Output $p.StandardOutput.ReadToEnd()
}

MSDNによると、Process.Startをメカニズムとして使用すると、これを非表示にして実行することはできません。

StartInfoインスタンスのUserNameプロパティとPasswordプロパティが設定されている場合、アンマネージのCreateProcessWithLogonW関数が呼び出され、CreateNoWindowプロパティ値がtrueまたはWindowStyleプロパティ値がHiddenの場合でも、新しいウィンドウでプロセスが開始されます。-ソース

于 2012-07-05T04:12:24.963 に答える