2014-04-04 107 views
0

我对脚本有以下要求:自定义日志文件创建 - Powershell

a。获取脚本名称和路径。 b。创建一个ScriptPath \ Log-Time | date \ Logfile.Log c。给用户3个选项,根据输入更新日志文件。

对于上述要求,香港专业教育学院创建了以下脚本:

#Variables Declaration------------------------------------------- 
$pat = Split-Path $script:MyInvocation.MyCommand.Path -parent 
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
$a = "[Info]:"+$LogTime+" Logged into Server" 
$b = "[Warning]:"+$LogTime+" Unauthorized Access" 
$c = "[Error]:"+$LogTime+" Wrong Credentials" 
$ScriptName = $MyInvocation.MyCommand.Name 
$path = $pat 

#Folder and Log Creation------------------------------------------ 
if([IO.Directory]::Exists($path)) 
{ 
$m = New-Item -ItemType directory -Path $path -name Log 
$n = New-Item -ItemType directory -Path $m -name $LogTime 
} 

$LogName = $ScriptName+"_Log_"+$LogTime+".log" 
$log = New-Item -ItemType file -path $n -name $LogName 

# Log Function------------------------------------------------------ 
log($in) 
function log 
{ 
$in = Read-Host "Enter your Option" 

if ($in -eq "0") 
{ 
    $latest = Get-ChildItem -Path $n | Sort-Object LastAccessTime -Descending | Select-Object -First 1 
    $p = $path+$latest.name 
    Add-Content $p -value $a 
} 
elseif ($in -eq "1") 
{ 

    $latest = Get-ChildItem -Path $n | Sort-Object LastAccessTime -Descending | Select-Object -First 1 
    $p = $path+$latest.name 
    Add-Content $p -value $b 

} 
elseif ($in -eq "2") 
{ 

    $latest = Get-ChildItem -Path $n | Sort-Object LastAccessTime -Descending | Select-Object -First 1 
    $p = $path+$latest.name 
    Add-Content $p -value $c 

} 
else 
{ 
    $o = "Invalid Input" 
    $o 
} 

Move-Item $p $n 
} 

每当我跑,我得到创建了两个日志文件。

Exec2.ps1_Log_04-04-2014_10-21-11.log & & & & MExec2.ps1_Log_04-04-2014_10-21-11.log [M是其中脚本运行的文件夹]

第一个日志文件是空的,而第二个日志文件包含文本。

任何人都可以请帮我解决这个问题吗?如果可能的话,使剧本简短而甜蜜?

感谢和问候, 凯因

回答

0

一些你的代码似乎是多余的,所以我删除了一些。如定义$pat,然后将其复制到$path,所以我只定义了$path一次。我摆脱了$a,$b$c,因为您可以直接轻松地输入值。

然后我摆脱了整个获取日志文件夹中的最新文件,并将内容添加到前面定义的日志文件。我更改了日志条目,以便它们由制表符完成,因此条目类型,日期和实际条目在查看日志文件时都很好地排列起来。

最后,我将整个If> ElseIf> ElseIf事件更改为一个Switch,因为Switch太棒了,完全没有使用!噢,我摆脱了$o = "Invalid Input"; $o,因为定义一个变量没有意义,然后只是回应它。你在可能做的是在default部分有它写 - 主持错误并再次调用日志功能,所以人们被迫输入一个有效的条目。

#Variables Declaration------------------------------------------- 
$path = Split-Path $script:MyInvocation.MyCommand.Path -parent 
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
$ScriptName = $MyInvocation.MyCommand.Name 

#Folder and Log Creation------------------------------------------ 
$m = New-Item -ItemType directory -Path $path -name Log 
$n = New-Item -ItemType directory -Path $m -name $LogTime 

$LogName = $ScriptName+"_Log_"+$LogTime+".log" 
$log = New-Item -ItemType file -path $n -name $LogName 

# Log Function------------------------------------------------------ 
log 
function log{ 
    $in = Read-Host "Enter your Option (0,1,2)" 

    Switch ($in){ 
     0 {Add-Content $log -value ("[Info]:`t`t" + $LogTime + "`tLogged into Server")} 
     1 {Add-Content $log -value ("[Warning]:`t" + $LogTime + "`tUnauthorized Access")} 
     2 {Add-Content $log -value ("[Error]:`t" + $LogTime + "`tWrong Credentials")} 
     default {Write-Output "Invalid Input"} 
    } 
}