我对脚本有以下要求:
一个。获取脚本名称和路径。 湾创建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 :(得分: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"}
}
}