none
Powershell - Prosím o radu RRS feed

  • Dotaz

  • Dobrý den,

    mám problém se skriptem, účelem skriptu je ze 2 serverů zjistit informace o discích jejich volné kapacitě + další informace..a poslat mi tento "report" v jedná tabulce a html podobě do mailu... bohužel nemůžu se dopracovat ke kýženému výsledku..s tím, že ve výsledné tabulce nemohu za boha přiřadit jméno serveru ke správnému řádku..začátek skriptu vypadá takto.....

    Děkuji za jakýkoliv tip...

    $Servers = @("ServerX", "ServerY")

    $Disks = GET-WMIOBJECT win32_logicaldisk -ComputerName $Servers -filter "DriveType='3'" 

    foreach($Disk in $Disks)
    {
    $DriveLetter = $Disk.DeviceID;
    $DriveName = $Disk.VolumeName
    $SizeGB = $Disk.Size / 1GB -as [int]
    $FreeSpaceGB = $Disk.FreeSpace / 1GB -as [int]
    $PercentFree = [math]::Round((1- ($freeSpaceGB[0]/ $sizeGB)) * 100)


    $dataRow = "
        </tr>
        <td>$Server</td>
        <td>$DriveLetter</td>
        <td>$DriveName</td>
        <td>$SizeGB GB</td>
        <td>$FreeSpaceGB GB</td>
        <td>$PercentFree %</td>
        </tr>
        "
        $diskreport += $datarow
      
       } 

    výsledná tabulka jen v příloze...a jde mi o doplnění řádku Computer Name

    úterý 21. dubna 2020 13:39

Odpovědi

  • Asi mi neco unika...Proc ta slozitost? Co takhle cyklys v cyklu...

    Foreach ($server in $servers)
    {
      $Disks = GET-WMIOBJECT win32_logicaldisk -ComputerName $Server -filter "DriveType='3'"

      foreach( $disk in $disks)
      {

       #delam co potrebuji s obsahem promenne $disk, s  tabulkou - pridam radek do vystupu
       #mohu se odkazovat jak na $disk, tak na $server
        $diskreport += "<tr><td> blablabla"

      }

    }

    Nebo-li cyklim pres vsechny servery a jejich disky.



    úterý 21. dubna 2020 18:24

Všechny reakce

  • Nejak nevidim promennou $server... kde se bere? A nebo se ptas, co tam misto toho mas mit?

    $servers[0], $servers[1], atd. bo $servers sis nadefinoval jako pole.

    A nebo musis spustit cyklus foreach( $server in $servers) { neco } a pak teprve muzes pouzivat $server.


    úterý 21. dubna 2020 14:01
  • Tu proměnou jsem tam skutečně neměl, protože jsem neměl správnou ideu jak přiřadit k konkrétnímu serveru(jmenovitě) disky které mu patři a pak to zobrazit v té tabulce...

    Nyní má skript ve stavu, že dělá co má a vrací očekávaný výstup... ale úplně optimální řešení to není...

    $Servers = @("ServerX", "ServerY")

    $Disks1 = GET-WMIOBJECT win32_logicaldisk -ComputerName $Servers[0] -filter "DriveType='3'" 

    foreach($Disk in $Disks1)
    {
    $Disk.ProviderName = $Servers[0] 
    $ComputerName = $Disk.ProviderName
    }

    $Disks2 = GET-WMIOBJECT win32_logicaldisk -ComputerName $Servers[1] -filter "DriveType='3'" 

    foreach($Disk in $Disks2)
    {
    $Disk.ProviderName = $Servers[1] 
    $ComputerName = $Disk.ProviderName
    }

    $Disks = $Disks1 + $Disks2


    foreach($Disk in $Disks)
    {

    $ComputerName = $Disk.ProviderName
    $DriveLetter = $Disk.DeviceID;
    $DriveName = $Disk.VolumeName
    $SizeGB = $Disk.Size / 1GB -as [int]
    $FreeSpaceGB = $Disk.FreeSpace / 1GB -as [int]
    $PercentFree = [math]::Round((1- ($freeSpaceGB[0]/ $sizeGB)) * 100)

    $dataRow = "
        </tr>
        <td>$ComputerName</td>
        <td>$DriveLetter</td>
        <td>$DriveName</td>
        <td>$SizeGB GB</td>
        <td>$FreeSpaceGB GB</td>
        <td>$PercentFree %</td>
        </tr>
        "
        $diskreport += $datarow
      
       } 

    ...

    Pokud bych někdy uznal, že chci report z více než těch 2 serveru musel bych kopírovat dost řádku, kde do proměné $Disks_ vkládám $Disk.ProviderName a to otrocky kopírovat pro každý nový server... chtěl bych to tudíž nějak zjednodušit abych na začátku do  $servers jen přidal název serveru..a to bylo celé....bohužel nemám ideu jakou cestou tohoto stavu dosáhnout. 

    úterý 21. dubna 2020 15:14
  • Asi mi neco unika...Proc ta slozitost? Co takhle cyklys v cyklu...

    Foreach ($server in $servers)
    {
      $Disks = GET-WMIOBJECT win32_logicaldisk -ComputerName $Server -filter "DriveType='3'"

      foreach( $disk in $disks)
      {

       #delam co potrebuji s obsahem promenne $disk, s  tabulkou - pridam radek do vystupu
       #mohu se odkazovat jak na $disk, tak na $server
        $diskreport += "<tr><td> blablabla"

      }

    }

    Nebo-li cyklim pres vsechny servery a jejich disky.



    úterý 21. dubna 2020 18:24
  • Ano, to je ono:-) Už vše funguje jak má a skript se mi zjednodušil. Děkuji a přeji pohodové dny!!

    středa 22. dubna 2020 6:15