2013-04-24 30 views
0

我想從我們的系統上的每個用戶帳戶獲取特定的日誌文件。該文件位於每個人的相同路徑中,並具有相同的名稱。當前的腳本只是在文件末尾添加一個數字,但我被告知,知道每個文件屬於誰將有助於下一階段的故障排除。這是我開始奮鬥的地方。從路徑中選擇一個用戶名並附加到文件名使用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\", "" 

這是第一步,試圖獲得更換工作,但是,唉,失敗。感謝任何想法。

回答

1

此正則表達式可以幫助:

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

talexander

或採用分體式:

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

真棒,工作就像一個絕對的魅力。我猜測它使用「\」作爲分隔符,然後將字符串綁定到數組中? – 2013-04-24 16:16:32

+0

拆分方法?是的!樂意效勞。 – 2013-04-24 17:57:50

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\" 
相關問題