Dela via


Ansluta till WMI på en fjärrdator

WMI kan användas för att hantera och komma åt WMI-data på fjärrdatorer. Fjärranslutningar i WMI påverkas av inställningarna Windows-brandväggen och DCOM. UAC (User Account Control) kan också kräva ändringar i vissa inställningar. Men när du har rätt inställningar är anropet till ett fjärrsystem mycket likt ett lokalt WMI-anrop. Du kan dock välja att göra det mer komplext genom att använda olika autentiseringsuppgifter, alternativa autentiseringsprotokoll och andra säkerhetsfunktioner.

Konfigurera en dator för en fjärranslutning

Innan du kan komma åt ett fjärrsystem med WMI kan du behöva kontrollera vissa säkerhetsinställningar för att bekräfta att du har åtkomst. Specifikt:

  • Windows innehåller ett antal säkerhetsfunktioner som kan blockera åtkomst till skript på fjärrsystem. Därför kan du behöva ändra systemets Inställningar för Active Directory och Windows-brandväggen innan du gör ett WMI-anrop. Mer information finns i Konfigurera en fjärr-WMI-anslutning och Felsöka en fjärr-WMI-anslutning.

  • Rätt DCOM-inställningar måste vara aktiverade för att en fjärranslutning ska fungera. Om du ändrar DCOM-inställningar kan användare med låg behörighet få åtkomst till en dator för en fjärranslutning. Mer information finns i Skydda en fjärr-WMI-anslutning.

Dessutom kan det finnas vissa omständigheter där du kanske vill köra WMI via en fast port. För att göra detta måste du också ändra inställningarna. Mer information finns i Konfigurera en fast port för WMI-.

Ansluta till en fjärrdator

I grunden består anslutningen till ett fjärrsystem med WMI av att se till att du har rätt behörighet för att komma åt systemet och att anslutningen är korrekt konfigurerad. När du har dessa två element är själva anslutningen relativt enkel. Om du till exempel använder dina standardsäkerhetsuppgifter kan du komma åt WMI på ett fjärrsystem med hjälp av följande kod:

Ansluta till WMI via fjärranslutning med PowerShell

Använd parametern -ComputerName som är gemensam för de flesta WMI-cmdletar, till exempel Get-WmiObject.

$strComputer = "Computer_B"
$colSettings = Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer

Fjärranslutning till WMI med VBScript-

Använd en moniker som innehåller namnet på fjärrsystemet i anropet till GetObject.

strComputer = "Computer_B"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

Ansluta till WMI via fjärranslutning med C#

För den aktuella versionen av det WMI-hanterade gränssnittet (Microsoft.Management.Infrastructure) använder du objektet CimSession för att representera en anslutning till en fjärrvärd.

using Microsoft.Management.Infrastructure;
...
string Namespace = @"root\cimv2";
string OSQuery = "SELECT * FROM Win32_OperatingSystem";
CimSession mySession = CimSession.Create("Computer_B");
IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", OSQuery);

Ansluta till WMI via fjärranslutning med C#

För v1-versionen av det WMI-hanterade gränssnittet (System.Management) använder du objektet ManagementScope för att representera en anslutning till en fjärrvärd.

using System.Management;
...
ManagementScope scope = new ManagementScope("\\\\Computer_B\\root\\cimv2");
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

exempel: Hämta WMI-data från en fjärrdator (C++)

Använd metoden IWbemLocator::ConnectServer för att ange namnet på fjärrdatorn i parametern strNetworkResource.

    hres = pLoc->ConnectServer(
        _bstr_t(L"\\\\COMPUTER_B\\root\\cimv2"),
        _bstr_t(useToken?NULL:pszName),    // User name
        _bstr_t(useToken?NULL:pszPwd),     // User password
        NULL,                              // Locale             
        NULL,                              // Security flags
        _bstr_t(useNTLM?NULL:pszAuthority),// Authority        
        NULL,                              // Context object 
        &pSvc                              // IWbemServices proxy
        );

De tidigare kodexemplen är utan tvekan den mest grundläggande fjärranslutningen som du kan utföra med WMI. Mer specifikt förutsätter exemplen följande:

  • Du är administratör på fjärrdatorn. På grund av user account controlmåste kontot i fjärrsystemet vara ett domänkonto i gruppen Administratörer. Mer information finns i User Account Control och WMI.
  • Lösenordet på den aktuella lokala datorn är inte tomt. Detta är i princip ett Säkerhetskrav för Windows som du måste ha loggat in på systemet med ett lösenord.
  • Både dina lokala datorer och fjärrdatorer finns inom samma domän. Om du behöver korsa domängränser måste du ange ytterligare information eller använda en något annorlunda programmeringsmodell.
  • Du använder ditt eget konto för att komma åt fjärrdatorn. Om du försökte komma åt ett annat konto skulle du behöva ange ytterligare autentiseringsuppgifter. (Observera att det inte är tillåtet att försöka komma åt WMI lokalt med andra autentiseringsuppgifter än ditt aktuella konto.)
  • Båda datorerna kör IPv6. WMI stöder anslutningar till datorer som kör IPv6. Men både din lokala dator och "Computer_B" måste köra IPv6. Båda datorerna kan också köra IPv4. Mer information finns i IPv6- och IPv4-stöd i WMI.
  • Skriptet behöver inte delegeras, det vill sägs att det inte behöver komma åt ytterligare fjärrdatorer via den avsedda fjärrdatorn. Mer information finns i Delegera med WMI.
  • Du försöker göra ett specifikt anrop i stället för att skapa en fjärrprocess. Mer information finns i Skapa processer via fjärranslutning med WMI.

Med dessa begränsningar i åtanke liknar ett fjärr-WMI-anrop ett lokalt WMI-anrop – den enda skillnaden är att du måste ange namnet på fjärrsystemet. Du kan dock välja att ändra många av dessa funktioner: använda olika autentiseringsuppgifter eller dirigera samtalet via en dator från tredje part eller komma åt en annan domän.