从powershell中的字符串中删除数字

时间:2017-01-12 16:47:28

标签: powershell csv scripting active-directory filenames

好吧,所以我可能会让它变得更加困难,所以请告诉我我是不是。

我的最终目标:我有一个将被删除的计算机备份列表。每个都以计算机名称和备份日期命名。我正在尝试解析每个备份的文件名以获取用户自己的用户名,因此我可以创建一个列表以发送给管理员。我们的计算机名称和FIRST-LAST或FLAST,这增加了另一层难度。

例如,我的列表中有两台计算机:
第一个最后2016.1.12
FLAST 2015.9.8

我想完全剥离数字,留下我: FIRST-LAST
式Flash

然后我想更改第一个的计算机名称以反映原始计算机所有者的用户名(我们在公司中使用FLAST作为用户名),这样我最终得到: 式Flash FLAST(显然是本例之外的其他用户)

然后,我可以使用此信息搜索这些用户的活动目录,将其名称导出到列表中,然后将其发送给管理员,通知他们即将删除。

这很复杂,我想也许只需要改变我们的过程就可以更容易地获取这些信息,但这是一个有趣的谜题,所以我很好奇我们是否可以找到解决方案。

3 个答案:

答案 0 :(得分:0)

最简单的方法就是使用正则表达式删除您不想要的字符。

$string1 = 'FIRST-LAST 2016.1.12'
$string2 = 'FLAST 2016.1.12'

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

这将给你第一次和最后一次。 ' [^ A-ZA-Z - ]'''将用空字符串替换所有非alpha / - 字符。从那里,您可以使用 - 作为拆分条件将FIRST-LAST拆分为两个字符串,并使用它们从您正在寻找的AD中查找信息。

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

答案 1 :(得分: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"

答案 2 :(得分:0)

你可以试试这个($ 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