vinodh muthusamy Ответов: 1

Как передать список значений в скрипте powershell


Вот иам мониторинга памяти, загрузку процессора, загрузив файл txt. В котором txt-файл содержит список имен машин. Но мне нужно передать как массив или список скриптам, а не читать из txt-файла.


$Username = 'a';
$Password = 'aa'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName  qachdc -ScriptBlock {


$SFile = "C:\f\ServerList.txt"  

$ServerList = Get-Content $SFile -ErrorAction SilentlyContinue 

$Result = @() 

ForEach($computername in $ServerList) 

{
  

$AVGProc = Get-WmiObject -computername $computername win32_processor | 

Measure-Object -property LoadPercentage -Average | Select Average

$OS = gwmi -Class win32_operatingsystem -computername $computername |

Select-Object @{Name = "MemoryUsage"; Expression = {“{0:N2}” -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize) }}

$vol = Get-WmiObject -Class win32_Volume -ComputerName $computername -Filter "DriveLetter = 'C:'" |

Select-object @{Name = "C PercentFree"; Expression = {“{0:N2}” -f  (($_.FreeSpace / $_.Capacity)*100) } }

   

$result += [PSCustomObject] @{ 

        ServerName = "$computername"

        CPULoad = "$($AVGProc.Average)%"

        MemLoad = "$($OS.MemoryUsage)%"

        CDrive = "$($vol.'C PercentFree')%"

    }

    $Outputreport = ""
    $OFS = "`r`n"
    Foreach($Entry in $Result) 

        { 
          $Outputreport += $OFS + $($Entry.Servername) + ";" +  $($Entry.CPULoad) + ";" + $($Entry.MemLoad) + ";" + $($Entry.Cdrive)
         
        }

       

}
Write-Host $Outputreport
} -credential $Cred 


Что я уже пробовал:

я попробовал вышеприведенный код. Но я новичок в концепциях сценариев, я не знаю, как передать список или массив вместо чтения из txt-файла.

1 Ответов

Рейтинг:
2

Jochen Arndt

Вы можете передать их в командной строке:

myscriptname "server1" "server2" "server3"

Затем снимите Get-Content линии и заменить foreach циклическое чтение из файла по
foreach ($computername in $args)
{
  # Do the work here
}


Если командлет вызывается из другого командлета, где список хранится в массиве, вы можете выполнить его следующим образом:
& myscriptname @ServerList
или
Invoke-Expression "myscriptname $ServerList"