1

common.ps1 に「ログ」ライブラリを実装し、ドット サワーを使用してロードしたいと考えています。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'
}
4

1 に答える 1