我很难理解Powershell是如何处理函数的。在下面的脚本中,所有函数都被调用,即使我从未实际调用main函数。powershell没有调用链的概念吗?
param([string]$directory)
[string]$global:sqlscript;
$global:types = @{
"double" = "DOUBLE PRECISION";
"int" = "INTEGER";
"QString" = "INTEGER";
"Ignored" = "1";
"Normal" = "2";
"Critical" = "3" }
function resultToSql($element)
{
$global:sqlscript += ('"')
$global:sqlscript += ($element.name + '" ')
$global:sqlscript += ($global:types.Get_Item($element.type))
$global:sqlscript += (',' + [Environment]::Newline)
$global:sqlscript += ('"' + $element.name + "_metric_group" + " " + $global:types.Get_Item($element.metric_group.type))
$global:sqlscript += (',' + [Environment]::Newline)
}
function xmlToSql($source)
{
Write-Host "Parsing...";
$global:sqlscript += "CREATE TABLE IF NOT EXISTS " + '"' + $source.spec.task.ToLower() + '"'+ [Environment]::NewLine
$global:sqlscript += '"' + "id" + '"' + " SERIAL NOT NULL" + [Environment]::NewLine
foreach ($node in $source.spec.measure) {
resultToSql $node
}
foreach ($m in $source.spec.error) {
resultToSql $m
}
$global:sqlscript += '"' + "weighted_sum" + '" ' + $global:types.Get_Item("double") + [Environment]::Newline;
}
function main
{
if ($directory -eq $null) { exit }
else
{
$xmlfiles = Get-ChildItem -Path $directory -include *Spec.xml
foreach ($xmlfile in $xmlfiles)
{
Write-Host "Filename:" $xmlfile;
[xml]$spec = Get-Content $file;
xmlToSql $spec;
Write-Host $script;
}
}
}发布于 2012-11-28 22:54:09
与C/C++/C#程序不同,“您”需要调用此脚本底部的Main函数。当您运行该脚本时,它所做的一切就是创建您定义的函数。它不会运行其中的任何一个。您必须在脚本中调用它们,并且其中一个调用必须是在脚本级别(在任何函数之外)。
发布于 2012-11-28 22:32:49
PowerShell无法神奇地检测到脚本的更改,请关闭ISE并重新打开它,然后再次运行脚本。如果失败,请将脚本的内容粘贴到ISE中,然后单击execute按钮,我只是这样做了,main没有运行。
发布于 2012-11-29 01:04:08
删除主函数容器,使其与以下代码类似:
if ($directory -eq $null) { exit }
else
{
$xmlfiles = Get-ChildItem -Path $directory -include *Spec.xml
foreach ($xmlfile in $xmlfiles)
{
Write-Host "Filename:" $xmlfile;
[xml]$spec = Get-Content $file;
xmlToSql $spec;
Write-Host $script;
}
}Powershell不像C#/C++那样从Main执行。它执行在函数外部首先接收到的语句。在上面的情况下,它将首先执行if语句,因为它出现在函数框之外。
https://stackoverflow.com/questions/13601717
复制相似问题