सिस्टम सेंटर वर्चुअल मशीन मैनेजर 2012 की रिलीज़ के साथ, हमारे पास तथाकथित सेवाएं बनाने का अवसर है: i.e. वर्चुअल मशीनों को व्यक्तिगत रूप से या यहां तक कि टेम्प्लेट से नहीं, बल्कि अलग-अलग प्रोफाइल, टेम्प्लेट, मशीन और उसके बाद - वर्चुअल उपकरण के बीच संबंध को कॉन्फ़िगर करने के लिए। TechEd में भाषणों को देखने, लेखों और पुस्तकों को पढ़ने और निश्चित रूप से, किसी एक परियोजना पर बॉस से जादुई कार्य प्राप्त करने के बाद, मैंने फैसला किया कि SCVMM में उपलब्ध धन एक पूर्ण सैंडबॉक्स सेवा बनाने के लिए पर्याप्त है, अर्थात एंटरप्राइज़ इन्फ्रास्ट्रक्चर के बाकी हिस्सों से अलग आभासी मशीनों का एक सेट, लेकिन एक ही समय में एक-दूसरे के साथ बातचीत करना।
लेकिन सब कुछ इतना सहज और सुंदर नहीं
था जितना कि प्रदर्शनों में
आशापो के पास था , इसलिए मैं आपसे फाइल प्रसंस्करण की खुराक के लिए कटौती करने के लिए कहता हूं।
Microsoft की सेवा-उन्मुख क्लाउड विचारधारा, आदर्श रूप से सैंडबॉक्स बनाने के कार्य के लिए उपयुक्त है: यहाँ आप हैं, संसाधनों का एक पूल, यहाँ आप हैं, सैंडबॉक्स, सैंडबॉक्स क्लाउड में चलता है, लोग, उदाहरण के लिए डेवलपर्स, स्वयं सेवा पोर्टल के माध्यम से इस सैंडबॉक्स को बनाते हैं। यदि आवश्यक हो, वे संसाधनों की खपत पर रिपोर्ट बनाते हैं, हटाते हैं, स्केल करते हैं, वे इस बात की परवाह नहीं करते हैं कि सैंडबॉक्स किस उपकरण पर चल रहा है, वे इस बात की परवाह नहीं करते कि यह कैसे आरक्षित है या हाइपरवाइजर कौन प्रबंध कर रहा है।
लेकिन जब अभ्यास करने की बात आती है, वास्तव में, सेवा तैनाती का स्वचालन, तो सीमाएं हैं। उन्हें और अधिक स्पष्ट रूप से समझाने के लिए, मैं पहले से ही 4 वें संस्करण में अन्य चीजों के अलावा, माइक्रोसॉफ्ट -
पेट शॉप ,
.नेट से प्रसिद्ध और हैकनीड, शैक्षिक एप्लिकेशन को चालू कर दूंगा।
पेट शॉप एक साधारण तीन-लिंक क्लाइंट-सर्वर एप्लिकेशन है: एक डीबीएमएस सर्वर है, एक एप्लिकेशन सर्वर है, और एक वेब-थूथन है जो संभावित खरीदारों को एक ब्राउज़र के माध्यम से तोतों को दर्ज करने और चयन करने की अनुमति देता है। इसलिए, जब हम इस एप्लिकेशन को क्लाउड सेवा के रूप में तैनात करते हैं, हम:
1. हम तीन आभासी मशीनों को तैनात करते हैं, एक दो को खाली करते हैं, एक SQL सर्वर के साथ, वे बाद में हमारे लिंक बन जाएंगे;
2. SQL सर्वर पर, एप्लिकेशन डेटाबेस स्थापित करें, उपयोगकर्ताओं को पंजीकृत करें;
3. एप्लिकेशन सर्वर पर, स्टोर एप्लिकेशन के साथ ऐप-वी पैकेज को रोल आउट करें, कनेक्शन स्ट्रिंग को SQL सर्वर से कॉन्फ़िगर करें;
4. वेब चेहरे पर वेब पेज स्थापित करें, एप्लिकेशन सर्वर से कनेक्ट करने के लिए वेब एप्लिकेशन को कॉन्फ़िगर करें।
कैसे हो रही है तैनाती? वर्चुअल मशीन प्रबंधक को तैनात करते समय, यह एक वर्चुअल फ़्लॉपी डिस्क बनाता है और फ़्लॉपी डिस्क के लिए
एक प्रतिक्रिया फ़ाइल लिखता
है । वर्चुअल मशीन को तैनात करते समय, यह उत्तर फ़ाइल को पढ़ता है, खुद को एक नाम निर्दिष्ट करता है, नेटवर्क इंटरफ़ेस पैरामीटर सेट करता है और यहां तक कि सक्रिय निर्देशिका डोमेन में भी शामिल होता है। दूसरे चरण में, SCVMM वर्चुअल मशीन पर अपने एजेंट और एकीकरण सेवाओं को स्थापित करता है, और तीसरे चरण में यह पहले से ही एप्लिकेशन, डेटाबेस, अन्य कॉन्फ़िगरेशन स्क्रिप्ट के साथ एक आईएसओ छवि बनाता है, इस आईएसओ छवि को वर्चुअल ड्राइव में माउंट करता है और इससे एप्लिकेशन इंस्टॉल करना शुरू करता है। जैसा कि आप देख सकते हैं, एक आभासी मशीन के साथ बातचीत केवल आदिम चीजों की मदद से होती है: एक आभासी डिस्केट और एक वर्चुअल डीवीडी-रॉम, क्योंकि एक एजेंट को स्थापित करने के साथ-साथ एकीकरण सेवाओं को स्थापित करना भी ड्राइव में संबंधित आईएसओ छवि से एक सेटिंग है।

