Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??
#!/usr/local/bin/perl -w #-*-perl-*- # ------ Create a new user use strict; use Win32; use Win32::NetAdmin; use Win32API::Net; use Getopt::Std; use diagnostics; use vars qw( %Option %args %Account %Share @opts %Day %Daynames @logon +hours $Error ); my ($VERSION) = '$Revision: 2.0 $' =~ /([.\d]+)/; my $warnings = 0; # Print a usuage message on a unknown option. $SIG {__WARN__} = sub { if (substr ($_ [0], 0, 14) eq "Unknown option") {die "Usage"}; require File::Basename; $0 = File::Basename::basename ($0); $warnings = 1; warn "$0: @_"; }; $SIG {__DIE__} = sub { require File::Basename; $0 = File::Basename::basename ($0); if (substr ($_ [0], 0, 5) eq "Usage") { die <<EOF; $0 (NT Perl bin utils) $VERSION $0 [ -c comment ][ -f fullname ][ -h home dir ][ -m ][ -e expire ] [ -l logon script ][ -g group ][ -t logonhours] username EOF } die "$0: @_"; }; # Get the options. getopts ( 'c:f:h::e:l:G:g:t:m', \%Option ); # die "Usage" unless @ARGV; # don't waste time if the user exists my $Server = ""; Existance(); # set default values unless defined $Option{'h'} ||= "$ENV{SystemRoot}\\Profiles\\$ARGV[0]"; $Option{'c'} ||= "Normal User"; $Option{'f'} ||= ""; $Option{'e'} ||= "30"; $Option{'l'} ||= ""; $Option{'g'} ||= "Users"; $Option{'t'} ||= "0"; $Option{'E'} ||= "0"; # set up the account hash my $Level = "3"; %Account = ( 'acctExpires' => "-1", # 30 days, 'authFlags' => "", 'badPWCount' => "", 'codePage' => "", 'comment' => $Option{'c'}, 'countryCode' => "", 'flags' => "513", 'fullName' => $Option{'f'}, 'homeDir' => $Option{'h'}, 'homeDirDrive' => "", 'lastLogon' => "", 'lastLogoff' => "", 'logonHours' => $Option{'t'}, 'logonServer' => "", 'maxStorage' => "-1", 'name' => $ARGV[0], 'numLogons' => "", 'parms' => "", 'password' => 'testpassword', 'passwordAge' => "", 'passwordExpired' => $Option{'E'}, 'primaryGroupId' => "0x201", 'priv' => "1", 'profile' => "", 'scriptPath' => $Option{'l'}, 'unitsPerWeek' => "168", 'userId' => "", 'usrComment' => "$Option{'f'} - $Option{'c'}", 'workstations' => "", ); $Account{acctExpires} = time + ( $Option{'e'} * 8640 ) if exists $Opti +on{'e'}; # $Account{name} = $ARGV[0]; AddUser(); # AddUser2Group(); exit 1; sub Existance { if ( Win32::NetAdmin::UsersExist ( $Server, $ARGV[0] ) ) { print "$ARGV[0] exists on $Server ... nothing to do\n"; exit 1; } else { print "$ARGV[0] does not exist ... building ... "; } } sub AddUser { if ( ! Win32API::Net::UserAdd( $Server, $Level, \%Account, $Error ) ) { print "Sorry, something went wrong; error: $^E\n"; exit 1; } else { print "$Account{name} built ... \n"; } } sub AddUser2Group { if (!Win32::NetAdmin::LocalGroupAddUsers( $Server, $Option{'g'}, $Account{name} ) ) { print "Sorry, something went wrong: error: $^E\n"; exit 1; } print "added $Account{name} to group ... \n"; } sub MakeHome { %Share = ( 'path' => "c:\\home\\$Account{name}", 'netname' => "$Account{name}", 'maxusers' => -1, 'remark' => "$Account{full_name}", 'passwd' => "", 'current-users' => 0, 'permissions' => 0, 'type' => 0, ); mkdir ("\\\\$Server\\c\$\\home\\$Account{name}", 0777) || print "Error creating home dir: $!\n"; if ( Win32::NetResource::NetShareAdd( \%Share, my $Param, "\\\\$Server" ) ) { print "Successfully shared $Share{path} as $Share{netname}.\n"; } else { print "Failed to share $Share{path} as $Share{netname}.\n"; # Win32::NetResource::GetError( $Error2 ); # if( my $Error == ERROR_EXTENDED_ERROR ) # { # Win32::NetResource::WNetGetLastError( $Error, # my $Text, # my $Provider ); # $Text .= " ($Provider)"; # }else{ # $Text = Win32::FormatMessage( $Error ); # } # print "Error $Error: $Text"; } } sub LogonHours { @logonhours = ("000000000000000000000000", "000000000000000000000000", "000000000000000000000000", "000000000000000000000000", "000000000000000000000000", "000000000000000000000000", "000000000000000000000000"); %Day = ( "Su" => "0", "M" => "1", "T" => "2", "W" => "3", "Th" => "4", "F" => "5", "Sa" => "6", ); %Daynames = ( "Sunday" => "Su", "Monday" => "M", "Tuesday" => "T", "Wednesday" => "W", "Thursday" => "Th", "Friday" => "F", "Saturday" => "Sa", ); if (!@_) { die "Syntax!\n"; } @opts = split (/,/, $_[0]); if ($opts[0] =~ /all/i) { for (@logonhours) { s/0/1/g; } } else { while (@opts) { my ($first, $last); if ($opts[0] =~ /^[MTWF||Th||Sa||Su].*/i) { my $dow = ucfirst $opts[0]; if ($dow =~ /-/) { ($first, $last) = split (/-/, $dow); $last = ucfirst $last; if (exists $Daynames{$first}) { $first = $Daynames{$first}; } else { if (!exists $Day{$first}) { die "Invalid day syntax $first!\n"; } } if (exists $Daynames{$last}) { $last = $Daynames{$last}; } else { if (!exists $Day{$first}) { die "Invalid day syntax $last!\n"; } } if ($Day{$last} - $Day{$first} < 0) { push @opts, "Su-$last"; push @opts, $opts[1]; $last = "Sa"; } } else { if (exists($Daynames{$dow})) { $dow = $Daynames{$dow}; } elsif (!exists($Day{$dow})) { die "Invalid day syntax $last!\n"; } $first = $last = $dow; } shift @opts; } if ($opts[0] =~ /^[0-9]/) { if ($opts[0] =~ /-/) { my $time = $opts[0]; my ($begin, $end) = split (/-/, $time); if ($begin =~ s/pm//i) { if ($begin <= 12) { $begin = $begin + 12; } } elsif ($begin =~ s/am//i) { if ($begin == 12) { $begin = "0"; } } if ($end =~ s/pm//i) { if ($end < 12) { $end = $end + 12; } } elsif ($end =~ s/am//i) { if ($end == 12) { $end = "23"; } } if ($end - $begin < 0) { die "Invalid time syntax in $time\n"; } for (my $q = $Day{$first}; $q <= $Day{$last}; $q++) { my $bitstr = "0"; if ($begin == "0") { $bitstr = "1"; } for (my $i = 1; $i <= 23; $i++) { if ($i < $begin || $i > $end) { $bitstr = $bitstr . "0"; } else { $bitstr = $bitstr . "1"; } } $logonhours[$q] = $bitstr; } shift @opts; } else { die "Invalid time syntax: $opts[0]\n"; } } else { die "Invalid time syntax: $opts[0]\n"; } } } # foreach (@logonhours) { # print $_ . "\n"; # } my $LogonHours = pack("b168", join ('', @logonhours)); return $LogonHours; # print $LogonHours ."\n"; }

In reply to useradd for NT by idnopheq

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others rifling through the Monastery: (2)
    As of 2021-01-23 09:12 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?
      Notices?