从路径中选择一个用户名并使用Powershell附加到filename

时间:2013-04-24 10:24:19

标签: string powershell

我正在尝试从我们系统上的每个用户帐户获取特定的日志文件。该文件与每个人的路径相同,并且名称相同。当前脚本只是在文件末尾添加一个数字,但我被告知知道每个文件属于谁将有助于下一个故障排除阶段。这是我开始挣扎的地方。

我尝试使用初始Get-Childitem返回目录(在本例中为UNC),然后通过将其传递给Out-String将其输出到字符串。然后我希望使用replace来修剪用户名两侧的文本位并将其附加到文件名。但这似乎根本不起作用。

所有目录都有相同的路径:

\\files\users\[USERNAME]\TEMP\generic.log

我想知道我是否正常,这里的步骤过于复杂?基本上我需要从目录路径中修剪\\files\user\\temp\,只留下用户名作为变量,以便我可以添加到复制命令。我尝试使用-replace告诉我我使用了无效的正则表达式。

到目前为止的代码:

$file = Get-ChildItem -Path \\files\users\talexander\TEMP\ -Recurse -Force -Include generic.log | Select-Object Directory | Out-String  
$file -replace "\\xfiles\users\", ""

这是尝试让替换工作的第一步,但是,它失败了。感激任何想法。

2 个答案:

答案 0 :(得分:1)

这个正则表达式可以提供帮助:

"\\files\users\talexander\TEMP\" -replace '(?:\\\\files\\users\\)(.*)(?:\\TEMP\\)', '$1'

talexander

或使用split:

("\\files\users\talexander\TEMP\" -split '\\')[4]

答案 1 :(得分:0)

在这种情况下,有几种简单的方法可以做到这一点。

如果您的路径为

\\files\users\[USERNAME]\TEMP\generic.log

然后应该很容易使用替换:

$path.Replace("[USERNAME]","UserName")

你也可以,因为预先知道路径就像这样:

$rootPath = \\files\users\
$UserSubPath = "$UserName\TEMP\generic.log"

Copy-Item "$rootPath$UserSubPath", "C:\MyRepository\"