Powershell читает имена файлов в папке и читает содержимое каждого файла для создания пунктов меню - PullRequest
0 голосов
/ 08 октября 2018

У меня есть папка c: \ mycommands. Файлы в этой папке состоят из нескольких файлов, таких как: command1.txt command2.txt command3.txt

каждый файл имеет только одну строку, например: в файле command1.txt:
echo "это команда1"

в файле command2.txt "echo" это команда2 "

и т. д.

Я хочу прочитатьимя файла и его содержимое в паре массив / переменная для создания динамического меню.

так что теоретически все, что мне нужно будет сделать в будущем, это поместить файл в папку, и программа включит егокак параметр меню динамически. (или удалите файл, чтобы он не отображался в параметре меню.

Каков наилучший способ приблизиться к этому? Может быть, цикл do while с get-content в массив? Любой ввод будетБуду очень признателен. Я действительно пытаюсь ограничить или избежать обслуживания меню, но лучше бы меню создавалось динамически

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вот три варианта одной и той же базовой идеи, в зависимости от того, какой выход вам нужен.

# Storing output in a hash table (key/value pairs)
$resultHash = @{}
Get-ChildItem -Path C:\mycommands -File |
    ForEach-Object {$resultHash.Add($_.Name, (Get-Content -Path $_.FullName))}


# Storing output in an array of psobjects
$resultArray = @()
Get-ChildItem -Path C:\mycommands -File | 
    ForEach-Object {
                        $resultArray += (New-Object -TypeName psobject -Property @{"NameOfFile"=$_.Name; "CommandText"=(Get-Content -Path $_.FullName);})
                    }


# Outputting psobjects to the pipeline
Get-ChildItem -Path C:\mycommands -File | 
    ForEach-Object {
                        New-Object -TypeName psobject -Property @{"NameOfFile"=$_.Name; "CommandText"=(Get-Content -Path $_.FullName);}
                }



# Making a nice menu out of the hash table version
$promptTitle = "My menu"
$promptMessage = "Choose from the options below"
$promptOptions = @()
foreach ($key in $resultHash.Keys)
{
    $promptOptions += New-Object System.Management.Automation.Host.ChoiceDescription $key, $resultHash[$key]
}
$promptResponse = $host.ui.PromptForChoice($promptTitle, $promptMessage, $promptOptions, 0) 
0 голосов
/ 08 октября 2018

Если я правильно понимаю, что вы хотите, это может быть в состоянии выполнить это для вас.

Если соберет список всех файлов в папке, затем получить содержимое каждого из них и добавитьих в массив один за другим.

[System.Collections.ArrayList]$Files = @(Get-ChildItem "C:\Logs\" | 
    Where-Object {$_.PSIsContainer -eq $false} | 
    Select-Object FullName)
[System.Collections.ArrayList]$List_Of_Commands = @()

foreach ($File in $Files) {
    [System.Collections.ArrayList]$File_Contents = @(Get-Content $File.FullName)

    foreach ($Content in $File_Contents) {
        $Array_Object = [PSCustomObject]@{
            'Command' = $Content
        }
        $List_Of_Commands.Add($Array_Object) | Out-Null
    }
}

$List_Of_Commands
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...