diff --git a/PSEverything/Everything.cs b/PSEverything/Everything.cs
index df477b0..dc3e7a5 100644
--- a/PSEverything/Everything.cs
+++ b/PSEverything/Everything.cs
@@ -1,6 +1,7 @@
using System;
using System.Text;
using static PSEverything.Status;
+using System.IO;
namespace PSEverything
{
@@ -25,7 +26,7 @@ public static class Everything
public static void SetSearch(string text)
{
int res = Is64Bit ? NativeMethods64.Everything_SetSearchW(text) : NativeMethods32.Everything_SetSearchW(text);
- if (res != (int) Ok)
+ if (res != (int)Ok)
{
Throw(res);
}
@@ -128,6 +129,15 @@ public static string GetFullPathName(int index, StringBuilder buf)
return buf.ToString();
}
+ public static bool GetIsFolderResult(int index)
+ {
+ return Is64Bit ? NativeMethods64.Everything_IsFolderResult(nIndex: index) : NativeMethods32.Everything_IsFolderResult(nIndex: index);
+ }
+
+ public static bool GetIsFileResult(int index)
+ {
+ return Is64Bit ? NativeMethods64.Everything_IsFileResult(nIndex: index) : NativeMethods32.Everything_IsFileResult(nIndex: index);
+ }
public static void Cleanup()
{
@@ -151,6 +161,22 @@ public static string[] GetAllResults(int count)
return retVal;
}
+ public static FileSystemInfo[] GetAllResultsAsFileSystemInfo(int count)
+ {
+ FileSystemInfo[] retVal = new FileSystemInfo[count];
+ StringBuilder buf = new(32767);
+
+ for (int i = 0; i < count; ++i)
+ {
+ string path = GetFullPathName(i, buf);
+ retVal[i] = GetIsFileResult(i) ? (FileSystemInfo)new FileInfo(path)
+ : GetIsFolderResult(i) ? new DirectoryInfo(path)
+ : null;
+ buf.Clear();
+ }
+ return retVal;
+ }
+
static int GetLastError()
{
return Is64Bit ? NativeMethods64.Everything_GetLastError() : NativeMethods32.Everything_GetLastError();
diff --git a/PSEverything/PSEverything.csproj b/PSEverything/PSEverything.csproj
index 0cffb53..8e746c2 100644
--- a/PSEverything/PSEverything.csproj
+++ b/PSEverything/PSEverything.csproj
@@ -22,7 +22,7 @@
-
+
diff --git a/PSEverything/PSEverything.psd1 b/PSEverything/PSEverything.psd1
index d070171..684b185 100644
--- a/PSEverything/PSEverything.psd1
+++ b/PSEverything/PSEverything.psd1
@@ -1,24 +1,23 @@
@{
- RootModule = 'PSEverything.dll'
- ModuleVersion = '3.3.0'
- GUID = 'f262ec02-4a88-49e5-94da-e25aab9cbf7a'
- Author = 'Staffan Gustafsson'
- CompanyName = 'PowerCode Consulting AB'
- Copyright = '(c) 2016 sgustafsson. All rights reserved.'
- Description = 'Powershell access to Everything - Blazingly fast file system searches'
- PowerShellVersion = '5.1'
+ RootModule = 'PSEverything.dll'
+ ModuleVersion = '3.3.1'
+ GUID = 'f262ec02-4a88-49e5-94da-e25aab9cbf7a'
+ Author = 'Staffan Gustafsson'
+ CompanyName = 'PowerCode Consulting AB'
+ Copyright = '(c) 2016 sgustafsson. All rights reserved.'
+ Description = 'Powershell access to Everything - Blazingly fast file system searches'
+ PowerShellVersion = '5.1'
CompatiblePSEditions = "Desktop", "Core"
- FunctionsToExport = ''
- CmdletsToExport = 'Search-Everything', 'Select-EverythingString'
- VariablesToExport = ''
- AliasesToExport = 'se', 'sles'
- FileList = 'Everything32.dll', 'Everything64.dll', 'LICENSE', 'PSEverything.dll', 'PSEverything.dll-Help.xml', 'PSEverything.psd1'
- PrivateData = @{
+ FunctionsToExport = ''
+ CmdletsToExport = 'Search-Everything', 'Select-EverythingString'
+ VariablesToExport = ''
+ FileList = 'Everything32.dll', 'Everything64.dll', 'LICENSE', 'PSEverything.dll', 'PSEverything.dll-Help.xml', 'PSEverything.psd1'
+ PrivateData = @{
PSData = @{
- Tags = @('Search', 'Everything', 'voidtools', 'regex', 'grep')
- LicenseUri = 'https://raw.githubusercontent.com/powercode/PSEverything/master/LICENSE'
- ProjectUri = 'https://github.com/powercode/PSEverything'
+ Tags = @('Search', 'Everything', 'voidtools', 'regex', 'grep')
+ LicenseUri = 'https://raw.githubusercontent.com/powercode/PSEverything/master/LICENSE'
+ ProjectUri = 'https://github.com/powercode/PSEverything'
ReleaseNotes = @'
2.3: Bug fixes. Sorted output.
2.1: Upgrading to SDK matching 1.4.1.809b - Fixing hang when calling from Eleveated powershell
@@ -38,4 +37,3 @@ Bug fix for -Filter that didn't work in combination with non-global searches.
}
}
}
-
diff --git a/PSEverything/SearchEverythingCommand.cs b/PSEverything/SearchEverythingCommand.cs
index 19bf251..8801b79 100644
--- a/PSEverything/SearchEverythingCommand.cs
+++ b/PSEverything/SearchEverythingCommand.cs
@@ -1,14 +1,16 @@
using System;
using System.Management.Automation;
using System.Text;
+using System.IO;
namespace PSEverything
{
[Cmdlet(VerbsCommon.Search, "Everything", SupportsPaging = true, DefaultParameterSetName = "default")]
- [OutputType(new []{typeof(string)})]
- [OutputType(new[]{typeof(string[])})]
- [Alias(new[]{"se" })]
- public sealed class SearchEverythingCommand : PSCmdlet , IDisposable
+ [OutputType(new Type[] { typeof(string) })]
+ [OutputType(new Type[] { typeof(string[]) })]
+ [OutputType(new Type[] { typeof(FileSystemInfo) })]
+ [OutputType(new Type[] { typeof(FileSystemInfo[]) })]
+ public sealed class SearchEverythingCommand : PSCmdlet, IDisposable
{
[Parameter(ParameterSetName = "default")]
public string Filter { get; set; }
@@ -22,19 +24,19 @@ public sealed class SearchEverythingCommand : PSCmdlet , IDisposable
[Parameter(ParameterSetName = "default")]
public string[] Extension { get; set; }
- [Alias(new[] {"pi"})]
+ [Alias(new[] { "pi" })]
[Parameter(ParameterSetName = "default")]
public string[] PathInclude { get; set; }
- [Alias(new[] {"pe"})]
+ [Alias(new[] { "pe" })]
[Parameter(ParameterSetName = "default")]
public string[] PathExclude { get; set; }
- [Alias(new[] {"foi"})]
+ [Alias(new[] { "foi" })]
[Parameter(ParameterSetName = "default")]
public string[] FolderInclude { get; set; }
- [Alias(new[] {"foe"})]
+ [Alias(new[] { "foe" })]
[Parameter(ParameterSetName = "default")]
public string[] FolderExclude { get; set; }
@@ -68,6 +70,10 @@ public sealed class SearchEverythingCommand : PSCmdlet , IDisposable
[Parameter()]
public SwitchParameter AsArray { get; set; }
+ [Alias(["AsFS"])]
+ [Parameter()]
+ public SwitchParameter AsObject { get; set; }
+
private string GetSearchString()
{
if (ParameterSetName == "regex") { return RegularExpression; }
@@ -167,7 +173,7 @@ void AddExtensionFilter(StringBuilder searchBuilder)
foreach (var item in Extension)
{
- var ext = item.StartsWith(".") ? item.Substring(1) : item;
+ var ext = item.StartsWith(".") ? item.Substring(1) : item;
searchBuilder.Append(ext);
searchBuilder.Append(";");
}
@@ -267,7 +273,8 @@ protected override void ProcessRecord()
WriteDebug("Search-Everything search pattern:" + searchPattern);
Everything.SetSearch(searchPattern);
- try {
+ try
+ {
Everything.Query(true);
Everything.SortResultsByPath();
int resCount = Everything.GetTotalNumberOfResults();
@@ -276,8 +283,16 @@ protected override void ProcessRecord()
var total = PagingParameters.NewTotalCount((ulong)resCount, 1.0);
WriteObject(total);
}
- var res = Everything.GetAllResults(Math.Min(resCount, (int)first));
- WriteObject(res, enumerateCollection: !AsArray);
+ if (AsObject)
+ {
+ FileSystemInfo[] res = Everything.GetAllResultsAsFileSystemInfo(Math.Min(resCount, (int)first));
+ WriteObject(res, enumerateCollection: !AsArray);
+ }
+ else
+ {
+ var res = Everything.GetAllResults(Math.Min(resCount, (int)first));
+ WriteObject(res, enumerateCollection: !AsArray);
+ }
}
catch (Exception e)
{
@@ -290,4 +305,4 @@ void IDisposable.Dispose()
Everything.Cleanup();
}
}
-}
\ No newline at end of file
+}
diff --git a/PSEverything/SelectEverythingStringCommand.cs b/PSEverything/SelectEverythingStringCommand.cs
index 69b23da..c804b4e 100644
--- a/PSEverything/SelectEverythingStringCommand.cs
+++ b/PSEverything/SelectEverythingStringCommand.cs
@@ -8,8 +8,7 @@
namespace PSEverything
{
[Cmdlet(VerbsCommon.Select, "EverythingString", DefaultParameterSetName = "default")]
- [OutputType(new[]{"Microsoft.PowerShell.Commands.MatchInfo" })]
- [Alias(new[] {"sles"})]
+ [OutputType(new[] { "Microsoft.PowerShell.Commands.MatchInfo" })]
public class SelectEverythingStringCommand : PSCmdlet
{
static readonly string[] SearchParamNames = new[]{
@@ -49,7 +48,7 @@ public class SelectEverythingStringCommand : PSCmdlet
[Parameter]
public SwitchParameter NotMatch { get; set; }
- [ValidateSet(new[]{"unicode", "utf7", "utf8", "utf32", "ascii", "bigendianunicode", "default", "oem" })]
+ [ValidateSet(new[] { "unicode", "utf7", "utf8", "utf32", "ascii", "bigendianunicode", "default", "oem" })]
[ValidateNotNullOrEmpty]
public string Encoding { get; set; }
@@ -71,19 +70,19 @@ public class SelectEverythingStringCommand : PSCmdlet
public string[] Extension { get; set; }
[Parameter(ParameterSetName = "default")]
- [Alias(new[] {"pi"})]
+ [Alias(new[] { "pi" })]
public string[] PathInclude { get; set; }
[Parameter(ParameterSetName = "default")]
- [Alias(new[] {"pe"})]
+ [Alias(new[] { "pe" })]
public string[] PathExclude { get; set; }
[Parameter(ParameterSetName = "default")]
- [Alias(new[] {"fi"})]
+ [Alias(new[] { "fi" })]
public string[] FolderInclude { get; set; }
[Parameter(ParameterSetName = "default")]
- [Alias(new[] {"fe"})]
+ [Alias(new[] { "fe" })]
public string[] FolderExclude { get; set; }
[Parameter(ParameterSetName = "default")]
@@ -124,7 +123,7 @@ protected override void EndProcessing()
{
if (bound.TryGetValue(sp, out object val))
{
- searchParams.Add(sp == nameof(CaseSensitiveSearch) ? "CaseSenitive" : sp, val);
+ searchParams.Add(sp == nameof(CaseSensitiveSearch) ? "CaseSensitive" : sp, val);
bound.Remove(sp);
}
}
@@ -135,7 +134,8 @@ protected override void EndProcessing()
bound.Remove(nameof(CaseSensitivePattern));
}
var slsParams = bound;
- using (_powershell = PowerShell.Create(RunspaceMode.CurrentRunspace)) {
+ using (_powershell = PowerShell.Create(RunspaceMode.CurrentRunspace))
+ {
_powershell.AddCommand("Search-Everything").AddParameters(searchParams);
var paths = _powershell.Invoke().First();
if (_powershell.HadErrors)
diff --git a/PSEverythingStandard/Class1.cs b/PSEverythingStandard/Class1.cs
deleted file mode 100644
index cca626a..0000000
--- a/PSEverythingStandard/Class1.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace PSEverythingStandard
-{
- public class Class1
- {
- }
-}
diff --git a/Tests/PSEverythingTests/SelectEverythingTests.cs b/Tests/PSEverythingTests/SelectEverythingTests.cs
index 84f15e8..db407b9 100644
--- a/Tests/PSEverythingTests/SelectEverythingTests.cs
+++ b/Tests/PSEverythingTests/SelectEverythingTests.cs
@@ -14,13 +14,14 @@ public class SelectEverythingTests
public void TestSelectEverythingString()
{
var iss = InitialSessionState.CreateDefault2();
- iss.ImportPSModule(new []{(typeof(SelectEverythingStringCommand).Assembly.Location)});
+ iss.ImportPSModule(new[] { (typeof(SelectEverythingStringCommand).Assembly.Location) });
using (var ps = PowerShell.Create(iss))
{
ps.Commands.AddCommand("Select-EverythingString")
- .AddParameter("-Extension", "ps1")
+ .AddParameter("-Extension", "psd1")
.AddParameter("-Global", true)
- .AddParameter("-Pattern", "function (\\S+)");
+ .AddParameter("-Pattern", "RootModule")
+ .AddParameter("-Exclude", "$env:SystemRoot");
var res = ps.Invoke();