2016-08-12 116 views
0

我需要调整此脚本以从CSV创建一批本地用户,但跳过已经创建的帐户。我可以建立得很好,但如何我省略已经存在从csv创建本地帐户,但如何省略已创建的帐户?

$computer = $Env:ComputerName 
$text = "C:\accounts.csv" 
$user = import-csv -path $text 
    foreach($strUser) in $user) 
{ 
$user = $struser.user 
$password = $struser.password 
$description = $struser.description 
$group = $struser.group 
Clear-Host 
$ObjOU = [ADSI]"WinNT://$computer" 
$objUser = $objOU.Create("User", $user) 
$objUser.setpassword($password) 
$objUser.put("description",$description) 
$objUser.SetInfo() 
$objGroup = [ADSI]"WinNT://$computer/$group" 
$objGroup.add("WinNT://$computer/$user") 
$objGroup.SetInfo() 
} 
+0

它失败,原因是您必须提供有关的右手侧的值表达式“ - ”操作。 在C:\ Windows \ TEMP \ AltirisScript0B427C10272370E8748.ps1:12 char:12 + If($ user - <<<< notin($ ObjOU.Children | Where {{_。SchemaClassName -eq'user'} )) + CategoryInfo:ParserError:(:) [],ParseException + FullyQualifiedErrorId:ExpectedValueExpression – CrumBum

+0

我会为此使用什么表达式? – CrumBum

回答

0
#setting Variables 
$computer = $Env:ComputerName 
$text = "C:\ProgramData\Bridge Operators.csv" 
$user = import-csv -path $text 
foreach($strUser in $user) 
{ 
$user = $struser.user 
$password = $struser.password 
$description = $struser.description 
$group = $struser.group 
Clear-Host 
##First check if user exists 
$objComputer = [ADSI]"WinNT://$computer,computer" 
$colUsers = ($objComputer.psbase.children | Where-Object {$_.psBase.schemaClassName -eq "User"} | Select-Object -expand Name) 
$userFound = $colUsers -contains $user 
if (! $userFound) { 
    write-host "The $user account did not exist." 
    write-host "Creating $user" 
$ObjOU = [ADSI]"WinNT://$computer" 
$objUser = $objOU.Create("User", $user) 
$objUser.setpassword($password) 
$objUser.put("description",$description) 
$objUser.SetInfo() 
$objGroup = [ADSI]"WinNT://$computer/$group" 
$objGroup.add("WinNT://$computer/$user") 
$objGroup.SetInfo() 
} 
else { 
    write-host "$user account exists." 
    write-host "skipping" 
}} 
0

本地帐户,您可以得到的信息,你已经拉动本地用户帐户的列表。然后在创建用户之前仅对其进行过滤。

$computer = $Env:ComputerName 
$text = "C:\accounts.csv" 
$user = import-csv -path $text 
$ObjOU = [ADSI]"WinNT://$computer" 
    foreach($strUser in $user) 
{ 
$user = $struser.user 
$password = $struser.password 
$description = $struser.description 
$group = $struser.group 
Clear-Host 
If($user -notin ($ObjOU.Children|Where{$_.SchemaClassName -eq 'user'}).Name){ 
    $objUser = $objOU.Create("User", $user) 
    $objUser.setpassword($password) 
    $objUser.put("description",$description) 
    $objUser.SetInfo() 
} 
$objGroup = [ADSI]"WinNT://$computer/$group" 
$objGroup.add("WinNT://$computer/$user") 
$objGroup.SetInfo() 
} 
+0

我很感激帮助 - 所以它不喜欢IF声明,也不会创建账户。它希望在' - '运算符的右侧有一个值表达式。 11 char 12. – CrumBum

+0

FIXED!它现在创建该帐户,如果未找到并跳过任何已创建的帐户。 – CrumBum