You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将txt文件中的PowerShell命令导入ps1脚本并执行得到计算结果?

解决PowerShell脚本读取配置文件后无法执行命令的问题

问题描述

当前scr3.ps1读取var1.txt中的配置项时,仅将time、extn等字段的值作为字符串存储,没有执行其中的PowerShell表达式,导致输出的是表达式字面量而非执行结果,后续文件筛选逻辑也无法正常工作。

现有文件内容

  • var1.txt:
time=(Get-Date).AddYears(-1)
extn=@("*.mp3", "*.jpg")
path=E:\marathi\Lavani
  • 原scr3.ps1:
$ConfigFile = "E:\marathi\Lavani\var1.txt"
#Creating an empty hash table
$ConfigKeys = @{}


#Pulling, separating, and storing the values in $ConfigKey
Get-Content $ConfigFile | ForEach-Object {

$Keys = $_ -split "="

$ConfigKey += @{$Keys[0]=$Keys[1]}
}

$extn2 = $ConfigKey.extn
$path2 = $ConfigKey.path
$time2 = $ConfigKey.time

$time2
$extn2
$path2

Get-ChildItem -Include $extn2 -Path $path2 -Recurse | Where-Object {($_.LastWriteTime -lt $time2)}

当前问题

脚本运行后仅输出表达式字符串:

(Get-Date).AddYears(-1)
@("*.mp3", "*.jpg")
E:\marathi\Lavani

无法得到预期的执行结果和文件筛选功能。

解决方案

需要修正两个核心问题:哈希表变量名拼写错误,以及执行配置项中的PowerShell表达式。

修改后的scr3.ps1代码

$ConfigFile = "E:\marathi\Lavani\var1.txt"
# 创建空哈希表
$ConfigKeys = @{}

# 读取配置并执行表达式后存储
Get-Content $ConfigFile | ForEach-Object {
    # 仅拆分第一个=号,避免值中包含=的情况
    $Keys = $_ -split "=", 2
    if ($Keys.Count -eq 2) {
        $keyName = $Keys[0].Trim()
        $valueExpression = $Keys[1].Trim()
        # 执行表达式并获取实际结果
        $value = Invoke-Expression $valueExpression
        $ConfigKeys[$keyName] = $value
    }
}

$extn2 = $ConfigKeys.extn
$path2 = $ConfigKeys.path
$time2 = $ConfigKeys.time

$time2
$extn2
$path2

Get-ChildItem -Include $extn2 -Path $path2 -Recurse | Where-Object { $_.LastWriteTime -lt $time2 }

关键修改说明

  1. 修正哈希表变量名:原脚本中定义的哈希表是$ConfigKeys,但后续赋值和读取时误用了$ConfigKey,导致哈希表未正确填充,现已统一为$ConfigKeys。
  2. 执行表达式:使用Invoke-Expression执行配置值中的PowerShell代码,将计算后的结果(如日期对象、数组)存入哈希表,而非存储字符串字面量。
  3. 安全拆分配置项:使用-split "=", 2确保只拆分第一个=号,避免配置值中包含=时出现错误拆分。

执行效果

运行修改后的脚本,将输出预期结果:

26 May 2022 11:32:46 AM
*.mp3
*.jpg
E:\marathi\Lavani

同时Get-ChildItem会正确筛选出指定路径下、扩展名匹配且最后写入时间早于计算日期的文件。

内容的提问来源于stack exchange,提问作者Shreya Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:12:41