/NameIT

PowerShell module for randomly generating data

Primary LanguagePowerShellMIT LicenseMIT

PowerShell NameIT

PowerShell module for randomly generating names

This project is a port of https://github.com/mitchdenny/namerer. Hat tip to Mitch Denny.

v2.3.3

v2.3.2

  • Added job to template
ig '[person],[job]' -count 3

Alexandria Stephens,Biologist
Braiden Patel,Social media coordinator
Mya Perez,Principal

v2.3.2

Göran Hanell added names and color in Swedish.

ig '[color]' -Culture sv-SE -Count 5

grön
vit
orange
grå
rosa
ig '[person]' -Culture sv-SE -Count 5

Helen Holmberg
Sten Samuelsson
Sven Abrahamsson
Mona Ahmed
Anette Dahlberg

v2.3.0

  • Added
# Run on 12/31/2020

$templates = $(
    'ThisQuarter'
    'q1', 'q3', 'q3', 'q4'
    'Today', 'Tomorrow', 'Yesterday'
    'February', 'April', 'October'
)

foreach ($template in $templates) {
    $template | ForEach-Object {
        [PSCustomObject]@{
            Template = $_
            Result   = Invoke-Generate "$_" 
        }
    }
}

Prints

Generates these random dates.

Template    Result
--------    ------
ThisQuarter 10/23/2020
q1          3/15/2020
q3          7/12/2020
q3          9/18/2020
q4          10/12/2020
Today       12/31/2020
Tomorrow    1/1/2021
Yesterday   12/30/2020
February    2/15/2020
April       4/13/2020
October     10/8/2020
Item Description
January Generate a random date for this month
February Generate a random date for this month
March Generate a random date for this month
April Generate a random date for this month
May Generate a random date for this month
June Generate a random date for this month
July Generate a random date for this month
August Generate a random date for this month
September Generate a random date for this month
October Generate a random date for this month
November Generate a random date for this month
December Generate a random date for this month
ThisQuarter Generate a random date for this quarter
Q1 Generate a random date for Q1
Q2 Generate a random date for Q2
Q3 Generate a random date for Q3
Q4 Generate a random date for Q4
LastQuarter Generate a random date for last quarter
NextQuarter Generate a random date for next quarter
Today Generate todays date
Tomorrow Generate tomorrows date
Yesterday Generate yesterdays date

April 2019 - 2.1.0

Language/Culture can be passed directly to Invoke-Generate, which will apply to everything without an explicit override.

ig "[color][space][color en-GB]" -Culture ja-JP

This is especially easier when there's lots of arguments you have to get through to get to specify culture (last).

ig "[randomdate]"                                           # implicitly uses culture short date format
ig "[randomdate 1/1/1999 12/31/1999 'yyyy-MM-dd' ja-JP]"    # can't use culture format this way, have to specify format explicitly
ig "[randomdate]" -Culture ja-JP                            # lets the other arguments remain optional
  • Fixed module auto-loading from a regression in 2.1.0, and includes some internal fixes and changes.
  • Internal refactor to individual files.
  • Support added for multiple languages and cultures. Tries to give you results based on your current culture, or a specific one you provide.

image

ig "[color]"        # your current culture
ig "[color en-GB]"  # choosing lang-CULTURE
ig "[color ja]"     # choosing lang only

Falls back to "something in your chosen language" if specific culture is not available. Falls back to US English (en-US) if your language is not available at all.

ig "[color en-CA]"  # returns US English color because no Canadian English colors are defined (as of this writing)
ig "[noun en-GB]"   # returns US English noun because even though British English exists, there's no nouns file
ig "[color es]"     # returns US English because no Spanish language files exist yet

randomdate can now take a lower and upper bound on time and a format string. By default uses chosen culture's short date format.

ig "[randomdate]"                                           # a random date in my culture format
ig "[randomdate '1/1/2000']"                                # a random date from 1 Jan 2000 onward
ig "[randomdate '1/1/2000' '12/31/2000']"                   # a random date in the year 2000
ig "[randomdate '1/1/2000' '12/31/2000' 'dd MMM yyyy']"     # a random date in 2000 with a custom format

More information coming soon for contributors on how to deal (or not) with culture stuff.

September 2018

Added New-NameItTemplate. Pass an object with properties and it will generate a NameIT template.

If a property name has has the value name, zip, address, or state the appropriate NameIT template is applied, otherwise the type is inferred as numeric or alpha.

New-NameItTemplate {[PSCustomObject]@{Company="";Name=""}}
Company=[alpha 6]
Name=[person]

OR

Pass it to Invoke-Generate directly.

Invoke-Generate (New-NameItTemplate {[PSCustomObject]@{Company="";Name=""}}) -Count 5 -AsPSObject

Output

Name          Company
----          -------
Elvis Potts   cuajwj
Janae Herring kyzfgb
Cecelia Cruz  slseam
Akira Kelly   bltamv
Bella Bean    wfhats

In Action

image

image1

7/10/2018

  • Added badges
  • Added first|last for person address issue dfinke#16
[person female first]
[person female last]
[person male first]
[person male last]
[person both first]
[person both last]

Release 1.8.5 : 6/18/2018

Added RandomDate

ig "[person] [randomdate]" -Count 5
Austin Jones 06/04/2007
Kristin Hernandez 06/04/2007
Lindsay Richardson 06/04/2007
Alex Morales 06/04/2007
Nicholas Sanders 06/04/2007

Release 1.8.2 : 03/5/2017

Added more adjectives and stored them randomly, suggested by Joel Bennett.

Added guid to the template. Chris Hunt suggested and then delegated the implementation to me after I showed him I was randomly generating guid parts.

Invoke-Generate "[guid]"
Invoke-Generate "[guid 0]"
Invoke-Generate "[guid 3]"
690dcb11-a5b5-462a-a860-8de11626f5fd
eeb507b0
9873

Release 1.7.0 : 10/3/2016

  • Generate random cmdlet names (verb-noun) and limit it to approved verbs
PS C:\> Invoke-Generate "[cmdlet]" -c 3
Boat-Other
Lawyer-South
Loose-Trip
PS C:\> Invoke-Generate "[cmdlet]" -c 3 -ApprovedVerb
Request-Purchase
Push-Grocery
Format-River
  • Thank you Chris Hunt for:
    • Adding the address feature (and more)
    • Suggesting of adding adjective, noun and verb

Manage Your PowerShell Window Titles

Put this line in your $Profile.

$Host.UI.RawUI.WindowTitle = Invoke-Generate "PowerShell[space]-[space][Adjective][Noun]"

Or try this gist snippet.

PS C:\> Invoke-Generate "[person],[space][address][space]" -c 5
Derrick Cox, 1 Yicxizehpuw Av
Bethany Jones, 237 Tataqe Keys
Courtney Lewis, 162 Goyinu Ranch
Stacy Davis, 127 Odwus Lgt
Shane Carter, 308 Qeep Harb

Release 1.04: 1/16/2016

PS C:\> Invoke-Generate "[person]" -c 3
Meghan Cruz
Cassandra Smith
Luis Flores
PS C:\> Invoke-Generate "[person female]" -c 3
Heather Rogers
Meghan Bailey
Julia Perez
PS C:\> Invoke-Generate "[person male]" -c 3
Chad Bailey
Jordan Gray
Matthew Jackson

Examples

Invoke-Generate
# Output:
lhcqalmf

Will generate an eight character name with a random set of characters in the A-Z alphabet. You can change which alphabet is being used by using the -alphabet parameter.

Invoke-Generate -alphabet abc
# Output:
cabccbca

This is just a default template, most users will have some idea of what they want to generate, but want to randomly splice in other characters to make it unique or come up with some other ideas. For this you can provide a template string.

Invoke-Generate "cafe###"
# Output:
cafe176

Using the ? symbol injects a random letter, the # symbol injects a random number.

Invoke-Generate "???###"
# Output:
yhj561

Template Functions

The ? and # characters in a template are just shorthand for functions that you can use in a template, so the previous example could also be written as:

Invoke-Generate "[alpha][alpha][alpha][numeric][numeric][numeric]"
# Output:
voe336

NameIT exposes a bunch of useful functions to help create more useful (and pronouncable names). Here is the current list that is supported:

  • [alpha]; selects a random character (constrained by the ```-alphabet` parameter).
  • [numeric]; selects a random numeric (constrained by the -numbers parameter).
  • [vowel]; selects a vowel from a, e, i, o or u.
  • [phoneticVowel]; selects a vowel sound, for example ou.
  • [consonant]; selects a consonant from the entire alphabet.
  • [syllable]; generates (usually) a pronouncable single syllable.
  • [synonym word]; finds a synonym to match the provided word.
  • [person]; generate random name of female or male based on provided culture like <FirstName><Space><LastName>.
  • [person female];generate random name of female based on provided culture like <FirstName><Space><LastName>.
  • [person male];generate random name of male based on provided culture like <FirstName><Space><LastName>.
  • [address]; generate a random street address. Formatting is biased to US currently.
  • [space]; inserts a literal space. Spaces are striped from the templates string by default.

One of the most common functions you'll use is [syllable()] because it generally produces something that you can pronounce. For example, if we take our earlier cafe naming example, you might do something like this:

Invoke-Generate "cafe_[syllable][syllable]"
# Output:
cafe_amoy

You can combine the tempalate functions to produce some interesting results, for example here we use the [synonym] function with the [syllable] function to also replace the word cafe.

Invoke-Generate "[synonym cafe]_[syllable][syllable]"
# Output:
coffeehouse_iqza

You can also get the tool to generate a bunch of names at a time using the --count switch. Here is an example:

Invoke-Generate -count 5 "[synonym cafe]_[syllable][syllable]"
# Output:
restaurant_owkub
coffeebar_otqo
eatingplace_umit
coffeeshop_fexuz
coffeebar_zuvpe

You can generate also names of people like <FirstName><Space><LastName> based on provided sex (female/male/both) and culture (currently only en-US). The cultures can be added by putting csv files with the last/first names in the subfoders "cultures", in the module directory - please see en-US.csv for the file structure.

Invoke-Generate "[person female]" -count 3
# Output:
Jacqueline Walker
Julie Richardson
Stacey Powell

Stay tuned for additional capability