| Server IP : 180.180.241.3 / Your IP : 216.73.216.25 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Program Files (x86)/WinSCP/Extensions/ |
Upload File : |
# @name &Search for Text...
# @command powershell.exe -ExecutionPolicy Bypass -File "%EXTENSION_PATH%" ^
# -sessionUrl "!S" -path "!/" -text "%Text%" -wildcard "%Wildcard%" ^
# -pause -sessionLogPath "%SessionLogPath%"
# @description Searches recursively for a text in the current remote directory
# @version 6
# @homepage https://winscp.net/eng/docs/library_example_recursive_search_text
# @require WinSCP 5.13
# @option Text -run textbox "Text:"
# @option Wildcard -run textbox "File mask:" "*.*"
# @option SessionLogPath -config sessionlogfile
# @optionspage https://winscp.net/eng/docs/library_example_recursive_search_text#options
param (
# Use Generate Session URL function to obtain a value for -sessionUrl parameter.
$sessionUrl = "sftp://user:mypassword;fingerprint=ssh-rsa-xx-xx-xx@example.com/",
[Parameter(Mandatory = $True)]
$path,
[Parameter(Mandatory = $True)]
$text,
$wildcard = "*.*",
$sessionLogPath = $Null,
[Switch]
$pause
)
try
{
if (!$text)
{
throw "No Text was specified."
}
# Load WinSCP .NET assembly
$assemblyPath = if ($env:WINSCP_PATH) { $env:WINSCP_PATH } else { $PSScriptRoot }
Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl($sessionUrl)
$session = New-Object WinSCP.Session
try
{
$session.SessionLogPath = $sessionLogPath
# Connect
$session.Open($sessionOptions)
# Recursivelly enumerate files to grep
$fileInfos =
$session.EnumerateRemoteFiles(
$path, $wildcard, [WinSCP.EnumerationOptions]::AllDirectories)
foreach ($fileInfo in $fileInfos)
{
# Action on match
# Modify the code below if you want to do another task with
# matching files, instead of grepping their contents
Write-Host "File $($fileInfo.FullName) matches mask, searching contents..."
$tempPath = (Join-Path $env:temp $fileInfo.Name)
# Download file to temporary directory
$filePath = [WinSCP.RemotePath]::EscapeFileMask($fileInfo.FullName)
$transferResult = $session.GetFiles($filePath, $tempPath)
# Did the download succeeded?
if (!$transferResult.IsSuccess)
{
# Print error (but continue with other files)
Write-Host $transferResult.Failures[0].Message
}
else
{
# Search and print lines containing "text".
# Use -Pattern instead of -SimpleMatch for regex search
$matchInfo = Select-String -Path $tempPath -SimpleMatch $text
# Print the results
foreach ($match in $matchInfo)
{
Write-Host ($fileInfo.FullName + ":" + $match.LineNumber + ":" + $match.Line)
}
# Delete temporary local copy
Remove-Item $tempPath
}
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
$result = 0
}
catch
{
Write-Host "Error: $($_.Exception.Message)"
$result = 1
}
# Pause if -pause switch was used
if ($pause)
{
Write-Host "Press any key to exit..."
[System.Console]::ReadKey() | Out-Null
}
exit $result