Tag: Select-String

PowerShell

PowerShell: Copy files and additional files with different name

This maybe helps some people which need to copy multiple files. In my example I search for Contoso in files called info_*****.txt I need to copy them and also copy the file data_*****.txt. In this blog post, I am going to show you how you can use PowerShell to copy files and additional files with a different name using PowerShell.

$sourceFolder = "E:\temp\source"
$destinationFolder = "E:\temp\folder1"
 
$files = Get-ChildItem $sourceFolder -Filter *.txt -Recurse | Select-String "Contoso" # Get all Files with Contoso
Write-Host "Files found: " $files.count # Number of files found
foreach ($file in $files){
Get-Childitem $sourceFolder | Where-Object { $_.name -eq $file.filename } | Copy-Item -Destination $destinationFolder # copy all info_*****.txt files
$name = $file.filename -replace "info_", "data_"
Get-Childitem $sourceFolder | Where-Object { $_.name -eq $name } | Copy-Item -Destination $destinationFolder # copy all data_*****.txt files
}

More information about Select-String and file copy. You can find more about Select-String on Microsoft Docs. If you want to know more about PowerShell, check out my blog post on how to install PowerShell 6 and PowerShell 7. If you have any questions, please let me know in the comments.



PowerShell

PowerShell: Copy Log files with Date and Content

Some days ago I made a blog post about Select-String in PowerShell. I created a “script” or a better a command to check log files for a specific text and copy the log file to another place using PowerShell.

Get-ChildItem C:\temp -Filter *.log -Recurse | Select-String "Contoso" |  Copy-Item -Destination C:\temp2

Now I added also a Start date and a End date for the log files you wanna search in.

$Startdate = (get-date -year 2011 -month 3 -day 25)
$Enddate = (get-date -year 2011 -month 3 -day 30)
 
Get-ChildItem C:\temp -Filter *.log -Recurse | Where-Object {($_.LastWriteTime.Date -ge $Startdate.Date) -and ($_.LastWriteTime.Date -le $Enddate.Date)} | Select-String "Contoso" |  Copy-Item -Destination C:\temp2

Also check out my blog post to clean up files older than a specific date using PowerShell and how to install PowerShell 6 and PowerShell 7. If you have any questions, please let me know in the comments.



PowerShell

Powershell: Search for String or grep for Powershell

This shows you how you can search in files for a specific content with Windows PowerShell. This  also “replaces” the Windows command-line utility “findstr”. In the Unix/Linux world you mostly use the command grep for doing the same. So you can think of Select-String as PowerShell version of Grep. The Select-String cmdlet searches for text and text patterns in input strings and files. You can use Select-String similar to grep in UNIX or findstr in Windows.

grep syntax

grep (options) files.txt

grep example

grep "text I search" *.log

In Windows PowerShell we can use the Select-String to search strings in files

Select-String -Path C:\temp\*.log -Pattern "Contoso"

If you need some more options, for example you need also check subfolders (-Recurse) or you need additional filter for files you wanna check, you can use the Get-Childitem first.

Get-ChildItem C:\temp -Filter *.log -Recurse | Select-String "Contoso"

If you have to copy all the files with a specific content, you can simply add a Copy-Item cmdlet.

Get-ChildItem C:\temp -Filter *.log -Recurse | Select-String "Contoso" | Copy-Item -Destination C:\temp2

More Information about Select-String on Microsoft Docs. Select-String can also be very useful to count your lines of code in different files using PowerShell.



PowerShell

PowerShell: Count your Code lines

After Coding some lines in a lot of different files you wanna know how much lines you have coded. There are two (I am sure there are even more) ways to do that. The first one is to get the content of the files (Get-Content) and count the lines in there. With the Select-String cmdlet, you can count your code lines in a file or script using PowerShell.

The other way and the faster way is with Select-String:

(Get-ChildItem -Include *.ps1 -Recurse | Select-String -pattern .).Count

You can find more about Select-String on Microsoft Docs.

I hope this gives you an idea how you can count your lines of codes in PowerShell. Also have a look at at my blog post about how to install PowerShell 6 and PowerShell 7. If you have question, let me know in the comments.