LAPS / ADU & C के लिए बैच फ़ाइल में स्ट्रिंग चर पार्स करना


0

मैं LAPS को लागू करने की कोशिश कर रहा हूं(नेटवर्क एडमिन पासवर्ड सॉल्यूशन) हमारे नेटवर्क पर और मैं ADU & C राइट-क्लिक संदर्भ मेनू के साथ LAPS को एकीकृत करने में समस्याएँ हैं। मेरा लक्ष्य हमारे हेल्पडेस्क कर्मचारियों के लिए ADU & C के भीतर एक कंप्यूटर ऑब्जेक्ट पर राइट-क्लिक करने में सक्षम होना चाहिए और LAPS को इसके साथ आपूर्ति की गई LAPS PowerShell स्क्रिप्ट का उपयोग करके स्थानीय व्यवस्थापक पासवर्ड को रीसेट करने के लिए बाध्य करना है। मैं समझता हूं कि आप सीधे ADU & C संदर्भ मेनू से PS नहीं चला सकते हैं, लेकिन मुझे एक बैच फ़ाइल बनाने में सक्षम होना चाहिए और इसे वांछित PS स्क्रिप्ट चलाना चाहिए। सब कुछ सही ढंग से काम करता है लेकिन मेरे पास जो समस्या है जब मैं ADU & C में कंप्यूटर ऑब्जेक्ट को राइट-क्लिक करता हूं और फिर संदर्भ मेनू से बैच फ़ाइल लॉन्च करता हूं, तो यह कंप्यूटर का नाम LDAP स्वरूपित स्ट्रिंग के रूप में पास करता है।

आम तौर पर, बैच फ़ाइल जो मैं उपयोग कर रहा हूं (ADU & C adminContextMenu से लॉन्च की गई है) है:

@echo off
Title "Reset local Administrator password"
For /F "tokens=2 delims==," %%A In ("%1%") Do Set CompName=%%%A
PowerShell.exe -ExecutionPolicy Unrestricted -Command "Import-Module AdmPwd.PS; Reset-AdmPwdPassword" -ComputerName:%CompName%
Set CompName=

स्ट्रिंग का एक उदाहरण बैच फ़ाइल में पास किया जा रहा है क्योंकि% 1% कमांड-लाइन तर्क है (उद्धरण स्ट्रिंग का भी हिस्सा हैं):

"LDAP://SERVER.contoso.com/CN=IT-SYSTEM,OU=ITusers,DC=contoso,DC=com"

उपरोक्त स्ट्रिंग से जो मैं बाहर निकलना चाहता हूं वह कंप्यूटर का नाम (IT-SYSTEM) है, जो कि पहले = (बराबर) के बाद के सभी पाठ होगा जब तक पहली अल्पविराम (इसलिए मेरे डेलिम्स उस और मेरे लिए सेट हैं) टोकन 2 है)। मैं उस नए चर को CompName नामक स्टोर करना चाहता हूं और फिर मुझे बैच फ़ाइल के भीतर PS चर के साथ उस चर को पास करने में सक्षम होना चाहिए। मैंने सफलता के बिना फॉर कमांड की कुछ विविधताएं आजमाई हैं। मुझे लगता है कि मेरी समस्या यह हो सकती है कि बैच फ़ाइल में पारित होने वाले मूल स्ट्रिंग में पहले से ही इसके चारों ओर लपेटे गए उद्धरण हैं। क्या उपरोक्त स्ट्रिंग के भीतर वांछित जानकारी को एक बैच फ़ाइल का उपयोग करना संभव है यदि स्ट्रिंग को पार्स किया जा रहा है, तो उसके चारों ओर पहले से ही उद्धरण हैं?

अग्रिम में धन्यवाद

जवाबों:


2

%~1स्ट्रिंग से आसपास के दोहरे उद्धरण चिह्नों का उपयोग करें %1, यदि मौजूद है ( कमांड एक्सटेंशन सक्षम करने की आवश्यकता है )। इसके अलावा, %आपके कोड में कुछ (महत्वपूर्ण गलतियाँ) हानिकारक अतिरिक्त प्रतिशत संकेत हैं:

For /F "tokens=2 delims==," %%A In ("%1%") Do Set CompName=%%%A
                                       ^                   ^

अगली स्क्रिप्ट काम कर सकती है:

@echo off
SETLOCAL EnableExtensions DisableDelayedExpansion
Title "Reset local Administrator password"
For /F "tokens=2 delims==," %%A In ("%~1") Do Set "CompName=%%A"
ECHO PowerShell.exe -ExecutionPolicy Unrestricted -Command "Import-Module AdmPwd.PS; Reset-AdmPwdPassword" -ComputerName:%CompName%
Set CompName=

ध्यान दें कि PowerShell.exeलाइन केवल डीबगिंग उद्देश्यों के लिए ECHOed है (क्योंकि मेरे पास AdmPwdइसे डीबग करने के लिए मॉड्यूल स्थापित नहीं है ); ECHOडीबग किए जाने के बजाय प्रमुख शब्द को हटाकर इसे क्रियाशील बनाएं :

PowerShell.exe -ExecutionPolicy Unrestricted -Command "Import-Module AdmPwd.PS; Reset-AdmPwdPassword -ComputerName:%CompName%"

संसाधन (आवश्यक पढ़ना):


आप भयानक हैं - महान काम किया - बहुत बहुत धन्यवाद !!
STGdb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.