在PowerShell中从字符串中删除数字

5
好的,我可能会让这比实际情况更加困难,请告诉我是否如此。
我的最终目标:我有一份将被删除的计算机备份列表。每个备份都以计算机名称和备份日期命名。我试图解析每个备份的文件名,以获取用户本身的用户名,因此我可以创建一个列表发送给经理们。我们的计算机名称是FIRST-LAST或FLAST,这增加了另一层难度。
例如,我的列表中有两台计算机:
FIRST-LAST 2016.1.12
FLAST 2015.9.8
我想完全去掉数字,只留下:
FIRST-LAST
FLAST
然后我想更改第一台计算机的计算机名称,以反映原始计算机所有者的用户名(我们在公司中使用FLAST作为用户名),以便我最终得到: FLAST FLAST(显然是此示例之外的不同用户)
然后我可以使用这些信息搜索活动目录,将他们的名字导出到一个列表中,然后发送给经理们通知即将删除的情况。
这很复杂,我认为也许只需要改变我们的流程,使其更容易提取这些信息,但这是一个有趣的难题,所以我想知道我们是否能够找到解决方案。
3个回答

6
最简单的方法是使用正则表达式删除您不需要的字符。
$string1 = 'FIRST-LAST 2016.1.12'
$string2 = 'FLAST 2016.1.12'

$string1 = $string1 -replace '[^a-zA-Z-]',''
$string2 = $string2 -replace '[^a-zA-Z-]',''

这将给您FIRST-LAST和FLAST。 '[^a-zA-Z-]'将替换所有非字母/-字符为空字符串。从那里开始,您可以使用“-”作为拆分条件将FIRST-LAST拆分为两个字符串,并使用它们查找您正在寻找的AD信息。

$splitstring = $string1 -split '-'
$first = $splitstring[0]
$last = $splitstring[1]

1
你可以尝试这个($yourlist也可以是一个here-string):
$Template=@"
{{Name:Test1} {Dateh:2017.1.1}}
{{Name:Test2} {Dateh:2015.12.12}}
"@

$yourlist=('FIRST-LAST 2016.01.01', 'FLAST 2015.9.8')

$yourlist| ConvertFrom-String -TemplateContent $Template

0

如果它总是FIRST-LAST <date>FLAST <date>,那么您可以在空格上拆分并丢弃第二个项目。$CompName,$null = 'FIRST-LAST 2016.1.12' -split ' '就可以做到这一点。

然后只需对$CompName运行RegEx替换,以获取正确的别名,如$CompName -replace '^(.).*?-(.*)$','$1$2',以便无论原始内容是什么,都可以获得FLAST。

就我个人而言,我可能会将该信息添加为新属性,并将整个东西导出为CSV。

$InputText = @'
FIRST-LAST 2016.1.12
FLAST 2015.9.8
'@ -split '[\r\n]+'|?{$_}

$InputText|ConvertFrom-Csv -Delimiter ' ' -Header 'BackupName','Date'|Select *,@{l='UserAlias';e={$_.BackupName -replace '^(.).*?-(.*)$','$1$2'}}|Export-CSV .\NewList.csv -NoTypeInformation

这将使你得到一个包含CSV文件的内容:

"BackupName","Date","UserAlias"
"FIRST-LAST","2016.1.12","FLAST"
"FLAST","2015.9.8","FLAST"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接