2014-04-04 142 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"} 
    } 
}