首页 > 解决方案 > 在foreach语句powershell中使用数组

问题描述

我有一个包含文件夹的数组,我需要为每个文件夹在应用程序上运行一个命令,所以我正在使用 foreach 命令。但是在参数列表中,我需要分别指定每个文件夹的路径,所以假设我有 4 个文件夹(Folder1、Folder2、Folder3、Folder4),并且在 foreach 脚本块中我需要使用包含多个应用程序命令的 -Argumentlist 启动进程和文件夹的名称。分别对每个文件夹执行相同的操作。

我遇到的问题是为每个文件夹运行 ArgumentList,其中每个文件夹具有来自同一数组的不同文件夹。我一直在努力澄清,但如果这还不够理解,请告诉我。

我一直试图弄清楚,这些几乎是我的笔记:

$folders=Get-ChildItem C:\AppFolder
$argum="-appcommand /path/$folders"

foreach ($folder in $folders) {
    Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList $argum
}

我不能为每个文件夹写单独的行,因为这些在每台计算机上都会有所不同,我需要一个完全自动化的解决方案。

我知道这很令人困惑,所以我将尝试逐步重写我想要实现的目标。我需要自动化这个:

对于存储在 $folders=Folder1,Folder2,Folder3,Folder4 中的每个文件夹

对于 Folder1: Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand /path/Folder1' (注意:-appcommand /path/ 是一个常量)

对于 Folder2: Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand /path/Folder2'

对于 Folder3: Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand /path/Folder3'

对于文件夹 4: Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand /path/Folder4'

编辑:我已经设法使用新的组合变量来解决这个问题,然后使用 Invoke-Expression 运行它们。简而言之,以下是我所做的。

$items=Get-ChildItem C:\AppFolder -Directory | select -ExpandProperty Name
$argum="Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand ""/Path/"

foreach ($item in $items) {

    $Tasks=$argum+$item+"""'"
    Invoke-Expression $Tasks
}

我知道这是一种胶带解决方案,但最终它起作用了。感谢好心人的投入!

标签: arrayspowershellstart-process

解决方案


编辑:我已经设法使用新的组合变量来解决这个问题,然后使用 Invoke-Expression 运行它们。简而言之,以下是我所做的。

$items=Get-ChildItem C:\AppFolder -Directory | select -ExpandProperty Name
$argum="Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList '-appcommand ""/Path/"

foreach ($item in $items) {

    $Tasks=$argum+$item+"""'"
    Invoke-Expression $Tasks
}

我知道这是一种胶带解决方案,但最终它起作用了。感谢好心人的投入!


推荐阅读