PowerShell通配符不返回所有文件

时间:2015-06-26 16:34:32

标签: powershell

我是PowerShell的新手并且一直试图让这个脚本运行起来。

If ((Get-Date -UFormat %a) -eq "Mon") {$intSubtract = -3} 
Else {$intSubtract = -1}
$datDate = (Get-Date).AddDays($intSubtract)

Write-Output "Find expected file --------------"
$strDate = ($datDate).ToString('yyyyMMdd')
Write-Host "strDate: $strDate"
$arrGetFile = Get-ChildItem -Path "\\Computer\Data\States\NorthDakota\Cities\*_Bismark_$strDate*.txt"

$strLocalFileName = $arrGetFile

If ($arrGetFile.count -ne 2)
{
Throw "No file or more than two files with today's date exists!"
}
Else {$strLocalFileName = $arrGetFile[0].Name}

Write-Output "Found file $strLocalFileName --------------"


#Encrypt each file 

foreach ($arrGetFile in $strPath)
{    
Write-Output "Start Encrypt --------------"
    $strPath = "\\Computer\Data\States\NorthDakota\Cities\"
    $FileAndPath = Join-Path $strPath $strLocalFileName
    $Recipient = "0xA49B4B5D"

    Import-Module \\JAMS\C$\PSM_PGP.psm1
    Get-Module Encrypt

    Encrypt $FileAndPath $Recipient
    $strLocalFileNamePGP = $strLocalFileName + ".pgp"

Write-Output "End Encrypt --------------"

        }
#Archive files 

Write-Output "Archiving --------------"

move-item -path \\Computer\Data\States\NorthDakota\Cities\*_Bismark_$strDate*.txt -destination \\Computer\Data\States\NorthDakota\Cities\Archive

Cities文件夹将包含两个文件。示例2015_Bismark_20150626_183121.txt和2015_Bismark_20150626_183121_Control.txt

我试图将这两个文件加密,但它只是在没有_Control的情况下查找和加密文件。它正确归档这两个文件。 不知道我错过了什么也找到了控制文件。

1 个答案:

答案 0 :(得分:0)

您的for循环不正确。你有foreach ($arrGetFile in $strPath),但$ strPath在那时似乎没有任何东西。

您的for循环应为:

foreach ($LocalFile in $arrGetFile)

您需要删除以下行:

$strLocalFileName = $arrGetFile

这使$ strLocalFileName成为一个文件对象数组,但是稍后在脚本中你将它视为一个字符串。您可能有更多的逻辑错误 - 您需要非常仔细地浏览脚本并识别每个变量并确保它包含您希望它包含的内容。

通常,您似乎将非字符串对象的数组视为字符串。请注意,我已将$strLocalFileName变量更改为$LocalFile。这是因为它是文件对象,而不是字符串对象。

以下示例仅显示for循环遍历两个文件。

If ((Get-Date -UFormat %a) -eq "Mon") {$intSubtract = -3} 
Else {$intSubtract = -1}
$datDate = (Get-Date).AddDays($intSubtract)

Write-Output "Find expected file --------------"
$strDate = ($datDate).ToString('yyyyMMdd')
Write-Host "strDate: $strDate"

$arrGetFile = Get-ChildItem -Path "\\Computer\Data\States\NorthDakota\Cities\*_Bismark_$strDate*.txt"

If ($arrGetFile.count -ne 2)
{
    Throw "No file or more than two files with today's date exists!"
}

Write-Output "Found files " ($arrGetFile | select Name | fl) "--------------"

#Process each file 
foreach ($LocalFile in $arrGetFile)
{    

    $FileAndPath = Join-Path $LocalFile.DirectoryName $LocalFile
    $FileAndPath

}

从此开始,然后小心地将加密处理添加回循环。

此外,可以删除分配$FileAndPath的行。您可以在需要完整路径和文件名的地方使用$LocalFile.FullName