如何传递多个输入

时间:2015-06-09 11:23:07

标签: powershell

我正在尝试编写一个PowerShell脚本,该脚本将从不同的服务器获取特定的扩展文件。为了通过许多扩展,我知道我们可以使用@后跟扩展。当我从输入文件中选择它们并将其传递给脚本时,它无法正常工作。

$ServerName=Get-content "D:\HOMEWARE\BLRMorningCheck\Jerry\servername.txt"

foreach ($server in $ServerName)
{
  $server_host=echo $server | %{$data = $_.split(";"); Write-Output      "$($data[0])"}
  $Targetfolder=echo $server | %{$data = $_.split(";"); Write-Output "$($data[1])"}
  $Ext=echo $server | %{$data = $_.split(";"); Write-Output "$($data[2])"}

  $Extension =@($Ext)

  $Targetfolder=$Targetfolder.Trim('"')

  $Files = Get-Childitem $TargetFolder -Include $Extension -Recurse 

  echo $Files
}

我的扩展程序为*.log*.log*7z*.txt*7z*.txt*

2 个答案:

答案 0 :(得分:3)

$Ext包含一个字符串,可能带有以逗号分隔的扩展名列表。但是,逗号分隔的字符串不会变成数组(这是-Include参数所期望的),因为您将其放在@()中。您需要在分隔符处分割字符串:

PS C:\> $Ext = ".log,.log*7z,*.txt*7z,.txt"
PS C:\> $Ext
.log,.log*7z,*.txt*7z,.txt
PS C:\> $Extension = $Ext -split ','
PS C:\> $Extension
.log
.log*7z
*.txt*7z
.txt

另外,就像我在回答您之前的问题时所说的那样,您最好使用Import-Csv来阅读输入文件:

$filename  = 'D:\HOMEWARE\BLRMorningCheck\Jerry\servername.txt'

Import-Csv $filename -Delimiter ';' -Header 'ComputerName', 'TargetFolder', 'Ext' |
  select TargetFolder, @{n='Extensions';e={$_.Ext -split ','}} |
  % { Get-Childitem $_.TargetFolder -Include $_.Extensions -Recurse }

答案 1 :(得分:1)