创建文件Echo成功或失败

时间:2017-03-29 19:24:31

标签: powershell logging append

在创建新文件时,我无法确定在代码中正确添加If (!){} else{}的位置。我希望它附加到.log文件" Log Created"如果为真且"日志失败"什么时候假。我接近这个错吗?

$foo = c:\path\to\folder
$bar_bar = <variable>

New-Item -path "$foo" -name "$bar_bar-test_archive.log" -type "file" -value "`n`r$(get-date -f yyyy-MM-dd.HH:mm:ss) : Process started.`n"

SIDENOTE:我必须命名我的文件"$bar_bar-test_archive.log",但我更喜欢将其命名为"$bar_bar_test_archive.log",但是由于变量名称中的下划线和变量之间的下划线和常量混淆了它。有没有办法做到这一点?

感谢。

2 个答案:

答案 0 :(得分:1)

  

SIDENOTE:我必须将我的文件命名为“$ bar_bar-test_archive.log”但我   我更喜欢将它命名为“$ bar_bar_test_archive.log”,但是因为   变量名称中的下划线添加和下划线之间   变量和常数会混淆它。有没有办法做到这一点?

您可以通过以下任一方式解决此问题:

-name "$bar_bar`_test_archive.log"

-name "$($bar_bar)_test_archive.log"

至于记录是否有效,如果不正确则使用try / catch构造,这是一种捕获错误的方法。例如,

$LogFile = 'C:\PSTest\log.log'

try
{
    Some-Action
}
catch
{
    'Failed to run Some-Action' | Out-File $LogFile -Append
}

在捕获内部,您通常还会添加一个Break或Continue,如下所示:

$LogFile = 'C:\PSTest\log.log'

try
{
    Some-Action
}
catch
{
    'Failed to run Some-Action' | Out-File $LogFile -Append
    break # Exit Script
}

'Successfully ran Some-Action' | Out-File $LogFile -Append  # The script will only get here if there's no error as an error will trigger the break.

你最终得到这样的东西:

$foo = 'c:\PSTest'
$bar_bar = 'Test'
$LogFile = 'C:\PSTest\log.log'

try
{
    New-Item -path "$foo" -name "$bar_bar`_test_archive.log" -type "file" -value "`n`r$(get-date -f yyyy-MM-dd.HH:mm:ss) : Process started.`n" -ErrorAction Stop
}
catch
{
    "$(Get-Date -Format G) - Log Failed" | Out-File $LogFile -Append
    break 
}

"$(Get-Date -Format G) - Log Succeeded" | Out-File $LogFile -Append 

一些补充说明:

  • 使用比“Foo”和“Bar”更多的描述性变量名称。它使代码更具可读性,脚本获得的时间越长,就越容易忘记在命名不佳时变量包含的内容。

  • 您的变量值周围缺少引号。字符串使用''

  • 您会注意到我在New-Item命令中添加了-ErrorAction Stop;允许捕获正常运行。

答案 1 :(得分:1)

如果您不想使用omniomi正在使用的try / catch,这可能更合适,您可以使用Test-Path

$foo = c:\path\to\folder
$bar_bar = <variable>

New-Item -path "$foo" -name "$bar_bar-test_archive.log" -type "file" -value "`n`r$(get-date -f yyyy-MM-dd.HH:mm:ss) : Process started.`n"
If (!(Test-Path $foo)){} else{}

对SideNote的回答: 您可以使用$()在引号内进行评估,如下所示:"$($bar)_bar_test_archive.log"