Powershell 两个用户同时调用命令
我正在使用此PowerShell脚本在每个活动设备上恢复Bitlocker: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:"
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中有过,但它没有那么重要。