क्या ऐसा है? तो, हाँ ऐसा नहीं है। तथ्य यह है कि SQL सर्वर से कनेक्शन स्ट्रिंग को इकट्ठा करने के लिए, आपको कम से कम इस SQL सर्वर का नाम पता होना चाहिए। आवेदन के लिए कनेक्शन स्ट्रिंग को इकट्ठा करने के लिए, आपको इस एप्लिकेशन का सर्वर पता भी जानना होगा। इस बीच, सिस्टम सेंटर वर्चुअल मशीन मैनेजर 2012 में, सर्वर नाम सेट करने के तीन तरीके हैं:
1. इसे केवल पाठ के साथ सेट करें, उदाहरण के लिए, "SQLServer";
2. संख्याओं के साथ एक पैटर्न के साथ इसे परिभाषित करें, उदाहरण के लिए, "SQLServer ##", उस स्थिति में जब पहला सर्वर बनाया जाता है, SCVMM इसे SQLServer01, दूसरा - SQLServer02, आदि नाम देगा।
3. इसे एक चर पर सेट करें, उदाहरण के लिए, "@ SQLServer @", इस मामले में, व्यवस्थापक को "SQLServerForPetShop" या ऐसा कुछ लिखना होगा जो बाद में संवाद बॉक्स पर तैनाती से पहले सर्वर नाम बन जाएगा।
पहला विकल्प तुरंत खारिज कर दिया जाता है, क्योंकि हम मानते हैं कि हमारे पास कई सेवाएं हैं, जिसका अर्थ है कि एक ही नाम वाली कई कारें, और एक ही नाम वाली कारों का होना बुरा है। दूसरा विकल्प अच्छा है, लेकिन अंत में संख्याओं की उपस्थिति सर्वर के निर्धारणवाद को समाप्त करती है। सीधे शब्दों में कहें, तो लिंक 2 पर, हम नहीं जानते हैं कि SCVMM ने किस अंक को लिंक 1 को सौंपा है। वास्तव में, हम जानते हैं कि SQLServer की शुरुआत में क्या है, और फिर 01? 05? या शायद 25? तीसरा विकल्प अच्छा है, इसमें कोई संदेह नहीं है, लेकिन इस मामले में, व्यवस्थापक को खुद का ख्याल रखना होगा, सबसे पहले, सर्वर नामों की विशिष्टता, और दूसरा, संगठन द्वारा अपनाई गई नामकरण परंपरा के साथ सर्वर नामों का अनुपालन। सामान्य तौर पर, यह पता चलता है कि सभी तीन विकल्प हैं, और तीनों खराब हैं। Microsoft इस तरह की स्थिति से बाहर निकलने की सलाह कैसे देता है? लेकिन कोई रास्ता नहीं।
Microsoft के निजी क्लाउड कम्प्यूटिंग प्रकाशक Sybex द्वारा
Aidan Finn की किताब के 245 वें पृष्ठ की यह तस्वीर स्पष्ट रूप से दिखाती है कि पेट्सशॉप सेवा को तैनात करने के लिए, आपको स्क्रीन के शीर्ष पर अपनी आंखों से देखना होगा, MidSvD01 को देखना होगा और इन शब्दों का उपयोग lobComputerName क्षेत्र में नीचे लिखने के लिए करना होगा।

