Насколько я вижу, вы ожидаете, что Invoke-Command
запустит одну из функций в вашем скрипте, и это можно сделать, чего нельзя сделать, если только блок скриптов в Invoke-Command
увидит переменные, которые вы определили в своем скрипте, вам также нужно изменить функцию, чтобы она возвращала значения вместо изменения глобальных переменных.
Попробуйте это:
$session = New-PSSession -ComputerName $Machines[$j] -Credential $credentials
$results = Invoke-Command -Session $session -ScriptBlock {
Param(
[Parameter(Mandatory=$true,Position=0)]
[String]$host,
[Parameter(Mandatory=$true,Position=1)]
[String]$OSVersions,
[Parameter(Mandatory=$true,Position=2)]
[String]$TechInfoNew
)
$OSVersions = (Get-WMIObject win32_operatingsystem -ComputerName $host).caption
return Network-Info -Machine $host -OSVersion $OSVersions -Techinfo $TechInfoNew
} -ArgumentList $Machines[$j], $OSVersions, $TechInfoNew
Export-Excel $FullPath -WorksheetName "Results" -StartColumn 1 -Title $Machines[$j] -TitleSize 12 -StartRow $i #fix the counter var
Export-Excel $FullPath -WorksheetName "Results" -StartColumn 2 -Title $OSVersions -TitleSize 12 -StartRow $i
foreach($result in $results){
#Should have values now.
}
return
ключевое слово не обязательно, но Рекомендуется, чтобы было легче читать, я также вижу, что внутри вашего foreach вы используете другую глобальную переменную, если она также была изменена функцией, которую вы также должны вернуть, чтобы вернуть несколько значений, создайте PSCustomObject
, как это
.
. code
.
$customObject = [PSCustomObject]@{
prop1 = value1;
prop2 = value2;
prop3 = value3;
}
return $customObject
Надеюсь, это поможет, удачи.