2016-12-08 79 views
0

在腳本中,我需要運行很多機器並添加一個註冊表項。在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位機器來測試我自己的腳本,並且沒有在線找到相關文檔。

回答

1

我給你如何繼續它的邏輯。我已根據您的要求製作了腳本,並且我還在每行上添加了評論以供您理解和參考。添加什麼都你是基於

$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 –