从另一个power shell脚本返回

时间:2015-08-30 21:27:20

标签: powershell

我有一个PS脚本$webMemory = "C:\Memory_Script\WebMemory_Script.ps1" $intMemory = "C:\Memory_Script\IntMemory_Script.ps1" $hungWeb = "C:\Scripts\HungWeb_Script.ps1" $hungInt = "C:\Scripts\HungInt_Script.ps1" $intMemoryResult = @() $webMemoryResult = @() $hungWebResult = @() $hungIntResult = @() $date = Get-Date $shortDate = (get-date -format ddMMyyy.hhmm) $filepath = "C:\Scripts\Memory&HungResults\Results" + $shortdate + ".txt" $break = "`r`n" out-file -filepath $filepath -inputobject $date -force -encoding ASCII -width 50 out-file -filepath $filepath -Append -inputobject $break -encoding ASCII -width 50 $intMemoryResult += Invoke-Expression $intMemory $webMemoryResult += Invoke-Expression $webMemory $hungWebResult += Invoke-Expression $hungWeb $hungIntResult += Invoke-Expression $hungInt Write-host $webMemoryResult out-file -filepath -Append -inputobject $intMemoryResult -encoding ASCII -width 200 out-file -filepath -Append -inputobject $break -encoding ASCII -width 200 out-file -filepath -Append -inputobject $webMemoryResult -encoding ASCII -width 200 out-file -filepath -Append -inputobject $break -encoding ASCII -width 200 out-file -filepath -Append -inputobject $hungIntResult -encoding ASCII -width 200 out-file -filepath -Append -inputobject $break -encoding ASCII -width 200 out-file -filepath -Append -inputobject $hungWebResult -encoding ASCII -width 200 out-file -filepath -Append -inputobject $break -encoding ASCII -width 200 在同一台计算机上的其他脚本上。 这是代码:

$serverList = @("List of servers")

$w3wpMemory = @()
$w3wpMemory += "---------- W3WP Memory Consumption ----------"
$w3wpresult = @()
$toBeRecycled =@()
$toBeRecycled += "******************** THE INT SERVERS BELOW NEED TO BE RECYCLED (Hung) ********************" + "`r`n"

$date = Get-Date
$shortDate =  (get-date -format ddMMyyy.hhmm)
$filepath = "C:\Scripts\HungIntResults\HungServerResults" + $shortdate + ".txt"
$break = "`r`n"

out-file -filepath $filepath -inputobject $date -force -encoding ASCII -width 50
out-file -filepath $filepath -Append -inputobject $break -encoding ASCII -width 50

ForEach($server in $serverList)
{
    $w3wpresult += (get-wmiobject Win32_Process -filter "commandline like '%serviceoptimization%'" -computername $server).privatepagecount / 1gb
$w3wpMemory += $server + ":" + $w3wpresult + "`n" 
}    

$i = 0
ForEach($server in $serverList)
{
    $w3wpresult2 = (get-wmiobject Win32_Process -filter "commandline like '%serviceoptimization%'" -computername $server).privatepagecount / 1gb

    Write-Host $w3wpresult2 " , " ($w3wpresult | select-object -index $i) 

    if($w3wpresult -contains ($w3wpresult2))
    {
        $toBeRecycled += $server + "`r`n"
    }
    $i = $i + 1
}


$toBeRecycled += "*******************************************************************************"
$toBeRecycled += "`r`n"
Write-Host $toBeRecycled

out-file -filepath $filepath -Append -inputobject $toBeRecycled -encoding ASCII -width 100

return $toBeRecycled

其中一个脚本中的代码被调用(其他三个具有相似的功能)

// Access control
        if (!$this->session->userdata('logged_in') ) {
            if(!$this->session->userdata('user_rol') == 'Administrator'){
            $this->session->set_flashdata('error_msg','Please login as an admin first!');

            redirect('admin/login');
            }
        } 

当脚本运行时,我会看到执行其他脚本的输出。 “Invoke-Expression”命令的结果返回null,为什么会这样?

1 个答案:

答案 0 :(得分:2)

Write-Host直接写入主机显示。如果你想捕获这个输出然后使用Write-Output代替或者只是将一个变量放在一行上,因为默认输出是"输出"流:

$toBeRecycled

BTW当您从另一个PowerShell脚本执行PowerShell脚本时,子脚本将同步执行(除非您正在使用作业)。