SQL Server 如何在Powershell中动态列出目录中的文件列表并进行编号

h43kikqp  于 2022-12-22  发布在  Shell
关注(0)|答案(2)|浏览(125)

我正在编写一个Powershell脚本,它将向用户提供SQL查询选项,以运行和获取报告。我有一个完整的目录,其中充满了这些查询,但不知道如何动态列出名称,并在终端中对它们进行编号。我知道我可以硬编码它们,但我希望说明稍后添加或删除的脚本。
项目的文件夹结构如下所示,我已经完成并测试了调用和执行查询的方法。

- Powershell_Script.ps1
    > Individual queries
        - Query 1.sql
        - Query 2.sql
        - Query 3.sql

本质上,我希望能够呈现一个如下的菜单,用户可以简单地通读,并选择一个数字来运行该特定脚本。

Individual Scripts
******************

1. 500MB Files.sql
2. 4GB Files.sql
3. Duplicate Users.sql
4. Flat space Files.sql
etc...
von4xj4u

von4xj4u1#

您可以在脚本目录上使用Get-ChildItem并将其推送到ForEachObject循环,以便按顺序对每个脚本进行编号并在控制台中显示文件名。您可以同时将脚本的FullName(路径)存储在变量中,以便在用户输入后引用。

Write-Host "Individual Scripts"
Write-Host "******************`r`n"
$i = 0
$SQL_Scripts = Get-ChildItem -Path "[PATH TO SQL SCRIPTS]" -Filter "*.sql" |
    ForEach-Object {
        Write-Host "$($i++). $($_.Name)" # Numbers and Write Filename to Console
        $_.FullName #Passes back full script path to Array
    }
Write-Host ""
$Number = Read-Host -Prompt "Which script do you want to run?"

$Script = $SQL_Scripts[$Number - 1]  # User Selected No. - 1  is array element w/ script path
7xzttuei

7xzttuei2#

我通过添加一个表达式字段作为Format-Table属性列表中的第一个字段来实现这一点:
第一个月
在使用Read-Host获得一个数字之后,我减去1以返回数组中的实际偏移量。

相关问题