如何使用powershell生成随机姓名和电话号码

当您需要一个用于测试或演示的数据集,并且该数据集需要表示个人识别信息(PII)时,您通常不希望使用表示实际人员的真实数据。在这里,我们将带您了解如何使用PowerShell为此类场合生成随机姓名和电话号码列表。...

如何使用powershell生成随机姓名和电话号码

当您需要一个用于测试或演示的数据集,并且该数据集需要表示个人识别信息(PII)时,您通常不希望使用表示实际人员的真实数据。在这里,我们将带您了解如何使用PowerShell为此类场合生成随机姓名和电话号码列表。

你需要什么

在开始之前,您应该掌握一些工具和信息:

动力壳

此脚本是使用PowerShell 4.0开发的,并已测试与PowerShell 2.0的兼容性。自Windows 7以来,PowerShell 2.0或更高版本已内置到Windows中。它也可以作为Windows管理框架(WMF)的一部分用于Windows XP和Vista。下面是一些详细信息和下载链接。

  • PowerShell 2.0随Windows 7提供。Windows XP SP3和Vista(SP1或更高版本)用户可以从KB968929中的Microsoft下载相应的WMF版本。XP SP2或更低版本或没有SP1的Vista不支持它。
  • PowerShell 4.0随Windows 8.1提供。Windows 7 SP1用户可以从Microsoft下载中心将其升级为WMF更新的一部分。它不适用于XP或Vista。

姓名

你需要一些名字列表来输入随机生成器。一个伟大的来源,为许多名字,以及有关他们的流行信息(虽然这将不会用于本脚本),是美国人口普查局。下面的链接提供的列表非常大,因此如果您计划一次生成大量的名称和数字,您可能需要将它们缩小一点。在我们的测试系统中,使用完整列表生成每个姓名/号码对大约需要1.5秒,但您的里程数将根据您自己的系统规格而有所不同。

  • 姓氏
  • **名字
  • **名字

无论使用哪种源代码,都需要生成三个文本文件,脚本可以将其用作名称选择的池。每个文件只能包含名称,每行只能包含一个名称。这些脚本需要存储在与PowerShell脚本相同的文件夹中。

姓氏.txt应该包含您希望脚本从中选择的姓氏。例子:

Smith Johnson Williams Jones Brown

**.txt应该包含希望脚本从中选择的**名字。例子:

James John Robert Michael William

**.txt应该包含希望脚本从中选择的**名字。例子:

Mary Patricia Linda Barbara Elizabeth

电话号码规则

如果你想确保你的电话号码与任何人的真实电话号码不匹配,最简单的方法就是使用众所周知的“555”交换码。但是如果你要展示一个有很多电话号码的数据集,555很快就会变得非常单调。为了让事情更有趣,我们将生成其他违反北美编号计划(NANP)规则的电话号码。下面是一些无效电话号码的示例,表示此脚本将生成的每类号码:

  • (157) 836-8167 This number is invalid because Area Codes cannot begin with a 1 or 0.
  • (298) 731-6185 This number is invalid because the NANP is not assigning area codes with 9 as the second digit.
  • (678) 035-7598 This number is invalid because Exchange Codes cannot begin with a 1 or 0.
  • (752) 811-1375 This number is invalid because Exchange Codes cannot end with two 1s.
  • (265) 555-0128 This number is invalid because the Exchange Code is 555, and the Subscriber ID is within the range reserved for fictitious numbers.
  • (800) 555-0199 This number is the only 800 number with a 555 Exchange Code which is reserved for use as a fictitious number.

请注意,上述规则可能会有所更改,并可能因司法管辖区而异。你应该做你自己的研究,以验证适用于你将要生成电话号码的地区的当前规则。

常用命令

