繁体   English   中英

使用存储的凭据从批处理文件和传递参数启动第二个Powershell脚本

[英]Launching a second Powershell script using stored credentials, from batch file & passing parameters

遵循我在此站点上找到的其他一些建议之后,我设法获得了大部分到达自己想要去的地方的方法,但是在沿链传递其他变量时,我陷入了困境。

我需要以管理员身份运行特定的脚本,因此我创建了一些不同的PS1脚本来解决该问题。 我创建了一个安全密码并将其保存到文件中。

我有一个批处理文件,现在其中有以下调用:

powershell -ExecutionPolicy RemoteSigned -File "C:\Scripts\ScriptLauncher.ps1" "<DOMAIN>\<username>" "C:\Scripts\pwd.txt" "C:\Scripts\Test.ps1" %1 %2

这会传入用户名,密码文件路径,要运行的脚本以及其他两个变量。 * DOMAIN和USERNAME在批处理文件中提供。

在ScriptLauncher内部,我收集了以下参数:

 param(
    $username,
    $passwordPath,
    $scriptToRun,
    $p1,
    $p2,
    $p3,
    $p4
 )

然后,我创建要使用的凭证:

$cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,ConvertTo-SecureString (Get-Content -Literalpath $passwordPath))

现在这是我遇到的问题,在使用下面的Keith的建议之后,我可以使它运行,同时使用字符串作为我希望运行的脚本的路径。 但是,我试图使该应用程序能够运行多个脚本,因此我希望能够将路径传递给我拥有的任何PS脚本,然后运行该脚本。

因此,请记住以下代码:

$blockString = '{ param($p1,$p2,$p3,$p4) &"'+$scriptToRun+'" @($p1,$p2,$p3,$p4)}'
$scriptBlock = [scriptblock]::Create($blockString)
Invoke-Command -ScriptBlock $scriptBlock -ArgumentList @($p1,$p2,$p3,$p4) -ComputerName localhost -Credential $cred

如果我仅使用字符串来运行上面的Invoke命令,它就可以正常工作。 但是使用替代操作,它可以运行,但是什么也没有发生。 有任何想法吗?

好的,所以我终于解决了。 感谢Keith向我指出正确的方向。

因此,为了按照我的意愿运行脚本,我需要以下Invoke-Command:

Invoke-Command -ScriptBlock { param($script,$p1,$p2,$p3,$p4) &$script @($p1,$p2,$p3,$p4)} -ArgumentList @($scriptToRun,$p1,$p2,$p3,$p4) -ComputerName localhost -Credential $cred

很高兴现在一切正常!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM