PowerShell module for randomly generating names
This project is a port of https://github.com/mitchdenny/namerer. Hat tip to Mitch Denny.
- Check Change log for new templates
- Added
job
to template
ig '[person],[job]' -count 3
Alexandria Stephens,Biologist
Braiden Patel,Social media coordinator
Mya Perez,Principal
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
- 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 "$_"
}
}
}
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 |
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.
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.
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]
Pass it to Invoke-Generate
directly.
Invoke-Generate (New-NameItTemplate {[PSCustomObject]@{Company="";Name=""}}) -Count 5 -AsPSObject
Name Company
---- -------
Elvis Potts cuajwj
Janae Herring kyzfgb
Cecelia Cruz slseam
Akira Kelly bltamv
Bella Bean wfhats
- Added badges
- Added first|last for
person
address issue #16
[person female first]
[person female last]
[person male first]
[person male last]
[person both first]
[person both last]
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
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
- 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
- Adding the
Put this line in your $Profile
.
$Host.UI.RawUI.WindowTitle = Invoke-Generate "PowerShell[space]-[space][Adjective][Noun]"
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
- Thank you Wojciech Sciesinski for adding the NameIT
person
feature
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
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
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