Powershell 两个用户同时调用命令

Powershell 两个用户同时调用命令,powershell,foreach,wmic,invoke-command,Powershell,Foreach,Wmic,Invoke Command,我正在使用此PowerShell脚本在每个活动设备上恢复Bitlocker: Get-Content "clients.txt" | ForEach-Object { if (Test-Connection $_ -Count 1 -ErrorAction 0 -Quiet) { Invoke-Command -ComputerName $_ -ScriptBlock { Resume-BitLocker -MountPoint "C:"

我正在使用此PowerShell脚本在每个活动设备上恢复Bitlocker:

Get-Content "clients.txt" | ForEach-Object {
    if (Test-Connection $_ -Count 1 -ErrorAction 0 -Quiet) {
        Invoke-Command -ComputerName $_ -ScriptBlock {
            Resume-BitLocker -MountPoint "C:"
        }
    } else {
        Write-Host "$_ is OFFLINE" -ForegroundColor Red
    }
}
但我还想通过以下命令在每个活动设备上通过
调用WMIMethod
触发硬件资源清册:

Invoke-WMIMethod -ComputerName $Server -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000001}"

我能够编写第一部分的脚本,但是在第二个命令中构建起来不是很好。

您有点偏离了正确的方向。 使用
Invoke命令时,它会同时(并行)处理32台计算机上的脚本块

如果您使用
foreach
处理计算机,它将按顺序处理这些计算机,这将慢得多。 使用*WMI cmdlet时,同样有效。始终尝试用相应的CIM cmdlet替换它们,因为应用相同的逻辑-计算机正在并行处理

考虑以下情况:

$ComputerList = Get-Content -Path Clients.txt
Invoke-Command -ComputerName $ComputerList -ErrorAction SilentlyContinue -ScriptBlock {
    Resume-BitLocker -MountPoint "C:"
    #Add second command
    #add third command and so on
}
我不确定,在本地执行时,
调用WMIMethod
的替代命令是什么。也许
设置WMIInstance
,但我只是在猜测!
然后,如果您想添加第二个命令来执行,只需将其添加到
Invoke command
的scriptblock中即可

你有点偏离了方向。 使用
Invoke命令时,它会同时(并行)处理32台计算机上的脚本块

如果您使用
foreach
处理计算机,它将按顺序处理这些计算机,这将慢得多。 使用*WMI cmdlet时,同样有效。始终尝试用相应的CIM cmdlet替换它们,因为应用相同的逻辑-计算机正在并行处理

考虑以下情况:

$ComputerList = Get-Content -Path Clients.txt
Invoke-Command -ComputerName $ComputerList -ErrorAction SilentlyContinue -ScriptBlock {
    Resume-BitLocker -MountPoint "C:"
    #Add second command
    #add third command and so on
}
我不确定,在本地执行时,
调用WMIMethod
的替代命令是什么。也许
设置WMIInstance
,但我只是在猜测!
然后,如果您想添加第二个命令来执行,只需将其添加到
Invoke command
的scriptblock中即可

第二个代码段有一个虚假的尾随曲括号。话虽如此,为什么不在第一个代码段的scriptblock中包含
wmic
命令(或等效的
*-WmiObject
语句),并在新行或分号上添加
&&
|
。第二个代码段有一个虚假的尾随曲括号。话虽如此,为什么不在第一个代码段的scriptblock中包含
wmic
命令(或等效的
*-WmiObject
语句)以及
&&
|
?在新行上或用分号分隔。用CIM cmdlet替换WMI cmdlet的原因不是性能<代码>获取WmiObject
获取一组计算机并并行处理它,就像
获取CimInstance
一样。事实上,WMI通常比CIM提供更好的性能。将WMI替换为CIM的原因是:a)后者使用WinRM而不是DCOM(减少了防火墙方面的麻烦)和b)Microsoft不赞成使用WMI cmdlet而支持CIM。我不确定是否处理与
WMI
相同,但如前所述,由于被贬低,最好使用
CIM
。谢谢你的评论!:)还有一些需要添加的内容:使用
CIM
cmdlet,需要启用PowerShell远程处理(
Enable PSRemoting
),正如Ansgar所说,因为它使用WinRM。由于使用DCOM和RPC,WMI cmdlet没有此要求(仅本地管理员权限)。非常感谢。成功了。最好使用foreach中的
$\u处于脱机状态
,但这并不重要。将WMI cmdlet替换为CIM cmdlet的原因不是性能<代码>获取WmiObject
获取一组计算机并并行处理它,就像
获取CimInstance
一样。事实上,WMI通常比CIM提供更好的性能。将WMI替换为CIM的原因是:a)后者使用WinRM而不是DCOM(减少了防火墙方面的麻烦)和b)Microsoft不赞成使用WMI cmdlet而支持CIM。我不确定是否处理与
WMI
相同,但如前所述,由于被贬低,最好使用
CIM
。谢谢你的评论!:)还有一些需要添加的内容:使用
CIM
cmdlet,需要启用PowerShell远程处理(
Enable PSRemoting
),正如Ansgar所说,因为它使用WinRM。由于使用DCOM和RPC,WMI cmdlet没有此要求(仅本地管理员权限)。非常感谢。成功了。如果有
$\离线的话会更好
,我在foreach中有过,但它没有那么重要。