मैं प्रोग्रामेटिक रूप से नए विंडोज यूजर की प्रोफाइल कैसे बना सकता हूं?


20

मैं चलाने के लिए Windows सेवा के लिए एक (स्थानीय) उपयोगकर्ता बना रहा हूं। मुझे NETWORK SERVICE, LOCAL SERVICE, या LOCAL SYSTEM का उपयोग न करने के अच्छे कारण मिले हैं।

मैं के माध्यम से उपयोगकर्ता बना net user foobar "Abcd123!" /add- यह ठीक काम करता है।

इस बिंदु पर, c:\users\foobarमौजूद नहीं है।

यदि मैं उपयोगकर्ता की होम डायरेक्टरी बनाता हूं , तो उपयोगकर्ता द्वारा या तो लॉग ऑन करने से पहले (या, अधिक प्रासंगिक) या उपयोगकर्ता द्वारा शुरू की जाने वाली सेवा के लिए, विंडोज एक उपयोगकर्ता प्रोफ़ाइल बनाता है जिसका नाम है नेक्स्ट-डोर- c:\users\foobar-{gibberish/SID/whatever}यह एक प्रेडिक्टेबल नाम नहीं है।

मुझे एक .sshनिर्देशिका जैसी चीजों को शामिल करने के लिए उपयोगकर्ता के घर निर्देशिका की आवश्यकता है .gitconfig- एक उपकरण - जैसे कि (उन उपकरणों तक सीमित नहीं) जो यह धारणा बनाते हैं कि यह उनका उपयोग करने वाला व्यक्ति होगा, और इसलिए उपयोगकर्ता-कॉन्फ़िगरेशन अंदर जाता है ~/...। आमतौर पर, यूनिक्स विरासत से उपकरण।

वास्तविक प्रश्न

तो - क्या एक प्रोग्रामेटिक (अधिमानतः, पॉवरशेल, या आउट-ऑफ-द-बॉक्स कमांड-लाइन) तरीका है जो स्थानीय उपयोगकर्ता के लिए उपयोगकर्ता-प्रोफ़ाइल बनाने के लिए विंडोज को बता सकता है?

या, कोई और वर्कअराउंड?

चीजें जो मैंने अभी तक कोशिश की हैं:

  • एक एनएसएसएम प्रारंभ / प्री हुक जो उपयोगकर्ता के प्रोफाइल निर्देशिका में कहीं और से फ़ाइलों की प्रतिलिपि बनाता है, जो इस बिंदु पर मौजूद है कि विंडोज सेवा शुरू करने के गुण से , उपयोगकर्ता-प्रोफाइल का निर्माण करता है और स्टार्टअप से पहले हुक चलाने वाले एनएसएसएम आवरण को नियंत्रण सौंपता है।
  • वास्तविक उपयोगकर्ता-प्रोफ़ाइल निर्देशिका के अलावा कहीं और होने के लिए USERPROFILE पर्यावरण चर सेट करना। यह मुझे खतरनाक ऑफ-पिस्ट के रूप में प्रभावित करता है, लेकिन ठीक भी काम कर सकता है।

अन्य संदर्भ:

  • विंडोज सर्वर 2016, डेस्कटॉप अनुभव।
    • कोर / नैनो का उपयोग नहीं कर सकते।
  • खेलने में कोई सक्रिय निर्देशिका नहीं है। वहाँ नहीं होगा।
  • ये स्थानीय उपयोगकर्ता हैं।
  • मैं इसे Ansible के माध्यम से कर रहा हूं, जो विंडोज चीजों के लिए हुड के तहत पावरशेल का उपयोग कर रहा है। विशेष रूप से Win_user मॉड्यूल, Ansible 2.7.5 के साथ।
  • मैं C:\users\default(समतुल्य /etc/skel) बनाना नहीं चाहता , क्योंकि कुछ अलग सेवा-उपयोगकर्ता हैं और एक आकार सभी फिट नहीं होंगे। यह तब भी प्रभावित नहीं करता है जब उपयोगकर्ता-प्रोफ़ाइल बनाई जाती है, बस जब उसमें होगा तो क्या होगा।
  • मैं सेवाओं का प्रबंधन करने के लिए एनएसएसएम का उपयोग कर रहा हूं ।

चीजें जो मैंने कोशिश की हैं

  • सेवा शुरू करना और विंडोज को निर्देशिका बनाने की अनुमति देना
    • मैं ऐसा नहीं करना चाहता, क्योंकि सेवा शुरू करने से पहले रहस्यों की आवश्यकता होती है, और इसलिए यदि मैं अपनी छवि-पाक प्रक्रिया के अंदर ऐसा करता हूं, तो मुझे उन्हें साफ करने की आवश्यकता होगी, और यह भी सुनिश्चित करें कि मेरी सेवा नहीं है बेकिंग चरण के दौरान कोई भी काम। मैं उन दोनों अजीब सा बिट्स से बचना चाहता हूं।

1
क्या आपने विकल्प net userकी जाँच की है (जैसे /HOMEDIRया /PROFILEPATH)? । देख लो net user /help। मेरी (अप्रयुक्त) समझ से, आप उपयोगकर्ता के लिए एक निर्देशिका बना सकते हैं, और इसे /HOMEDIRस्विच के साथ होमेडिर के रूप में सेट कर सकते हैं ।
स्वेन

क्या मैं पूछ सकता हूं कि आपके पास ऐसा कौन सा उपयोग मामला है जो सक्रिय निर्देशिका से बचता है? AD से चीजें बहुत आसान हो जाएंगी। बस उत्सुक।
ओन्ड्रेज टुकनी

