Here is a small PowerShell script that I have written today, this is a GUI interface script that will help you create a FTP user with folder and will configure the permissions fore IIS:
[System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) ########################################################## ## ## ## -- SIGNATURE -- ## ## ## $Company = 'PKM-Technology' ## $PoweredBye = 'Pouyan Khabazi' ## $Date = '30-05-2013' ## $Version = 'V1' ## ## ## ## ## ########################################################## [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') [void] [System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') $FieldBackGround = [System.Drawing.Color]::'Transparent' $objForm = New-Object System.Windows.Forms.Form $objForm.Text = $Company + ' Create FTP User ' + $Version + ' | (' + $PoweredBye + ')' $objForm.Size = New-Object System.Drawing.Size(400,400) $objForm.MinimizeBox = $false $objForm.MaximizeBox = $false $objForm.ControlBox = $false $objForm.StartPosition = 'CenterScreen' $objForm.FormBorderStyle = 'FixedDialog' $objForm.KeyPreview = $True $objForm.AllowTransparency = $true ##Styling $Font = New-Object System.Drawing.Font('Times New Roman','9') $LabelUserName = New-Object System.Windows.Forms.Label $LabelUserName.Location = New-Object System.Drawing.Size(20,150) $LabelUserName.Size = New-Object System.Drawing.Size(80,20) $LabelUserName.BackColor = $FieldBackGround $LabelUserName.Text = 'User name: ' $objForm.Controls.Add($LabelUserName) $TextboxUserName = New-Object System.Windows.Forms.TextBox $TextboxUserName.Location = New-Object System.Drawing.Size(100,150) $TextboxUserName.Size = New-Object System.Drawing.Size(200,25) $TextboxUserName.Text = '' $objForm.Controls.Add($TextboxUserName) $LabelFullName = New-Object System.Windows.Forms.Label $LabelFullName.Location = New-Object System.Drawing.Size(20,180) $LabelFullName.Size = New-Object System.Drawing.Size(80,20) $LabelFullName.BackColor = $FieldBackGround $LabelFullName.Text = 'Full name: ' $objForm.Controls.Add($LabelFullName) $TextboxFullName = New-Object System.Windows.Forms.TextBox $TextboxFullName.Location = New-Object System.Drawing.Size(100,180) $TextboxFullName.Size = New-Object System.Drawing.Size(200,25) $TextboxFullName.Text = '' $objForm.Controls.Add($TextboxFullName) $LabelPassword = New-Object System.Windows.Forms.Label $LabelPassword.Location = New-Object System.Drawing.Size(20,210) $LabelPassword.Size = New-Object System.Drawing.Size(80,20) $LabelPassword.BackColor = $FieldBackGround $LabelPassword.Text = 'Password: ' $objForm.Controls.Add($LabelPassword) $TextboxPassword = New-Object System.Windows.Forms.TextBox $TextboxPassword.Location = New-Object System.Drawing.Size(100,210) $TextboxPassword.Size = New-Object System.Drawing.Size(200,25) $TextboxPassword.Text = '' $TextboxPassword.PasswordChar = '*' $objForm.Controls.Add($TextboxPassword) $ButtonCreate = New-Object Windows.Forms.Button $ButtonCreate.Location = New-Object System.Drawing.Size(100,320) $ButtonCreate.Size = New-Object System.Drawing.Size(100,25) $ButtonCreate.text = 'Create user' $ButtonCreate.add_click({ $userName = $TextboxUserName.Text $fullName = $TextboxFullName.Text $password = $TextboxPassword.Text $ftpFolder = "C:inetpubftproot" + $userName $Computer = [ADSI]"WinNT://$Env:COMPUTERNAME,Computer" #Local user if user exict $x = $Computer.psbase.Children | Where-Object {$_.psbase.schemaclassname -eq "user"} | select Name foreach ($user in $x) { if ($user.Name -eq $userName){ #Write-Host User $user.name already exists $d = [Windows.Forms.MessageBox]::Show('User ' + $userName + ' already exists, please select another username!', [Windows.Forms.MessageBoxButtons]::OK) Return } } # Local user account creation: $TestUser = $Computer.Create("User", $userName) $TestUser.SetPassword($password) $TestUser.SetInfo() $TestUser.FullName = $fullName $TestUser.SetInfo() $TestUser.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD $TestUser.SetInfo() # Add user to local group $group = [ADSI]"WinNT://./FTP_USERS,group" $group.Add("WinNT://$userName,user") # Create the FTP folder New-Item -ItemType directory -Path $ftpFolder -Force # Set permission on the folder $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" $propagation = [system.security.accesscontrol.PropagationFlags]"None" $acl = Get-Acl $ftpFolder $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($userName, "Modify", $inherit, $propagation, "Allow") $acl.AddAccessRule($accessrule) Set-Acl -AclObject $acl $ftpFolder $d = [Windows.Forms.MessageBox]::Show('User '+ $userName +' is created successfully! Do you want to close application?', 'Exit', [Windows.Forms.MessageBoxButtons]::YesNo) if ($d -eq [Windows.Forms.DialogResult]::Yes){ $objForm.Close() } else {} }) $objForm.controls.add($ButtonCreate) ##CLOSE BUTTON $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Size(220,320) $CancelButton.Size = New-Object System.Drawing.Size(75,25) $CancelButton.Text = 'Close' $CancelButton.Add_Click({ $d = [Windows.Forms.MessageBox]::Show('Are you shore you want to close the application?', 'Exit', [Windows.Forms.MessageBoxButtons]::YesNo) if ($d -eq [Windows.Forms.DialogResult]::Yes){ $objForm.Close() } else {} }) $objForm.Controls.Add($CancelButton) $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog()
Well you can use the script to start the GUI both you can also convert this to a EXE file, to convert the script to a EXE you can download PS2EXE
Now you can run the coede below to confert the PS1 file to a EXE file
- Start powershell in version 2 (if you are running version 3)
powershell.exe -version 2
- Browse to the folder where you unzipt the PS2EXE and run the code
cd c:PS2EXE ps2exe.ps1 -inputFile C:ScriptsFTPuser.PS1 -outputFile C:ScriptsFTPuser.exe -noConsole
~pouyan