У меня проблема с функциями в 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 ..." .. Может кто-нибудь помочь мне с этой странной проблемой??