2017-01-12 21 views
0

好的,所以我可能会让它变得更加困难,所以请告诉我,如果我是。从powershell中的字符串中删除数字

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

举例来说,我在我的名单两台电脑:
FIRST-LAST 2016年1月12日
式Flash 2015年9月8日

我想完全剥离的数字,让我:
FIRST-LAST
式Flash

然后我想改变的第一个的计算机名称,以反映原始计算机所有者的用户名(我们使用式Flash作为用户名在该公司),这样我结束了: 式Flash FLAST(显然是本示例以外的其他用户)

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

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

回答

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] 
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" 
0

你可以试试这个($ yourlist可以是此处的字符串太):

$Temp[email protected]" 
{{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