none
PS - Отправить отчет по почте о свободном месте на дисках RRS feed

  • Вопрос

  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ft
    Send-MailMessage -From freespacediskagent@domain.local -To helpdesk@doamin.local -Subject "Free space disk server agent" -Body $Body -SmtpServer 10.8.254.60

    Здраствуйте!

    Как правильно в тело письма подставить вывод информации о дисках ?

    Выдает ошибку когда пытаюсь запустить свой отчет:

    Send-MailMessage : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "Body". Указа
    нный метод не поддерживается.
    строка:2 знак:126
    + ... r agent" -Body $Body -SmtpServer 10.8.254.60
    +                    ~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.SendMailMessage
     

    Заранее благодарен !

    7 ноября 2014 г. 10:58

Ответы

  • Добавить Out-String в конец:

    $body = .... | ft | Out-String

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 12:03
    7 ноября 2014 г. 11:28
    Отвечающий
  • День добрый
    первая строка:

    $body=Get-WMIObjectWin32_LogicalDisk-filter"DriveType=3"-computerlocalhost|SelectSystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}"-f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}"-f($_.freespace/1gb)}} |Out-String


    Грамотная постановка вопроса - уже 50% решения. Не забывайте помечать ответы как полезные или как ответ, если они Вам; помогли.

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 12:03
    7 ноября 2014 г. 11:33
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html | Out-String
    Send-MailMessage -From freespacediskagent@domain.local -To helpdesk@doamin.local -Subject "Free space disk server agent" -Body $Body -SmtpServer 10.8.254.60 -BodyAsHtml
    
    
    

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 13:07
    7 ноября 2014 г. 12:45
    Отвечающий
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html  | Foreach {
    	if($_ -match "td>(\d+,?\d+)</td></tr>$"){
    		$number = [float]::parse($matches[1])
    		if($number -le 100 -and $number -gt 50) {
    			$_ -replace "^<tr",'<tr bgcolor="yellow"'
    		}
    		if($number -le 50) {
    			$_ -replace "^<tr",'<tr bgcolor="red"'
    		}
    	}
    	else {
    		$_
    	}
    }| Out-String
    
    Send-MailMessage -From freespacediskagent@domain.local -To helpdesk@doamin.local -Subject "Free space disk server agent" -Body $Body -SmtpServer 10.8.254.60 -BodyAsHtml
    

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 13:55
    7 ноября 2014 г. 13:27
    Отвечающий
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -Computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html  | Foreach {
    	if($_ -match "td>(\d+,\d)</td></tr>$") {
    		$number = [float]::parse($matches[1])
    		if($number -le 100 -and $number -gt 50) {
    			$_ -replace "^<tr",'<tr bgcolor="yellow"'
    		}
    		elseif($number -le 50) {
    			$_ -replace "^<tr",'<tr bgcolor="red"'
    		}
            else {
    			$_
    		}
    	}
    	else {
    		$_
    	}
    } | Out-String
    
    

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 17:10
    7 ноября 2014 г. 15:21
    Отвечающий
  • Создать файл формата(1 - в домене, 0 - без домена):

    ComputerName,IsDomain
    pc1,1
    pc2,1
    pc3,0

    Скрипт:

    $computers = Import-Csv computers.csv 
    $cred = New-Object System.Management.Automation.PSCredential("sysadmin",(ConvertTo-SecureString 'P@$$w0rd1' -AsPlainText -Force))
    
    $body = $computers | Foreach {
    	$computer = $_.ComputerName
    	
    	$param = @{
    		Class = "Win32_LogicalDisk"
    		Filter = "DriveType=3"
    		ComputerName = $computer
    		ErrorAction = "Stop"
    	}
    	
    	if($_.IsDomain -eq "0") {
    		$param["Credential"] = $cred
    	}
    	
    	try {
    		Get-WMIObject @param  | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}}
    	}
    	catch {
    		"" | Select @{n="SystemName";e={$computer}},DeviceID,@{n="size(GB)";e = {"Хост недоступен"}},@{Name="freespace(GB)";Expression={"Хост недоступен"}}
    	}
    } | ConvertTo-Html  | Foreach {
    	if($_ -match "td>(\d+,\d)</td></tr>$") {
    		$number = [float]::parse($matches[1])
    		if($number -le 100 -and $number -gt 50) {
    			$_ -replace "^<tr",'<tr bgcolor="yellow"'
    		}
    		elseif($number -le 50) {
    			$_ -replace "^<tr",'<tr bgcolor="red"'
    		}
            else {
    			$_
    		}
    	}
    	else {
    		$_
    	}
    } | Out-String


    • Изменено KazunEditor 10 ноября 2014 г. 7:58
    • Помечено в качестве ответа Trusilya 10 ноября 2014 г. 8:15
    10 ноября 2014 г. 7:57
    Отвечающий

