我正在尝试从我们系统上的每个用户帐户获取特定的日志文件。该文件与每个人的路径相同,并且名称相同。当前脚本只是在文件末尾添加一个数字,但我被告知知道每个文件属于谁将有助于下一个故障排除阶段。这是我开始挣扎的地方。
我尝试使用初始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\", ""
这是尝试让替换工作的第一步,但是,它失败了。感激任何想法。
答案 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\"