2013-03-21 51 views
0

qfarm/loadI在遠程執行腳本時遇到問題。Powershell調用遠程腳本來獲取farmload(XenApp 4.5)

該腳本調用命令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個服務器工作,然後它不會返回任何東西,但仍然運行,直到您手動關閉它。

有沒有人知道爲什麼它卡住了?

在此先感謝。

+0

我不熟悉'qfarm/load'它是什麼,它有什麼作用? – 2013-03-22 02:19:07

+0

它看起來像'qfarm/load'返回服務器名稱和負載,是嗎? 'qfarm'是一個用於CMD的命令,因此它將返回文本而不是對象。所以'$(qfarm/load)'可能不起作用。做'$ test =(qfarm/load); $ test.gettype()'。我的猜測是它會是一串字符串。 – 2013-03-22 02:25:20

+0

試試'$ data = cmd/c'qfarm/load'' – 2013-03-22 02:29:34

回答

0

首先感謝鮑勃,併爲我遲到的回覆感到抱歉。

不幸的是你的方法不起作用,但我找到了解決辦法。

我發現這個VBS並將其用於我的PowerShellscript。

它看起來像這樣:

$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唯一的區別是,你必須解決每一個服務器。