मैं एडी से बच रहा हूं क्योंकि मशीनें अल्पकालिक हैं; जीवन काल घंटों में मापा जाता है, दिनों से नहीं। मशीनें साफ कमरे के निर्माण-वातावरण की मेजबानी कर रही हैं। यदि वे आते हैं और जाते हैं, तो AD के अंदर और बाहर जुगाड़ करने वाली मशीनें बस इसके लायक नहीं होती हैं ( यदि आप इसे करने के इच्छुक हैं तो भी मध्यम.com/palantir/active-directory- as- code-e9666a2e548d देखें )।
दिसंबर को पीटर मूस

@ हाँ हाँ - दुख की बात यह है कि उनमें से न तो प्रोफ़ाइल स्वयं बनाई जाती है, भले ही वे रास्ता सेट करें।
पीटर मून

जवाबों:


23

Windows CreateProfile API का उपयोग करके उपयोगकर्ता-प्रोफ़ाइल ऑन-डिमांड बना सकता है

हालाँकि, यदि आप इस कार्रवाई को करने के लिए एक निष्पादन योग्य नहीं बनाना चाहते हैं, तो आप API को PowerShell में कॉल कर सकते हैं। दूसरों ने पहले ही कर लिया है: उदाहरण गितुब पर

कोड का प्रासंगिक भाग:

$methodName = 'UserEnvCP'
$script:nativeMethods = @();

Register-NativeMethod "userenv.dll" "int CreateProfile([MarshalAs(UnmanagedType.LPWStr)] string pszUserSid,`
  [MarshalAs(UnmanagedType.LPWStr)] string pszUserName,`
  [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszProfilePath, uint cchProfilePath)";

Add-NativeMethods -typeName $MethodName;

$localUser = New-Object System.Security.Principal.NTAccount("$UserName");
$userSID = $localUser.Translate([System.Security.Principal.SecurityIdentifier]);
$sb = new-object System.Text.StringBuilder(260);
$pathLen = $sb.Capacity;

Write-Verbose "Creating user profile for $Username";
try
{
    [UserEnvCP]::CreateProfile($userSID.Value, $Username, $sb, $pathLen) | Out-Null;
}
catch
{
    Write-Error $_.Exception.Message;
    break;
}

बहुत-बहुत धन्यवाद, यह मेरे लिए काम करता है। दूसरों के लिए ध्यान दें - रजिस्टर-नेटिवमेथोड और ऐड-नेटिवमेथोड्स फ़ंक्शन लिंक्ड जिस्ट में हैं।
पीटर मून

17

आपको बस उस उपयोगकर्ता के रूप में एक कमांड चलाने की ज़रूरत है, विंडोज प्रोफ़ाइल बनाएगा:

psexec.exe -u foobar -p Abcd123! cmd.exe /c exit

https://docs.microsoft.com/en-us/sysinternals/downloads/psexec


1
तो यहाँ क्या हो रहा है है psexec उपयोगकर्ता नाम और पासवर्ड के साथ निर्दिष्ट के तहत स्थानीय होस्ट से कनेक्ट करने की अपेक्षा की -uऔर -pऔर प्रक्षेपण के cmdतुरंत बस बाहर निकलने के लिए। क्या मैं कुछ भूल गया ? यह कुछ उल्टा लगता है - सिस्टम को किसी भी उपयोगकर्ता नाम और पासवर्ड के साथ जोड़ने में त्रुटि होनी चाहिए। वह कैसे काम करता है ?
सेर्गेई कोलोडियाज़नी

1
@SergiyKolodyazhnyy: आपको क्यों लगता है कि यह एक गैर-उपयोगकर्ता नाम और पासवर्ड है? यह वही है जिसका उपयोग प्रश्न में किया गया है, जाहिर है एक उदाहरण के रूप में ...
बेन Voigt

1
@BenVoigt खैर, मैंने सवाल के शीर्ष भाग को याद किया है। मैंने सोचा कि ओपी उपयोगकर्ता को भी बनाना चाहता था और यही जवाब देना चाहिए था। ताकि टिप्पणी का अंतिम हिस्सा गलतफहमी हो।
सर्गी कोलोडाज़नी

@BenVoigt हालांकि मेरे पास अभी भी एक सवाल है। ओपी ने उल्लेख किया "मैं C: \ users \ default बनाना नहीं चाहता"। तो इस विधि का उपयोग किए जाने पर उपयोगकर्ता की प्रोफ़ाइल कहां से आएगी और विंडोज विशिष्ट पूर्व-कॉन्फ़िगर निर्देशिका बनाने के लिए कैसे पता चलेगा यदि नहीं C:\users\defaults?
सर्गी कोलोडाज़नी

1
@SergiyKolodyazhnyy: बहुत यकीन है कि ओपी का मतलब है कि वह C: \ Users \ Default को अनुकूलित नहीं करना चाहता है ... ऐसा नहीं है कि यह पूरी तरह से गायब हो जाएगा। Windows होम निर्देशिका C: \ Users \ foobar को सादे वेनिला C: \ Users \ डिफ़ॉल्ट से कॉपी करके बनाएगा, फिर एक बार मौजूद होने के बाद OP, C: \ Users \ foobar पर अपनी विशेष सॉस लगा सकता है, जहां यह किसी अन्य को प्रभावित नहीं करेगा। उपयोगकर्ताओं।
बेन Voigt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.