2013-07-12 8 views
6

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

मेरे स्क्रिप्ट अब तक यह है: -

# Create User and add to IGNITEWEBUSERS Group 
$user = $domain 

# If more then 15 chars trim to just 15 chars 
$user = $user.substring(0, 15) 
$user = $user + "_web" 

# Generate Random Complex Password 
# Generate a password with 2 non-alphanumeric character. 
$Length = 10 
$Assembly = Add-Type -AssemblyName System.Web 
$RandomComplexPassword = [System.Web.Security.Membership]::GeneratePassword($Length,2) 
$password = $RandomComplexPassword 

$group = 'IGNITEWEBUSERS' 
$objOu = [ADSI]"WinNT://$computer" 
$objUser = $objOU.Create("User", $user) 
$objUser.setpassword($password) 
$objUser.SetInfo() 
$objUser.description = $domain + " IIS User" 
$objUser.SetInfo() 
$OBjOU = [ADSI]"WinNT://$computer/$group,group" 
$OBjOU.Add("WinNT://$computer/$user") 

यही काम करता है और यह क्या करना चाहिए लेकिन किसी को भी कैसे मैं उन 2 चेक बॉक्स सेट कर सकते हैं पता है? विभिन्न धागे Set-ADUser -CannotChangePassword:$true के समान कुछ सुझाते हैं लेकिन सक्रिय निर्देशिका का उपयोग नहीं कर रहे हैं और यह काम नहीं करता है।

आपका सलाह पॉल

उत्तर

8

समझे यह आज सुबह पता लगा: -

$objUser.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD 
+0

नहीं बिल्कुल स्पष्ट है यह! –

0

उपयोग WMI

सराहना उपयोगकर्ता खाता प्राप्त करने के लिए:

# Use this filter so WMI doesn't spend forever talking to domain controllers. 
$user = Get-WmiObject Win32_UserAccount -Filter ("Domain='{0}' and Name='{1}'" -f $env:ComputerName,$Username) 
$user.PasswordChangeable = $false 
$user.PasswordExpires = $false 
$user.Put() 
+0

मैं जब जोड़ने निम्न त्रुटियों मिलता है कि ... संपत्ति 'PasswordChangeable' इस वस्तु पर नहीं पाया जा सकता; सुनिश्चित करें कि यह मौजूद है और सेटटेबल है। संपत्ति 'पासवर्ड एक्स्पायर्स' इस ऑब्जेक्ट पर नहीं मिल सकती है; सुनिश्चित करें कि यह मौजूद है और सेटटेबल है। आप एक शून्य-मूल्यवान अभिव्यक्ति पर एक विधि को कॉल नहीं कर सकते हैं। + $ उपयोगकर्ता। पुट <<<<() –

+0

'सदस्य बनने' के लिए '$ उपयोगकर्ता' पास करें और देखें कि उसके पास क्या गुण हैं, उदा। '$ उपयोगकर्ता | Get-Member'। –

+0

मुझे 'सदस्य-सदस्य cmdlet को कोई ऑब्जेक्ट निर्दिष्ट नहीं किया गया है'। जैसा कि आप शायद बता सकते हैं कि मैं शक्तियों के लिए बहुत नया हूं इसलिए आसान हो जाएं :) –

4

userAccountControl संपत्ति सेट करें। http://support.microsoft.com/kb/305144

66112 के लिए कुल झंडे आप चाहते हैं (NORMAL_ACCOUNT = 512, PASSWD_CANT_CHANGE = 64, DONT_EXPIRE_PASSWORD = 65536) के मूल्यों को जोड़ें, और उस नंबर पर गुण सेट: आप userAccountControl झंडे यहाँ की एक सूची प्राप्त कर सकते हैं:

$obUser.useraccountcontrol = 66112 

BTW, आप केवल, अंत में() विधि एक बार SetInfo कॉल करने के लिए सभी गुण आप सेट करना चाहते सेट करने के बाद की जरूरत है।

+0

मुझे निम्न त्रुटि मिलती है: E: \ Domains \ ignite.flinthosts.co.uk \ wwwroot \ domains \ process \ Domain> PowerShell.exe -noexit E: \ process \ Domain \ createuser.ps1 वैल्यू प्रॉपर्टी सेट नहीं कर सकता "System.Management.Automation.PSMethod" प्रकार का PSMemberInfo ऑब्जेक्ट। ई: \ प्रक्रिया \ डोमेन \ createuser.ps1: 24 char: 10 + $ objUser पर। <<<< userAccountControl = 66112 + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: PropertyAssignmentException –

+0

समझे यह आज सुबह पता लगा - $ objUser.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD –

संबंधित मुद्दे