इसके अलावा, स्क्रीन से एक ही स्क्रीन पर अक्षरों का ऐसा पुनर्लेखन, जाहिरा तौर पर, माइक्रोसॉफ्ट की आधिकारिक स्थिति है, जिसे दोहराया जाता है, उदाहरण के लिए,
यहां टेक्नेट पर ब्लॉग्स।
यही है
, फिर से :
वे स्क्रीन पर एक लाइन देखने और पेन के साथ एक ही स्क्रीन पर इस लाइन को चलाने की पेशकश करते हैं ।
क्या यह हमें स्वीकार्य है? खैर नहीं! सूचना केवल एक ही स्थान पर उत्पन्न होती है, जानकारी का अनुचित दोहराव त्रुटियों से भरा होता है, और हम इस दृष्टिकोण का उपयोग अपने जीवन में कभी नहीं की तुलना में थोड़ा कम करेंगे।
चलिए वापस अपने सैंडबॉक्स में आते हैं। मान लीजिए कि हमारे पास सक्रिय निर्देशिका फ़ॉरेस्ट में एक डोमेन नियंत्रक है और एक सर्वर इस डोमेन का सदस्य है। सैद्धांतिक रूप से, यह पर्याप्त है कि सेवा को बढ़ाया जा सकता है, अर्थात्। इस सदस्य सर्वर डोमेन का दोहराव, अधिक, और अधिक।
सैंडबॉक्स सिस्टम के लिए संदर्भ की शर्तों का निरूपण करते हुए, हम कह सकते हैं कि सिस्टम में एक सक्रिय निर्देशिका डोमेन नियंत्रक होना चाहिए जो किसी भी रिश्ते से अन्य जंगलों से जुड़ा नहीं है, जिसमें ट्रस्ट शामिल हैं, और सिस्टम में सक्रिय डोमेन में शामिल सर्वर होना चाहिए एक निर्देशिका जिसे बहुत अधिक प्रयास के बिना दोहराया जा सकता है। इस मामले में, यदि वांछित है, तो हम एक्सचेंज सर्वर, एसक्यूएल सर्वर और बहुत कुछ पर रोल कर सकते हैं।
SCVMM से एक सक्रिय निर्देशिका डोमेन नियंत्रक बनाना आसान नहीं है: डोमेन नियंत्रक App-V अनुप्रयोग वर्चुअलाइजेशन नहीं हो सकता है, इसलिए हम कमांड लाइन से डोमेन नियंत्रक स्थापित करेंगे। ऐसी dcpromo उपयोगिता है जो कम से कम एक डोमेन, कम से कम एक जंगल, यहां तक कि एक ब्रह्मांड बनाता है, और, मैं आपको बताता हूं, "Dcpromo श्रेणी के विभिन्न लेखों के बावजूद," Dcpromo का अंत हो गया है, लंबे समय तक लाइव पॉवरशेल! "Dcpromo विंडोज सर्वर 2012 में सहेजा गया था, लेकिन केवल एक कमांड टूल के रूप में। लाइन। उदाहरण के लिए, इसे पढ़ा जा सकता
है । लाइन पर ध्यान दें:
यदि आप कमांड प्रॉम्प्ट से dcpromo / unattend चलाते हैं, तब भी आप Dcromrom.exe का उपयोग करने वाले अनअटेंडेड इंस्टॉलेशन कर सकते हैंयही है, विंडोज सर्वर 2012 में अनअटेंड-इंस्टॉलेशन का पूरी तरह से उपयोग किया जा सकता है, जो वास्तव में, हमारी जरूरत है। यद्यपि, निश्चित रूप से, हम सभी पावरफेल को प्यार से प्यार करते हैं, और बिल्कुल 12 सर्वर में नवाचारों के बारे में मुझे यहां तक कि कुछ लेख भी हैं। लेकिन अनुकूलता के लिए, हम उत्तर फ़ाइल का उपयोग करते हैं क्योंकि यह 2008R2 और 2012 में दोनों में काम करता है। इसलिए, सक्रिय निर्देशिका डोमेन नियंत्रक को बढ़ाने के लिए, हम इस cmd फ़ाइल को चलाएंगे जो सैंडबॉक्स सेवा में एप्लिकेशन प्रोफ़ाइल के लिए बाध्य है:
%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe Set-ExecutionPolicy Unrestricted %systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe .\CreateAnswerFile.ps1 -Domain %1 dcpromo /unattend:%systemroot%\Temp\dcpromo.ini shutdown -r -t 30
कृपया ध्यान दें, यह शुरू से ही शुरू होता है।
Set-ExecutionPolicy Unrestricted
इस सरल कारण के लिए कि मैंने आगे PowerShell स्क्रिप्ट्स को अहस्ताक्षरित किया है। PowerShell स्क्रिप्ट पर हस्ताक्षर किए
जा सकते हैं और होना चाहिए : आपकी सुरक्षा और आपके संगठन की सुरक्षा इस पर निर्भर करती है। ऐसा लगता है कि कुछ विषयों पर पहले से ही हस्ताक्षर करने के तरीके के बारे में यहां कहा गया है, लेकिन यदि नहीं, तो मुझे इस मजेदार, लेकिन जानकारीपूर्ण प्रक्रिया का वर्णन करने में खुशी होगी।
अब देखिए,
CreateAnswerFile.ps1 नामक एक निश्चित स्क्रिप्ट को
कहा जाता है , जिसे एक इनपुट पैरामीटर के रूप में एक डोमेन दिया जाता है। यहाँ स्क्रिप्ट है:
Param ([string]$Domain) [Reflection.Assembly]::LoadWithPartialName(“System.Web”) Enable-PSRemoting -force import-module servermanager add-windowsfeature DNS $RandPassLength = [int] 30 $DSRMPass = [System.Web.Security.Membership]::GeneratePassword($RandPassLength,2) $SafeModePWD = $DSRMPass $NetBIOSName=($Domain.Split(".")[0]).ToUpper() $DCPromoFile = @" [DCINSTALL] ReplicaOrNewDomain=Domain NewDomain=Forest NewDomainDNSName=$Domain ForestLevel=4 DomainNetBIOSName=$NetBIOSName DomainLevel=4 InstallDNS=Yes ConfirmGc=Yes CreateDNSDelegation=No DatabasePath=`"C:\Windows\NTDS`" LogPath=`"C:\Windows\NTDS`" SYSVOLPath=`"C:\Windows\SYSVOL`" RebootOnCompletion=No SafeModeAdminPassword=$SafeModePWD "@ $DCPromoFile | out-file C:\windows\temp\dcpromo.ini -force
बस फिर से, ध्यान दें कि मेरे पास C: \ windows की तरह% Windir% है, यह संभावना नहीं है कि आपके पास कोई अन्य रास्ता होगा, लेकिन फिर भी मुझे आपको चेतावनी देना होगा।
ठीक है, हमने डोमेन नियंत्रक उठाया है, हमें यह पसंद है। लेकिन इस डोमेन के सदस्यों में एक सर्वर को शामिल करने के लिए, इसे सबसे पहले इस डोमेन नियंत्रक का पता प्राप्त करना होगा, और दूसरी बात, इसके नेटवर्क इंटरफेस पर सेटिंग्स प्राप्त करें: इसमें DNS सर्वर के रूप में स्थापित किया गया यह डोमेन नियंत्रक होना चाहिए, ठीक है, तीसरा, डोमेन में शामिल करने के लिए एक कमांड प्राप्त करने के लिए। लेकिन हमें DNS सर्वर का आईपी पता कैसे मिलता है? दरअसल, कार्य की शर्तों के अनुसार, हम हर जगह से अलग नेटवर्क में स्थित हैं और कुछ भी नहीं जानते हैं, यहां तक कि डोमेन नियंत्रक का नाम भी, जो हमारे साथ समानांतर में तैनात है।
एक रास्ता है। याद रखें कि SCVMM - एक अतिथि एजेंट को एक बार तैनात किया गया था? तो, इस अतिथि एजेंट की तैनाती के दौरान, सेवा कॉन्फ़िगरेशन के साथ एक कॉन्फ़िगरेशन फ़ाइल इसके अंदर पूरी तरह से जादुई तरीके से दिखाई देती है। इस फ़ाइल में जानकारी है, सबसे पहले, बहुत क्रॉप की गई है, और दूसरी बात, केवल सिस्टम अकाउंट (सिस्टम) के लिए उपलब्ध है। लेकिन यह, जैसा कि आप जानते हैं, फ़ाइल सहेज नहीं पाएगी, क्योंकि यदि जानकारी दिखाई दी है, तो इसे अब नष्ट नहीं किया जा सकता है। इस फ़ाइल से, जो XML के समान है, पहले 16 बिट्स के अपवाद के साथ, हम डोमेन नियंत्रक का नाम निकालते हैं। हाँ, हाँ, वही जो सेवा की तैनाती के दौरान गतिशील रूप से उत्पन्न हुआ था। एक नाम होने से, हम इस नाम को एक आईपी पते पर हल कर सकते हैं, है ना?
नहीं, यह सही नहीं है, क्योंकि हमारे पास एक DNS सर्वर नहीं है जो हमें जवाब देगा, हम बस यह नहीं जानते कि किसे संपर्क करना है। इसलिए, हम अच्छे पुराने NetBIOS प्रोटोकॉल में मदद के लिए कहते हैं, जो समझता है कि प्रसारण नाम समाधान अनुरोध क्या है। दूसरे शब्दों में, हम सर्वर का नाम जानते हुए, नेटवर्क पर जोर से रोने के साथ चिल्लाते हैं: "ठीक है, इस तरह और इस तरह, जवाब दें!" और वह जवाब देता है: "मैं यहाँ हूँ, बस मुझे मत मारो!" हम इसका पता DNS सर्वर के रूप में लेते हैं, और फिर स्वयं को डोमेन में शामिल करते हैं।
मिशन पूरा हुआ ।
यह देखते हुए कि इस स्क्रिप्ट को हर बार सेवा में स्केल किया जाता है, हम इसे अंतहीन रूप से निष्पादित कर सकते हैं और इस प्रकार हमारा सैंडबॉक्स "डोमेन कंट्रोलर + (खाली_सर्वर x एन)" में बदल जाएगा।
खैर, अब, कृपया, स्क्रिप्ट ही:
Start-Sleep 90 $scvmmGuestAgentProcess = Get-Process ScvmmGuestService $guestDirectory = $scvmmGuestAgentProcess.Path $settingsDirectory = (Split-Path $guestDirectory -Parent)+"\Settings" $uname = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name takeown /F $settingsDirectory /A /R /DY $goalStateFile = $settingsDirectory + "\DesiredGoalState.dat" $rule = $uname+":(R)" icacls $goalStateFile /grant $rule $goalStateText = [string](Get-Content $goalStateFile) $goalState = [xml]($goalStateText.Substring($goalStateText.IndexOf("<"))) $computerNames=($goalState.GuestGoalState.ServiceSettings.ServiceSetting | Where-Object {$_.name -eq "ServiceVMComputerNames"}).value $namesArray = $computerNames.Split("[]") $dCName = $namesArray[[array]::IndexOf($namesArray,"Domain controller")+1] $dCIP = (([System.Net.Dns]::gethostentry($dCName)).AddressList | Where-Object {$_.AddressFamily -eq "InterNetwork"}).IPAddressToString $wmi = Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled = 'true'" $wmi.SetDNSServerSearchOrder($dCIP) $domain = ($goalState.GuestGoalState.ServiceSettings.ServiceSetting | Where-Object {$_.name -eq "Domain"}).value $domainUserName = $domain+"\administrator" $domainPassword = "Pa`$`$w0rd" $credentials = new-object -typename System.Management.Automation.PSCredential -ArgumentList $domainUserName,($domainPassword | ConvertTo-SecureString -AsPlainText -Force) Add-Computer -Credential $credentials -DomainName $domain Restart-Computer
कृपया ध्यान दें, यहां मेरे पास स्पष्ट रूप से निर्दिष्ट उपयोगकर्ता नाम / पासवर्ड है। यह स्पष्ट है कि आपकी सुरक्षा के लिए आपको उन्हें छिपाना होगा।
इसलिए, एप्लिकेशन स्क्रिप्ट में इस स्क्रिप्ट को शामिल करके, और एन सर्वर पर तैनात होने पर इसे निष्पादित करते हुए, हम अपना सैंडबॉक्स प्राप्त करते हैं।

अब हम अपने सैंडबॉक्स को संशोधित कर सकते हैं जैसे हम चाहते हैं, वहां प्रोग्राम लिखें, वहां से प्रोग्राम हटाएं, उपयोगकर्ता बनाएं, हटाएं, स्कीम को संशोधित करें, विशेषताएँ, जो भी हमारी दिल की इच्छाएं हैं। ठीक है, अगर आप अचानक इसे बर्बाद कर देते हैं, तो सैंडबॉक्स को हटा दें और इसे फिर से आधे घंटे में बनाएं! या फिर हमारे लिए दो सैंडबॉक्स बनाना भी मुश्किल नहीं है। यह डेवलपर और परीक्षक के लिए सिर्फ एक स्वर्ग है!
मैं पढ़ने के लिए इदी फिन के ब्लॉग की सलाह देता हूं, वह वहां बहुत प्यारी बातें लिखता है।