【问题标题】:how to pass parameters to Powershell script and run it on a remote computer如何将参数传递给 Powershell 脚本并在远程计算机上运行
【发布时间】:2015-04-20 15:22:50
【问题描述】:

我正在尝试将 2 个参数传递给 PS 脚本,该脚本将修补远程计算机上的 SQL Server。这是我使用的代码:

$Patcher = "\\remoteShareLocation\SQLpatcher.ps1"
$ver = "SQL2012"
$inst = "NEWINST"

Invoke-Command -ComputerName RMTMACHINE -credential dmn\usrname -ScriptBlock {$Patcher $ver $inst}

这会要求提供凭据,但不会运行并且也不会显示任何输出。语法有什么问题吗?请问有其他的 cmdlet 吗?

【问题讨论】:

    标签: powershell remote-execution


    【解决方案1】:

    如果您有 powershell V3 或更高版本,您可以使用 using 前缀将本地变量“传输”到远程主机:

    Invoke-Command -ComputerName RMTMACHINE -credential $cred -ScriptBlock {$using:Patcher $using:ver $using:inst}
    

    对于旧版本,请查看 invoke-command-argumentlist 参数

    【讨论】:

    • 只是为了补充:如果 $Pacher、$ver 和 $inst 是命令,那么您必须在其前面加上“&”。例如:调用命令 -ComputerName RMTMACHINE -credential $cred -ScriptBlock { & $using:Patcher $using:ver $using:inst}
    【解决方案2】:

    试试

    $cred = Get-Credential
    Invoke-Command -ComputerName RMTMACHINE -credential $cred -ScriptBlock {$Patcher $ver $inst}
    

    或者像这样创建一个凭证对象:

    $username = "username"
    $password = "password" | ConvertTo-SecureString -asPlainText -Force
    $cred = New-Object System.Management.Automation.PSCredential($username,$password)
    

    您需要传递凭据对象而不是域\用户名。

    要远程运行脚本文件,请查看https://stackoverflow.com/a/10446318/4550393

    【讨论】:

    • 也无法使用凭据,因此尝试发送参数:$ScriptBlockContent = { param ($p, $v, $i) powershell.exe -ExecutionPolicy Bypass $p $v $i } Invoke-命令 -ComputerName RMTMACHINE -credential $cred -ScriptBlock $ScriptBlockContent -ArgumentList $Patcher, $ver, $inst。这也会引发错误提示:术语“\\remoteShareLocation\Patcher.ps1”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2014-07-26
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多