2017-11-08 16 views
1

내 도메인 컴퓨터에 대한 부팅 보고서를 작성하고 메일로 자동 전송하려고합니다.Select-Object 및 빈 변수

그러나 변수에 넣으려면 문제가있어서 Send-MailMessage 함수를 사용하십시오.

여기에 코드 조각입니다 :

foreach ($computer in $ComputerList){ 
    If (Test-Connection -ComputerName $Computer -ErrorAction SilentlyContinue -Quiet -Count 2 ) 
     { 
     $ComInfo = (Get-WmiObject Win32_OperatingSystem -ComputerName $Computer -Credential $Cred).LastBootUpTime 
     #Convert the last boot time to a reader freindly date time format 
     $BootTime = [System.Management.ManagementDateTimeConverter]::ToDateTime($ComInfo) 
     $Canonical = (Get-ADComputer $Computer -Properties CanonicalName).CanonicalName 
     New-Object PSObject -Property @{    
     'Computer Name' = $Computer     
     'Boot Time' = $BootTime 
     'OU'  = $Canonical 
      } 
     } #end-if test 
    Else 
    { 
     $offlines = "$Computer desligado" 
    } 
} 

$FinalReport | Select-Object 'Computer Name','Boot Time','OU' | 
Sort-Object 'Boot Time' | Format-Table -AutoSize 

하지만 PowerShell을 대화 창을 통해 받고 있어요 :

 
ComputerName  OU   Boot Time   
------------- --   ---------   
PC60423   TI/PC60423 08/11/2017 11:31:38 
PC60432   TI/PC60432 08/11/2017 09:26:52 
PC60431   TI/PC60431 08/11/2017 08:56:53 
PC60439   TI/PC60439 08/11/2017 08:42:31 
PC60425   TI/PC60425 08/11/2017 10:11:43 
PC60427   TI/PC60427 07/11/2017 17:07:26 
PC34844   TI/PC34844 06/11/2017 15:21:06 
PC42331   TI/PC42331 08/11/2017 08:10:52 
PC47521   TI/PC47521 08/11/2017 07:09:01 
PC36737   TI/PC36737 08/11/2017 07:47:11 
PC47524   TI/PC47524 08/11/2017 08:22:24 
PC30473   TI/PC30473 08/11/2017 10:06:33 
PC29658   TI/PC29658 23/10/2017 10:27:06

어떤 아이디어가 왜 일어나고?

는 편집 :

솔루션이 사람들이 제공하는 것이었다 :

$finalreport = foreach ($computer in $ComputerList) 
{ 
    If (Test-Connection -ComputerName $Computer -ErrorAction SilentlyContinue -Quiet -Count 2 ) 
     { 
     $ComInfo = (Get-WmiObject Win32_OperatingSystem -ComputerName $Computer -Credential $Cred).LastBootUpTime 
     $BootTime = [System.Management.ManagementDateTimeConverter]::ToDateTime($ComInfo) 
     $Canonical = (Get-ADComputer $Computer -Properties CanonicalName).CanonicalName 
     New-Object PSObject -Property @{    
     'Computer Name' = $Computer 
     'OU'  = $Canonical     
     'Boot Time' = $BootTime 

      } 
     } #end-if test 
    Else 
    { 
     $offlines = @($offlines + $computer) 
    } 
} 
+1

을하고 싶은 생각하지만, 만약 필터링 된 출력을 원합니다 $ FinalReport는 무언가를 저장해야합니다. ForEach 루프 앞에'$ Finalreport ='를 써서 시작할 수 있습니다. 개인적으로'$ body = $ FinalReport | 선택 개체 '컴퓨터 이름', '부팅 시간', 'OU'| Sort-Object '부팅 시간'| Format-Table -AutoSize '는 Send-MailMessage cmdlet의'-body' 매개 변수로 사용합니다. –

+0

아, 이제 더 이상 해지고 있습니다. 반환으로 받아들입니다. Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData –

+1

@BryceMcDonald 및 OP : 'Format-Table'의 결과를 저장하지 마십시오. (https://stackoverflow.com/a/36358921/3829407) – Matt

답변

0

난 당신이, $ FinalReport가 아무것도 설정되어 있지 않은 코드에 $FinalReport = foreach ($computer in $ComputerList){...

+0

그것은 내게 이것을 돌려주었습니다 : @ {Computer Name = pc29658; OU = TI/pc29658; 부팅 시간 = 10/23/2017 10:27:06} –

+0

죄송합니다. 오인되었습니다. '$ FinalReport ='를'foreach' 루프 앞에 놓아야합니다 :'$ FinalReport = foreach ($ ComputerList $ ComputerList) {...', 나는 이것을 내 대답으로 바꿨다. – iRon