在整个脚本中都会用到一些相当常见的命令,所以在我们开始实际编写之前,您应该对这些命令的含义有一个基本的了解。

  • ForEach对象接受对象的数组或列表,并对每个对象执行指定的操作。在ForEach对象脚本块中,$\变量用于引用正在处理的当前项。
  • if…else语句只允许在满足某些条件时执行操作,并且(可选)指定在不满足该条件时应执行的操作。
  • switch语句就像if语句一样有更多的选择。Switch将根据几个条件检查一个对象,并运行为该对象匹配的条件指定的任何脚本块。您还可以(可选)指定一个默认块,该块仅在没有其他条件匹配时运行。Switch语句还使用$变量来引用当前正在处理的项。
  • while语句允许您在满足特定条件的情况下连续重复脚本块。一旦脚本块完成时发生了导致条件不再为真的情况,循环就会退出。
  • try…catch语句有助于错误处理。如果为try指定的脚本块出错,catch块将运行。
  • “获取内容”按罐头上的内容执行。它获取指定对象的内容—通常是一个文件。这可以用于在控制台上显示文本文件的内容,或者像在这个脚本中一样,沿着管道传递内容,以便与其他命令一起使用。
  • 写主机把东西放在控制台里。它用于向用户显示消息,如果输出被重定向,则不包括在脚本输出中。
  • 写输出实际上生成输出。通常,这会转储到控制台,但也可以由其他命令重定向。

脚本中还有其他命令,但我们将边走边解释。

构建脚本

现在是时候把手弄脏了。

第一部分:准备出发

如果您希望脚本从干净的控制台开始运行,那么这里是您想要的第一行代码。

Clear-Host

现在我们有了一个干净的屏幕,接下来我们要做的就是检查脚本,确保它所需要的一切都准备就绪。要做到这一点,我们需要先告诉它去哪里找,找什么。

$ScriptFolder = Split-Path $MyInvocation.MyCommand.Definition -Parent $RequiredFiles = ('Males.txt','Females.txt','Surnames.txt')

第一行对任何脚本都非常有用。它定义了一个变量,该变量指向包含脚本的文件夹。如果脚本需要与自身位于同一目录(或该目录的已知相对路径)中的其他文件,这一点非常重要,因为如果在另一个工作目录中运行脚本,则会遇到错误。

第二行创建脚本正常运行所需的文件名数组。在下一篇文章中,我们将使用这个参数和$ScriptFolder变量来检查这些文件是否存在。

$RequiredFiles | ForEach-Object { if (!(Test-Path "$ScriptFolder\$_")) { Write-Host "$_ not found." -ForegroundColor Red $MissingFiles++ } }

这个脚本块将$RequiredFiles数组发送到ForEach对象块中。在这个脚本块中,if语句使用testpath来查看我们要查找的文件是否在它所属的位置。testpath是一个简单的命令,当给定一个文件路径时,它返回一个基本的true或false响应,告诉我们路径是否指向某个存在的东西。其中的感叹号有一个not运算符,它在将测试路径的响应传递给if语句之前反转它。因此,如果Test Path返回false(即,我们要查找的文件不存在),它将被转换为true,以便if语句执行其脚本块。

这里要注意的另一件事是使用双引号而不是单引号,这在本脚本中经常使用。当您将某个内容放在单引号中时,PowerShell将其视为静态字符串。单引号中的内容将按原样传递。双引号告诉PowerShell在传递字符串之前转换字符串中的变量和其他一些特殊项。在这里,双引号意味着不运行测试路径“$ScriptFolder\$\”,而是实际执行类似于测试路径“C:\Scripts”的操作\姓氏.txt'(假设您的脚本位于C:\Scripts中,并且ForEach对象当前正在处理'姓氏.txt’).

对于每个找不到的文件,Write Host都会发布一条红色的错误消息,告诉您丢失了哪个文件。然后它增加$MissingFiles变量,该变量将在下一部分中使用,以出错并在缺少任何文件时退出。

if ($MissingFiles) { Write-Host "Could not find $MissingFiles source file(s). Aborting script." -ForegroundColor Red Remove-Variable ScriptFolder,RequiredFiles,MissingFiles Exit }

下面是另一个巧妙的技巧,你可以用if语句。大多数关于if语句的指南都会告诉您使用操作符检查匹配条件。例如,这里我们可以使用if($MissingFiles-gt 0)来查看$MissingFiles是否大于零。但是,如果您已经在使用返回布尔值的命令(如前面使用测试路径的块中所示),则不需要这样做。在这种情况下,当你只是测试一个数字是否为非零时,你也可以不用它。任何非零数(正数或负数)都将被视为true,而零(或者这里可能出现的不存在的变量)将被视为false。

