使用不同的凭据运行ScriptBlock

Bil*_*ill 4 powershell

我有一个确定用户标识的脚本,一旦我拥有该用户标识,我想使用不同的凭据对该用户标识运行脚本块.这可能吗?谁能告诉我这方面的例子?我很感激.提前致谢.:-)

Bil*_*ill 9

我得到了它,感谢Trevor Sullivan指出我正确的方向.我最后只是将我的第二个ps1文件放入一个scriptblock,并将其作为一个作业运行,并从主脚本中传递参数,就像这样

$job = Start-Job -scriptblock {
param ($username)
some code to run against the variable that was passed in
} -Args $target -credential $Cred
Run Code Online (Sandbox Code Playgroud)

$ target是我想传递给我的scriptblock的变量.$ username是scriptblock接受的参数Thanks.

  • 正如我最近尝试的那样,值得一提的是,使用"Receive-Job $ job -Wait"等待工作完成并接收该工作的输出/错误. (2认同)

小智 5

我知道这是很久以前的答案,但我想我会为那些寻找返回数据而无需检索数据的人添加另一个选项。

我们可以创建一个帮助脚本来创建 pscredential,然后使用它来启动本地 PSSession 以在不同用户的上下文中运行脚本或脚本块。您需要从某处获取用户密码,最好是作为安全字符串输入或从 Key Vault 中检索,但例如,我们的帮助程序脚本会将其作为字符串参数。

脚本内容:

param ([string]$username,[string]$password)

$Username   = 'username@domain.com'
$Password   = ConvertTo-SecureString -String $password -AsPlainText -Force
$Credential = New-Object -Type PSCredential($Username,$Password)
$Session    = New-PSSession -Credential $Credential

Invoke-Command -Session $Session -FilePath C:\Path\to\some\script.ps1
Run Code Online (Sandbox Code Playgroud)

如果您有一个简单的代码块要运行或者您已将脚本转换为脚本块,您也可以使用-ScriptBlock代替-FilePath

希望这可以帮助某人!