2014-09-26 2 views
0

지난 번 질문에서 언급했듯이 저는 PowerShell을 처음 사용하고 새로운 사용자 생성을위한 약간의 Frankenstein 스크립트를 함께 사용했습니다. new-aduser를 사용하여 사용자를 만드는 데는 문제가 없지만 'new-mailbox'cmdlet을 추가하려고하면 'sytems.collections.hashtable'이 만들어지고 스크립트 오류가 발생합니다. 나는 그것이 해시 테이블을 다루지 않는 mailbox cmdlet과 관련이 있다고 추정한다. 해쉬 테이블을 새로운 메일 박스에 보내고 set-aduser에 파이프를 전달하는 방법이 있는가, 아니면 할 수없는 것을 시도하고 있는가? 내가하려는 일을 성취하기위한 쉬운 방법이 있습니까? 현재 Powershell ISE를 내 Exchange 서버에 pssession과 함께 사용하고 있습니다. 모든 조언/팁/비판을 환영하며 대단히 감사합니다.Hashtable의 새로운 사용자 및 사서함

Function Provision { PROCESS { CreateUser $_ } } 

Function ProvisionInputCSV { 
Param ([string]$filename) 
$users = Import-CSV $filename 
foreach ($user in $users) { 
$ht = @{'givenName'=$user."First Name"; 
     'sn'= $user."Last Name"; 
     'displayName'= $user."Last Name" + " ," + " " + $user."First Name"; 
     'samAccountName'= $user."Logon Name"; 
     'title'= $user."title"; 
     'description'= $user."Description"; 
     'department'= $user."Department"; 
     'company'= $user."Company"; 
     'password'= ConvertTo-SecureString -AsPlainText $user.Password -force; 
     'userprincipalname'= $user.userprincipalname; 
     'employeeid'= $user.employeeid 

     } 
Write-Output $ht 
} 
}    

Function CreateUser { Param($user) New-Mailbox $user -Database "StaffDB1" -alias  $user.samaccountname -password $user.password -UserPrincipalName $user.userprincipalname -OrganizationalUnit "ou=users,dc=mydomain,DC=com" -ResetPasswordOnNextLogon $true -DisplayName $user.displayname | Set-Mailbox -CustomAttribute5 "AA" | Set-ADUser -GivenName $user.givenname -Surname $user.surname -DisplayName $user.displayname -EmployeeID $user.employeeid -Description $user.description -Department $user.department -Company $user.company -UserPrincipalName $user.userprincipalname -Enabled $true} 

ProvisionInputCSV c:\users\newusers.csv | Provision 

답변

1

그래서, 내 코드를 검토하는 등 세트 - aduser, 새로운 사서함 설정 사서함, 주변에 재생 후, 나는 마침내 내 문제를 해결할 수 있었다 - 특정 AD 속성을 가진 새로운 사용자를 생성 그것을 메일로 가능하게한다. 아래는 흥미가있는 사람을 위해 지금까지 작동하는 것으로 보이는 최종 코드입니다 .. Patrick에게 두 번째 비트에 대한 도움을 주셔서 감사드립니다.

#Create New User Accounts 

Function Provision { PROCESS { CreateUser $_ } } 

Function ProvisionInputCSV { 
Param ([string]$filename) 
$users = Import-CSV $filename 
foreach ($user in $users) { 
$ht = @{'givenName'=$user."First Name"; 
     'sn'= $user."Last Name"; 
     'displayName'= $user."Last Name" + " ," + " " + $user."First Name"; 
     'samAccountName'= $user."Logon Name"; 
     'title'= $user."title"; 
     'description'= $user."Description"; 
     'department'= $user."Department"; 
     'company'= $user."Company"; 
     'password'= ConvertTo-SecureString -AsPlainText $user.Password -force; 
     'upn'= $user.userprincipalname; 
     'employeeid'= $user.employeeid 

     } 
Write-Output $ht 
} 
}    

Function CreateUser { Param($user) New-ADUser –name ($user['sn'] + ',' + ' ' + $user['givenname']) -givenname $user.givenname -surname $user.sn -DisplayName $user.displayname -SamAccountName $user.samaccountname -UserPrincipalName $user.upn -employeeid $user.employeeid -Description $user.description -title $user.title -Department $user.department -Company $user.company -accountpassword $user.password -path 'ou=Students,ou=Business Users,DC=mydomain,DC=com' -ChangePasswordAtLogon $true -enabled $true} 


ProvisionInputCSV c:\filepath\newusers.csv | Provision 


#Enable mailboxes for Existing Users 

$Mailboxes = Import-CSV c:\filepath\newusers.csv 

ForEach ($Mailbox In $Mailboxes) { Enable-Mailbox -identity ($mailbox."Logon Name") -DisplayName ($Mailbox."Last Name" + " ," + " " + $Mailbox."First Name") -Database "MyDB1" -alias ($mailbox."Logon Name") | Set-Mailbox -CustomAttribute5 "AA" } 
0

해시 테이블을 만들고이를 파이프와 함께 명령에 전달합니다. 하지만 해시 테이블 ($ _. givenname)의 propertys를 사용하지 않는 명령에서는 csv ($ user.givenname)의 데이터 propertys를 사용합니다. 나는 이것이 하나의 이성이라고 생각한다. 이 스 니펫을 사용해 볼 수 있습니까? 나는 코드를 쪼개었다.

$users = Import-CSV $filename 
foreach ($user in $users) { 
    $ht = @{ 
     'givenName'=$user."First Name"; 
     'sn'= $user."Last Name"; 
     'displayName'= $user."Last Name" + " ," + " " + $user."First Name"; 
     'samAccountName'= $user."Logon Name"; 
     'title'= $user."title"; 
     'description'= $user."Description"; 
     'department'= $user."Department"; 
     'company'= $user."Company"; 
     'password'= ConvertTo-SecureString -AsPlainText $user.Password -force; 
     'userprincipalname'= $user.userprincipalname; 
     'employeeid'= $user.employeeid 
    } 

    #Do exchange things 
    New-Mailbox -Database "StaffDB1" -alias $ht.samaccountname -password $ht.password -UserPrincipalName $ht.userprincipalname` 
     -OrganizationalUnit "ou=users,dc=mydomain,DC=com" -ResetPasswordOnNextLogon $true -DisplayName $ht.displayname | Set-Mailbox -CustomAttribute5 "AA" 

    #Do ad things 
    Set-ADUser -GivenName $ht.givenname -Surname $ht.surname -DisplayName $ht.displayname` 
     -EmployeeID $ht.employeeid -Description $ht.description -Department $ht.department -Company $ht.company -UserPrincipalName $ht.userprincipalname -Enabled $true 

}    
+0

감사합니다. Patrick. New-Mailbox의 -Name 속성을 설정하기위한 원래 코드가 있습니다 (원래 $ user 변수를 사용했습니다). 사서함이 만들어지고 사용자 지정 특성이 설정되지만 set-aduser는 건너 뜁니다. 또한 Set-Aduser가 허용하지 않는 생성시에 'EmployeeID'와 같은 광고 속성을 설정할 수 있어야합니다. new-aduser를 새 사서함에 파이프하는 방법이 있는지 알고 있습니까? – xyz1234