Generate a Function Script

This topic contains 4 replies, has 2 voices, and was last updated by  Ryan Nearhood 3 years, 5 months ago.

  • Author
    Posts
  • #13446

    Ryan Nearhood
    Participant

    I need to generate a function script that creates a folder using a username passed to it through a parameter. Also it can't make duplicates by making one that already exists, because that would make it a lot harder for me. I then want it to generate a txt called TextFile.txt and save it to the folder being created. Next it has to write the file with first and last name as well as some basic contact information, such as phone number, city, state, zip. Any help would be appreciated.

  • #13449

    Dave Wyatt
    Moderator

    There are functions, and there are scripts. I'm not sure what you mean by a "function script." The rest of it is pretty straightforward, but there are a couple details left out:

    • What should the script do if the folder already exists? Generate a unique folder name? Create the TextFile.txt file in the existing folder? Do nothing?
    • Where is the script getting all of that additional contact information for the text file? Is that being passed to it as a parameter as well, or should it be querying Active Directory, or something along those lines?
  • #13451

    Ryan Nearhood
    Participant

    Sorry for it being confusing, I need a script.
    1. I need it to send something along the lines of an error message saying that the name already exists.
    2. The user should be able to input the the additional contact information by typing it in.It doesn't have to be super fancy. It should be passed to it as a parameter.

  • #13452

    Dave Wyatt
    Moderator

    OK, something along these lines should get you started:

    [CmdletBinding()]
    param (
        [string]
        $Path = '.',
    
        [Parameter(Mandatory = $true)]
        [string]
        $UserName,
    
        [Parameter(Mandatory = $true)]
        [string]
        $FirstName,
    
        [Parameter(Mandatory = $true)]
        [string]
        $LastName,
    
        [Parameter(Mandatory = $true)]
        [string]
        $PhoneNumber,
    
        [Parameter(Mandatory = $true)]
        [string]
        $City,
    
        [Parameter(Mandatory = $true)]
        [string]
        $State,
    
        [Parameter(Mandatory = $true)]
        [string]
        $Zip
    )
    
    $targetFolder = Join-Path -Path $Path -ChildPath $UserName
    
    if (Test-Path -LiteralPath $targetFolder)
    {
        throw "'$targetFolder' already exists."
    }
    
    $null = New-Item -Path $targetFolder -ItemType Directory -ErrorAction Stop
    
    $text = @"
    Name: $FirstName $LastName
    Phone: $PhoneNumber
    City: $City
    State: $State
    Zip: $Zip
    "@
    
    $fileName = Join-Path -Path $targetFolder -ChildPath 'TextFile.txt'
    
    $text | Out-File -LiteralPath $fileName -ErrorAction Stop
    

    I made all of the contact information parameters mandatory, but you can change that if you'd like. Calling the script would look something like this:

    .\ScriptName.ps1 -Path $home\Documents\ContactInfo -UserName SomeUser -FirstName Dave -LastName Wyatt -PhoneNumber 555-555-5555 -City Nowhere -State Michigan -Zip 12345
    
  • #13455

    Ryan Nearhood
    Participant

    Thank you very much. This works perfectly.

You must be logged in to reply to this topic.