Asked by:
Combining Powershell Scripts

General discussion
-
Hi there please can you help i have two powershell scripts that work individually but, when i try running them together I get an error on the first one.
the first script creates AD users the second Script creates homedectory and folder. I new to powershell so i dont fully understand why the work on their own but not together.
This is the error message:
param : The term 'param' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the
path is correct and try again.
At C:\shares\demos\setup\New user Test.ps1:78 char:1
+ param([Parameter(Mandatory=$true)][String]$samAccountName)
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (param:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundExceptionThis is the first script
Import-Module activedirectory
#Store the data from ADUsers.csv in the $ADUsers variable
$ADUsers = Import-csv C:\shares\demos\setup\NewUser_Accounts.csv
#Loop through each row containing user details in the CSV file
foreach ($User in $ADUsers)
{
#Read user data from each field in each row and assign the data to a variable as below
$Username = $User.username
$Password = $User.password
$Firstname = $User.firstname
$Lastname = $User.lastname
$OU = "$Use.OU"
$email = $User.email
$streetaddress = $User.streetaddress
$city = $User.city
$zipcode = $User.zipcode
$state = $User.state
$country = $User.country
$telephone = $User.telephone
$jobtitle = $User.jobtitle
$company = $User.company
$department = $User.department
$l = $user.Office
$Password = $User.Password
#Check to see if the user already exists in AD
if (Get-ADUser -F {SamAccountName -eq $Username})
{
#If user does exist, give a warning
Write-Warning "A user account with username $Username already exist in Active Directory."
}
else
{
#User does not exist then proceed to create the new user account
#Account will be created in the OU provided by the $OU variable read from the CSV file
New-ADUser `
-SamAccountName $Username `
-UserPrincipalName "$Username@wiredbrain.priv" `
-Name "$Firstname $Lastname" `
-GivenName $Firstname `
-Surname $Lastname `
-Enabled $True `
-DisplayName "$Lastname, $Firstname" `
-Path $User.ou `
-City $city `
-Company $company `
-State $state `
-StreetAddress $streetaddress `
-OfficePhone $telephone `
-EmailAddress $email `
-Title $jobtitle `
-Department $department `
-office $l `
-AccountPassword (convertto-securestring $Password -AsPlainText -Force) -ChangePasswordAtLogon $True
}
}Then I add the create home directory script below it ( it dosnt like both scrpts running all at once )
#This Script sets creates an home drive folder and then sets the drive letter and folder path
param([Parameter(Mandatory=$true)][String]$samAccountName)
$fullPath = "c:\shares\demos\setup\Home01\ {0}" -f $samAccountName
$driveLetter = "M:"
$User = Get-ADUser -Identity $samAccountName
if($User -ne $Null) {
Set-ADUser $User -HomeDrive $driveLetter -HomeDirectory $fullPath -ea Stop
$homeShare = New-Item -path $fullPath -ItemType Directory -force -ea Stop
$acl = Get-Acl $homeShare
$FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify"
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
$PropagationFlags = [System.Security.AccessControl.PropagationFlags]"InheritOnly"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
$acl.AddAccessRule($AccessRule)
Set-Acl -Path $homeShare -AclObject $acl -ea Stop
Write-Host ("HomeDirectory created at {0}" -f $fullPath)
}
thanks for you advice
regards
Nick
- Changed type Bill_Stewart Wednesday, May 9, 2018 2:42 PM
- Moved by Bill_Stewart Wednesday, May 9, 2018 2:42 PM This is not "merge scripts for me" forum
Tuesday, March 20, 2018 5:36 PM
All replies
-
i dont fully understand why the work on their own but not together.
Because you can't copy-and-paste two scripts together and just expect it to somehow magically work.
In your case, you are much better off creating a separate script that runs the two working scripts.
-- Bill Stewart [Bill_Stewart]
- Edited by Bill_Stewart Tuesday, March 20, 2018 6:02 PM
Tuesday, March 20, 2018 6:01 PM -
To add: Doing what you ask would require a complete re-write of both scripts. The issue with running them from a third script has an issue as the second script runs for one user account and the first is a file driven batch.
I suggest using this as an excuse to sit down and learn PowerShell. By the time you understand how to do this you will be very good at PowerShell.
These resources will get you going.
\_(ツ)_/
Tuesday, March 20, 2018 11:14 PM -
Thanks for the advise Bill
I will take on board what you said
Wednesday, March 21, 2018 4:45 PM