我正在尝试使用https://www.itdroplets.com/run-a-command-as-a-different-user-in-powershell/作为指导,为不接受-credential参数的PowerShell cmdlet创建包装函数。问题是我无法获得有关这些cmdlet的成功或失败的有意义的输出。
编辑:为了明确起见,我以其凭据存储在$ PSCreds中的用户身份启动powershell.exe,并向新的powershell进程提供了要在该用户的用户名下运行的cmdlet。上下文,并期望从父脚本中的该cmdlet获取结果。因此,Script1在UserA的权限/上下文下执行,但需要以UserB身份运行;但是,不接受-Credential标志,因此我需要调用此函数。我需要Script1中此函数的as UserB输出,以决定Script1中接下来将发生什么。
我已经阅读了很多有关重定向输出的内容,但是我不理解。我试过将.waitforexit()移到.readtoend()之后。我尝试做return $getprocessresult
。我尝试做另一个变量来分配standarderror和一个if ($errortext) {return $errortext}
之类的东西,但没有成功。
这是我函数的精简版本,不显示所有内容,而是显示(我认为是)相关部分。
Function start-PSCMDAsUser {
Param (
[String[]]$PSCMDArgs,
[System.Management.Automation.CredentialAttribute()]$PSCreds
) #Close Param declaration
$ProcessInfo = New-Object System.Diagnostics.ProcessStartInfo
$ProcessInfo.RedirectStandardError = $true
$ProcessInfo.RedirectStandardOutput = $true
$ProcessInfo.UseShellExecute = $false
$ProcessInfo.Arguments = $PSCMDArgs
$ProcessInfo.Username = $PSCreds.GetNetworkCredential().username
$ProcessInfo.FileName = "powershell.exe"
$Process = New-Object System.Diagnostics.Process
$Process.StartInfo = $ProcessInfo
$Process.Start() | Out-Null
$Process.WaitForExit()
$GetProcessResult = $Process.StandardOutput.ReadToEnd()
$GetProcessResult
} #close function start-pscmdasuser
我正在使用$PSCMDArgs = 'New-Item -Path ' + $testfile + ' -ItemType "file" -Value ' + "Tested_Share_$datetime"
作为输入
start-PSCMDAsUser -PSCreds $pscreds -PSCMDArgs $PSCMDArgs
我有另一个函数(test-myshares)在foreach ($share in $shares)
循环中调用此函数。我希望看到该函数的输出散布在父函数中,实际上,我希望test-myshares
函数能够使用该函数的输出来智能地生成输出。但是我无法获得start-pscmdasuser
函数来输出您期望的方式。实际上,我得到的是test-myshares
的所有详细输出,然后是start-pscmdasuser
函数中最后一个变量的最后一位
最终,我希望能够try {start-PSCMDAsUser -PSCreds $pscreds -PSCMDArgs $PSCMDArgs } catch {do-something}
,但是我不确定如何使.NET输出正常工作。感谢您的帮助!
编辑:假设我正在使用脚本设置FSRM文件屏幕(这只是一个示例,实际上并不是我正在做的事情;这只是为了说明目的)。我将在脚本中运行FSRM cmdlet对其进行全部配置,然后希望该脚本通过使用目标用户的凭据使用new-item写入筛选类型的新文件来测试文件屏幕。好吧,当您使用“ -itemtype文件”时,new-item cmdlet不接受-Credential,因此我需要在目标用户的上下文下运行New-Item,以避免传递-credential。我想使用这个功能。父脚本需要知道New-Item是成功还是失败(和为什么),以验证新的文件屏幕。但是,如何将输出传递回脚本?那是我的问题,希望您能提供帮助!再次感谢你!!