सर्वर कोर पर स्वचालित रूप से PowerShell का उपयोग करें


18

जब मैं स्थानीय रूप से सर्वर 2012 कोर इंस्टॉलेशन में लॉग इन करता हूं , तो हर बार मुझे powershellसादे ol 'cmd के बजाय एक PowerShell कमांड लाइन पर जाना होगा।

यह मानते हुए कि मैं कभी भी PowerShell Windows फ़ीचर को नहीं हटाऊंगा, मैं कैसे cmd के बजाय मुझे सीधे PowerShell प्रॉम्प्ट में लाने के लिए सर्वर को कॉन्फ़िगर कर सकता हूं?

जवाबों:


8

बस अपनी उपलब्ध कमांड लाइन को "AvailableShells" regkey के नए मूल्य के रूप में जोड़ने के लिए इसे मशीन-वाइड सेटिंग के रूप में रखें:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells" /v "90000" /t REG_SZ /d "%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\Powershell.exe"

संदर्भ: http://andrewmorgan.ie/2012/03/30/changing-the-default-shell-of-windows-server-8-core/

संपादित करें: ध्यान दें कि "AvailableShells" कुंजी के लिए डिफ़ॉल्ट रजिस्ट्री अनुमतियाँ परिवर्तन की अनुमति नहीं देंगी। आपको इस परिवर्तन को करने के लिए अपने खाते (या "प्रशासकों" समूह) को अनुमति देने के लिए पहले से अनुमतियों को बदलना होगा (जैसे "regedit" के माध्यम से मैन्युअल रूप से)।


2
यह आशाजनक लग रहा है, लेकिन ऐसा नहीं लगता है कि व्यवस्थापक समूह ने उस AvailableShellsकुंजी तक पहुंच लिखी है , केवल TrustedInstaller करता है। मैं कुंजी का स्वामित्व लिए बिना अनुमतियां नहीं बदल सकता। क्या आपको लगता है कि सिस्टम कुंजी का स्वामित्व लेना कोई समस्या पेश करेगा? यहाँ मेरी रजिस्ट्री के ACL हैं: gist.github.com/vcsjones/4dca25f94bfb1cfd5857
vcsjones

ठीक है, अच्छी तरह से मैंने वीएम को स्नैपशॉट करने और वैसे भी कोशिश करने का फैसला किया, यह काम करने के लिए प्रकट होता है। केवल दूसरी चीज का मूल्य 90000 होना चाहिए, 9000 नहीं। यदि मूल्य बहुत कम है तो पहले में cmd ​​किक करता है।
vcsjones

@vcsjones को तब तक कोई समस्या पेश नहीं करनी चाहिए जब तक कि आप ट्रस्टेडइनस्टॉलर को फुलकंट्रोल को कुंजी के ऊपर रखने दें। सुरक्षित पक्ष पर होने के लिए, आप अपने किए जाने के बाद स्वामित्व को केवल TrustedInstaller पर वापस रीसेट कर सकते हैं। ओह और संख्या के सुधार के लिए धन्यवाद - वास्तव में मैंने इसे अपने reg addउदाहरण में गलत समझा है ।
वाबेट

2
या जोड़ा स्वचालन जीत के लिए एक समूह नीति के माध्यम से इसे तैनात करने और किसी भी अनुमति को संशोधित करने की आवश्यकता को दरकिनार;)
एशले

मैंने बस फिर से यह कोशिश की, काम नहीं करता। पहुंच अस्वीकृत। -1
पीटर हैन्डफोर

4

तो यहाँ इस सवाल का मेरा समाधान है।

  • मैं AvailableShellsरास्ते की अनुमति बदलने के साथ गड़बड़ नहीं करना चाहता था ।
  • मैं एक साधारण समूह नीति चाहता था जिसे डोमेन पर सभी प्रणालियों के लिए सुरक्षित रूप से लागू किया जा सके।
  • यह पता लगाना कि आपके पास WMI के माध्यम से सर्वर कोर 2008R2 और 2012 के बीच अलग है, इसलिए मैं इसका उपयोग नहीं करना चाहता था।
  • मैं यथासंभव लिपियों से बचना चाहता हूं और नीतियों और प्राथमिकताओं का उपयोग करता हूं।

एक खोज में कई तरह के मेरे समाधान आपको HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shellपॉवर्सहेल के मान को बदलने के लिए है। मैंने इस मान को केवल एक्सप्लोरर के बिना सिस्टम पर संशोधित करने के लिए आइटम स्तर लक्ष्यीकरण का उपयोग किया है। AFAIK, यह एक मानक डेस्कटॉप के साथ सिस्टम से सर्वर कोर सिस्टम को सॉर्ट करने के लिए सबसे सरल परीक्षणों में से एक है।

मैं जिस कमांड लाइन का उपयोग करता हूं ( powershell.exe -noexit -Command "Set-Location ${Env:USERPROFILE} ;start sconfig ; start runonce.exe /AlternativeShellStartup") पावरशेल करना शुरू कर दूंगा, रनऑन कार्यों को बंद कर दूंगा, मेरी वर्तमान निर्देशिका सेट कर दूंगा, और दूसरी विंडो में स्केनफिग शुरू कर दूंगा।

सर्वर कोर पर डिफ़ॉल्ट पॉवर्स को सेट करें


2

Syneticon-dj के उत्तर में कमांड काम नहीं करता है, क्योंकि एक सामान्य एलिवेटेड व्यवस्थापक के पास कुंजी तक लिखने की पहुंच नहीं होती है। टिप्पणियों का उल्लेख है कि आपको अनुमतियाँ बदलने की आवश्यकता है। लेकिन इसमें regedit.exe पर बहुत अधिक क्लिक करना शामिल है और यह स्क्रिप्टेड इंस्टॉलेशन के लिए काम नहीं करता है।

मैं निम्नलिखित PowerShell स्क्रिप्ट का उपयोग करता हूं:

 $definition = @"
 using System;
 using System.Runtime.InteropServices;
 namespace Win32Api
 {
    public class NtDll
    {
       [DllImport("ntdll.dll", EntryPoint="RtlAdjustPrivilege")]
       public static extern int RtlAdjustPrivilege(ulong Privilege, bool Enable, bool CurrentThread, ref bool Enabled);
    }
 }
 "@

 Add-Type -TypeDefinition $definition -PassThru  | out-null

 $bEnabled = $false

 # Enable SeTakeOwnershipPrivilege
 $res = [Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$bEnabled)

 $key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells", [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::takeownership)
 $acl = $key.GetAccessControl()
 $acl.SetOwner([System.Security.Principal.NTAccount]"Administrators")
 $key.SetAccessControl($acl)

 $rule = New-Object System.Security.AccessControl.RegistryAccessRule ("BUILTIN\Administrators","FullControl","Allow")
 $acl.SetAccessRule($rule)
 $key.SetAccessControl($acl)

 New-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells" -name 90000 -value "%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\Powershell.exe" -propertyType String

यह पहले कुंजी पर अनुमतियों को बदलता है और फिर शेल के रूप में पावरशेल सेट करता है।

ध्यान दें कि यह केवल एक अंग्रेजी OS पर काम कर सकता है, क्योंकि यह 'प्रशासकों' समूह को संदर्भित करता है।

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