我是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的情况下查找和加密文件。它正确归档这两个文件。 不知道我错过了什么也找到了控制文件。
答案 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
。