我正在尝试编写一个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*
。
答案 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)