我有一个CSV
文件,如:
"localpath"
"C:\Users\calabresel"
"C:\Users\goslinep"
"C:\Users\deangelisr"
"C:\Users\bannont"
"C:\Users\goodwind"
我正在寻找一种方法来隔离每个字段的用户名。然后,我将查询AD以确定是否已禁用或启用每个用户。我一直无法弄清楚如何获得最后一块。我的想法是使用-replace将null替换为相同的字符串,如下所示:
$txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace "C:\Users\", ""}
返回时出现了无效的正则表达式模式错误,虽然我认为这是由包含特殊字符(反斜杠)的目标字符串的结果。然后我开始寻找一种方法让PowerShell取代\字面。这导致我尝试这个:
$txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace [Regex]::Escape("C:\\Users\\"), ""}
和这个
$txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace "C:\\Users\\", ""}
这两种方法都会停止无效的正则表达式错误,只是在没有抱怨的情况下返回一条新行。但是,当我打印$txt
变量时,它是空的......
我确定我从错误的角度和/或语法不正确处理这个问题,但我可以使用一些指导,因为我刚开始使用PowerShell一周前。
非常感谢提供的任何帮助。
答案 0 :(得分:2)
以下内容将导入CSV文件,然后获取路径的叶子。即用户名。
$txt = Import-Csv paths1.csv | ForEach-Object { Split-Path $_.localpath -leaf }
如果您仍想使用替换方法,只需取出$_.localpath =
部分就可以了。
$txt = Import-Csv C:\@@Scatch\test.csv | % { $_.localpath -replace "C:\\Users\\", ""}
答案 1 :(得分:2)
您没有收到$txt
的任何内容的原因是您更新了$_
的属性,但又没有返回$_
。
假设您要使用正则表达式而不是Split-Path
$txt = import-csv C:\temp\test.csv | % {
$_.localpath = $_.localpath -replace "C:\\Users\\", ""
$_
}
或
$txt = import-csv C:\temp\test.csv | % {
$_.localpath -replace "C:\\Users\\", ""
}
答案 2 :(得分:2)
其他解决方案
Get-Content "C:\temp\test.txt" | select @{N="Value";E={$_.split('\')[-1].replace('"', '')}} -Skip 1