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
}
所以我是 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
}