在不同的体系结构上使用SWbemLocator处理异常
问题描述:
在脚本中,我需要运行很多机器并添加一个注册表项。在x64机器上,此密钥需要添加到注册表的32位和64位部分。在不同的体系结构上使用SWbemLocator处理异常
$objswbem = New-Object -ComObject "WbemScripting.SWbemNamedValueSet"
$objswbem.Add("__ProviderArchitecture", $Arch) | Out-null
$objswbem.Add("__RequiredArchitecture", $True) | Out-null
$ObjLocator = New-Object -ComObject "Wbemscripting.SWbemLocator"
$objServices = $objLocator.ConnectServer($Computer,"root\Default",$null,$null,$null,$null,$null,$objswbem)
$objReg = $objServices.Get("stdRegProv")
这将同时将值32和64传递给它。
我不确定什么是$Arch
设置为64时会在32位机器上抛出异常,因为我需要处理这个问题并允许脚本继续运行而不运行64位操作,否则抛出异常。 我测试过一个无效的数字,如128,它会抛出一个无效的数字例外$objLocator.ConnectServer
。我只是不确定它是否是与传递的有效数字64相同的例外。
我无法访问32位机器来测试我自己的脚本,并且没有在线找到相关文档。
答
我给你如何继续它的逻辑。我已根据您的要求制作了脚本,并且我还在每行上添加了评论以供您理解和参考。添加什么都你是基于
$Input_file= Get-Content D:\Serverlist.txt # Getting list of servers from the text file
foreach($Input in $Input_file) # Iterating each server
{
$OS_Architecture=(Get-WmiObject Win32_OperatingSystem -ComputerName $Input).OSArchitecture # Getting the OS Architecture for each server
if($OS_Architecture -eq '64-bit')
{
# write the code for 64 bit OS Architecture
<#
$objswbem = New-Object -ComObject "WbemScripting.SWbemNamedValueSet"
$objswbem.Add("__ProviderArchitecture", $Arch) | Out-null
$objswbem.Add("__RequiredArchitecture", $True) | Out-null
$ObjLocator = New-Object -ComObject "Wbemscripting.SWbemLocator"
$objServices = $objLocator.ConnectServer($Computer,"root\Default",$null,$null,$null,$null,$null,$objswbem)
$objReg = $objServices.Get("stdRegProv")
#>
}
else
{
# Write the code for 32 Bit OS Architecture
}
注意做好代码:如果你正在运行的所有远程命令,然后使用脚本块和调用命令传递computernames作为参数。
希望它能帮助你理解逻辑。
谢谢 - 让我走在正确的道路上。 –
乐意提供帮助。 Goodluck @MatthewNorth –