从 powershell 中的字符串中删除数字
Remove numbers from string in powershell
好吧,所以我可能会让这件事变得比实际情况更难,所以请告诉我是否是这样。
我的最终目标:我有一个将被删除的计算机备份列表。每个都以计算机名称和备份日期命名。我正在尝试解析每个备份的文件名以获取用户自己的用户名,这样我就可以创建一个列表发送给管理人员。我们的计算机名和 FIRST-LAST 或 FLAST,这又增加了一层难度。
例如,我的列表中有两台计算机:
倒数 2016.1.12
FLAST 2015.9.8
我想完全去除数字,留下:
名次
一闪
然后我想更改第一个计算机名称以反映原始计算机所有者的用户名(我们在公司使用 FLAST 作为用户名),这样我最终得到:
快闪
FLAST(显然是本示例之外的不同用户)
然后我可以使用此信息在 Active Directory 中搜索这些用户,将他们的姓名导出到列表中,然后将其发送给管理人员,通知他们即将删除。
这很复杂,我想也许我们的流程需要改变才能更容易地提取这些信息,但这是一个有趣的谜题所以我很好奇我们是否可以得出一个解决方案。
最简单的方法是使用正则表达式删除不需要的字符。
$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-]','' 将用空字符串替换所有 non-alpha/- 字符。从那里,您可以使用 - 作为拆分条件将 FIRST-LAST 拆分为两个字符串,并使用它们从您要查找的 AD 中查找信息。
$splitstring = $string1 -split '-'
$first = $splitstring[0]
$last = $splitstring[1]
如果它始终是 FIRST-LAST <date>
或 FLAST <date>
,您可以拆分 space 并丢弃第二个项目。 $CompName,$null = 'FIRST-LAST 2016.1.12' -split ' '
会那样做。
然后 运行 在 $CompName
上进行 RegEx 替换以获得正确的别名,例如 $CompName -replace '^(.).*?-(.*)$',''
这样无论原始文件是什么,您都可以获得 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 '^(.).*?-(.*)$',''}}|Export-CSV .\NewList.csv -NoTypeInformation
这将为您提供一个包含以下内容的 CSV 文件:
"BackupName","Date","UserAlias"
"FIRST-LAST","2016.1.12","FLAST"
"FLAST","2015.9.8","FLAST"
你可以试试这个($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
好吧,所以我可能会让这件事变得比实际情况更难,所以请告诉我是否是这样。
我的最终目标:我有一个将被删除的计算机备份列表。每个都以计算机名称和备份日期命名。我正在尝试解析每个备份的文件名以获取用户自己的用户名,这样我就可以创建一个列表发送给管理人员。我们的计算机名和 FIRST-LAST 或 FLAST,这又增加了一层难度。
例如,我的列表中有两台计算机:
倒数 2016.1.12
FLAST 2015.9.8
我想完全去除数字,留下:
名次
一闪
然后我想更改第一个计算机名称以反映原始计算机所有者的用户名(我们在公司使用 FLAST 作为用户名),这样我最终得到: 快闪 FLAST(显然是本示例之外的不同用户)
然后我可以使用此信息在 Active Directory 中搜索这些用户,将他们的姓名导出到列表中,然后将其发送给管理人员,通知他们即将删除。
这很复杂,我想也许我们的流程需要改变才能更容易地提取这些信息,但这是一个有趣的谜题所以我很好奇我们是否可以得出一个解决方案。
最简单的方法是使用正则表达式删除不需要的字符。
$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-]','' 将用空字符串替换所有 non-alpha/- 字符。从那里,您可以使用 - 作为拆分条件将 FIRST-LAST 拆分为两个字符串,并使用它们从您要查找的 AD 中查找信息。
$splitstring = $string1 -split '-'
$first = $splitstring[0]
$last = $splitstring[1]
如果它始终是 FIRST-LAST <date>
或 FLAST <date>
,您可以拆分 space 并丢弃第二个项目。 $CompName,$null = 'FIRST-LAST 2016.1.12' -split ' '
会那样做。
然后 运行 在 $CompName
上进行 RegEx 替换以获得正确的别名,例如 $CompName -replace '^(.).*?-(.*)$',''
这样无论原始文件是什么,您都可以获得 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 '^(.).*?-(.*)$',''}}|Export-CSV .\NewList.csv -NoTypeInformation
这将为您提供一个包含以下内容的 CSV 文件:
"BackupName","Date","UserAlias"
"FIRST-LAST","2016.1.12","FLAST"
"FLAST","2015.9.8","FLAST"
你可以试试这个($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