Powershell вызывает удаленный скрипт для загрузки фермы (XenApp 4.5)

qfarm /loadУ меня проблема с удаленным выполнением скрипта.

Сценарий вызывает команду для cmd qfarm /load и преобразует результат в PSObjects.

function New-qLast()
{
    param ([String] $qName, [String] $qLoad)
    $qLast = New-Object PSObject

    $qLast | Add-Member -MemberType NoteProperty -Name ServerName -Value $qName
    $qLast | Add-Member -MemberType NoteProperty -Name ServerLast -Value $qLoad

    return $qLast
}

Write-Host "Start" 

$b = @()
foreach ($a in $(qfarm /load))
{
    $b += $a.Split(" ") | Where-Object { $_ -ne "" }
}
$b

$table = @()
for ($i = 5; $i -lt $b.Length; $i += 2) #for XA 4.5 $i = 5 $i += 2; for XA 6.5 $i += 5 and $i = 8
{
    $table += New-qLast $b[$i] $b[$i+1]
}
$table

как только дело доходит до вызова qfarm /load, больше ничего не происходит.

Когда я запускаю сценарий непосредственно на терминальном сервере, он работает нормально.

Я также попытался запустить Invoke-Command -ComputerName Server01 {qfarm /load}, который работает для первых 22 серверов фермы, после чего он ничего не возвращает, но продолжает работать, пока вы не отключите его вручную.

Кто-нибудь знает, почему он застрял?

Заранее спасибо.


person IronGibbet    schedule 21.03.2013    source источник
comment
Я не знаком с qfarm /load что это такое и что он делает?   -  person E.V.I.L.    schedule 22.03.2013
comment
Похоже, что qfarm /load возвращает имя сервера и загрузку, верно? qfarm — это команда, созданная для CMD, поэтому она возвращает текст, а не объект. Итак, $(qfarm /load) может не сработать. Сделайте $test = (qfarm /load); $test.gettype(). Я предполагаю, что это будет массив строк.   -  person E.V.I.L.    schedule 22.03.2013
comment
Попробуйте $data = cmd /c 'qfarm /load'   -  person E.V.I.L.    schedule 22.03.2013


Ответы (1)


Прежде всего, спасибо, Боб, и извините за мой поздний ответ.

К сожалению, ваш метод не работает, но я нашел обходной путь.

Я нашел этот VBS и использовал его для своего сценария PowerShell.

Это выглядит так:

$server = Import-Csv C:\Server_On.txt | Where-Object { $_.ServerStatus -eq $true }

$load = Get-WmiObject -ComputerName $server.ServerName -Namespace "root\citrix" -Class MetaFrame_Server_LoadLevel | Select-Object Servername, LoadLevel

единственное отличие от qfarm /load заключается в том, что вы должны обращаться к каждому отдельному серверу.

person IronGibbet    schedule 25.03.2013