Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell脚本未执行过去的for循环_Powershell_Loops_For Loop_Each - Fatal编程技术网

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。@chandanT
Get 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
),我已经取得了一些进展,并坚持使用附件。@chandanT
Get 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
),我已经取得了一些进展,并坚持使用附件。