Powershell脚本未执行过去的for循环
我已经取得了一些进步,并且坚持着这种依恋。下面的脚本现在发送一封电子邮件,但没有附件Powershell脚本未执行过去的for循环,powershell,loops,for-loop,each,Powershell,Loops,For Loop,Each,我已经取得了一些进步,并且坚持着这种依恋。下面的脚本现在发送一封电子邮件,但没有附件 $sub = "APERAK/INVRPT Report " $to="Chandan.Talasila@XXXXXXXX.com" $folder = "C:\script\APERAK" $files = Get-ChildItem "C:\script\APERAK" $tstmp = Get-Date -UFormat "%H%M" $dstamp = Get-Date -UFormat "%Y%m%d
$sub = "APERAK/INVRPT Report "
$to="Chandan.Talasila@XXXXXXXX.com"
$folder = "C:\script\APERAK"
$files = Get-ChildItem "C:\script\APERAK"
$tstmp = Get-Date -UFormat "%H%M"
$dstamp = Get-Date -UFormat "%Y%m%d"
$from="Reports@XXXXXXXX.com"
$smtpserver = "mail.XXXXXXXX.com"
for ($i=0; $i -lt $files.Count; $i++) {
$subject= $sub + $dstamp #+ " " +$tstmp
$filename = $files[$i].FullName
$abpath = $folder + $files[$i].FullName
$attachment = new-object Net.Mail.Attachment($abpath)
$body= Get-Content $filename
$SMTP = new-object Net.Mail.SmtpClient($smtpserver)
$MSG = new-object Net.Mail.MailMessage($from, $to, $subject, $body)
$MSG.attachments.add($attachment)
$SMTP.send($msg)
}
使用“1”参数调用“Add”时出现异常:“值不能为null。
参数名称:项“
在C:\gentranscript\APERAK\u REPORT\u EMAIL1.ps1:22 char:21
+$MSG.attachments.add问题是
Get Childitem
将返回两种类型的对象。如果只有一个文件,$files=Get ChildItem“C:\Reports\APERAK”
将包含一个FileInfo
。如果还有更多,它将包含一个FileInfo对象数组。让我们看一个示例案例:
md foo
cd foo
set-content -Path "foo.txt" -Value ""
$files = gci
$files.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True FileInfo System.IO.FileSystemInfo
set-content -Path "foo2.txt" -Value ""
$files2 = gci
$files2.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
对于解决方案,将gci
结果包装到一个数组中。这样,
$files = @(Get-ChildItem "C:\Reports\APERAK")
问题是
getchilditem
将返回两种类型的对象。如果只有一个文件,$files=Get ChildItem“C:\Reports\APERAK”
将包含一个FileInfo
。如果还有更多,它将包含一个FileInfo对象数组。让我们看一个示例案例:
md foo
cd foo
set-content -Path "foo.txt" -Value ""
$files = gci
$files.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True FileInfo System.IO.FileSystemInfo
set-content -Path "foo2.txt" -Value ""
$files2 = gci
$files2.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
对于解决方案,将gci
结果包装到一个数组中。这样,
$files = @(Get-ChildItem "C:\Reports\APERAK")
由于某种原因,脚本正在进入for循环。
。。。那么这里有什么问题?你的意思是不进去吗?或者正在输入但未发送电子邮件?请提供更多详细信息?我不知道问题出在哪里,光标没有进入for循环。您确定“C:\Reports\APERAK”是服务器上的正确路径吗?尝试输出<代码>$文件。单独计算<代码>并查看输出。为什么不使用foreach?正如我所看到的,除了数组元素的寻址之外,您不使用$I。出于某种原因,脚本正在进入for循环。。。。那么这里有什么问题?你的意思是不进去吗?或者正在输入但未发送电子邮件?请提供更多详细信息?我不知道问题出在哪里,光标没有进入for循环。您确定“C:\Reports\APERAK”是服务器上的正确路径吗?尝试输出<代码>$文件。单独计算<代码>并查看输出。为什么不使用foreach?正如我所见,除了数组元素的寻址之外,您不使用$I。@chandanTGet ChildItem“C:\Reports\APERAK”
还可以返回DirectoryInfo
对象。这些是子文件夹。在循环中,您希望所有内容都是一个文件,您可以在该文件上执行获取内容
。若要确保只获取FileInfo
对象,请使用get ChildItem“C:\Reports\APERAK”-File
或使用get ChildItem“C:\Reports\APERAK”|其中对象{-not$\ PSIsContainer}
如果您使用的是较旧的PowerShell版本,请注意,标量(单个)返回对象只是PowerShell v2中的一个问题。在v3+中,即使单个对象也有一个.Count
属性(例如,尝试'foo.Count
),我已经取得了一些进展,并坚持使用附件。@chandanTGet ChildItem“C:\Reports\APERAK”
也可以返回DirectoryInfo
对象。这些是子文件夹。在循环中,您希望所有内容都是一个文件,您可以在该文件上执行获取内容
。若要确保只获取FileInfo
对象,请使用get ChildItem“C:\Reports\APERAK”-File
或使用get ChildItem“C:\Reports\APERAK”|其中对象{-not$\ PSIsContainer}
如果您使用的是较旧的PowerShell版本,请注意,标量(单个)返回对象只是PowerShell v2中的一个问题。在v3+中,即使是单个对象也有一个.Count
属性(例如,尝试'foo.Count
),我已经取得了一些进展,并坚持使用附件。