点变量不能通过函数设置变量

时间:2013-04-08 14:19:24

标签: powershell

我想在common.ps1中实现一个“Log”库,然后使用dot souring来加载它。 但是它没有按照我的预期工作,我认为在调用SetLogConfiguratoion之后我可以得到不同的值,但是值没有改变。然后“日志”功能不起作用,因为日志路径是$ null。 我是否想念点源?

write-host $g_nodeName ==> show $null
. 'C:\Test\Common.ps1'

write-host $g_nodeName ==> show "unkown"
SetLogConfiguratoion $sqlInstance (join-path $BackupShare 'RemvoeAgent.log')
write-host $g_nodeName ==> still "unkown"
Log 'ERROR' 'Test'

和Common.ps1如下

$g_logPath = $null
$g_nodeName = "Unknown"

function SetLogConfiguratoion
{
    param
    (
        [Parameter(
            Mandatory=$true,
            HelpMessage='NodeName')]
            [ValidateNotNullOrEmpty()]
        [string]$NodeName,    

       [Parameter(
            Mandatory=$true,
        HelpMessage='LogPath')]
            [ValidateNotNullOrEmpty()]
            [string]$LogPath
        )

        if($LogPath.StartsWith('Microsoft.PowerShell.Core\FileSystem::'))
        {
            $g_logPath = $LogPath;
        }
        else
        {
            $g_logPath = 'Microsoft.PowerShell.Core\FileSystem::' + $LogPath;
        }

        $g_NodeName = $NodeName;
    }
function Log
{
    param
    (    
        [Parameter(
            Mandatory=$true,
            HelpMessage='Log level')]
        [ValidateNotNullOrEmpty()]
        [ValidateSet(
            'Error',
            'Warning',
            'Info',
            'Verbose'
            )]
        [string]$level,

        [Parameter(
            Mandatory=$true,
            HelpMessage='message')]
        [ValidateNotNull()]
        [string]$message
    )

    if($g_logPath -eq $null)
    {
        return
    }

    $time = Get-Date –format ‘yyyy/MM/dd HH:mm:ss’

    $msg = "$time :: $level :: $nodeName :: $message"

    Add-content $LogPath -value $message + '\n'
}

1 个答案:

答案 0 :(得分:1)

点源脚本将使其在本地范围内运行,并在那里创建函数,但您仍然在其自己的范围内调用该函数。它将在该范围内设置$ g_nodename。如果您希望所有这些都在本地作用域中运行,则需要将脚本点源到本地作用域以创建函数,然后在本地作用域中调用函数(在前面加上'。'(注意后面的空格)点 - 必须在那里。)

. SetLogConfiguratoion $sqlInstance (join-path $BackupShare 'RemvoeAgent.log')