मैं एक पर्ल स्क्रिप्ट पर काम कर रहा हूं जिसका उपयोग यह जांचने के लिए किया जाता है कि कई सेवाएं चल रही हैं या नहीं। इस लक्ष्य को हासिल करने के लिए हमें दूरदराज के विंडोज सर्वर क्वेरी करने के लिए WMI का उपयोग कर रहे:डब्लूएमआई क्वेरी अपूर्ण परिणाम लौटा रही है
my $WMI_locator = Win32::OLE->new('WbemScripting.SWbemLocator');
$WMI_locator->{Security_}->{AuthentificationLevel} = 6;
my $computer = $WMI_locator->ConnectServer($server, 'root\cimv2', $adminuser, $adminpasswd);
my $services = $computer->ExecQuery('SELECT * FROM Win32_Service', 'WQL', $flag_return_immediately | $flag_forward_only);
यह कोड स्निपेट पूरी तरह से काम करता है जब मेरी देव लैपटॉप पर मार डाला। हालांकि, जब मैं इसे उत्पादन सर्वर से चलाने की कोशिश करता हूं तो अजीब चीजें होती हैं: कुछ दूरस्थ विंडोज कंप्यूटरों के लिए, मुझे केवल सेवा सूची में आधे मिल सकते हैं।
मैंने इसमें देखा है, और पाया है कि यह समस्या केवल कई सेवाओं (लगभग 150) के साथ सर्वर पर हो रही है, और जिसके लिए औसत पिंग में एक अंतर है (~ 60ms स्थानीय, ~ 215ms उत्पादन पर सर्वर)। ऐसा लगता है कि यह मुद्दा पीएलएल की बजाय डब्लूएमआई से आया है; मैं डॉस कमांड लाइन से सर्वर क्वेरी करने के लिए कोशिश की है, और मैं जब सेवाएं प्राप्त करने के प्रयास में कोई त्रुटि हो रही है, हालांकि सीपीयू की क्वेरी बस ठीक काम करता है:
E:\>wmic /NODE:server /USER:adminuser /PASSWORD:adminpasswd SERVICE GET Caption, State
Node - server
ERROR:
Code = 0x800706be
Description = The remote procedure call failed.
Facility = Win32
E:\>wmic /NODE:server /USER:adminuser /PASSWORD:adminpasswd CPU GET Name, Status
Name Status
Intel(R) Xeon(R) CPU X5650 @ 2.67GHz OK
Intel(R) Xeon(R) CPU X5650 @ 2.67GHz OK
Intel(R) Xeon(R) CPU X5650 @ 2.67GHz OK
Intel(R) Xeon(R) CPU X5650 @ 2.67GHz OK
यह देखते हुए कि, मेरा अनुमान है कि मुद्दा नेटवर्क से संबंधित है, लेकिन अब हम ऐसे देश में जा रहे हैं जहां से मैं परिचित नहीं हूं। क्या कोई पैरामीटर है जिसे मैंने याद किया है और/या जिस तरह से मैं चीजें कर रहा हूं उससे कुछ गलत है?
आपके उत्तरों के लिए धन्यवाद!