根据我在这个网站上找到的其他一些建议,我已经设法大部分时间到达我想要的位置,但是当涉及到沿链传递额外变量时我被卡住了。
我需要以管理员身份运行特定脚本,因此我创建了几个不同的 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))
现在这是我遇到问题的地方,我可以在使用下面基思的建议后运行它,同时使用字符串作为我希望运行的脚本的路径。但是,我试图让这个应用程序能够运行多个脚本,所以我希望能够将路径传递给我拥有的任何 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 命令,它就可以正常工作。但是使用替换,它运行,但没有任何反应。有任何想法吗?