CoreyMasso Ответов: 1

Как отобразить имена заголовков в приведенном ниже powersellscript


Попытка получить результаты этого скрипта powershell для возврата объекта таблицы, чтобы я мог прочитать этот объект в C#

Сценарий powershell рекурсивно подсчитывает количество файлов в каталоге

Что я уже пробовал:

Я уже пробовал это сделать:

cd D:\VMs
dir -recurse | ?{ $_.PSIsContainer } | %{ Write-Host $_.FullName $_.DirectoryName (dir $_.FullName | Measure-Object).Count} 


Который возвращает правильные результаты, но без заголовка, как я ожидаю.

Результаты работы скрипта

PS D:\VMs> C:\test\test.ps1
D:\VMs\Windows 10 Pro  52
D:\VMs\WindowsXP  29
D:\VMs\Windows 10 Pro\564d6a23-4315-5965-49a6-cef8c565a3ca.vmem.lck  1
D:\VMs\Windows 10 Pro\caches  1
D:\VMs\Windows 10 Pro\Personal Windows 10 Pro.vmdk.lck  1
D:\VMs\Windows 10 Pro\Personal Windows 10 Pro.vmx.lck  1
D:\VMs\Windows 10 Pro\caches\GuestAppsCache  2
D:\VMs\Windows 10 Pro\caches\GuestAppsCache\appData  442
D:\VMs\Windows 10 Pro\caches\GuestAppsCache\launchMenu  2
D:\VMs\WindowsXP\caches  1
D:\VMs\WindowsXP\caches\GuestAppsCache  2
D:\VMs\WindowsXP\caches\GuestAppsCache\appData  161
D:\VMs\WindowsXP\caches\GuestAppsCache\launchMenu  2


Хотелось бы, чтобы заголовки были каталогом и CountOfFilesInDirectory

    Directory: D:\vms


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2019-08-06  12:12 PM                Windows 10 Pro
d-----       2019-08-02   4:09 PM                WindowsXP



Как и заголовки, показанные выше

Код C#

string script = File.ReadAllText(@"c:\test\test.ps1");

using (PowerShell PowerShellInst = PowerShell.Create())
{
    //string criteria = "system*";
    //PowerShellInst.AddScript("Get-Service -DisplayName " + criteria);
    PowerShellInst.AddScript(script);
    Collection<PSObject> PSOutput = PowerShellInst.Invoke();
    foreach (PSObject obj in PSOutput)
    {
        if (obj != null)
        {
            obj.ToString();
            Console.Write(obj.Properties["Directory"].Value.ToString() + " - ");
            Console.WriteLine(obj.Properties["CountOfFilesInDirectory"].Value.ToString());
        }
    }
    Console.WriteLine("Done");
    Console.Read();
}

1 Ответов

Рейтинг:
0

Richard Deeming

Попробуйте использовать Select-Object вместо Write-Host:

dir -recurse | ?{ $_.PSIsContainer } | select-object -property FullName, Name, @{label="CountOfFilesInDirectory";expression={(dir $_.FullName | measure-object).Count}}
объект Select[^]