在不同的体系结构上使用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作为参数。

希望它能帮助你理解逻辑。

+0

谢谢 - 让我走在正确的道路上。 –

+0

乐意提供帮助。 Goodluck @MatthewNorth –