Invoke-WmiMethod -ArgumentList 不接受变量?

Invoke-WmiMethod -ArgumentList not accepting variables?

所以我是 Powershell 的新手,我几乎可以肯定我正在做的不是最有效的方法。但我真的很想了解为什么我所做的不起作用。

我正在尝试通过 运行 以下代码使用 Powershell 触发 Configuration Manager 客户端操作:

    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList "{00000000-0000-0000-0000-000000000042}"
    } 

这运行良好。但是我希望能够调用一个变量或所有这些长代码所在的地方,而不是每次我想更改客户端操作时都必须将它们放入其中。所以这是我开始玩弄的地方,无法让任何东西工作。

    $ApplicationDeployment = '"{00000000-0000-0000-0000000000000042}"'

    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList $ApplicationDeployment
    } 

这给了我一个错误。我还尝试了以下方法:

    $hash = @{"ApplicationDeployment" = "{00000000-0000-0000-0000-000000000042}"}

    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList $hash.'ApplicationDeployment'
    } 

最后

    $Object = @{ApplicationDeployment = '{00000000-0000-0000-0000-000000000042}'}

    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList $Object.ApplicationDeployment
    }

我也试过了

   $($ApplicationDeployment).ArgumentList 

但这会给出与其他所有内容相同的错误。

我非常感谢您解释为什么这不起作用...提前谢谢您。

你的问题是远程机器没有在本地初始化你的变量。执行脚本时需要将其传递给远程机器。 为此,请将 $Object.ApplicationDeployment 替换为 $Using:Object.ApplicationDeployment,如下面的代码所示:

$Object = @{ApplicationDeployment = '{00000000-0000-0000-0000-000000000042}'}

Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name TriggerSchedule -ArgumentList $Using:Object.ApplicationDeployment
}