我需要我的脚本接受来自文件的输入而不是读取主机

I need my script to accept input from a file rather than read-host

我有一个 ps 脚本,它会询问一个数字,然后在包含 1000 多个文件的位置搜索该数字,复制具有这些数字的文件名,然后将其输出到一个文件中。该号码也保存在不同位置的 txt 文件中,我从中手动复制并插入到此脚本中。是否可以让脚本从包含数字的文件的第二行开始读取,然后在文件中搜索该数字,就像现在一样? 这是我正在使用的代码:-

$Path = "D:\Projects\MSMQ Journal Messages\PurchaseManagementPO"

$Text = Read-Host -Prompt "PO Number"

$PathArray = @()

$Results = "D:\Chayan\POmiss\miss.txt"


# This code snippet gets all the files in $Path that end in ".xml".

Get-ChildItem $Path -Filter "*.xml" |

Where-Object { $_.Attributes -ne "Directory"} |

ForEach-Object {
If (Get-Content $_.FullName | Select-String -Pattern $Text) 
{
$PathArray += $_.FullName

$PathArray += $_.FullName
}
}
Write-Host "Contents of ArrayPath:"

$PathArray | % {$_} | Out-File "D:\Chayan\POmiss\miss.txt" -Append

该 PO 编号来自一个文件,该文件是通过不同的脚本生成的,并按如下方式保存:- ponumMaster

 908859

 280973

我手动将这些数字放在读取主机中以进行搜索并保存文件名。 powershell 是否可以从该文件中复制这些数字并执行任务?

您应该可以使用 -skip 移过第一行

下面的示例将跳过第一行并在之后给出结果

get-content C:\_lab\test.txt | select -skip 1

这个例子会跳过第一行,只给出第二行的结果

get-content C:\_lab\test.txt | select -first 1 -skip 1

对于您的脚本,您只需要执行以下操作:

$Text = get-content C:\_lab\test.txt | select -skip 1
#we clear this variable so it can be run multiple times in the same session

clear-variable final -ErrorAction Ignore

#grab txt file content and split into an array

[array]$txt=(get-content "D:\Chayan\POmiss\miss.txt") -split " "

#take out the blanks and assign to new variable called final (we clear this above so it can be run multiple times in the same session)

foreach($line in $txt){
    if($line.replace(" ","")){
        [array]$final+=$line
    }
}

#run script, calling the variable $text in place of the numbers

foreach($text in $final){
    
    (your normal script here)
    
}