Server IP : 180.180.241.3 / Your IP : 216.73.216.252 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