2013-07-12 33 views
6

Tôi có tập lệnh tạo người dùng và gán mật khẩu và người dùng cho nhóm nhưng tôi cần nhận 2 hộp kiểm được chọn - 'Người dùng không thể thay đổi mật khẩu' và 'Mật khẩu không bao giờ hết hạn' nhưng đối với cuộc sống của tôi Tôi không thể tìm ra cách để làm điều này.Thay đổi thuộc tính người dùng trong powershell

Kịch bản của tôi cho đến nay là thế này: -

# 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") 

đó làm việc và làm những gì nó nên làm nhưng ai biết làm thế nào tôi có thể thiết lập những 2 hộp kiểm? Chủ đề khác nhau đề xuất một cái gì đó tương tự như Set-ADUser -CannotChangePassword:$true nhưng không sử dụng Active Directory và điều này không hoạt động.

lời khuyên của bạn được đánh giá cao

Paul

Trả lời

8

Got nó đã tìm ra sáng nay: -

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

Không chính xác rõ ràng là nó! –

0

Sử dụng WMI để có được tài khoản người dùng:

# 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

tôi nhận được các lỗi sau đây khi thêm rằng ... tài sản 'PasswordChangeable' không thể được tìm thấy trên đối tượng này; chắc chắn rằng nó tồn tại và có thể cài đặt được. Không thể tìm thấy thuộc tính 'PasswordExpires' thuộc tính này; chắc chắn rằng nó tồn tại và có thể cài đặt được. Bạn không thể gọi phương thức trên biểu thức có giá trị bằng không. + $ user.Put <<<<() –

+0

Chuyển '$ user' thành' Get-Member' và xem thuộc tính nào, ví dụ: '$ người dùng | Get-Member'. –

+0

Tôi nhận được 'không có đối tượng nào được chỉ định cho lệnh ghép ngắn thành viên'. Như bạn có thể có thể nói tôi rất mới để powershell nên đi dễ dàng :) –

4

Đặt userAccountControl tài sản. Bạn có thể tìm thấy một danh sách các userAccountControl cờ ở đây: http://support.microsoft.com/kb/305144

Thêm các giá trị của những lá cờ mà bạn muốn (NORMAL_ACCOUNT = 512, PASSWD_CANT_CHANGE = 64, DONT_EXPIRE_PASSWORD = 65536) với tổng số 66.112, và thiết lập các thuộc tính vào con số đó:

$obUser.useraccountcontrol = 66112 

BTW, bạn chỉ cần gọi SetInfo() phương pháp một lần cuối cùng, sau khi cài đặt tất cả các thuộc tính bạn muốn thiết lập.

+0

Tôi nhận được lỗi sau: E: \ Domains \ ignite.flinthosts.co.uk \ wwwroot \ domains \ processes \ Domain> PowerShell.exe -noexit E: \ processes \ Domain \ createuser.ps1 Không thể đặt thuộc tính Giá trị cho Đối tượng PSMemberInfo thuộc loại "System.Management.Automation.PSMethod". Tại E: \ processes \ Domain \ createuser.ps1: 24 char: 10 + $ objUser. <<<< userAccountControl = 66.112 + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: PropertyAssignmentException –

+0

Got nó đã tìm ra sáng nay - $ objUser.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD –

Các vấn đề liên quan