在foreach语句Powershell中使用数组

时间:2019-03-14 11:41:51

标签: arrays powershell start-process

我有一个包含文件夹的数组 我需要在应用程序中为每个文件夹运行一个命令,因此我正在使用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: 开始过程-FilePath'C:\ Program Files \ App1 \ run.exe'-ArgumentList'-appcommand / path / Folder1' (注意:-appcommand / path /是一个常量)

对于Folder2: 开始过程-FilePath'C:\ Program Files \ App1 \ run.exe'-ArgumentList'-appcommand / path / Folder2'

对于Folder3: 开始过程-FilePath'C:\ Program Files \ App1 \ run.exe'-ArgumentList'-appcommand / path / Folder3'

对于文件夹4: 开始过程-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
}

我知道这是一种胶带解决方案,但最终它可以工作。谢谢好人的投入!

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确解决了您的问题。

但是尝试这样:

$folders=Get-ChildItem C:\AppFolder    
foreach ($folder in $folders) {
    Start-Process -FilePath 'C:\Program Files\App1\run.exe' -ArgumentList "-appcommand $($Folder.FullName)"
}

答案 1 :(得分:0)

编辑: 我设法使用新的组合变量来解决此问题,然后使用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
}

我知道这是一种胶带解决方案,但最终它可以工作。谢谢好人的投入!