Все ответы

  • Добавить Out-String в конец:

    $body = .... | ft | Out-String

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 12:03
    7 ноября 2014 г. 11:28
    Отвечающий
  • День добрый
    первая строка:

    $body=Get-WMIObjectWin32_LogicalDisk-filter"DriveType=3"-computerlocalhost|SelectSystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}"-f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}"-f($_.freespace/1gb)}} |Out-String


    Грамотная постановка вопроса - уже 50% решения. Не забывайте помечать ответы как полезные или как ответ, если они Вам; помогли.

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 12:03
    7 ноября 2014 г. 11:33
  • Не подскажите как поправить отчет чтобы выводилось в body красиво и без ? знаков ?

    7 ноября 2014 г. 12:35
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html | Out-String
    Send-MailMessage -From freespacediskagent@domain.local -To helpdesk@doamin.local -Subject "Free space disk server agent" -Body $Body -SmtpServer 10.8.254.60 -BodyAsHtml
    
    
    

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 13:07
    7 ноября 2014 г. 12:45
    Отвечающий
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html | Out-String
    Send-MailMessage -From freespacediskagent@domain.local -To helpdesk@doamin.local -Subject "Free space disk server agent" -Body $Body -SmtpServer 10.8.254.60 -BodyAsHtml
    
    

    Спасибо !

    А можно сделать если значение freespace равно или меньше 100 строка была желтого цвета, а если равно или меньше 50ГБ красного ?

    Заранее благодарен !

    7 ноября 2014 г. 13:07
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html  | Foreach {
    	if($_ -match "td>(\d+,?\d+)</td></tr>$"){
    		$number = [float]::parse($matches[1])
    		if($number -le 100 -and $number -gt 50) {
    			$_ -replace "^<tr",'<tr bgcolor="yellow"'
    		}
    		if($number -le 50) {
    			$_ -replace "^<tr",'<tr bgcolor="red"'
    		}
    	}
    	else {
    		$_
    	}
    }| Out-String
    
    Send-MailMessage -From freespacediskagent@domain.local -To helpdesk@doamin.local -Subject "Free space disk server agent" -Body $Body -SmtpServer 10.8.254.60 -BodyAsHtml
    

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 13:55
    7 ноября 2014 г. 13:27
    Отвечающий
  • Но почему-то он выводит информацию не по всем компьютерам:

    В файле список 

    srv1

    srv2

    srv3

    srv4

    srv5

    srv6

    А выводит по этим:

    srv2

    srv3

    srv4

    srv5

    Проверяю что доступ ко всем компьютерам есть делаю в пс запрос :

    Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}"
     -f($_.freespace/1gb)}} | ft

    Выводит все компьютера 


    • Изменено Trusilya 7 ноября 2014 г. 14:49
    7 ноября 2014 г. 14:11
  • $body = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -Computer (Get-Content C:\PS\List\free-space-hostlist.txt) | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html  | Foreach {
    	if($_ -match "td>(\d+,\d)</td></tr>$") {
    		$number = [float]::parse($matches[1])
    		if($number -le 100 -and $number -gt 50) {
    			$_ -replace "^<tr",'<tr bgcolor="yellow"'
    		}
    		elseif($number -le 50) {
    			$_ -replace "^<tr",'<tr bgcolor="red"'
    		}
            else {
    			$_
    		}
    	}
    	else {
    		$_
    	}
    } | Out-String
    
    

    • Помечено в качестве ответа Trusilya 7 ноября 2014 г. 17:10
    7 ноября 2014 г. 15:21
    Отвечающий
  • Kazun, спасибо большое ! 

    А как сделать если требуется авторизация (если пк не в домене ) на сервере логин пароль везде одинаковый (Login sysadmin password Pa$$w0Rd и можно сделать чтобы если хост не доступен или к нему нельзя подключится продолжал дальше собирать информацию а заместо информации о месте диска писал что данный хост не доступен?

    Заранее благодарен !
    • Изменено Trusilya 7 ноября 2014 г. 18:27
    7 ноября 2014 г. 17:12
  • Создать файл формата(1 - в домене, 0 - без домена):

    ComputerName,IsDomain
    pc1,1
    pc2,1
    pc3,0

    Скрипт:

    $computers = Import-Csv computers.csv 
    $cred = New-Object System.Management.Automation.PSCredential("sysadmin",(ConvertTo-SecureString 'P@$$w0rd1' -AsPlainText -Force))
    
    $body = $computers | Foreach {
    	$computer = $_.ComputerName
    	
    	$param = @{
    		Class = "Win32_LogicalDisk"
    		Filter = "DriveType=3"
    		ComputerName = $computer
    		ErrorAction = "Stop"
    	}
    	
    	if($_.IsDomain -eq "0") {
    		$param["Credential"] = $cred
    	}
    	
    	try {
    		Get-WMIObject @param  | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}}
    	}
    	catch {
    		"" | Select @{n="SystemName";e={$computer}},DeviceID,@{n="size(GB)";e = {"Хост недоступен"}},@{Name="freespace(GB)";Expression={"Хост недоступен"}}
    	}
    } | ConvertTo-Html  | Foreach {
    	if($_ -match "td>(\d+,\d)</td></tr>$") {
    		$number = [float]::parse($matches[1])
    		if($number -le 100 -and $number -gt 50) {
    			$_ -replace "^<tr",'<tr bgcolor="yellow"'
    		}
    		elseif($number -le 50) {
    			$_ -replace "^<tr",'<tr bgcolor="red"'
    		}
            else {
    			$_
    		}
    	}
    	else {
    		$_
    	}
    } | Out-String


    • Изменено KazunEditor 10 ноября 2014 г. 7:58
    • Помечено в качестве ответа Trusilya 10 ноября 2014 г. 8:15
    10 ноября 2014 г. 7:57
    Отвечающий
  • Спасибо ! МБ тему закрепить как-то будет всем полезный данный отчет =)
    10 ноября 2014 г. 8:15