Возвращаемое значение функции Powershell изменено - PullRequest
0 голосов
/ 22 октября 2018

У меня проблема с функциями в Powershell.Я хочу вернуть int32-значение, но значение и тип данных всегда меняются ... Я понятия не имею, почему.

Это основная часть, где функции называются ..

$DocPath = "\\CHVMES02\Registry\EXCEL_ALLE\Version_AllFromExcel_Aktuell"
$server = "chvmes01"
$Building = "E44"
$AID = "N/A"
$Anlage = "Engineering"

$applicationPoolsPath = "/system.applicationHost/applicationPools"
$applicationPools = Get-WebConfiguration $applicationPoolsPath

foreach ($appPool in $applicationPools.Collection)
{
    #[int32]$CheckBoxNumber = 1

    $appPoolPath = "$applicationPoolsPath/add[@name='$($appPool.Name)']"


    $Word = New-Object -ComObject Word.Application
    $Word.Visible = $True
    $Document = $Word.Documents.Add($DocPath + "\IIS Application Pool.dotm")
    $Selection = $Word.Selection

    $CheckBoxNumber = general

    $CheckBoxNumber = cpu

    processModel

    ProcessOrphaning
}

Теперь сначала вызывается общая функция:

Function general{
        #General Informations

        $General = Get-ItemProperty IIS:\AppPools\DefaultAppPool | Select *  
        $AppPool = $appPool.Name
        $Category = "General"

        $hash = @{
                    0x0 = $General.managedRuntimeVersion
                    0x1 = $General.enable32BitAppOnWin64
                    0x2 = $General.managedPipelineMode
                    0x3 = $General.queueLength
                    0x4 = $General.startMode
                    0x5 = $appPool

        }

        $columns = @{
                        0x0 = "CLR-Version"
                        0x1 = "Enable 32bit"
                        0x2 = "Managed Pipeline Mode"
                        0x3 = "Start Mode"
                        0x4 = "Queue Length"
                        0x5 = "Name"
        }

        $CheckBoxNumber = GenerateTable $hash $columns $AppPool $Server $Category

        $Type = $CheckBoxNumber.GetType()

        $CheckBoxNumber
}

Внутри функции General я вызываю функцию «GenerateTable», которая, как уже сказано в имени, генерирует таблицу и заполняетв данных ...

Function GenerateTable{
        Param(
            [Parameter(Mandatory=$True, Position=1)]
            [HashTable]$hash,

            [Parameter(Mandatory=$True, Position=2)]
            [HashTable]$Columns,

            [Parameter(Mandatory=$True, Position=3)]
            [string]$AppPool,

            [Parameter(Mandatory=$True, Position=4)]
            [string]$Server,

            [Parameter(Mandatory=$True, Position=5)]
            [string]$Category
        )

        $Range = @($Selection.Paragraphs)[-1].Range
        $a = $Selection.MoveDown(5, 1000)

        $RowsCount = $hash.Count +1

        $Table = $Selection.Tables.add(
        $Selection.Range,($RowsCount),2,
        [Microsoft.Office.Interop.Word.WdDefaultTableBehavior]::wdWord9TableBehavior,
        [Microsoft.Office.Interop.Word.WdAutoFitBehavior]::wdAutoFitFixed)

        $tblTitle = $AppPool + ": " + $Category + ", Server: " + $Server + " - " + "Datasource: IIS Manager"

        $Table.Cell(1,1).Merge($Table.Cell(1,2))
        $Table.cell(1,1).range.Bold=1
        $Table.cell(1,1).range.text = $tblTitle

        $ColNr = 2
        foreach ($h in $Columns.GetEnumerator() | Sort Key) {
            $Value = $h.value

            $Table.cell($ColNr,1).range.text = $Value
            $ColNr = $ColNr+1
        }

        $ColNr = 2

        foreach ($x in $Hash.GetEnumerator() | Sort Key) {
            $Value = [string]$x.value

            if(([string]::IsNullOrEmpty($Value))){
                $Value = "N/A"
            }

            if($Value -eq $false -or $Value -eq $true){

                $Range = $Table.cell($ColNr,2).range
                $Document.FormFields.Add($Range, 71) 
                $CheckBox = "Check" + $CheckBoxNumber 
                $Type = $CheckBoxNumber.GetType()
                $CheckBoxNumber = $CheckBoxNumber + 1 
                $Type = $CheckBoxNumber.GetType()

                if($Value -eq $true){
                    $Document.FormFields($Checkbox).Checkbox.Value = True
                }
                Elseif($Value -eq $false){
                    $Document.FormFields($Checkbox).Checkbox.Value = False
                }
            }
            Else {
                $Table.cell($ColNr,2).range.text = [string]$Value
            }

            $ColNr = $ColNr+1
        }

        $a = $Selection.MoveDown(5, 1000)
        $Selection.Text = "`n`n"      

        $CheckBoxNumber

}

У меня есть переменная "$ CheckBoxNumber", которую я всегда увеличиваю на 1 каждый раз, когда вставляется флажок. Чтобы заполнить все данные, у нас есть различные функции: general, cpu, processModel ... Чтобы правильно обрабатывать флажки, мне нужно передать увеличенную переменную $ CheckBoxNumber-Variable следующей функции.

Из первой функции "general" я вызываю функцию "GenerateTable"в конце «GenerateTable» переменная имеет значение 2 и является «int32».Это все правильно.

Теперь первая часть проблемы: я возвращаю значение обратно общей функции, переменная $ CheckBoxNumber-Variable внезапно изменилась на тип "Object []", значение по-прежнему равно 2.

Но когда мы вернемся к основной части, откуда запускается вторая функция CPU, значение также изменилось на 1 ....

Понятия не имею почему!Я возвращаю параметры функциям неправильно?Я также пытался с возвратом, но он также не работал ... Я также пытался преобразовать значение с помощью [int32], но затем я получаю ошибку "Cannot Convert ..." .. Может кто-нибудь помочь мне с этой странной проблемой??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...