如果$MissingFiles存在并且不为零,Write Host将发布一条消息,告诉您丢失了多少文件,并且脚本将中止。然后,Remove Variable将清理我们创建的所有变量,Exit将退出脚本。在常规的PowerShell控制台中,对于这个特定的目的,实际上并不需要Remove Variable,因为脚本设置的变量通常在脚本退出时被丢弃。但是,PowerShell ISE的行为有点不同,因此如果您计划从那里运行脚本,则可能需要保留此选项。

如果一切正常,脚本将继续。还有一个需要准备的是一个别名,我们很高兴以后能有这个别名。

New-Alias g Get-Random

别名用于为命令创建备用名称。这些工具有助于我们熟悉新的界面(例如:PowerShell具有内置别名,如dir->get ChildItem和cat->get Content),或者对常用命令进行速记引用。在这里,我们为Get Random命令做了一个非常简短的参考,稍后将大量使用这个命令。

GetRandom几乎就是它的名字所暗示的。给定一个数组(比如一个名字列表)作为输入,它从数组中选择一个随机项并将其吐出。它也可以用来生成随机数。关于随机数和随机数,要记住的一点是,和许多其他计算机操作一样,它从零开始计数。因此,与其得到Random 10,意思是更自然的“给我一个从1到10的数字”,它实际上意味着“给我一个从0到9的数字”。你可以更具体地选择数字,这样得到Random的行为就更像你自然期望的,但在这个脚本中我们不需要这样。

第2部分:获取用户输入并开始工作

虽然只生成一个随机姓名和电话号码的脚本很好,但如果该脚本允许用户指定在一个批处理中要获得多少姓名和号码,那就更好了。不幸的是,我们不能真正信任用户总是给出有效的输入。所以,除了$UserInput=Read Host,还有更多的内容。

while (!$ValidInput) { try { [int]$UserInput = Read-Host -Prompt 'Items to be generated' $ValidInput = $true } catch { Write-Host 'Invalid input. Enter a number only.' -ForegroundColor Red } }

上面的while语句检查并否定$ValidInput的值。只要$ValidInput为false或不存在,它就会继续循环遍历其脚本块。

try语句通过Read Host接收用户输入,并尝试将其转换为整数值。(这是Read Host之前的[int])如果成功,它会将$ValidInput设置为true,以便while循环可以退出。如果不成功,catch块将发布一个错误,因为$ValidInput没有设置,while循环将返回并再次提示用户。

一旦用户正确地给出了一个数字作为输入,我们就希望脚本宣布它将要开始实际执行它的工作,然后开始执行它。

