我想在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'
}
答案 0 :(得分:1)
点源脚本将使其在本地范围内运行,并在那里创建函数,但您仍然在其自己的范围内调用该函数。它将在该范围内设置$ g_nodename。如果您希望所有这些都在本地作用域中运行,则需要将脚本点源到本地作用域以创建函数,然后在本地作用域中调用函数(在前面加上'。'(注意后面的空格)点 - 必须在那里。)
. SetLogConfiguratoion $sqlInstance (join-path $BackupShare 'RemvoeAgent.log')