我有一个主菜单脚本,要求用户输入管理员凭据,并希望在主菜单调用的其他脚本中使用它们。
这是我对其他脚本的调用,该脚本可以很好地启动新脚本并运行被调用的脚本。
Start-Process PowerShell.exe -ArgumentList "-noexit", "-command &$ScriptToRun -UserCredential $UserCredential"
在被调用的脚本中,我接受这样的参数
#Accept User Credentials if sent from Main menu
param(
[parameter(ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$true,Mandatory=$false)]
[PSCredential]$UserCredential
)
但是,它不接受凭据,而是启动提示,要求在用户字段中输入带有对象名称的凭据。
当我将头撞在墙上时,任何帮助我们都将不胜感激。
答案 0 :(得分:2)
您不能像这样直接跨进程边界传递非字符串对象,新进程的输入参数总是 为裸字符串。
您可以 做的是使用$UserCredentials
来简单地启动新过程:
Start-Process PowerShell.exe -Credential $UserCredential -ArgumentList "-noexit", "-command &$ScriptToRun"
...,或者最好从调用脚本中调用Invoke-Command
而不是开始新的过程:
Invoke-Command -ScriptBlock $scriptBlockToRun -Credential $UserCredential
答案 1 :(得分:0)
使用凭证启动流程的一种简单方法是使用Jobs。
ApplicationVirtualPath
使用作业的一个优势是,您可以将输出,错误,详细信息和警告流传递回调用者,而使用“开始处理”则无法实现。
使用作业时,所有参数和返回值都是隐式序列化的,这在传递复杂对象时具有局限性,但可以很好地处理所有基本类型。