Write-Host "`nGenerating $UserInput names & phone numbers. Please be patient.`n" 1..$UserInput | ForEach-Object { <# INSERT RANDOM NAME & NUMBER GENERATOR HERE #> }

别担心,我们不会让你自己去找出随机名称和数字生成器代码。这只是一个占位符注释,告诉你下一个部分(真正的工作在哪里完成)将放在哪里。

写主机行非常简单。它只是简单地说明脚本将生成多少个姓名和电话号码,并要求用户在脚本工作时耐心等待。字符串开头和结尾的`n是在输出前后**一个空行,只是为了在输入行和名称和数字列表之间提供一些视觉上的分隔。请注意,这是一个背勾(又名“重音符”-通常是标签上方的键,在1的左边),而不是在每个n前面的撇号或单引号。

下一部分将展示使用ForEach对象循环的不同方法。通常,当您希望脚本块运行一定次数时,会设置一个常规for循环,例如for($x=1;$x-le$UserInput;$x++){&lt;#INSERT script HERE#&gt;}。ForEach对象让我们通过向它提供一个整数列表来简化这个过程,而不是告诉它实际对这些整数执行任何操作,我们只是给它一个静态脚本块来运行,直到它没有整数可以执行为止。

第3部分:生成随机名称

生成名称是此过程其余部分中最简单的部分。它只包括三个步骤:选择姓氏、性别和名字。还记得我们给Random做的那个别名吗?是时候开始使用它了。

$Surname = Get-Content "$ScriptFolder\Surnames.txt" | g $Male = g 2 if ($Male) {$FirstName = Get-Content "$ScriptFolder\Males.txt" | g} else {$FirstName = Get-Content "$ScriptFolder\Females.txt" | g}

第一行获取我们的姓氏列表,将其输入随机选取器,并将所选名称指定给$LANSAME。

第二行选择我们的人的性别。还记得Get Random是如何从零开始计数的吗?零是假的,其他的都是真的吗?这就是我们如何使用Get Random 2(或者由于我们的别名而短得多的g2——两者都会导致在0或1之间进行选择)来决定我们的人是否是**。if/else语句随后会相应地随机选择一个**或**的名字。

第4部分:生成随机电话号码

这是真正有趣的部分。早些时候,我们向您展示了如何有几种方法可以使一个无效或虚构的电话号码。因为我们不希望所有的数字看起来太相似,所以每次我们都会随机选取一个无效的数字格式。随机选择的格式将由它们的区号和交换码来定义,它们将共同存储为$Prefix。

$NumberFormat = g 5 switch ($NumberFormat) { 0 {$Prefix = "($(g 2)$(g 10)$(g 10)) $(g 10)$(g 10)$(g 10)"} 1 {$Prefix = "($(g 10)9$(g 10)) $(g 10)$(g 10)$(g 10)"} 2 {$Prefix = "($(g 10)$(g 10)$(g 10)) $(g 2)$(g 10)$(g 10)"} 3 {$Prefix = "($(g 10)$(g 10)$(g 10)) $(g 10)11"} 4 {$Prefix = "($(g 10)$(g 10)$(g 10)) 555"} }

第一行是一个简单的随机数生成,用来选择我们要使用的电话号码格式。然后,switch语句接受该随机选择并相应地生成$前缀。还记得那个无效电话号码类型列表吗?$NumberFormat值0-3对应于该列表中的前四个。值4可以生成最后两个值中的一个,因为它们都使用“555”交换代码。

在这里,你也可以看到我们正在使用另一个双引号技巧。双引号不仅允许您在字符串输出之前解释变量,还允许您处理脚本块。为此,将脚本块包装为:$(&lt;#script HERE#&gt;)”。所以你上面有很多单独的随机数字,其中一些数字要么限制在它们的范围内,要么根据我们需要遵循的规则静态设置。每个字符串也有圆括号和空格,正如您通常希望在区号和交换码对中看到的那样。

在准备输出姓名和电话号码之前,我们需要做的最后一件事是生成一个订户ID,它将存储为$Suffix。

switch ($NumberFormat) { {$_ -lt 4} {$Suffix = "$(g 10)$(g 10)$(g 10)$(g 10)"} 4 { switch ($Prefix) { '(800) 555' {$Suffix = '0199'} default {$Suffix = "01$(g 10)$(g 10)"} } } }

由于555号码的特殊规则,我们不能只为脚本要生成的每个电话号码的结尾生成四个随机数字。所以,第一个开关检查我们是否在处理一个555号码。如果不是,则生成四个随机数字。如果是555号码,第二个开关检查800区号。如果匹配,我们只能使用一个有效的$后缀。否则,可以从0100-0199之间的任何对象中进行选择。

请注意,有几种不同的方法可以编写此块,而不是按原样编写。这两个switch语句都可以替换为if/else语句,因为它们各自只处理两个选择。另外,不是特别地将“4”作为第一个switch语句的选项,而是可以使用与第二个switch语句类似的“default”,因为它是剩下的唯一选项。在if/else和switch之间的选择,或者在哪里使用默认关键字而不是特定的值,通常归结为个人喜好的问题。只要有用,就用你最舒服的东西。

现在,是时候输出了。

Write-Output "$FirstName $Surname $Prefix-$Suffix" }

这个和剧本里的一样简单。它只输出用空格隔开的名字和姓氏,然后在电话号码前加一个空格。这里的标准破折号之间的交换代码和订户ID得到添加。

底部的右括号是前面的ForEach对象循环的结尾-如果已经得到了它,请忽略它。

第5部分:清理和运行脚本

在所有的工作都完成之后,一个好的脚本知道如何在自己完成之后进行清理。同样,如果您只打算从控制台运行脚本,那么下面的变量删除实际上是不需要的,但是如果您计划在ISE中运行脚本,那么您将需要它。

Remove-Item alias:\g Remove-Variable ScriptFolder,RequiredFiles,Surname,Male,FirstName,NumberFormat,Prefix,Suffix,ValidInput,UserInput

完成所有操作后,将扩展名为“.ps1”的脚本保存在与names文件相同的文件夹中。确保您的ExecutionPolicy已经设置好,这样脚本就可以运行了,并尝试一下。

以下是实际剧本的截图:

如何使用powershell生成随机姓名和电话号码

您还可以从下面的链接下载包含此PowerShell脚本的ZIP文件和包含名称列表的文本文件。

PowerShell的随机姓名和电话号码生成器

  • 发表于 2021-04-11 08:59
  • 阅读 ( 266 )
  • 分类:互联网

你可能感兴趣的文章

可提高windows管理技能的powershell cmdlet

Powershell是一个完美的方式,一个新的编码器开始在Windows上。Powershell是命令行工具和脚本语言的等价部分。它使您能够通过您用来管理计算机的相同命令使计算机自动化。如果您有一个现代的Windows系统,那么您已经有了Powershell...

  • 发布于 2021-03-13 13:26
  • 阅读 ( 286 )

如何在windows上自动生成已安装程序的列表

...地,Windows使得生成所有已安装软件的列表变得很容易。PowerShell使之成为可能,但是如果您以前从未使用过它,请不要害怕:您只需要几个简单的命令。 ...

  • 发布于 2021-03-16 04:48
  • 阅读 ( 204 )

如何在Windows10上检查您的windows体验分数

... 2使用windows powershell ...

  • 发布于 2021-03-17 21:40
  • 阅读 ( 332 )

6个冷屏名称生成器

...am、YouTube、玩家代号和昵称等多个类别,因此如果您决定如何选择一个屏幕名称,SpinXO可以为您指明正确的方向。它还可以帮助你添加一个明显的个人风格。 ...

  • 发布于 2021-03-19 03:17
  • 阅读 ( 226 )

6个免费的哈希检查程序来检查任何文件的完整性

... 1使用powershell检查文件哈希 ...

  • 发布于 2021-03-19 07:54
  • 阅读 ( 335 )

如何在thunderbird中使用openpgp加密电子邮件

Mozilla Thunderbird最近将OpenPGP集成到主应用程序中。电子邮件隐私不需要附加组件。OpenPGP的世界级加密易于设置和使用,无需额外的软件。 雷鸟和openpgp Thunderbird电子邮件客户端的78.2.1版本支持内置端到端加密(e2ee)。这种集成...

  • 发布于 2021-03-31 19:55
  • 阅读 ( 203 )

如何使用Windows10的软件包管理器轻松安装应用程序(使用winstall)

...想要的。 要安装它们,请打开Windows终端、命令提示符或PowerShell窗口。例如,您可以右键单击开始按钮或按Windows+X并选择“Windows PowerShell”以打开PowerShell窗口。您不必以管理员身份启动它。 将该命令从网页复制粘贴到命令行...

  • 发布于 2021-04-01 08:28
  • 阅读 ( 211 )

如何在Windows10中自动连接到特定应用的vpn

使用Windows10的PowerShellcmdlet,您可以轻松地添加应用程序,以便在启动时自动触发VPN连接。自动化这个任务意味着当你使用某些应用程序时,你甚至不必考虑连接到VPN。 要利用PowerShell中的此功能,如果您还没有VPN服务,则必须...

  • 发布于 2021-04-02 15:58
  • 阅读 ( 520 )

如何启用双因素身份验证和保护您的环帐户

...份验证的唯一先决条件是要有一个与您的Ring帐户关联的电话号码。一个应该已经存在了,但是设置过程会在没有电话号码的情况下添加一个电话号码。 联机启用双因素身份验证 首先打开web浏览器并导航到Ring的网站。页面加载...

  • 发布于 2021-04-02 20:03
  • 阅读 ( 207 )

什么是校验和(为什么要在意)?

...么是MD5、SHA-1和SHA-256哈希,如何检查它们? 在Windows上,PowerShell的Get FileHash命令计算文件的校验和。要使用它,首先打开PowerShell。在Windows 10上,右键单击“开始”按钮并选择“Windows PowerShell”。您也可以通过在“开始”菜单中...

  • 发布于 2021-04-05 00:34
  • 阅读 ( 194 )
rr333320
rr333320

0 篇文章

相关推荐