2017-01-26 43 views
1

我有一个脚本可以扫描用户AppData文件夹中的特定文件夹。如果它找到该文件夹​​,则它将该路径返回到一个txt文件。所以我们可以看到计算机的名称和用户名。Powershell输出格式?

我希望能够格式化实际写入文本文件的内容,因此它除去计算机名和用户名之外的所有内容。

脚本:

foreach($computer in $computers){ 
    $BetterNet = "\\$computer\c$\users\*\AppData\Local\Google\Chrome\User Data\Default\Extensions\gjknjjomckknofjidppipffbpoekiipm" 
    Get-ChildItem $BetterNet | ForEach-Object { 
     $count++ 
     $betternetCount++ 
     write-host BetterNet found on: $computer 
     Add-Content "\\SERVERNAME\PowershellScans\$date\$time\BetterNet.txt" $_`n 
     write-host 
    } 
} 

文本文件包含这样

\\computer-11-1004S10\c$\users\turtle\AppData\Local\Google\Chrome\User Data\Default\Extensions\gjknjjomckknofjidppipffbpoekiipm 

\\computer-1004-24S\c$\users\camel\AppData\Local\Google\Chrome\User Data\Default\Extensions\gjknjjomckknofjidppipffbpoekiipm 

\\computer-1004-23S\c$\users\rabbit\AppData\Local\Google\Chrome\User Data\Default\Extensions\gjknjjomckknofjidppipffbpoekiipm 
+0

请出示一个具体的例子 - 通过直接更新你的问题 - 信息要写入到目标文件:是,比如,'\ \计算机11-1004S10 \ C $ \ü sers \ turtle',还是只有,例如'computer-11-1004S10 turtle'? – mklement0

回答

2

如果在所述串的形式的每个线$string_containing_path那么很容易使用分割法拆分,然后添加索引(1)和(4),您需要:

$afterSplit = $string_containing_path.Split('\') 

$stringThatYouNeed = $afterSplit[1] + " " + $afterSplit[4] 

您也可以使用简单的脚本,将解决当前的日志:

$path_in = "C:\temp\list.txt" 
$path_out= "C:\temp\output.txt" 

$reader = [System.IO.File]::OpenText($path_in) 


try { 

    while($true){ 

     $line = $reader.ReadLine() 

     if ($line -eq $null) { break } 

     $line_after_split_method = $line.Split('\') 

     $stringToOutput = $line_after_split_method[1] + " " + $line_after_split_method[4] + "`r`n" 

     add-content $path_out $stringToOutput 
    } 

    add-content $path_out "End" 

} 

finally { 

$reader.Close() 

} 
+0

@Joe Clark是看到有人改变了文本文件的内容,所以每一行开始\\而不是\,因此在这种情况下请使用索引[2]和[5]而不是[1]和[4] – paul543

+1

谢谢。必须弄清楚如何投射到一个字符串。但得到它与此工作。 –

2

如果拆分的循环分为两个foreach回路,一个用于计算机和用户目录会更容易输出信息用户目录的名称。

$output = foreach($computer in $computers){ 

    $UserDirectories = Get-ChildItem "\\$computer\c$\users\" -Directory 
    foreach ($Directory in $UserDirectories) { 
     $BetterNet = Get-ChildItem (Join-Path $Directory.fullname "\AppData\Local\Google\Chrome\User Data\Default\Extensions\gjknjjomckknofjidppipffbpoekiipm") 
     Add-Content "\\SERVERNAME\PowershellScans\$date\$time\BetterNet.txt" "$computer $($Directory.name)`r`n" 
     write-host BetterNet found on: $computer 
     $BetterNet 
    } 
} 
$output.count